
Межсетевой экран — это метод мониторинга и фильтрации входящего и исходящего сетевого трафика. Он работает, определяя набор правил безопасности, которые определяют, разрешать или блокировать определённый трафик. Правильно настроенный межсетевой экран — один из важнейших аспектов общей безопасности системы.
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дляIPv4иicmp6-adm-prohibitedдля IPv6n. Разрешены только исходящие соединения. - public : для использования в ненадёжных общественных местах. Вы не доверяете другим компьютерам в сети, но можете разрешить определённые входящие соединения.
- Внешний : для использования во внешних сетях с включённым маскированием NAT, когда ваша система выступает в качестве шлюза или маршрутизатора. Разрешены только выбранные входящие соединения.
- Внутренний : для использования во внутренних сетях, когда ваша система выполняет функции шлюза или маршрутизатора. Другие системы в сети, как правило, считаются доверенными. Разрешены только выбранные входящие соединения.
- dmz : используется для компьютеров, расположенных в демилитаризованной зоне и имеющих ограниченный доступ к остальной части сети. Разрешены только определённые входящие соединения.
- work : используется для рабочих машин. Остальные компьютеры в сети, как правило, считаются доверенными. Разрешены только выбранные входящие соединения.
- home : используется для домашних компьютеров. Остальные компьютеры в сети, как правило, считаются доверенными. Разрешены только выбранные входящие соединения.
- Доверенный : все сетевые подключения разрешены. Доверять всем компьютерам в сети.
Службы брандмауэра
Службы Firewalld — это предопределенные правила, применяемые в зоне и определяющие необходимые настройки для разрешения входящего трафика для конкретного сервиса. Эти службы позволяют легко выполнять несколько задач за один шаг.
Например, сервис может содержать определения об открытии портов, пересылке трафика и т. д.
Среда выполнения Firewalld и постоянные настройки
Firewalld использует два отдельных набора конфигураций: конфигурацию времени выполнения и постоянную конфигурацию.
Конфигурация времени выполнения — это фактическая текущая конфигурация, которая не сохраняется при перезагрузке. При запуске демона firewalld он загружает постоянную конфигурацию, которая становится конфигурацией времени выполнения.
По умолчанию при внесении изменений в конфигурацию Firewalld с помощью утилиты firewall-cmd изменения применяются к конфигурации среды выполнения. Чтобы сделать изменения постоянными, добавьте к команде опцию --permanent .
Чтобы применить изменения в обоих наборах конфигурации, вы можете использовать один из следующих двух методов:
-
Измените конфигурацию среды выполнения и сделайте ее постоянной:
sudo firewall-cmdsudo firewall-cmd --runtime-to-permanent -
Измените постоянную конфигурацию и перезагрузите демон firewalld:
sudo firewall-cmd --permanentsudo 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 :
-
Создайте зону:
sudo firewall-cmd --new-zone=memcached --permanent -
Добавьте правила в зону:
sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanentsudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanentsudo 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 определяется следующим образом:
/usr/lib/firewalld/services/http.xml
WWW (HTTP) 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. protocol= "tcp" port= "80" />
Чтобы разрешить входящий 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 и измените краткое имя и описание службы в тегах и . Самый важный тег, который нужно изменить, — это тег port , который определяет номер порта и протокол, который вы хотите открыть.
В следующем примере мы открываем порты 1900 UDP и 32400 TCP.
/etc/firewalld/services/plexmediaserver.xml
version= "1.0" > plexmediaserver 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. protocol= "udp" port= "1900" /> protocol= "tcp" port= "32400" />
Сохраните файл и перезагрузите службу 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.
Обязательно разрешите все входящие соединения, необходимые для правильной работы вашей системы, ограничив при этом все ненужные соединения.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.
firewalld брандмауэр centos безопасность
Связанные руководства
- Как настроить брандмауэр с помощью FirewallD в CentOS 7
- Как отключить SELinux в CentOS 8
- Как составить список и удалить правила брандмауэра UFW
- Настройка автоматического обновления с помощью yum-cron на CentOS 7
- Как установить и настроить Fail2ban на CentOS 8
- Как настроить WireGuard VPN на CentOS 8
- Как настроить брандмауэр с UFW в Ubuntu 20.04