Как настроить брандмауэр в CentOS 8 и управлять им

Брандмауэр — это метод мониторинга и фильтрации входящего и исходящего сетевого трафика. Он работает, определяя набор правил безопасности, которые определяют, разрешить или заблокировать определенный трафик. Правильно настроенный брандмауэр — один из наиболее важных аспектов общей безопасности системы.

CentOS 8 поставляется с демоном межсетевого экрана с именем firewalld . Это законченное решение с интерфейсом D-Bus, которое позволяет динамически управлять брандмауэром системы.

В этом руководстве мы поговорим о том, как настроить брандмауэр в CentOS 8 и управлять им. Мы также объясним основные концепции FirewallD.

Подготовка

Чтобы настроить службу брандмауэра, вы должны войти в систему как пользователь root или пользователь с привилегиями sudo .

Основные концепции Firewalld

firewalld использует концепции зон и сервисов. В зависимости от зон и служб, которые вы настраиваете, вы можете контролировать, какой трафик разрешен или заблокирован в систему и из нее.

Firewalld можно настроить и управлять им с помощью утилиты командной строки firewall-cmd .

В CentOS 8 iptables заменен на nftables в качестве серверной части межсетевого экрана по умолчанию для демона firewalld.

Зоны Firewalld

Зоны — это предопределенные наборы правил, которые определяют уровень доверия сетей, к которым подключен ваш компьютер. Вы можете назначить зоне сетевые интерфейсы и источники.

Ниже приведены зоны, предоставляемые FirewallD, упорядоченные в соответствии с уровнем доверия зоны от ненадежных до доверенных:

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

Услуги межсетевого экрана

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

Например, служба может содержать определения об открытии портов, пересылке трафика и т. Д.

Среда выполнения Firewalld и постоянные настройки

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

Конфигурация среды выполнения — это фактическая рабочая конфигурация, которая не сохраняется при перезагрузке. Когда демон firewalld запускается, он загружает постоянную конфигурацию, которая становится конфигурацией времени выполнения.

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

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

  1. Измените конфигурацию среды выполнения и сделайте ее постоянной:

     sudo firewall-cmd <options> sudo firewall-cmd --runtime-to-permanent
  2. Измените постоянную конфигурацию и перезагрузите демон firewalld:

     sudo firewall-cmd --permanent <options> sudo firewall-cmd --reload

Включение FirewallD

В CentOS 8 firewalld установлен и включен по умолчанию. Если по какой-то причине он не установлен в вашей системе, вы можете установить и запустить демон, набрав:

sudo dnf install firewalldsudo systemctl enable firewalld --now

Вы можете проверить статус службы межсетевого экрана с помощью:

sudo firewall-cmd --state

Если брандмауэр включен, то команда должна печатать running . В противном случае вы увидите, что not running .

Зоны Firewalld

Если вы не изменили его, зона по умолчанию будет public , и все сетевые интерфейсы назначены этой зоне.

Зона по умолчанию — это зона, которая используется для всего, что явно не назначено другой зоне.

Вы можете увидеть зону по умолчанию, набрав:

sudo firewall-cmd --get-default-zone
public

Чтобы получить список всех доступных зон, введите:

sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Чтобы увидеть активные зоны и назначенные им сетевые интерфейсы:

sudo firewall-cmd --get-active-zones

Выходные данные ниже показывают, что интерфейсы eth0 и eth1 назначены public зоне:

public
  interfaces: eth0 eth1

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

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

Из выходных данных выше мы видим, что публичная зона активна и использует цель по умолчанию — REJECT . Выходные данные также показывают, что зона используется интерфейсами eth0 и eth1 и разрешает DHCP-клиент и трафик SSH.

Если вы хотите проверить конфигурации всех доступных типов зон:

sudo firewall-cmd --list-all-zones

Команда выводит на печать огромный список с настройками всех доступных зон.

Изменение цели зоны

Цель определяет поведение зоны по умолчанию для входящего трафика, который не указан. Для него можно установить один из следующих вариантов: по default , ACCEPT , REJECT и DROP .

Чтобы установить цель зоны, укажите зону с параметром --zone и цель с параметром --set-target .

Например, чтобы изменить цель public зоны на DROP вы должны запустить:

sudo firewall-cmd --zone=public --set-target=DROP

Назначение интерфейса другой зоне

Вы можете создавать определенные наборы правил для разных зон и назначать им разные интерфейсы. Это особенно полезно, когда на вашем компьютере несколько интерфейсов.

