Использование FirewallD на CentOS - настройка и правила

АБ
Антон Белов
6 ноября 2019

Что такое FirewallD

Программа представляет собой графическую оболочку для брандмауэра iptables и кроме интерфейса также отличается схемой взаимодействия:

  • распределяет трафик не по зонам, а согласно правилам;
  • содержит правила «белого» и «черного» списка, в соответствии с которыми работает на данной сетевой точке;
  • может как ограничивать, так и блокировать трафик.

Опции

Firewalld имеет набор встроенных правил:

  • Drop: запрещает входящие подключения, но разрешает исходящие.
  • Block: исходя из наименования, полностью блокирует трафик.
  • Public: открывает подключения через SSH и DHClient.
  • External: активирует функцию NAT на выбранном сетевом интерфейсе.
  • Internal или Home: открывает порты для служб SSH, Samba, mDNS и DHCP.
  • Dmz: включает опцию «Демилитаризованная зона», которая разделяет частные сервисы от общедоступных.
  • Work: открывает доступ службам SSH и DHCP.
  • Trusted: переводится как «доверенный». Разрешает все соединения.

Кроме стандартного набора утилита поддерживает два режима загрузки. Первый называется Runtime. Он означает активность выбранных параметров до перезагрузки приложения или сервера. Если во время данного режима указываются дополнительные опции сохранения, то они остаются активными всегда.

Второй вариант — Permanent. Любые изменения, которые внесены в данном режиме, сохраняются навсегда.

Инсталляция

По умолчанию Firewalld не входит в состав CentOS. Установим его:

sudo yum install firewalld


Для помещения его в автозагрузочную область прописываем:

sudo systemctl enable firewalld

Перезагружаем серверную платформу для активации изменений.


Конфигурирование Firewalld

Определим текущую настройку утилиты:

firewall-cmd --get-default-zone


Скриншот №1. Текущая зона.

Сейчас установлен шаблон public, т.е. все разрешено. Если необходимо получить подробный отчет, то используем --list-all в качестве ключа. Результат приведен ниже.

Важно! Команда запускается только с правами sudo.

Скриншот №2. Подробный отчет.

Смена политики и интерфейса

Для смены шаблона, используем ключ --zone совместно с опцией смены сетевого интерфейса --change-interface. Например, заменить политику public на work с ее активацией на eth0:

sudo firewall-cmd --zone=work --change-interface=eth0


В случае успешной операции на мониторе появится соответствующее сообщение. Наберем следующую команду, чтобы убедиться в правильности выполненных действий:

sudo firewall-cmd --get-active-zones


Скриншот №3. Смены шаблона.

Как видно на изображении выше, сетевой интерфейс использует политику work, а другие по-прежнему работают с public.

Если требуется сменить политику, которая наследуется по умолчанию для всех интерфейсов, используем другой синтаксис:

sudo firewall-cmd --set-default-zone=home


После выполнения команды всем сетевым интерфейсам пропишется шаблон home. Для показа текущего уровня вводим уже известный ключ --get-default-zone.


Открываем порт (сервис)

Firewalld также предоставляет сервисам доступ к портам используя ключ --add-service=<имя службы>. Для начала проверим список сервисов на сервере, запустив утилиту с опцией --get-services.


Скриншот №4. Список служб.

Получить подробную информацию о любом сервисе, обратившись через команду cat к внутреннему списку firewalld. Например, просмотрим описание службы audit:

cat /usr/lib/firewalld/services/audit.xml


Скриншот №5. Описание audit.

Для активации порта любого сервиса из перечня прописываем в терминале:

sudo firewall-cmd --zone=work --add-service=audit


Данная конфигурация будет активна только до перезагрузки серверной платформы. Чтобы сделать ее постоянной, прописываем ключ --permanent:

sudo firewall-cmd --permanent --zone=work --add-service=audit


Если сервис audit больше не нужен, удалим его, используя опцию –remove-service=<имя службы>:

sudo firewall-cmd --zone=work --remove-service=audit --permanent


Альтернативный вариант открытия порта – указываем номер и имя протокола с указанием флага --add-port:

sudo firewall-cmd --zone=work --add-port=443/tcp


Важно! Любое изменение в списке сервисов можно отследить используя опцию --list-ports.

Удаление порта происходит при замене ключа --add-port на --remove-port с сохранением дальнейшего синтаксиса.

Как добавить новую службу

Как говорилось выше, полное описание служб внутри серверной ОС расположено по следующему пути: /usr/lib/firewalld/services/, далее идет xml-файл с именем службы.


Чтобы создать новый сервис, просто скопируем один из готовых вариантов в папку services, которая расположена внутри директории firewalld. В качестве примера взяли описание сервиса SSH и скопировали его с именем test:

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/test.xml


Важно! Операция копирования выполняется только с правами администратора.

Откроем его при помощи текстового редактора nano:

sudo nano /etc/firewalld/services/test.xml


На экране появится подробное описание сервиса SSH:

Скриншот №6. Отредактируем описание.

В первом пункте меняем название службы на произвольное. По полю short она активируется через команды в дальнейшем. Второй пункт дает полное описание сервиса: прописываем детально.


Третий шаг – указываем порты и протокол по которым она будет работать. В дальнейшем firewalld будет активировать значения после указания соответствующего ключа.

Отредактировав файл, сохраняем изменения и перезапускаем службу.


Остались вопросы? Задайте их нашему эксперту и получите квалифицированную помощь