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 , чтобы не оказаться заблокированным от доступа к своему серверу.
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
Для отладки и мониторинга трафика полезно включить ведение журнала. Это поможет понять, что происходит, когда запросы блокируются. Команда для включения логирования:
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-адреса в белый список используйте следующую команду:
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
Готово!

