Настройка firewalld в CentOS

Firewalld — утилита для управления встроенным в ядро Linux брандмауэром Netfilter. Несмотря на собственный синтаксис, имеет такой же принцип работы, как Iptables. Дополнительно про управление Netfilter при помощи последнего.

Общие команды
Управление правилами
Работа с зонами
Настройка NAT
Возможные проблемы

Общие команды для управления firewalld

Посмотреть состояние:

firewall-cmd --state

Мягко перечитать правила (применить настройки):

firewall-cmd --reload

Перечитать правила и сбросить текущие подключения:

firewall-cmd --complete-reload

* в официальной документации сказано, что данную команду стоит применять только в случаях проблем с firewalld.

Посмотреть созданные правила:

firewall-cmd --list-all

Остановить службу:

systemctl stop firewalld

Запустить сервис:

systemctl start firewalld

Запретить автозапуск:

systemctl disable firewalld

Сохранить текущие правила, сделав их постоянными (permanent):

firewall-cmd --runtime-to-permanent

Управление правилами

Создание

Открыть порт 80:

firewall-cmd --permanent --add-port=80/tcp

* где ключ --permanent — добавить постоянное правило (будет действовать после перезагрузки).

Добавить правило для определенной зоны:

firewall-cmd --permanent --zone=external --add-port=80/tcp

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

firewall-cmd --permanent --add-service=ntp

* весь список сервисов можно посмотреть командой firewall-cmd --get-services

Разрешаем службу 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'

rich-rule позволяет создавать правила с условиями.

Удаление правил

Аналогично созданию, но вместо 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 --zone=public --list-all

Создать правило для зоны 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

Настройка nat (шлюза)

Включить маскарадинг:

firewall-cmd --permanent --zone=dmz --add-masquerade

* без указания зон, будет включен для public и external.

Для примера берем два ethernet интерфейса — ens32 (внутренний) и ens33 (внешний). Для настройки nat последовательно вводим следующие 4 команды:

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o ens33 -j MASQUERADE

* правило включает маскарадинг на внешнем интерфейсе ens33. Где опция --direct требуется перед всеми пользовательскими правилами (--passthrough, --add-chain, --remove-chain, --query-chain, --get-chains, --add-rule, --remove-rule, --query-rule, --get-rules); nat — таблица, в которую стоит добавить правило; POSTROUTING 0 — цепочка в таблице nat; опция MASQUERADE указывает сетевому экрану менять внутренний IP-адрес на внешний.

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens32 -o ens33 -j ACCEPT

* добавляет в таблицу filter (цепочку FORWARD) правило, позволяющее хождение трафика с ens32 на ens33.

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens33 -o ens32 -m state --state RELATED,ESTABLISHED -j ACCEPT

добавляет правило в таблицу filter (цепочку FORWARD), позволяющее хождение трафика с ens33 на ens32 для пакетов, открывающих новый сеанс, который связан с уже открытым другим сеансом (RELATED) и пакетов, которые уже являются частью существующего сеанса (ESTABLISHED).

systemctl restart firewalld

* для того, чтобы сервер CentOS заработал в качестве шлюза, также необходимо настроить ядро. Подробнее в статье Настройка Интернет шлюза на CentOS 7.

Для просмотра созданных данным способом правил используем команду:

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

Возможные проблемы при работе с firewalld

1. Ошибка command not found (команда не найдена).

Возможные причины: не установлен пакет или не запущена служба.

Выполняем установку пакета firewalld:

yum install firewalld firewall-config

Запускаем службу:

systemctl start firewalld

2. Не применяются правила.

Причина: не введена команда перезапуска правил.

Перечитываем правила:

firewall-cmd --reload

3. The interface is under control of NetworkManager and already bound to the default zone.

Ошибка появляется при попытке удалить интерфейс из зоны, настройками которого управляет NetworkManager.

Для решения открываем конфигурационный файл для настройки сетевого интерфейса, например:

vi /etc/sysconfig/network-scripts/ifcfg-ens34

И дописываем следующее:

ZONE=external

* в данном примере сетевой интерфейс ens34 будет добавлен в зону external.

Перезагружаем сетевую службу:

systemctl restart network

# Сети # Безопасность # UNIX # Linux # CentOS
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет