Пытается закрыть два порта с помощью 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'
Другие вопросы по тегам