Как пробросить порт centos

Обновлено: 04.07.2024

Процесс настройки шлюза (NAT) на системах UNIX, обычно, выполняется в несколько команд: включением перенаправления на уровне системы и настройкой firewall.

Настройка системы

Все что нужно настроить — включить перенаправления на уровне ядра. Для этого открываем следующий файл:

И добавляем в него следующую строку:

После применяем настройку:

sysctl -p /etc/sysctl.conf

В случае с единым сетевым интерфейсом больше ничего делать не потребуется — CentOS начнет работать как Интернет-шлюз.

В случае с несколькими сетевыми адаптерами, настраиваем сетевой экран.

Настройка брандмауэра

Рассмотрим настройку фаервола при помощи двух различных популярных утилит — firewalld и iptables.

Firewalld

Настройка выполняется для двух сетевых интерфейсов — ens32 (внутренний) и ens34 (внешний):

firewall-cmd --direct --permanent --add-rule ipv4 nat POSTROUTING 0 -o ens34 -j MASQUERADE

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens32 -o ens34 -j ACCEPT

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens34 -o ens32 -m state --state RELATED,ESTABLISHED -j ACCEPT

systemctl restart firewalld

Iptables

Настройка выполняется из расчета, что Интернет настроен через интерфейс ens160, а внутренняя сетя через ens32:

iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE

Если на сервере для доступа в локальную и глобальную сети используются разные сетевые интерфейсы, нам может понадобиться создать еще два правила:

iptables -A FORWARD -i ens32 -o ens160 -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -i ens32 -o ens160 -j ACCEPT

yum install iptables-services

service iptables save

Проброс портов (Port Forwarding)

Необходим для перенаправление сетевых запросов на сервер, стоящий за NAT и не имеющий прямого выхода во внешнюю сеть. Настройки отличаются в зависимости от способа управления брандмауэром netfilter.

Firewalld

firewall-cmd --zone=external --permanent --add-forward-port=port=25:proto=tcp:toport=8025:toaddr=192.168.0.15

Разрешаем сам порт:

firewall-cmd --permanent --zone=external --add-port=25/tcp

Чтобы правило вступило в силу:

Iptables

Настройка выполняется двумя командами и двумя спомобами.

iptables -t nat -I PREROUTING -p tcp -m tcp -d 10.8.232.111 --dport 25 -j DNAT --to-destination 192.168.0.15:8025

iptables -t nat -I POSTROUTING -p tcp -m tcp -s 192.168.0.15 --sport 8025 -j SNAT --to-source 10.8.232.111:25

iptables -t nat -I PREROUTING -p tcp -i eth0 --dport 25 -j DNAT --to-destination 192.168.0.15:8025

iptables -I FORWARD -p tcp -d 192.168.0.15 --dport 8025 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

* где eth0 — внешний сетевой интерфейс.

iptables -I INPUT 1 -p tcp --dport 8025 -j ACCEPT

* обратите внимание, что мы разрешаем порт, на который переводим запрос, так как цепочки POSTROUTING и PREROUTING работают до цепочки FILTER, а потому открывать нужно не входящий порт (25), а тот, на который назначается пакет (8025).

Кратко о задаче чтобы Вы понимали что нужно сделать и зачем, но предыдущий вопрос не открывали:
Есть RDP сервер, расположенный в РФ. Нужно, чтобы на клиентах IP подключения к RDP серверу был другим, желательно в недалекой европейской стране. Иными словами нам нужен сервер-посредник, который принимал бы подключения по 3389 порту, перенаправлял TCP/UDP на реальный IP сервера на тот же порт 3389, сохраняя реальный IP в тайне от юзеров и любопытствующих субъектов.

Мне уже популярно объяснили что это бредятина, шпиономания и вообще колхоз и тупость, но задача поставлена, а я туплю, но пытаюсь выполнить пожелание руководства в ключе "любой каприз за Ваши деньги".

Попытка решения задачи, которая у меня не прошла:

