Firewalld это упрощенный инструмент для работы с правилами iptables.

Установка:

 yum install firewalld

systemctl enable firewalld

Работа с правилами происходит через firewall-cmd

Проверяем статус: firewall-cmd --state

Правила фаерволла создаются для зон, которые в свою очередь могут быть назначены на сетевой интерфейс.

Смотрим зону по умолчанию:  firewall-cmd --get-default-zone

Задаем зону по умолчанию: firewall-cmd --set-default-zone=public

Смотрим зоны для интерфейсов: firewall-cmd --get-active-zones

Смотрим правила для зоны: firewall-cmd --zone=public --list-all

Смотрим список всех сервисов: firewall-cmd --get-services

Добавляем разрешение для сервиса к зоне: firewall-cmd --zone=public --add-service=zabbix-agent --permanent

Для удаления, вместо -add-service используем ключ -remove

Перезагрузка после внесения изменений: firewall-cmd --reload

Проброс порта: firewall-cmd --zone=public --add-forward-port=port=88:proto=tcp:toport=80

Проброс порта в рамках локальной машины, если используется NAT необходимо добавить его к зоне: firewall-cmd --zone=public --add-masquerade

И уже после этого делать проброс портов

Всё это прекрасно, но не достаточно для тонкой настройки, данные правила позволяют лишь открыть порты (либо сервисы) и сделать проброс. 

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

Работа с расширенными правилами

rule family="тип" source значение destination значение log audit действие

Вот значение основных параметров:

  • В качестве типа можно указать ipv4 или ipv6 или ничего не указывать, тогда правило будет применяться к обоим протоколам;
  • source и destination - это отправитель и получатель пакета. В качестве этих параметров может быть использован IP-адрес (address), сервис (service name), порт (port), протокол (protocol) и так далее;
  • log - позволяет логировать прохождение пакетов, например в syslog. В этой настройке вы можете указать префикс строчки лога и уровень подробности логирования;
  • audit - это альтернативный способ логирования, когда сообщения будут отправляться в службу auditd.
  • Действие - это действие, которое необходимо выполнить с совпавшим пакетом. Доступны: accept, drop, reject, mark.

Давайте рассмотрим несколько примеров. Нам необходимо заблокировать доступ к серверу для пользователя с IP 1.1.1.1:

firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=1.1.1.1 reject'

Просмотр всех существующим правил:

firewall-cmd --list-rich-rules

Теперь пример, как дать доступ к ssh только для определенного IP:

firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.1.1.1/32" port port="22" protocol="tcp" accept' --permanent

Данной командой мы создали правило доступа для ип 1.1.1.1 к порту 22, но оно не будет работать должным образом, т.к. если вернуться к началу и посмотреть все правила firewall-cmd --zone=public --list-all

Мы увидим, что есть сервис ssh который по умолчанию открыт. Поэтому, удаляем это правило: firewall-cmd --zone=public --remove-service=zabbix-agent --permanent

Делаем firewall-cmd --reload

Профит! Теперь доступ к порту 22 есть только с определенного IP.

Обратите внимание, что после команды стоит ключ --permanent, как это работает:

  • С указанием ключа, правило применяется только после перезагрузки и соответственно сохраняется
  • Без ключа, правило работает сразу, но удаляется после перезагрузки.