Проброс портов (port forwarding) в Linux с помощью Firewalld

Проброс портов (port forwarding) в Linux с помощью Firewalld

Firewalld – утилита для управления брандмауэром, доступная практически во всех дистрибутивах Linux. Работает как интерфейс для iptables. В этой статье мы рассмотрим, как настроить проброс портов в Linux с помощью firewalld.

Технология Port Forwarding широко используется для прозрачного перенаправления входящего трафика с определенного порта на другой порт и/или IP адрес. Чаще всего применяется, когда нужно получить доступ снаружи в локальную сеть за NAT (проброс порта с белого IP адреса на серый). Внешний клиент подключается к определенному порту на маршрутизаторе, а тот перенаправляет его на нужных хост внутри локальной сети. Или, например, когда вы хотите закрыть потенциально опасные для атаки порты сервера, но не потерять связь с ними.

Статус сервиса firewalld проверяется командой:

# service firewalld status

service firewalld status проверка что файервол запущен

В моем случае сервис запущен, но никаких настроек в нем нет, так как сервер тестовый. На сервере из активных служб работает только SSH со стандартным портом 22. Давайте попробуем настроить forwarding с нового TCP порта 6666 на 22, чтобы в дальнейшем закрыть доступ на стандартный SSH порт из внешнего мира (своеобразная защита ssh от типичных атак автоматическими сканерами; дополнительно можете использовать fail2ban):

# firewall-cmd --zone=public --add-masquerade --permanent
# firewall-cmd --zone=public --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=IP --permanent
# firewall-cmd --reload

Где IP — это адрес вашего сервера. После изменения правил firewalld, его нужно перезагрузить. В качестве IP-адреса может указать адрес любого другого хоста в сети, куда вы хотите перенаправить все запросы.

настройка port forwarding порта в linux с помощью firewalld

Теперь можно попробовать подключится с Windows компьютера в локальной сети на порт 6666 Linux сервера. Можно использовать встроенный ssh клиент:

ssh root@server2 -p 6666

При подключении firewalld должен автоматически перенаправить трафик с порта 666 на порт 22, а вы увидеть баннер SSH.

пример проброса ssh порта в linux

Аналогичным образом можно пробросить трафик с других служб. Например, пробросим порт 3333 на порт mysql (tcp/3306). Такой сценарий может замаскировать ваш сервис mysql, опубликованный наружу.

# firewall-cmd --zone=public --add-forward-port=port=3333:proto=tcp:toport=3306:toaddr=IP --permanent
# firewall-cmd --reload

Вы можете перенаправлять входящий трафик с определенных подсетей или IP отдельных адресов на нужный вам порт. Например:

# firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=IP-client forward-port port=2222 protocol=tcp to-port=22 to-addr=IP-server'

Где:

  • IP-client – это адрес клиента или отдельная подсеть, для которых должно срабатывать трафила перенаправления трафика;
  • IP-server — это адрес вашего сервера или удаленного, куда будет направляться трафик через forwarding портов.

Все запросы с указанного адреса или подсети, будут фильтроваться через созданное вами правило. Если IP адрес источника не соответствует правилу в зоне public, то он не получит доступ на целевой хост.

Проверить созданные правила firewalld, можно с помощью команды:

# firewall-cmd --permanent --list-all --zone=public

список правил перенаправления портов в firewalld

Обратите внимание, при написании статьи мы работали с зоной public. Вы можете использовать любую другую и в таком случае при настройке нужно будет указывать ее.

Чтобы очистить все правила, настроенные в firewalld, нужно выполнить несколько команд:

# cp -pR /etc/firewalld/zones /etc/firewalld/zones.bak
# rm -f /etc/firewalld/zones/*
# systemctl restart firewalld

очистка правил firewalld

Как видите, все правила были очищены.

В firewalld есть мощные возможности по настройке различных правил не только для открытия/закрытия портов сервера или фильтрации, но он также умеет тонко и довольно просто настраивать forwarding портов.

Qiziqarli malumotlar
Проброс портов (port forwarding) в Linux с помощью Firewalld