Взял VDS 1x2.2ГГц, 1Гб RAM, 1 IP. Установлена CentOs 7.6.1810. Пробовал ковырять оба предложенных варианта: haproxy и отключение firewalld с включением iptables. Конфиги для меня как иероглифы.

Если у кого-то есть время и желание научить дурака науке, опишите пожалуйста процесс реализации этого (по мнению экспертов предыдущего вопроса) пустякового дела на 10 минут работы.

Заранее спасибо, за любой результат.

Простой 1 комментарий

fzfx

мне интересно, а вы уже придумали, что будете делать с тем, что, подключившись к RDP серверу по RDP и зайдя в свойства сетевого адаптера вы увидите его реальный адрес, а не адрес сервера-посредника? или это в вашем случае не важно?

domres

так точно, но либо я что-то не так делаю, либо. да не либо, а точно не так что-то делаю.

Куда и как это запихивать? Передо мной открыта консоль сервера по SSH, я вырубил firewalld и установил iptables.

domres

Заходишь под root
sudo -s

Копируешь это в блокнот, правишь под себя, потому копируешь в вставляешь в консоль.

domres

domres

Andrey Barbolin, на строчке iptables -t nat -A PREROUTING -i $WAN_INTERFACE -p tcp --dport $SRC_PORT_FORWARD -j DNAT --to-destination $RDP_IP
консоль выдала bad argument 'tcp'

domres

ip ad | grep state

domres

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000

Попробуй вот эти строки поменять

WAN_INTERFACE='eth0'
SRC_PORT_FORWARD='3389'
DST_PORT_FORWARD='3389'

domres

Andrey Barbolin, нет, к сожалению ничего не выходит. iptables установлено, вошел под root. команды вставляю в консоль - ничего. Порт закрыт. Правила не вписываются.. Видимо я криворук. Извините что загрузил ( Тяжело понять в чем именно проблема не имея доступа к консоли. Если есть выбор, попробуй поставить debian/ubuntu. Никита Шинкевич, firewall точно отключен? Посмотрите, действительно открыты ли эти порты

domres

Друзья спасибо всем за советы и мнения! Очень рад что тема нашла отклик. Надеюсь все написанное пригодится не только мне.

Самостоятельно пришел к следующему решению:

Решил не возиться пока с Linux ввиду недостатка опыта работы с оным, а взял в Финляндии виртуалку с Windows Server 2016 за 3$ в мес. На арендованном забугорном сервере поднята SoftEther VPN Server с SecureNAT. Виртуальная машина с сервером терминалов, расположенная в РФ коннектится через L2TP VPN к этому серверу. А юзеры терминалов коннетятся к нему же таким же образом через L2TP VPN.

Получилась схема: Клиент RDP через VPN -> Сервер в Финляндии (SoftEtherVPN Server) > VPN до сервера в РФ.

Приятно порадовала скорость подключения, лагов нет, качество согласно индикатору RDP 8.1 хорошее.

Более того, покуда в свойствах VPN подключения российского сервера ставим галочку шлюза удаленной сети, удалось дать пользователям RDP сервера доступ в сеть через тот же Финский сервак. Тепеперь у наших RDP юзеров в офисе на сервере терминалов есть еще и интернет, который так же анонимизирован насколько возможно (финский IP).

CityCat4

Задача как задача, вполне себе. Видимо есть основания скрывать тот факт, что целевой сервер в РФ. Бывает. Есть такие -
". Где с умилением глядят
На заграничные наклейки.
А сало. русское едят! " (С) Михалков С.В. Две подруги.

Задача сводится к обычному нату, который меняет в пакете пришедшем на порт 3389 IP назначения с локального на некий удаленный - после чего ведро ессно этот пакет отправляет в мир на дефолтный шлюз.

Во-первых - всем и каждому, кто впал в затуп и не знает, как проходит пакет по netfilter - рекомендую эту схему. Распечатать и повесить на рабочем месте.

Сначала зададим допущения.
IP сервера = 212.20.5.1 (много-много лет назад это был IP нашего сервера, он реально российский :) )
IP VPS = 170.70.1.1 (взят с потолка)
Политика по умолчанию для filter - ACCEPT (все, что не запрещено - разрешено. Очень опасная политика, вязта только для демонстрации, в жизни так делать нельзя. Мне просто неохота писать дополнительные правила по пропуску трафика)


