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, как это работает:
- С указанием ключа, правило применяется только после перезагрузки и соответственно сохраняется
- Без ключа, правило работает сразу, но удаляется после перезагрузки.