Использование FirewallD на CentOS

Инструкция по установке и использованию межсетевого экрана FirewallD на виртуальных серверах под управлением Centos.

Что это такое?

FirewallD - это внешний контроллер для iptables, используемый для реализации постоянных правил сетевого трафика. Доступен на всех дистрибутивах Linux, но наиболее популярен в семействе CentOS.

Базовые понятия FirewallD

Зоны

Демон firewalld управляет группами правил, используя объекты, называемые «зонами» (zones). Зоны - это набор правил, определяющий, какой трафик должен быть разрешен в зависимости от уровня доверия сетей, к которым подключен ваш компьютер. Сетевым интерфейсам назначается зона, определяющая поведение, которое должен разрешить брандмауэр.

Ниже приведена таблица зон, упорядоченных в соответствии с уровнем доверия, от ненадежного до доверенного.

Зона Описание
drop Все входящие соединения отклоняются без уведомления. Разрешены только исходящие соединения.
block Все входящие соединения отклоняются с сообщением icmp-host-prohibited для IPv4 и icmp6-adm-prohibited для Ipv6. Разрешены только исходящие соединения.
public Для использования в ненадежных общественных местах. Можно разрешать предопределенные входящие соединения.
external Для использования во внешних сетях с использованием NAT активируется, когда сервер используется в качестве шлюза или маршрутизатора. Разрешены только выбранные входящие соединения.
internal Для использования во внутренних сетях, когда система используется в качестве шлюза или маршрутизатора. Другие системы в сети, как правило, доверенные. Разрешены только выбранные входящие соединения.
dmz Используется для компьютеров, расположенных в вашей демилитаризованной зоне, которые будут иметь ограниченный доступ к остальной части сети. Разрешены только выбранные входящие соединения.
work Используется в рабочем пространстве. Другим компьютерам в сети, как правило, доверяют. Разрешены только выбранные входящие соединения.
home Используется в домашнем пространстве. Другим системам в сети, как правило, доверяют. Разрешены только выбранные входящие соединения.
trusted Все сетевые подключения принимаются. Доверие ко всем компьютерам в сети.

Сервисы

Сервисы Firewalld - это предопределенные правила, которые применяются в зоне и определяют необходимые параметры входящего трафика для конкретной службы или программы.

Сохранение правил

Firewalld использует два набора конфигурации, временную и постоянную.

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

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

Установка FirewallD

Для установки FirewallD выполните следующую команду:

sudo yum install firewalld

Чтобы брандмауэр включался при перезагрузке сервера выполните:

sudo systemctl enable firewalld

В результате вы увидите следующее сообщение:

Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.

Выполните перезагрузку, чтобы изменения вступили в силу:

sudo reboot

Проверить состояние можно флагом --state:

sudo firewall-cmd --state
running

Настройка брандмауэра

Узнать текущую зону можно с помощью команды:

firewall-cmd --get-default-zone

В консоли отобразится зона по-умолчанию:

public

Вы можете вывести настройки конфигурации зоны с помощью:

sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Изменение зоны интерфейса

Вы можете легко изменить зону интерфейса, используя флаг --zone в сочетании с флагом --change-interface. Следующая команда назначит интерфейс eth0 рабочую зону:

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

При успешном изменении Вы увидите следующее сообщение:

The interface is under control of NetworkManager, setting zone to 'work'.
success

Выполните проверку:

sudo firewall-cmd --get-active-zones

Результат:

work
  interfaces: eth0

Изменение зоны по умолчанию

Чтобы изменить зону по умолчанию, используйте флаг --set-default-zone, за которым следует имя зоны, которую вы хотите использовать по умолчанию. Например, чтобы изменить зону по умолчанию на домашнюю, вы должны запустить следующую команду:

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

Проверьте изменения:

sudo firewall-cmd --get-default-zone

Вывод:

home

Открытие порта или службы

С помощью FirewallD вы можете разрешать трафик для определенных портов на основе предопределенных правил, называемых сервисами. Чтобы получить список всех доступных по умолчанию типов служб:

sudo firewall-cmd --get-services

Вы увидите длинный список доступных служб:

RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin [...]

Вы можете найти дополнительную информацию о каждой службе, открыв соответствующий .xml-файл в каталоге /usr/lib/firewalld/services. Например, HTTP-служба определяется следующим образом:

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

Результат:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW (HTTP)</short>
  <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
  <port protocol="tcp" port="80"/>
</service>

Чтобы разрешить входящий HTTP-трафик (80 порт) только для текущей конфигурации сеанса (временная конфигурация), выполните следующую команду:

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

Примечание: обратите внимание на то, какие зоны у вас используются.

Чтобы убедиться, что служба была успешно добавлена, используйте флаг --list-services:

sudo firewall-cmd --zone=work --list-services

В результате видно, что служба http отобразилась в списке:

ssh dhcpv6-client http

Если вы хотите оставить порт 80 открытым после перезагрузки, необходимо использовать флаг --permanent:

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

Для удаления сервиса используйте флаг --remove-service:

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

Для открытия конкретного порта используйте следующую команду, указав вместо XXX - номер порта, a YYY - протокол tcp или udp:

sudo firewall-cmd --zone=work --add-port=XXX/YYY

Например:

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

Чтобы убедиться, что порт был успешно добавлен, используйте флаг --list-ports:

sudo firewall-cmd --zone=work --list-ports

Синтаксис для удаления порта такой же, как при добавлении порта. Используйте --remove-port вместо флага --add-port:

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

Создание новой службы FirewallD

Сервисы по умолчанию хранятся в каталоге /usr/lib/firewalld/services. Самый простой способ создать новую услугу - скопировать существующий файл службы в каталог /etc/firewalld/services, который является местоположением для созданных пользователем служб и заменить в нем параметры.

Например, чтобы создать определение тестовой службы, мы можем использовать файл службы HTTP:

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

С помощью текстового редактора откройте скопированный файл:

vi /etc/firewalld/services/test.xml

Измените краткое имя и описание для службы в тегах и . Укажите порты и протоколы, которые необходимо открыть:

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Test</short>
<description>Some useful description.</description>
<port protocol="tcp" port="1234"/>
<port protocol="udp" port="4321"/>
</service>

Сохраните файл и перезагрузите службу FirewallD:

sudo firewall-cmd --reload

Теперь вы можете использовать созданную службу в своих зонах так же, как и любую другую.

 


Средняя оценка: 5,0, всего оценок: 1