NAT мы выполняем в цепочке prerouting таблицы nat (она идет до filter). Сюда пакет попадает сразу после mangle prerouting.

Читается "если поступил пакет по протоколу tcp на порт 3389 на IP 170.70.1.1, то применить действие DNAT, заменив IP назначения на 212.20.5.1. Правило поместить в цепочку prerouting".

Потом mangle postrouting и nat postrouting. В nat postrouting нам нужно сделать небольшой камуфляж. В пакете IP назначения 212.20.5.1 - но IP источника - тот IP, с которого пакет пришел на VPS. Это нам не нужно и потому что задача - его скрыть и потому что при попадании пакета на 212.20.5.1 - он ответит ессно на этот IP. Поэтому выполняем следующее:

Читаем "если пакет уходит через интерфейс eth0, то применить действие SNAT и заменить IP источника на 170.70.1.1"
Это стандартное правило NAT, оно присутствует всегда, если VPS является NAT хоть для чего-нибудь.

Все. Пакет на 212.20.5.1 уходит от IP 170.70.1.1, тот отвечает по IP источника, VPS видит, что был NAT и отправляет пакет туда, откуда он пришел.

Настройка Firewall в CentOS 7

Установленный в операционной системе Firewall используется для предотвращения несанкционированного прохождения трафика между компьютерными сетями. Вручную или автоматически создаются специальные правила для межсетевого экрана, которые и отвечают за управление доступом. В ОС, разработанной на ядре Linux, CentOS 7 имеется встроенный фаервол, а управление им осуществляется с помощью брандмауэра. По умолчанию задействован FirewallD, и о его настройке мы бы хотели поговорить сегодня.

Настраиваем Firewall в CentOS 7

Как уже было сказано выше, стандартным брандмауэром в CentOS 7 назначена утилита FirewallD. Именно поэтому настройка фаервола будет рассмотрена на примере этого инструмента. Задать правила фильтрации можно и с помощью той же iptables, но это выполняется немного другим образом. С конфигурацией упомянутой утилиты рекомендуем ознакомиться, перейдя по следующей ссылке, а мы же начнем разбор FirewallD.

Основные понятия межсетевого экрана

Включение брандмауэра FirewallD

Для начала нужно запустить FirewallD или убедиться в том, что он находится в активном состоянии. Только функционирующий демон (программа, работающая в фоновом режиме) будет применять правила для межсетевого экрана. Активация производится буквально в несколько кликов:

Запуск терминала для дальнейшей настройки фаервола в CentOS 7

Запуск сервисов фаервола в операционной системе CentOS 7

Ввод пароля для запуска сервисов фаервола в терминале CentOS 7

Просмотр текущего состояния фаервола через терминал в CentOS 7

Ввод пароля для подтверждения подлинности при просмотре состояния фаервола CentOS 7

Отображение текущего состояния фаервола в операционной системе CentOS 7

Если же вам однажды потребуется временно или перманентно отключить брандмауэр, советуем воспользоваться инструкцией, представленной в другой нашей статье по следующей ссылке.

Просмотр правил по умолчанию и доступных зон

Даже работающий в штатном режиме фаервол имеет свои определенные правила и доступные зоны. Перед началом редактирования политик советуем ознакомиться с текущей конфигурацией. Делается это при помощи простых команд:

    Определить функционирующую по умолчанию зону поможет команда firewall-cmd --get-default-zone .

Просмотр установленной по умолчанию зоны фаервола в CentOS 7

Отображение установленной по умолчанию зоны фаервола в CentOS 7

Просмотр всех активных зон фаервола в CentOS 7

Просмотр правил активных зон фаервола через терминал в CentOS 7

Получение списка всех доступных зон фаервола через терминал в CentOS 7

Отображение правил указанной зоны фаервола через терминал в CentOS 7

