Firewalld — динамически управляемый брандмауэр с поддержкой зон сети, который определяет уровень доверия сетевых подключений или интерфейсов.
Он поддерживает IPv4, настройки брандмауэра IPv6, мосты Ethernet и IP-наборы.
Firewalld несмотря на собственный синтаксис, имеет такой же принцип работы, как iptables.
Firewalld фильтрует входящий трафик по различным зонам в зависимости от конкретных правил, применяемых к каждой зоне. При определении зоны для входящего соединения будет применяться следующая логика:
В firewalld есть ряд зон с предварительно настроенными разрешениями для различных служб. Можно изменять эти настройки или создавать собственные зоны. Список зон:
drop — минимальный уровень доверия. Все входящие соединения блокируются без ответа, допускаются только исходящие соединения.
block — аналогично предыдущему, но при отклонении входящих запросов отправляется сообщение icmp-host-prohibited или icmp6-adm-prohibited.
public — представляет общественные, недоверенные сети. Вы не доверяете другим компьютерам, но можете разрешать избранные входящие соединения в индивидуальном порядке.
external — внешние сети при использовании брандмауэра в качестве шлюза. Она настроена для маскирования NAT, поэтому внутренняя сеть остается частной, но доступной.
internal — внутренняя сторона шлюза. Компьютеры обладают достаточным уровнем доверия, доступен ряд дополнительных служб.
dmz — используется для компьютеров, расположенных в DMZ («демилитаризованная зона», изолированные компьютеры без доступа к остальной сети). Разрешены только определенные входящие соединения.
work — используется для рабочих машин. Доверять большинству компьютеров в сети. Может быть разрешено еще несколько служб.
home — домашняя среда. Обычно означает, что вы доверяете большинству других компьютеров и разрешаете работу еще нескольких служб.
trusted — доверять всем машинам в сети. Наиболее открытая из всех доступных опций, должна использоваться с осторожностью.
Firewalld имеет ряд функций:
Он поддерживает IPv4, настройки брандмауэра IPv6, мосты Ethernet и IP-наборы.
Firewalld несмотря на собственный синтаксис, имеет такой же принцип работы, как iptables.
Firewalld фильтрует входящий трафик по различным зонам в зависимости от конкретных правил, применяемых к каждой зоне. При определении зоны для входящего соединения будет применяться следующая логика:
- Если IP-адрес отправителя соответствует определенным для зоны значениям, то пакет будет направляться через эту зону. Если этот адрес не соответствует ни одной зоне, то проверяется соответствие входящего интерфейса пакета фильтру зоны, и в случае такого соответствия используется эта зона.
- Во всех остальных случаях используется зона по умолчанию, изначально заданная как public. Для нее предполагается, что вы не доверяете другим компьютерам в сети и разрешаете работу только ограниченного числа служб.
В firewalld есть ряд зон с предварительно настроенными разрешениями для различных служб. Можно изменять эти настройки или создавать собственные зоны. Список зон:
drop — минимальный уровень доверия. Все входящие соединения блокируются без ответа, допускаются только исходящие соединения.
block — аналогично предыдущему, но при отклонении входящих запросов отправляется сообщение icmp-host-prohibited или icmp6-adm-prohibited.
public — представляет общественные, недоверенные сети. Вы не доверяете другим компьютерам, но можете разрешать избранные входящие соединения в индивидуальном порядке.
external — внешние сети при использовании брандмауэра в качестве шлюза. Она настроена для маскирования NAT, поэтому внутренняя сеть остается частной, но доступной.
internal — внутренняя сторона шлюза. Компьютеры обладают достаточным уровнем доверия, доступен ряд дополнительных служб.
dmz — используется для компьютеров, расположенных в DMZ («демилитаризованная зона», изолированные компьютеры без доступа к остальной сети). Разрешены только определенные входящие соединения.
work — используется для рабочих машин. Доверять большинству компьютеров в сети. Может быть разрешено еще несколько служб.
home — домашняя среда. Обычно означает, что вы доверяете большинству других компьютеров и разрешаете работу еще нескольких служб.
trusted — доверять всем машинам в сети. Наиболее открытая из всех доступных опций, должна использоваться с осторожностью.
Firewalld имеет ряд функций:
1. API D-Bus.
2. Временные правила брандмауэра.
3. Богатый язык для описания правил брандмауэра.
4. Поддержка IPv4 и IPv6 NAT.
5. Зоны межсетевого экрана.
6. Поддержка IP-набора.
7. Логи отклоненных пакетов.
8. Прямой интерфейс.
9. Lockdown: Белый список приложений, которые могут изменить брандмауэр.
10. Поддержка iptables, ip6tables, ebtables и брандмауэров ipset firewall.
11. Автоматическая загрузка модулей ядра Linux.
12. Интеграция с Puppet.
Установка Firewalld
Перед установкой Firewalld нужно убедиться, что остановлен iptables. Для этого необходимо ввести:
sudo systemctl stop iptables
Затем убедитесь, что iptables больше не используется вашей системой:
sudo systemctl mask iptables
Проверяем состояние iptables:
sudo systemctl status iptables
Ubuntu/Debian
Чтобы установить Firewalld на Ubuntu, сначала необходимо удалить UFW. Чтобы удалить UFW, выполните команду:
sudo apt-get remove ufw
Команда для установки Firewalld
sudo apt-get install firewall-applet
RHEL, CentOS & Fedora
Команда для установки:
sudo yum install firewalld firewall-config -y
Общие команды для управления firewalld
После каждой модификации вам нужно перезагрузить Firewalld, чтобы изменения вступили в силу. Команда для автоматического запуска:
systemctl enable firewalld
Запретить автозапуск:
systemctl disable firewalld
Команда для запуска службы:
systemctl start firewalld
Узнаем статус службы:
sudo systemctl status firewalld
Посмотреть состояние:
firewall-cmd --state
Мягко перечитать правила (применить настройки):
firewall-cmd --reload
Перечитать правила и сбросить текущие подключения:
firewall-cmd --complete-reload
Посмотреть созданные правила:
firewall-cmd --list-all
Сохранить текущие правила, сделав их постоянными (permanent):
firewall-cmd --runtime-to-permanent
Управление правилами
Чтобы правила применялись, не забываем их перечитывать (—reload). Общий синтаксис для работы с правилами:
firewall-cmd [опции] [зона] [правило]
[опции] — дополнительные параметры для создаваемого правила, например —permanent — постоянное правило, то есть будет действовать после перезагрузки. Не обязательный.
[зона] — по умолчанию, правила создаются для зоны public. Для работы с конкретной зоной ее необходимо указать, например, —zone=dmz. Не обязательный.
[правило] — само правило. Обязательный.
Добавление портов
Открыть порт 80:
firewall-cmd --permanent --add-port=80/tcp
# ключ --permanent — добавить постоянное правило (будет действовать после перезагрузки).
Добавить правило для определенной зоны:
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
# name-service — произвольное имя создаваемой службы
Добавить порт, например TCP 2200 к службе:
firewall-cmd --permanent --service=name-service --add-port=2200/tcp
Информацию о созданном сервисе можно получить командой:
firewall-cmd --info-service=name-service
Созданную службу можно использовать для создания правил, например:
firewall-cmd --permanent --add-service=name-service
Rich-Rule
rich-rule позволяет создавать правила с условиями. Рассмотрим несколько примеров:
Разрешаем службу 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'
Чтобы заблокировать подсеть можно воспользоваться командой:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' reject"
Список правил с условиями можно отобразить командой:
firewall-cmd --list-rich-rules
Удаление правил
Удаляем правило для открытия 80 порта:
firewall-cmd --permanent --remove-port=80/tcp
Управление зонами
Посмотреть список всех имеющихся зон:
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=ens192
# добавляем сетевой интерфейс в зону
firewall-cmd --permanent --zone=internal --add-interface=ens192
Задать действие по умолчанию для зоны:
firewall-cmd --permanent --zone=public --set-target=DROP
Создать новую зону:
firewall-cmd --permanent --new-zone=new_zone
firewall-cmd --reload
# чтобы система увидела новую зону new_zone, команда reload обязательная.
Пример настройки NAT (шлюза)
NAT — это специальный механизм, реализованный в сетях TCP/IP, который позволяет изменять ip-адреса пересылаемых пакетов, т.е. тех внутренних ip, которые присылаются на сетевой шлюз — в глобальные для дальнейшей отправки во внешний интернет.
Включить маскарадинг:
Маскарадинг — это подмена некоторых параметров в заголовках IP-пакетов, позволяющая машинам, не имеющим реальных IP-адресов, практически полноценно работать в интернете.
firewall-cmd --permanent --zone=dmz --add-masquerade
# без указания зон, будет включен для public и external
Проброс портов
Проброс настраивается со следующим синтаксисом:
firewall-cmd --add-forward-port=port=[порт прослушивания]:proto=tcp|udp|sctp|dccp:toport=[порт назначения]:toaddr=[куда перенаправить]
Запретить трафик между интерфейсами
Применяется в случаях, когда на сервере включен FORWARD, но необходимо блокировать трафик между определенными сегменами сети.
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -j DROP
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens224 -o ens192 -j DROP
Разрешить трафик в одном направлении
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -j ACCEPT