Брандмауэр — это метод мониторинга и фильтрации входящего и исходящего сетевого трафика. Он работает, определяя набор правил безопасности, которые определяют, разрешить или заблокировать определенный трафик. Правильно настроенный брандмауэр — один из наиболее важных аспектов общей безопасности системы.
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
.
Чтобы применить изменения в обоих наборах конфигурации, вы можете использовать один из следующих двух методов:
-
Измените конфигурацию среды выполнения и сделайте ее постоянной:
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
и разрешим доступ только с IP-адреса 192.168.100.30
:
-
Создайте зону:
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
зону по умолчанию, вы можете не --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.
<?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.
Обязательно разрешите все входящие соединения, которые необходимы для правильного функционирования вашей системы, ограничив при этом все ненужные соединения.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.