После определения необходимых параметров можно переходить к их изменению и добавлению. Давайте детально разберем несколько самых популярных конфигураций.

Настройка зон интерфейсов

Назначение определенного интерфейса для зоны фаервола в CentOS 7

Просмотр активной зоны фаервола и ее интерфейс в CentOS 7

Если вы захотите сбросить произведенные ранее настройки, просто выполните рестарт брандмауэра: sudo systemctl restart firewalld.service .

Перезапуск фаервола после внесения изменений в CentOS 7

Порой не всегда удобно изменять зону интерфейса всего на одну сессию. В таком случае потребуется редактировать конфигурационный файл, чтобы все настройки ввелись на перманентной основе. Для этого мы советуем использовать текстовый редактор nano, который устанавливается с официального хранилища sudo yum install nano . Далее остается произвести такие действия:

Открытие конфигурационного файла интерфейса фаервола в CentOS 7

Ввод пароля для открытия конфигурационного файла интерфейса в CentOS 7

Изменение зоны интерфейса через конфигурационный файл в CentOS 7

Запись изменений в текстовом редакторе CentOS 7

Назначение файла для записи изменений в текстовом редакторе CentOS 7

Выход из текстового редактора после изменений CentOS 7

Теперь зона интерфейса будет такой, какой вы ее указали, до момента следующего редактирования конфигурационного файла. Чтобы обновленные параметры вступили в действие, выполните sudo systemctl restart network.service и sudo systemctl restart firewalld.service .

Установка зоны по умолчанию

Назначение зоны фаервола по умолчанию в CentOS 7

Успешное назначение зоны по умолчанию в CentOS 7

Создание правил для программ и утилит

В самом начале статьи мы рассказали о действии каждой зоны. Определение сервисов, утилит и программ в такие ветви позволит применить для каждой из них индивидуальные параметры под запросы каждого пользователя. Для начала советуем ознакомиться с полным списком доступных на данный момент сервисов: firewall-cmd --get-services .

Команда для просмотра доступных в системе сервисов CentOS 7

Результат отобразится прямо в консоли. Каждый сервер разделен пробелом, и в списке вы сможете с легкостью отыскать интересующий вас инструмент. Если же нужный сервис отсутствует, его следует дополнительно установить. О правилах инсталляции читайте в официальной документации программного обеспечения.

Список доступных сервисов в CentOS 7

Указанная выше команда демонстрирует только названия сервисов. Детальная информация по каждому из них получается через индивидуальный файл, находящийся по пути /usr/lib/firewalld/services . Такие документы имеют формат XML, путь, например, к SSH выглядит так: /usr/lib/firewalld/services/ssh.xml , а документ имеет следующее содержимое:

SSH
Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.

Добавление сервиса в определенную зону фаервола CentOS 7

Перманентное добавление сервиса в зону фаервола CentOS 7

Просмотреть полный список постоянных правил для определенной зоны можно, отобразив список в отдельной строке консоли: sudo firewall-cmd --zone=public --permanent --list-services .

Просмотр списка перманентных сервисов фаервола CentOS 7

Решение неполадки с отсутствием доступа к сервису

Стандартно в правилах брандмауэра указаны самые популярные и безопасные сервисы как разрешенные, однако некоторые стандартные или сторонние приложения он блокирует. В таком случае пользователю вручную потребуется изменить настройки, чтобы решить проблему с доступом. Сделать это можно двумя разными методами.

Проброс порта

Открытие порта в определенной зоне фаервола CentOS 7

Открытие диапазона портов в определенной зоне фаервола CentOS 7

Приведенные выше команды лишь позволят протестировать применение подобных параметров. Если оно прошло успешно, следует добавить эти же порты в постоянные настройки, а делается это путем ввода sudo firewall-cmd --zone=public --permanent --add-port=0000/tcp или sudo firewall-cmd --zone=public --permanent --add-port=0000-9999/udp . Список открытых постоянных портов просматривается так: sudo firewall-cmd --zone=public --permanent --list-ports .

