Полный обзор Firewalld

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
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens224 -o ens192 -j ACCEPT

Разрешить трафик в одном направлении

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens192 -o ens224 -j ACCEPT
 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: