Настройка Firewalld на RHEL, Rocky Linux, Alma Linux

Firewalld — это стандартное программное обеспечение брандмауэра в системах Linux на базе RHEL (Fedora, Alma Linux, Rocky Linux). Оно обеспечивает управление правилами межсетевого экрана с использованием зон, что позволяет контролировать уровень доверия для сетевых интерфейсов и определять, какие услуги могут быть доступны для различных зон. Firewalld поддерживает как IPv4, так и IPv6, а также управление правилами для протоколов Ethernet и мостов. В этом руководстве будут показаны некоторые основные способы использования firewalld, включая создание зон, добавление правил, настройку постоянных и временных изменений, а также управление услугами и портами.

Установить Firewalld

Мы можем легко установить его из репозитория программного обеспечения по умолчанию.

sudo dnf install -y firewalld

Запустите его и включите автозапуск при загрузке системы.

sudo systemctl enable --now firewalld

Проверить статус:

sudo systemctl статус firewalld

Если это сервер, то вы, вероятно, захотите разрешить трафик SSH , чтобы не оказаться заблокированным от доступа к своему серверу.

Читайте также:  Использование команды rsyslog для настройки логирования в Linux

sudo firewall-cmd --permanent --add-service=ssh

Зоны брандмауэра

В отличие от UFW, Firewalld поддерживает работу с несколькими зонами, каждая из которых может иметь свои собственные правила безопасности. Чтобы узнать, какая зона используется по умолчанию на вашем сервере, выполните следующую команду:

sudo firewall-cmd --get-default-zone

Наиболее распространенная зона по умолчанию — это public, но ваш сервер может быть настроен иначе. Пример вывода:

public

Чтобы просмотреть активные правила для зоны по умолчанию, используйте следующую команду:

sudo firewall-cmd --list-all

Пример вывода:

public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh cockpit dhcpv6-client
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

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

sudo firewall-cmd --list-all-zones

Чтобы узнать активные зоны на вашем сервере:

sudo firewall-cmd --get-active-zones

В большинстве случаев работа будет происходить с зоной по умолчанию.

Включение ведения журнала в Firewalld

Для отладки и мониторинга трафика полезно включить ведение журнала. Это поможет понять, что происходит, когда запросы блокируются. Команда для включения логирования:

Читайте также:  Как установить Zend Framework на Ubuntu 16.04

sudo firewall-cmd --set-log-denied=all

После этого, если запрос будет заблокирован, соответствующее сообщение появится в файле /var/log/messages. Пример журнала:

Apr 11 13:53:16 almalinux kernel: filter_FWD_public_REJECT: IN=vpns0 OUT=wg0 MAC= SRC=10.10.50.202 DST=10.0.0.100 LEN=64 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=50742 DPT=443 WINDOW=65535 RES=0x00 SYN URGP=0

Открытие портов в брандмауэре

Для разрешения HTTP и HTTPS трафика, например, для работы веб-сайта, выполните следующие команды:

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

Или объедините их в одну команду:

sudo firewall-cmd --permanent --add-port={80/tcp,443/tcp}

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

sudo firewall-cmd --permanent --add-port={25/tcp,587/tcp,143/tcp,993/tcp}

Для протокола POP3:

sudo firewall-cmd --permanent --add-port={110/tcp,995/tcp}

После добавления правил нужно перезагрузить Firewalld, чтобы изменения вступили в силу:

sudo systemctl reload firewalld

Закрытие портов

Чтобы закрыть порт, используйте следующую команду:

sudo firewall-cmd --permanent --remove-port=25/tcp

Не забудьте перезагрузить Firewalld:

sudo systemctl reload firewalld

Firewalld поддерживает так называемые «богатые» правила, которые позволяют создавать более сложные конфигурации безопасности. Например, для добавления IP-адреса в белый список используйте следующую команду:

Читайте также:  Как установить несколько версий PHP с Nginx на Ubuntu 18.04 и 16.04

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="12.34.56.78" accept'

Для удаления правила:

sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="12.34.56.78" accept'

Не забудьте перезагрузить Firewalld после внесения изменений:

sudo systemctl reload firewalld

Изменение backend Firewalld

По умолчанию Firewalld использует nftables в качестве backend. Если необходимо переключиться на iptables, отредактируйте конфигурационный файл:

sudo nano /etc/firewalld/firewalld.conf

Найдите строку:

FirewallBackend=nftables

И измените её на:

FirewallBackend=iptables

После этого перезапустите Firewalld:

sudo systemctl restart firewalld

Теперь вы можете использовать команду iptables для работы с правилами.

Прямые правила и расширенные конфигурации

Если нужно добавить специфические правила для iptables, которые не поддерживаются Firewalld напрямую, используйте следующие команды для добавления прямых правил:

sudo firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -p tcp --dport 25 -m statistic --mode nth --every 2 --packet 0 -j SNAT --to-source first.ip.address

Для пересылки пакетов, например, между клиентами VPN, выполните:

sudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -i wg0 -j ACCEPT
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -o wg0 -j ACCEPT

Перезагрузите Firewalld:

sudo systemctl reload firewalld

Готово!