Пытается закрыть два порта с помощью firewalld, оставляя все остальное открытым
Я думаю, что я использую неправильную технику, но не уверен в правильной.
Машина: Red Hat релиз 7.2
firewalld.noarch: 0.3.9-14.el7
Меня попросили закрыть два порта, но убедиться, что все остальные порты открыты. Решение должно быть простым для включения и выключения. Для этого я сделал:
воспитывать огненный мир
установить "доверенный" в качестве зоны по умолчанию # Trusted открывает все порты
firewall-cmd --zone= доверенный --add-interface=eno16780032 # только интерфейс Ethernet на этом сервере.
В целях тестирования выполните nc -l port_number, чтобы что-то отвечало на этом порту.
Проверьте: перейдите на другой компьютер, выполните "telnet machine_name port_number" и убедитесь, что я получил ответ. (Перезапуск nc после каждого теста.)
Отключить порт:
- firewall-cmd --zone= доверенный - удаленный порт номер_порта / tcp
Убедитесь, что:
- firewall-cmd --zone= доверенный --query-порт номер_порта / tcp
Возвращает "нет"
На этом этапе nc должен прослушивать номер_порта, но он должен быть заблокирован firewalld. Я не должен быть в состоянии подключиться к нему.
Тем не менее, "telnet имя_компьютера номер_порта" с другого компьютера все еще подключается.
Я даже не пытаюсь сделать это постоянным на данном этапе, просто пытаюсь заставить правило работать. Что я делаю неправильно?
Приложение: у нас есть собственный внутренний сервис, который работает как конфигурация master / slave. Ведомый постоянно включен, чтобы синхронизировать данные с ведущим. Только система, обозначенная как "master", может использоваться интерфейсом. (Чтобы сделать его настоящим кластером, потребовалось бы слишком много работы, говорят разработчики.)
В "облаке" есть балансировщик нагрузки (над которым у нас нет прямого контроля), который указывает на обе машины. Цель состоит в том, чтобы заблокировать два ключевых порта на ведомом устройстве, чтобы балансировщик нагрузки всегда переходил к ведущему устройству. Когда мы переключаемся при отказе, порты на "ведомом" (теперь ведущем) разблокируются, а порты на "главном" (теперь подчиненном) блокируются, что вынуждает балансировщик нагрузки перейти к новому главному.
Вероятно, это не очень хорошее использование балансировщика нагрузки или firewalld, но это странное приложение, и мы просто пытаемся найти что-то, что не работает, не включает в себя ни перехватчик с балансировщиком нагрузки, ни отключение служб на ведомом устройстве.
Есть идеи?
1 ответ
IIRC философия позади firewalld
это закрыть что-нибудь и открыть только порты, которые вам нужны. Так что, наоборот, вы пытаетесь сделать. Поэтому такие команды, как --add-port
добавит порт, указанный для открытия.
Как пример, добавление порта 80 просто добавит еще один ACCEPT
Правило iptables
но так как цель для зоны trusted
является ACCEPT
уже это правило просто не имеет смысла.
$ firewall-cmd --zone=trusted --add-port=80/tcp
$ iptables -L -n | grep 80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW
То же самое, если вы удалите порт с --remove-port
, который должен дать подсказку, если соответствующий порт не настроен.
$ firewall-cmd --zone=trusted --remove-port 80/tcp
success
$ firewall-cmd --zone=trusted --remove-port 80/tcp
Warning: NOT_ENABLED: '80:tcp' not in 'trusted'
success
firewalld
также обеспечивает rich-rules
который может быть использован для того, что вы хотите достичь.
Следующая команда закроет порт 80 / tcp.
firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" port port="80" protocol="tcp" reject'
Если вы хотите разрешить один IP-адрес для подключения к этому порту, вы можете добавить source
,
firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" source NOT address="192.168.122.1" port port="80" protocol="tcp" reject'firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" source NOT address="192.168.122.1" port port="80" protocol="tcp" reject'
source
Параметр также принимает подсети в нотации CIDR.
firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" source NOT address="192.168.122.1" port port="80" protocol="tcp" reject'firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" source NOT address="192.168.122.0/24" port port="80" protocol="tcp" reject'