Firewalld – утилита для управления брандмауэром, доступная практически во всех дистрибутивах Linux. Работает как интерфейс для iptables. В этой статье мы рассмотрим, как настроить проброс портов в Linux с помощью firewalld.
Статус сервиса firewalld проверяется командой:
# 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-адреса может указать адрес любого другого хоста в сети, куда вы хотите перенаправить все запросы.
Теперь можно попробовать подключится с Windows компьютера в локальной сети на порт 6666 Linux сервера. Можно использовать встроенный ssh клиент:
ssh root@server2 -p 6666
При подключении firewalld должен автоматически перенаправить трафик с порта 666 на порт 22, а вы увидеть баннер SSH.
Аналогичным образом можно пробросить трафик с других служб. Например, пробросим порт 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
Обратите внимание, при написании статьи мы работали с зоной public. Вы можете использовать любую другую и в таком случае при настройке нужно будет указывать ее.
Чтобы очистить все правила, настроенные в firewalld, нужно выполнить несколько команд:
# cp -pR /etc/firewalld/zones /etc/firewalld/zones.bak
# rm -f /etc/firewalld/zones/*
# systemctl restart firewalld
Как видите, все правила были очищены.
В firewalld есть мощные возможности по настройке различных правил не только для открытия/закрытия портов сервера или фильтрации, но он также умеет тонко и довольно просто настраивать forwarding портов.