Посмотреть состояние:
firewall-cmd --state
Мягко перечитать правила (применить настройки):
firewall-cmd --reload
Перечитать правила и сбросить текущие подключения:
firewall-cmd --complete-reload
Посмотреть созданные правила:
firewall-cmd --list-all
Остановить службу:
systemctl stop firewalld
Запустить сервис:
systemctl start firewalld
Запретить автозапуск:
systemctl disable firewalld
Разрешить автозапуск:
systemctl enable firewalld
Сохранить текущие правила, сделав их постоянными (permanent):
firewall-cmd --runtime-to-permanent
Общий синтаксис для работы с правилами:
firewall-cmd [опции] [зона] <правило>
Чтобы правила применялись, не забываем их перечитывать:
firewall-cmd --reload
Открыть порт 80:
firewall-cmd --permanent --add-port=80/tcp
Добавить правило для определенной зоны:
firewall-cmd --permanent --zone=external --add-port=80/tcp
Добавить диапазон портов:
firewall-cmd --permanent --add-port=6500-6700/udp
Добавить несколько правил одной командой:
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp
Использование служб, вместо портов, может повысить удобство управления правилами за счет объединения нескольких портов в одну службу.
Посмотреть список доступных служб:
firewall-cmd --get-services
Разрешить порт, например, для сервиса ntp:
firewall-cmd --permanent --add-service=ntp
Создать собственную службу:
firewall-cmd --permanent --new-service=name-service
Добавить порт, например TCP 2200 к службе:
firewall-cmd --permanent --service=name-service --add-port=2200/tcp
Задать описание для удобства:
firewall-cmd --permanent --service=name-service --set-short="Service With This Name"
firewall-cmd --permanent --service=name-service --set-description="Long Description For Service With This Name"
Информацию о созданном сервисе можно получить командой:
firewall-cmd --info-service=name-service
Теперь созданную службу можно использовать для создания правил, например:
firewall-cmd --permanent --add-service=name-service
rich-rule позволяет создавать правила с условиями. Рассмотрим несколько примеров:
1. Разрешаем службу http с условием, что запросы будут с определенных IP-адресов (подсети 192.168.0):
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept'
2. Или для конкретного порта:
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" port port="5038" protocol="tcp" accept'
3. Чтобы заблокировать подсеть можно воспользоваться командой:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' reject"
Список правил с условиями можно отобразить командой:
firewall-cmd --list-rich-rules
Аналогично созданию, но вместо add вводим remove, например –remove-port (удалит порт) или –remove-service (службу).
Удалим правило для открытия 80-о порта:
firewall-cmd --permanent --remove-port=80/tcp
Все правила в firewalld могут быть разбиты по зонам. Для каждой свой набор правил и свои сетевые интерфейсы. Это нужно использовать, если мы захотим для разных сетевых адаптеров сделать разные по строгости правила.
Посмотреть список всех имеющихся зон:
firewall-cmd --list-all-zones
Посмотреть список используемых зон:
firewall-cmd --get-active-zones
Информация о конкретной зоне:
firewall-cmd --list-all --zone=public
Создать правило для зоны public:
firewall-cmd --permanent --zone=public --add-port=80/tcp
Добавить сетевой интерфейс в зону:
firewall-cmd --permanent --zone=public --remove-interface=ens34
firewall-cmd --permanent --zone=internal --add-interface=ens34
Задать действие по умолчанию для зоны:
firewall-cmd --permanent --zone=public --set-target=DROP
Создать новую зону:
firewall-cmd --permanent --new-zone=custom_zone
firewall-cmd --reload
Включить маскарадинг:
firewall-cmd --permanent --zone=dmz --add-masquerade
Для примера берем два ethernet интерфейса — ens32 (внутренний) и ens33 (внешний). Для настройки nat последовательно вводим следующие 4 команды:
firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o ens33 -j MASQUERADE
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens32 -o ens33 -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens33 -o ens32 -m state --state RELATED,ESTABLISHED -j ACCEPT
systemctl restart firewalld
Для просмотра созданных данным способом правил используем команду:
firewall-cmd --direct --get-all-rules
Проброс настраивается со следующим синтаксисом:
firewall-cmd --add-forward-port=port=<порт прослушивания>:proto=tcp|udp|sctp|dccp:toport=<порт назначения>:toaddr=<куда перенаправить>
Например:
firewall-cmd --zone=external --permanent --add-forward-port=port=25:proto=tcp:toport=8025:toaddr=192.168.0.15
Предположим, у нас есть два внутренних сетевых интерфейса ens35 и ens36. Мы хотим контролировать трафик между ними.
Применяется в случаях, когда на сервере включен FORWARD, но необходимо блокировать трафик между определенными сегменами сети.
Вводим следующие команды:
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j DROP
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j DROP
Применяется в случаях, когда интерфейсы находятся в зонах, где по умолчанию, трафик блокируется.
Для разрешения команды, практически, аналогичные:
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j ACCEPT
В предыдущих примерах мы разрешали трафик в обоих направлениях. Если необходимо сделать так, чтобы только сеть ens35 видела сеть ens36, вводим одну команду:
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT
Возможные причины: не установлен пакет или не запущена служба.
Выполняем установку пакета firewalld:
yum install firewalld firewall-config
Запускаем службу:
systemctl start firewalld
Причина: не введена команда перезапуска правил. Перечитываем правила:
firewall-cmd --reload
Если это не помогло, делаем перезапуск со сбросом подключений:
firewall-cmd --complete-reload
В некоторых случаях, необходимо перезапустить сетевые службы:
systemctl restart network
В исключительных случаях, перезагружаем компьютер:
shutdown -r now
Ошибка появляется при попытке удалить интерфейс из зоны, настройками которого управляет NetworkManager.
Для решения открываем конфигурационный файл для настройки сетевого интерфейса, например:
vi /etc/sysconfig/network-scripts/ifcfg-ens34
И дописываем следующее:
ZONE=external
Перезагружаем сетевую службу:
systemctl restart network