Чтобы назначить интерфейс другой зоне, укажите зону с параметром --zone и интерфейс с параметром --change-interface .

Например, следующая команда назначает интерфейс eth1 work зоне:

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

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

sudo firewall-cmd --get-active-zones
work
  interfaces: eth1
public
  interfaces: eth0

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

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

Например, чтобы изменить зону по умолчанию на home вы должны выполнить следующую команду:

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

Проверьте изменения с помощью:

sudo firewall-cmd --get-default-zone
home

Создание новых зон

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

В следующем примере мы создадим новую зону с именем memcached , откроем порт 11211 и разрешим доступ только с IP-адреса 192.168.100.30 :

  1. Создайте зону:

     sudo firewall-cmd --new-zone=memcached --permanent
  2. Добавьте правила в зону:

     sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
  3. Перезагрузите демон firewalld, чтобы изменения вступили в силу:

     sudo firewall-cmd --reload

Услуги Firewalld

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

Чтобы получить список всех доступных по умолчанию услуг, введите:

sudo firewall-cmd --get-services

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

/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=public --add-service=http
Если вы --zone зону по умолчанию, вы можете не --zone параметр --zone .

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

sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http

Чтобы порт 80 --permanent открытым после перезагрузки, выполните ту же команду еще раз с параметром --permanent или выполните:

sudo firewall-cmd --runtime-to-permanent

Используйте --list-services вместе с параметром --permanent чтобы проверить свои изменения:

sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http

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

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

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

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

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

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

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

Откройте только что созданный файл plexmediaserver.xml и измените краткое имя и описание службы в тегах <short> и <description> . Самый важный тег, который вам нужно изменить, — это тег port , который определяет номер порта и протокол, который вы хотите открыть.

В следующем примере мы открываем порты 1900 UDP и 32400 TCP.

/etc/firewalld/services/plexmediaserver.xml
<?xml version="1.0" encoding="utf-8"?>
<service version="1.0">
<short>plexmediaserver</short>
<description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description>
<port protocol="udp" port="1900"/>
<port protocol="tcp" port="32400"/>
</service>

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

sudo firewall-cmd --reload

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

Открытие портов и исходных IP-адресов

Firewalld также позволяет быстро включить весь трафик с доверенного IP-адреса или на определенный порт без создания определения службы.

Открытие исходного IP

Чтобы разрешить весь входящий трафик с определенного IP-адреса (или диапазона), укажите зону с --zone параметра --zone и IP-адрес источника с помощью параметра --add-source .

Например, чтобы разрешить весь входящий трафик с 192.168.1.10 в public зоне, запустите:

sudo firewall-cmd --zone=public --add-source=192.168.1.10

Сделайте новое правило постоянным:

sudo firewall-cmd --runtime-to-permanent

Проверьте изменения, используя следующую команду:

sudo firewall-cmd --zone=public --list-sources
192.168.1.10

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

sudo firewall-cmd --zone=public --remove-source=192.168.1.10

Открытие исходного порта

Чтобы разрешить весь входящий трафик на данный порт, укажите зону с --zone параметра --zone а порт и протокол — с помощью параметра --add-port .

Например, чтобы открыть порт 8080 в публичной зоне для текущего сеанса, который вы запустили, выполните:

sudo firewall-cmd --zone=public --add-port=8080/tcp

Протокол может быть tcp , udp , sctp или dccp .

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

sudo firewall-cmd --zone=public --list-ports
8080

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

sudo firewall-cmd --runtime-to-permanent

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

sudo firewall-cmd --zone=public --remove-port=8080/tcp

Порты пересылки

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

sudo firewall-cmd --zone=external --add-masquerade

Перенаправлять трафик с одного порта на другой по IP-адресу

В следующем примере мы перенаправляем трафик с порта 80 на порт 8080 на том же сервере:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080

Перенаправить трафик на другой IP-адрес

В следующем примере мы перенаправляем трафик с порта 80 на порт 80 на сервере с IP 10.10.10.2 :

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2

Перенаправить трафик на другой сервер через другой порт

В следующем примере мы перенаправляем трафик с порта 80 на порт 8080 на сервере с IP 10.10.10.2 :

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

Чтобы сделать правило пересылки постоянным, используйте:

sudo firewall-cmd --runtime-to-permanent

Выводы

Вы узнали, как настраивать и управлять службой firewalld в вашей системе CentOS 8.

Обязательно разрешите все входящие соединения, которые необходимы для правильного функционирования вашей системы, ограничив при этом все ненужные соединения.

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Оставьте комментарий