Определение сервиса

Как видите, добавление портов не вызывает никаких трудностей, но процедура усложняется в том случае, когда приложений используется большое количество. Отследить все использующиеся порты становится трудно, ввиду чего более правильным вариантом станет определение сервиса:

Копирование файла настроек сервиса фаервола в CentOS 7

Запуск скопированного файла сервиса CentOS 7

Внесение изменений в файл сервиса для открытия портов в CentOS 7

Перезапуск сервиса фаервола в CentOS 7

Вам остается только выбрать наиболее подходящий метод решения неполадки с доступом к сервису и выполнить приведенные инструкции. Как видите, все действия выполняются достаточно легко, и никаких трудностей возникнуть не должно.

Создание пользовательских зон

    Создайте две новые перманентные зоны командами sudo firewall-cmd --permanent --new-zone=publicweb и sudo firewall-cmd --permanent --new-zone=privateDNS .

Добавление новых пользовательских зон фаервола CentOS 7

Просмотр доступных зон фаервола в CentOS 7

Добавление сервисов в пользовательскую зону CentOS 7

Из этой статьи вы узнали, как создавать пользовательские зоны и добавлять в них сервисы. Об установке их по умолчанию и присвоении интерфейсов мы уже рассказали выше, вам остается лишь указать правильные названия. Не забывайте перезагружать межсетевой экран после внесения любых перманентных изменений.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Настройка iptables в CentOS 7

Во всех операционных системах, основанных на базе ядра Linux, имеется встроенный межсетевой экран, осуществляющий контроль и фильтрацию входящего и исходящего трафика, исходя из заданных пользователем или платформой правил. В дистрибутиве CentOS 7 по умолчанию такую функцию выполняет утилита iptables, взаимодействуя со встроенным брандмауэром netfilter. Иногда системному администратору или менеджеру сети приходится настраивать работу этого компонента, прописывая соответствующие правила. В рамках сегодняшней статьи мы бы хотели поговорить об основах конфигурации iptables в упомянутой выше ОС.

Настраиваем iptables в CentOS 7

Сам инструмент доступен к работе сразу же после завершения инсталляции CentOS 7, но дополнительно потребуется установить некоторые сервисы, о чем мы и поговорим далее. В рассматриваемой платформе имеется еще один встроенный инструмент, выполняющий функцию фаервола под названием FirewallD. Для избежания конфликтов при дальнейшей работе рекомендуем отключить этот компонент. Развернутые инструкции по этой теме читайте в другом нашем материале по следующей ссылке.

Как известно, в системе могут применяться протоколы IPv4 и IPv6. Сегодня мы остановимся на примере IPv4, но если вы хотите осуществлять конфигурацию для другого протокола, потребуется вместо команды iptables в консоли использовать ip6tables.

Установка сервисов iptables

Первоочередно следует добавить в систему дополнительные компоненты рассматриваемой сегодня утилиты. Они помогут в настройке правил и других параметров. Загрузка осуществляется из официального хранилища, поэтому не отнимет много времени.

    Все дальнейшие действия будут производиться в классической консоли, поэтому запустите ее любым удобным методом.

Запуск терминала для настройки утилиты iptables в CentOS 7

Установка сервисов для работы утилиты iptables в CentOS 7

Ввод пароля для установки сервисов iptables в CentOS 7 через терминал

Подтверждение добавления новых пакетов сервисов iptables в CentOS 7

Проверка версии утилиты iptables в CentOS 7 через терминал

Отображение текущей версии утилиты iptables в CentOS 7 через терминал

Теперь ОС полностью готова для дальнейшей настройки межсетевого экрана через утилиту iptables. Мы предлагаем ознакомиться с конфигурацией по пунктам, начав с управления сервисами.

Остановка и запуск сервисов iptables

Управление режимом работы iptables требуется в тех случаях, когда нужно проверить действие определенных правил или просто выполнить перезапуск компонента. Делается это при помощи встроенных команд.

    Введите sudo service iptables stop и нажмите на клавишу Enter, чтобы остановить сервисы.

