Блокировать исходящие соединения на RHEL7 / CentOS7 с firewalld?


12

RHEL7 / CentOS7 имеет новую firewalldслужбу межсетевого экрана, которая заменяет iptables service(обе они используют iptablesинструмент для взаимодействия с Netfilter ядра под ним).

firewalldможет быть легко настроен на блокировку входящего трафика, но, как отметил Томас Вёрнер 1,5 года назад, «ограничение исходящего трафика невозможно с помощью firewalld простым способом на данный момент». И, насколько я понимаю, с тех пор ситуация не изменилась. Или есть? Есть ли способ заблокировать исходящий трафик firewalld? Если нет, то есть ли другие «стандартные» способы (в дистрибутиве RHEL7) блокировки исходящего трафика, кроме ручного добавления правил через iptablesинструмент?

Ответы:


12

Я не нашел никакой опции в этом хорошем графическом интерфейсе, но это возможно через прямой интерфейс

Чтобы включить только исходящий порт 80:

firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -m tcp --dport=80 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -j DROP

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

firewall-cmd --reload

отображать постоянные правила

firewall-cmd --permanent --direct --get-all-rules

отображать правила выполнения

firewall-cmd --direct --get-all-rules

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

@Casey Насколько я понимаю, богатые правила строго используются для цепочек INPUT.
Рис

Я предполагаю, что вышеуказанные правила работают только для ipv4(iptables). Может быть желательно иметь аналогичные правила для ipv6(для ip6tables) или eb(для ebtables).
mwfearnley

Кроме того, это убило мое SSH соединение с сервером! Смотрите user253068 ответ о том, как сохранить установленные соединения.
mwfearnley

5

После того, как я сам задал тот же вопрос и немного поработал, я собрал несколько хороших правил для ограничения исходящего трафика запросами HTTP / HTTPS и DNS:

Разрешить установленные соединения:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Разрешить HTTP:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT

Разрешить HTTPS:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 443 -j ACCEPT

Разрешить для DNS-запросов:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p tcp -m tcp --dport 53 -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 1 -p udp --dport 53 -j ACCEPT

Отрицать все остальное:

# firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 2 -j DROP

Хорошей идеей было бы сначала проверить, пропустив аргумент --permanent.

Я ни в коем случае не эксперт, но мне кажется, это нормально работает :)


В какой-то момент вы можете найти полезным удалить правила. Удаление отдельных прямых правил кажется сложным, но для кувалды firewall-cmd [--permanent] --direct --remove-rules ipv4 filter OUTPUTудастся выполнить массовое удаление.
mwfearnley

1

По поводу GUI; Я думаю, вы найдете это в разделе « Прямая настройка ». Чтобы получить к нему доступ, вы должны выбрать его в « View ». Я могу ошибаться.

Примечание

Удалить правила; Вы должны выйти, а затем снова войти.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.