Введение
Брандмауэр — это метод мониторинга и фильтрации входящего и исходящего сетевого трафика. Он работает, определяя набор правил безопасности, которые определяют, разрешать или блокировать определенный трафик. Правильно настроенный брандмауэр является одним из наиболее важных аспектов общей безопасности системы.
CentOS 8 поставляется с демоном брандмауэра, который называется firewalld. Это комплексное решение с интерфейсом D-Bus, которое позволяет динамически управлять брандмауэром системы.
В этом руководстве мы поговорим о том, как настроить и управлять брандмауэром в CentOS 8. Мы также объясним основные концепции FirewallD.
Если вы намерены настроить и управлять брандмауэром на удаленном сервере, продолжайте чтение, в противном случае, если вы хотите настроить и управлять брандмауэром на локальном компьютере, пропустите первый абзац «Подключение к серверу» и прочитайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Предпосылки
Чтобы настроить службу брандмауэра, вы должны войти в систему как пользователь root или пользователь с привилегиями sudo и установить брандмауэр в CentOS 8.
Основные понятия брандмауэра
firewalld использует концепции зон и служб. В зависимости от зон и служб, которые вы настроите, вы можете контролировать, какой трафик разрешен или заблокирован в систему и из нее.
Firewalld можно настроить и управлять с помощью утилиты командной строки firewall-cmd
.
В CentOS 8 iptables заменен на nftables в качестве серверной части брандмауэра по умолчанию для демона firewalld.
Зоны брандмауэра
Зоны — это предопределенные наборы правил, которые определяют уровень надежности сетей, к которым подключен компьютер. Сетевые интерфейсы и источники могут быть назначены зоне.
Ниже приведены зоны, предоставляемые FirewallD, отсортированные по уровню доверия зоны от недоверенных до доверенных:
- drop: все входящие соединения сбрасываются без какого-либо уведомления. Разрешены только исходящие соединения.
- block: все входящие соединения отклоняются сообщением
icmp-host-prohibited
дляIPv4
иicmp6-adm-prohibited
для IPv6n. Разрешены только исходящие соединения. - public: для использования в ненадежных общественных местах. Вы не доверяете другим компьютерам в сети, но можете разрешить выбранные входящие подключения.
- Внешний: для использования во внешних сетях с включенной маскировкой NAT, когда система действует как шлюз или маршрутизатор. Разрешены только выбранные входящие соединения.
- internal: для использования во внутренних сетях, когда система действует как шлюз или маршрутизатор. Другие системы в сети, как правило, надежны. Разрешены только выбранные входящие соединения.
- dmz: используется для компьютеров, расположенных в демилитаризованной зоне, которые имеют ограниченный доступ к остальной части сети. Разрешены только выбранные входящие подключения.
- работа: используется для рабочих машин. Другие компьютеры в сети, как правило, надежны. Разрешены только выбранные входящие соединения.
- дом: используется для бытовых машин. Другие компьютеры в сети, как правило, надежны. Разрешены только выбранные входящие соединения.
- trust: принимаются все сетевые подключения. Доверяйте всем компьютерам в сети.
Службы брандмауэра
Службы брандмауэра — это предопределенные правила, которые применяются в зоне и определяют параметры, необходимые для разрешения входящего трафика для конкретной службы. Сервисы позволяют легко выполнять несколько задач за один шаг.
Например, служба может содержать определения открытия портов, переадресации трафика и т. д.
Firewalld Runtime и постоянные настройки
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
.
Зоны брандмауэра
Если не изменить, зона по умолчанию устанавливается как 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 --permanent --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 вы можете разрешить трафик для определенных портов и /или источников на основе предопределенных правил, называемых службами.
Чтобы получить список всех доступных предопределенных служб, введите:
sudo firewall-cmd --get-services
Дополнительную информацию о каждой службе можно найти, открыв соответствующий XML-файл в каталоге /usr/lib/firewalld/services
. Например, служба HTTP определяется следующим образом:
sudo vi /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
.
Чтобы убедиться, что служба была успешно добавлена, используйте параметр --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
из постоянной конфигурации общедоступной зоны.
Создание новой службы брандмауэра D.
Как мы уже упоминали, службы по умолчанию хранятся в каталоге /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
, который определяет номер порта и протокол, который вы хотите открыть.
В следующем примере мы открываем порты UDP 1900
и TCP 32400
.
sudo vi /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
и 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.
Обязательно разрешите все входящие подключения, необходимые для правильной работы системы, и ограничьте все ненужные подключения.