Остановка сервисов утилиты iptables в CentOS 7 через терминал

Ввод пароля для остановки сервисов утилиты iptables в CentOS 7

Уведомление об остановке сервисов утилиты iptables в CentOS 7

Запустить сервисы утилиты iptables в CentOS 7 в терминале

Подобная перезагрузка, запуск или остановка утилиты доступна в любой момент, не забудьте только вернуть обратное значение, когда это будет востребовано.

Просмотр и удаление правил

Как уже было сказано ранее, управление межсетевым экраном производится путем ручного или автоматического добавления правил. Например, некоторые дополнительные приложения могут обращаться к инструменту, изменяя определенные политики. Однако большинство подобных действий все же делается вручную. Просмотр списка всех текущих правил доступен через команду sudo iptables -L .

Отобразить список всех текущих правил утилиты iptables в CentOS 7

Вид списка всех правил утилиты iptables в CentOS 7

Определить статус всех цепочек можно, введя sudo iptables -S .

Отображение списка цепей утилиты iptables в CentOS 7

Если увиденные правила вас не устраивают, они достаточно просто удаляются. Весь список очищается так: sudo iptables -F . После активации правила будут стерты абсолютно для всех трех цепей.

Очистить список всех правил утилиты iptables в CentOS 7

Когда необходимо затронуть только политики из какой-то одной цепи, к строке добавляется дополнительный аргумент:

sudo iptables -F INPUT
sudo iptables -F OUTPUT
sudo iptables -F FORWARD

Очистить список правил для определенной цепи iptables в CentOS 7

Отсутствие всех правил означает, что сейчас не применяется никаких настроек фильтрации трафика ни в одну из сторон. Далее системный администратор уже самостоятельно задает новые параметры, используя всю ту же консоль, команду и различные аргументы.

Прием и сбрасывание трафика в цепях

Сброс входящих запросов в утилите iptables в CentOS 7

Точно такие же параметры задаются и для других цепей, например, sudo iptables --policy OUTPUT DROP . Если же необходимо выставить значение на прием трафика, тогда DROP изменяется на ACCEPT и получается sudo iptables --policy INPUT ACCEPT .

Разрешение и блокировка портов

Правило для открытия порта 80 в утилите iptables в CentOS 7

Точно такая же команда относится и к порту 22, который используется сервисом SSH: sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT .

Правило для открытия порта 22 в утилите iptables в CentOS 7

Для блокирования указанного порта применяется строка точно такого же вида, только в конце ACCEPT изменяется на DROP. В итоге получается, например, sudo iptables -A INPUT -p tcp --dport 2450 -j DROP .

Правило для запрета порта в утилите iptables в CentOS 7

Правило для принятия IP-адреса и порта в iptables в CentOS 7

Блокирование происходит по тому же принципу, меняя в конце значение ACCEPT на DROP. Тогда получается, например, sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j DROP .

Правило для блокировки IP-адреса и порта в iptables в CentOS 7

Блокирование ICMP

Первое правило для блокировки пропинговки iptables в CentOS 7

Второе правило для блокировки пропинговки в iptables в CentOS 7

Предотвращение несанкционированных действий на сервере

Иногда серверы подвергаются DDoS атакам или другим несанкционированным действиям со стороны злоумышленников. Правильная настройка межсетевого экрана позволит обезопасить себя от подобного рода взломов. Для начала мы рекомендуем задать такие правила:

Правило для безопасности от DDoS в iptables в CentOS 7

Первое правило для запрета сканирования портов iptables в CentOS 7

Второе правило для запрета сканирования портов iptables в CentOS 7

Третье правило для блокирования сканирования портов iptables в CentOS 7

Показанные сегодня настройки являются лишь основой работы в инструменте управления межсетевым экраном. В официальной документации утилиты вы найдете описание всех доступных аргументов и опций и сможете настроить брандмауэр конкретно под свои запросы. Выше были рассмотрены стандартные правила безопасности, которые применяются чаще всего и в большинстве случаев обязательны.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Читайте также: