Что это такое?
FirewallD — это внешний контроллер для iptables, используемый для реализации постоянных правил сетевого трафика. Доступен на всех дистрибутивах Linux, но наиболее популярен в семействе CentOS.
Базовые понятия FirewallD
Зоны
Демон firewalld управляет группами правил, используя объекты, называемые «зонами» (zones). Зоны — это набор правил, определяющий, какой трафик должен быть разрешен в зависимости от уровня доверия сетей, к которым подключен ваш компьютер. Сетевым интерфейсам назначается зона, определяющая поведение, которое должен разрешить брандмауэр.
Ниже приведена таблица зон, упорядоченных в соответствии с уровнем доверия, от ненадежного до доверенного.
Зона | Описание |
drop | Все входящие соединения отклоняются без уведомления. Разрешены только исходящие соединения. |
block | Все входящие соединения отклоняются с сообщением icmp-host-prohibited для IPv4 и icmp6-adm-prohibited для Ipv6. Разрешены только исходящие соединения. |
public | Для использования в ненадежных общественных местах. Можно разрешать предопределенные входящие соединения. |
external | Для использования во внешних сетях с использованием NAT активируется, когда сервер используется в качестве шлюза или маршрутизатора. Разрешены только выбранные входящие соединения. |
internal | Для использования во внутренних сетях, когда система используется в качестве шлюза или маршрутизатора. Другие системы в сети, как правило, доверенные. Разрешены только выбранные входящие соединения. |
dmz | Используется для компьютеров, расположенных в вашей демилитаризованной зоне, которые будут иметь ограниченный доступ к остальной части сети. Разрешены только выбранные входящие соединения. |
work | Используется в рабочем пространстве. Другим компьютерам в сети, как правило, доверяют. Разрешены только выбранные входящие соединения. |
home | Используется в домашнем пространстве. Другим системам в сети, как правило, доверяют. Разрешены только выбранные входящие соединения. |
trusted | Все сетевые подключения принимаются. Доверие ко всем компьютерам в сети. |
Сервисы
Сервисы Firewalld — это предопределенные правила, которые применяются в зоне и определяют необходимые параметры входящего трафика для конкретной службы или программы.
Сохранение правил
Firewalld использует два набора конфигурации, временную и постоянную.
Временная конфигурация представляет собой фактическую рабочую конфигурацию и при перезагрузке не сохраняется. При включении сервера, когда служба Firewalld запускается, она загружает постоянную конфигурацию, которая дополняется временной конфигурацией.
По умолчанию при внесении изменений в конфигурацию Firewalld с использованием утилиты firewall-cmd изменения применяются к временной конфигурации. Чтобы изменения были постоянными, необходимо использовать флаг —permanent.
Установка FirewallD
Для установки FirewallD выполните следующую команду:
# yum install firewalld
Чтобы брандмауэр включался при перезагрузке сервера выполните:
# systemctl enable firewalld
В результате вы увидите следующее сообщение:
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
Выполните перезагрузку, чтобы изменения вступили в силу:
# reboot
Проверить состояние можно флагом —state:
# firewall-cmd --state
running
Настройка брандмауэра
Узнать текущую зону можно с помощью команды:
# firewall-cmd --get-default-zone
В консоли отобразится зона по-умолчанию:
public
Вы можете вывести настройки конфигурации зоны с помощью:
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Изменение зоны интерфейса
Вы можете легко изменить зону интерфейса, используя флаг —zone в сочетании с флагом —change-interface. Следующая команда назначит интерфейс eth0 рабочую зону:
# firewall-cmd --zone=work --change-interface=eth0
При успешном изменении Вы увидите следующее сообщение:
The interface is under control of NetworkManager, setting zone to 'work'.
success
Выполните проверку:
# firewall-cmd --get-active-zones
Результат:
work
interfaces: eth0
Изменение зоны по умолчанию
Чтобы изменить зону по умолчанию, используйте флаг —set-default-zone, за которым следует имя зоны, которую вы хотите использовать по умолчанию. Например, чтобы изменить зону по умолчанию на домашнюю, вы должны запустить следующую команду:
# firewall-cmd --set-default-zone=home
Проверьте изменения:
# firewall-cmd --get-default-zone
Вывод:
home
Открытие порта или службы
С помощью FirewallD вы можете разрешать трафик для определенных портов на основе предопределенных правил, называемых сервисами. Чтобы получить список всех доступных по умолчанию типов служб:
# firewall-cmd --get-services
Вы увидите длинный список доступных служб:
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client [...]
Вы можете найти дополнительную информацию о каждой службе, открыв соответствующий .xml-файл в каталоге /usr/lib/firewalld/services. Например, HTTP-служба определяется следующим образом:
# cat /usr/lib/firewalld/services/http.xml
Результат:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>WWW (HTTP)</short>
<description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
<port protocol="tcp" port="80"/>
</service>
Чтобы разрешить входящий HTTP-трафик (80 порт) только для текущей конфигурации сеанса (временная конфигурация), выполните следующую команду:
# firewall-cmd --zone=work --add-service=http
Примечание: обратите внимание на то, какие зоны у вас используются.
Чтобы убедиться, что служба была успешно добавлена, используйте флаг —list-services:
# firewall-cmd --zone=work --list-services
В результате видно, что служба http отобразилась в списке:
ssh dhcpv6-client http
Если вы хотите оставить порт 80 открытым после перезагрузки, необходимо использовать флаг —permanent:
# firewall-cmd --permanent --zone=work --add-service=http
Для удаления сервиса используйте флаг —remove-service:
# firewall-cmd --zone=work --remove-service=http --permanent
Для открытия конкретного порта используйте следующую команду, указав вместо XXX — номер порта, a YYY — протокол tcp или udp:
# firewall-cmd --zone=work --add-port=XXX/YYY
Например:
# firewall-cmd --zone=work --add-port=443/tcp
Чтобы убедиться, что порт был успешно добавлен, используйте флаг —list-ports:
# firewall-cmd --zone=work --list-ports
Синтаксис для удаления порта такой же, как при добавлении порта. Используйте —remove-port вместо флага —add-port:
# firewall-cmd --zone=work --remove-port=443/tcp
Создание новой службы FirewallD
Сервисы по умолчанию хранятся в каталоге /usr/lib/firewalld/services. Самый простой способ создать новую услугу — скопировать существующий файл службы в каталог /etc/firewalld/services, который является местоположением для созданных пользователем служб и заменить в нем параметры.
Например, чтобы создать определение тестовой службы, мы можем использовать файл службы HTTP:
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/test.xml
С помощью текстового редактора откройте скопированный файл:
# nano /etc/firewalld/services/test.xml
Измените краткое имя и описание для службы в тегах и . Укажите порты и протоколы, которые необходимо открыть:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Test</short>
<description>Some useful description.</description>
<port protocol="tcp" port="1234"/>
<port protocol="udp" port="4321"/>
</service>
Сохраните файл и перезагрузите службу FirewallD:
# firewall-cmd --reload
Теперь вы можете использовать созданную службу в своих зонах так же, как и любую другую.