Как настроить брандмауэр в CentOS 8 и управлять им
Как настроить брандмауэр в CentOS 8 и управлять им
How to Configure and Manage the Firewall on CentOS 8
В этом руководстве мы поговорим о том, как настроить и управлять брандмауэром в CentOS 8. Мы также объясним основные концепции FirewallD.

Брандмауэр - это метод мониторинга и фильтрации входящего и исходящего сетевого трафика. Он работает путем определения набора правил безопасности, которые определяют, разрешить или заблокировать определенный трафик. Правильно настроенный брандмауэр - один из наиболее важных аспектов общей безопасности системы.
CentOS 8 поставляется с демоном межсетевого экрана с именем firewalld . Это законченное решение с интерфейсом D-Bus, которое позволяет динамически управлять брандмауэром системы.
Прежде чем продолжить
Чтобы настроить службу брандмауэра, вы должны войти в систему как пользователь root или пользователь с привилегиями sudo .
Основные концепции Firewalld
firewalld использует концепции зон и сервисов. В зависимости от зон и служб, которые вы настраиваете, вы можете контролировать, какой трафик разрешен или заблокирован в систему и из нее.
Firewalld можно настроить и управлять им с помощью firewall-cmd
утилиты командной строки. В CentOS 8 iptables заменен на nftables в качестве серверной части межсетевого экрана по умолчанию для демона firewalld.
Зоны Firewalld
Зоны - это предопределенные наборы правил, которые определяют уровень доверия сетей, к которым подключен ваш компьютер. Вы можете назначить зоне сетевые интерфейсы и источники.
Ниже приведены зоны, предоставляемые FirewallD, упорядоченные в соответствии с уровнем доверия зоны от ненадежных до доверенных:
- drop : все входящие соединения отбрасываются без какого-либо уведомления. Разрешены только исходящие соединения.
- блок : все входящие соединения отклоняются с
icmp-host-prohibited
сообщением для IPv6nIPv4
иicmp6-adm-prohibited
для него. Разрешены только исходящие соединения. - public : для использования в ненадежных общественных местах. Вы не доверяете другим компьютерам в сети, но можете разрешить выбранные входящие соединения.
- external : для использования во внешних сетях с включенной маскировкой NAT, когда ваша система действует как шлюз или маршрутизатор. Разрешены только выбранные входящие соединения.
- internal : для использования во внутренних сетях, когда ваша система действует как шлюз или маршрутизатор. Другим системам в сети обычно доверяют. Разрешены только выбранные входящие соединения.
- dmz : используется для компьютеров, расположенных в вашей демилитаризованной зоне, которые имеют ограниченный доступ к остальной части вашей сети. Разрешены только выбранные входящие соединения.
- работа : Используется для рабочих машин. Другим компьютерам в сети обычно доверяют. Разрешены только выбранные входящие соединения.
- home : Используется для домашних машин. Другим компьютерам в сети обычно доверяют. Разрешены только выбранные входящие соединения.
- доверенные : все сетевые подключения принимаются. Доверяйте всем компьютерам в сети.
Услуги межсетевого экрана
Сервисы Firewalld - это предопределенные правила, которые применяются в зоне и определяют необходимые настройки, чтобы разрешить входящий трафик для конкретной службы. Сервисы позволяют легко выполнять несколько задач за один шаг.
Например, служба может содержать определения об открытии портов, пересылке трафика и т. Д.
Среда выполнения Firewalld и постоянные настройки
Firewalld использует два отдельных набора конфигураций: время выполнения и постоянную конфигурацию.
Конфигурация среды выполнения - это фактическая рабочая конфигурация, которая не сохраняется при перезагрузке. Когда демон firewalld запускается, он загружает постоянную конфигурацию, которая становится конфигурацией времени выполнения.
По умолчанию при внесении изменений в конфигурацию Firewalld с помощью firewall-cmd
утилиты изменения применяются к конфигурации среды выполнения. Чтобы сделать изменения постоянными, добавьте --permanent
к команде параметр.
Чтобы применить изменения в обоих наборах конфигурации, вы можете использовать один из следующих двух методов:
-
Измените конфигурацию среды выполнения и сделайте ее постоянной:
sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent
-
Измените постоянную конфигурацию и перезагрузите демон firewalld:
sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload
Включение FirewallD
В CentOS 8 firewalld установлен и включен по умолчанию. Если по какой-то причине он не установлен в вашей системе, вы можете установить и запустить демон, набрав:
sudo dnf install firewalld
sudo 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
и разрешим доступ только с 192.168.100.30
IP-адреса:
-
Создайте зону:
sudo firewall-cmd --new-zone=memcached --permanent
-
Добавьте правила в зону:
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
-
Перезагрузите демон firewalld, чтобы изменения вступили в силу:
sudo firewall-cmd --reload
Услуги Firewalld
С firewalld вы можете разрешить трафик для определенных портов и / или источников на основе предопределенных правил, называемых службами.
Чтобы получить список всех доступных по умолчанию услуг, введите:
sudo firewall-cmd --get-services
Вы можете найти дополнительную информацию о каждой службе, открыв соответствующий XML-файл в /usr/lib/firewalld/services
каталоге. Например, служба HTTP определяется следующим образом:
<?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
опцию.
Чтобы убедиться, что служба была добавлена успешно, используйте --list-services
опцию:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
Чтобы порт 80 оставался открытым после перезагрузки, выполните ту же команду еще раз с --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.
<?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
параметром и 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
параметром, а также порт и протокол с --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
флагом или выполнив:
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.
Обязательно разрешите все входящие соединения, которые необходимы для правильного функционирования вашей системы, ограничив при этом все ненужные соединения.