Введение

firewalld — программное обеспечение для управления брандмауэрами, поддерживаемое многими дистрибутивами Linux. Выступает в качестве клиентского интерфейса для встроенных в ядро Linux систем фильтрации пакетов nftables и iptables.

В этом обучающем руководстве мы покажем, как настраивать брандмауэр firewalld для сервера CentOS 8 и расскажем об основах управления брандмауэром с помощью административного инструмента firewall-cmd.

Предварительные требования

firewalld illustration for: Предварительные требования

Для прохождения этого обучающего руководства нам потребуется сервер под управлением CentOS 8. Мы будем считать, что вы выполнили вход на этот сервер в качестве пользователя non-root user с привилегиями sudo. Чтобы выполнить настройку сервера, воспользуйтесь нашим руководством по начальной настройке сервера CentOS 8.

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

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

Зоны

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

Такая гибкость позволяет легко изменять правила в зависимости от среды, особенно в случае с компьютерами, которые часто перемещаются между сетями (например, с ноутбуками). Вы можете использовать более строгие правила, например, запретить большую часть трафика в публичных сетях WiFi и ввести менее строгие ограничения для домашней сети. Для сервера эти зоны не так важны, поскольку его сетевая среда редко изменяется, если это вообще происходит.

Вне зависимости от того, насколько динамична ваша сетевая среда, вам будет полезно познакомиться с общей идеей, лежащей в основе заданных зон firewalld. Заданные зоны в firewalld упорядочены от наименее доверенных к наиболее доверенным:

  • drop: самый низкий уровень доверия. Все входящие соединения отбрасываются без ответа и разрешаются только исходящие соединения.
  • block: аналогично вышеописанному, но запросы входящих соединений не просто отбрасываются, а отклоняются с сообщением icmp-host-prohibited или icmp6-adm-prohibited.
  • public: публичные сети, к которым нет доверия. Вы не доверяете другим компьютерам, но можете разрешать отдельные входящие соединения на разовой основе.
  • external: внешние сети, если вы используете брандмауэр в качестве шлюза. Эта зона настроена для маскировки NAT, чтобы ваша внутренняя сеть оставалась частной, но доступной.
  • internal: другая сторона внешней зоны, используемая для внутренней части шлюза. Компьютеры в основном достойны доверия, доступны некоторые дополнительные службы.
  • dmz: используется для компьютеров в ДМЗ (изолированные компьютеры, у которых нет доступа к остальной части вашей сети). Разрешены только некоторые входящие соединения.
  • work: используется для рабочих компьютеров. Большинство компьютеров в сети являются доверенными. Могут быть разрешены некоторые дополнительные службы.
  • home: домашняя среда. Обычно подразумевается, что вы доверяете большей части других компьютеров и что будут приниматься запросы еще нескольких служб.
  • trusted: все компьютеры в сети являются доверенными. Наиболее открытый из доступных вариантов, который следует использовать с осторожностью.

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

Постоянство правил

В firewalld правила можно применять к текущему набору правил _времени исполнения_ или использовать как _постоянные_. При добавлении или изменении правила по умолчанию изменяется только работающий брандмауэр. После перезагрузки системы или службы firewalld сохраняются только постоянные правила.

Большинство операций firewall-cmd могут принимать флаг --permanent, указывающий на необходимость применения изменений к постоянной конфигурации. Кроме того, текущую конфигурацию брандмауэра можно сохранить в постоянной конфигурации с помощью команды firewall-cmd --runtime-to-permanent.

Такое разделение конфигурации времени исполнения и постоянной конфигурации позволяет безопасно тестировать правила на активном брандмауэре и просто перезагружать его в случае возникновения проблем.

Установка и активация firewalld

Брандмауэр firewalld установлен по умолчанию в некоторых дистрибутивах Linux, в том числе во многих образах CentOS 8. Однако вам может потребоваться установить firewalld самостоятельно:

				
					
sudo dnf install firewalld

				
			

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

				
					
sudo systemctl enable firewalld

sudo systemctl start firewalld

				
			

После перезагрузки сервера брандмауэр запускается, сетевые интерфейсы помещаются в настроенные зоны (или возвращаются в заданные по умолчанию зоны), и все правила зон применяются к соответствующим интерфейсам.

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

				
					
sudo firewall-cmd --state

				
			
				
					
[secondary_label Output]

running

				
			

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

Знакомство с текущими правилами брандмауэра

Прежде чем мы начнем вносить изменения, мы познакомимся со средой и правилами firewalld, используемыми по умолчанию.

Изучение параметров по умолчанию

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

				
					
firewall-cmd --get-default-zone

				
			
				
					
[secondary_label Output]

public

				
			

Поскольку мы не отправили firewalld никаких команд для отклонения от основной зоны и никакие наши интерфейсы не настроены на привязку к другой зоне, эта зона будет единственной активной зоной (зоной, контролирующей трафик для наших интерфейсов). Это можно проверить с помощью следующей команды:

				
					
firewall-cmd --get-active-zones

				
			
				
					
[secondary_label Output]

public

 interfaces: eth0 eth1

				
			

Здесь мы видим, что на нашем сервере брандмауэр контролирует два сетевых интерфейса (eth0 и eth1). Управление обоими интерфейсами осуществляется в соответствии с правилами, заданными для зоны public.

Как же узнать, какие правила заданы для зоны public? Конфигурацию зоны по умолчанию можно распечатать с помощью следующей команды:

				
					
sudo firewall-cmd --list-all

				
			
				
					
[secondary_label Output]

public (active)

 target: default

 icmp-block-inversion: no

 interfaces: eth0 eth1

 sources:

 services: <^>cockpit<^> <^>dhcpv6-client<^> <^>ssh<^>

 ports:

 protocols:

 masquerade: no

 forward-ports:

 source-ports:

 icmp-blocks:

 rich rules:

				
			

Из выводимых результатов мы видим, что эта зона активна и используется по умолчанию и что с ней связаны интерфейсы eth0 и eth1 (все это мы уже знали из предыдущих запросов). Также мы видим, что эта зона разрешает трафик клиента DHCP (для назначения IP-адресов), SSH (для удаленного администрирования) и Cockpit (веб-консоль).

Изучение альтернативных зон

Мы получили представление о конфигурации зоны по умолчанию и активной зоны. Также мы можем получить информацию о других зонах.

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

				
					
firewall-cmd --get-zones

				
			
				
					
[secondary_label Output]

block dmz drop external home internal public trusted work

				
			

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

				
					
sudo firewall-cmd --zone=<^>home<^> --list-all

				
			
				
					
[secondary_label Output]

home

 target: default

 icmp-block-inversion: no

 interfaces:

 sources:

 services: cockpit dhcpv6-client mdns samba-client ssh

 ports:

 protocols:

 masquerade: no

 forward-ports:

 source-ports:

 icmp-blocks:

 rich rules:

				
			

Вы можете вывести все определения зон, используя опцию --list-all-zones. Возможно вы захотите вывести результаты на пейджер для удобства просмотра:

				
					
sudo firewall-cmd --list-all-zones | less

				
			

Далее мы узнаем о назначении зон сетевым интерфейсам.

Выбор зон для интерфейсов

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

Изменение зоны интерфейса

Для перемещения интерфейса между зонами во время сеанса следует использовать параметр --zone= в сочетании с параметром --change-interface=. Как и для всех остальных команд, изменяющих брандмауэр, вам потребуется использовать sudo.

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

				
					
sudo firewall-cmd --zone=home --change-interface=eth0

				
			
				
					
[secondary_label Output]

success

				
			

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

Чтобы убедиться в успешности операции мы можем снова запросить активные зоны:

				
					
firewall-cmd --get-active-zones

				
			
				
					
[secondary_label Output]

home

 interfaces: eth0

public

 interfaces: eth1

				
			

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

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

Вы можете изменить зону по умолчанию с помощью параметра --set-default-zone=. При этом немедленно изменятся все интерфейсы, использующие зону по умолчанию:

				
					
sudo firewall-cmd --set-default-zone=<^>home<^>

				
			
				
					
[secondary_label Output]

success

				
			

Установка правил для приложений

Рассмотрим базовый способ определения исключений брандмауэра для служб, которые вы хотите сделать доступными.

Добавление службы к зонам

Самый простой метод заключается в том, чтобы добавлять необходимые службы или порты в используемые зоны. Список доступных определений служб можно получить с помощью опции --get-services:

				
					
firewall-cmd --get-services

				
			
				
					
[secondary_label Output]

RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

				
			

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

				
					
[label /usr/lib/firewalld/services/ssh.xml]

<?xml version="1.0" encoding="utf-8"?>

<service>

 <short>SSH</short>

 <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>

 <port protocol="tcp" port="22"/>

</service>

				
			

Вы можете активировать службу для зоны с помощью параметра --add-service=. Данная операция будет нацелена на зону по умолчанию или на другую зону, заданную параметром --zone=. По умолчанию изменения применяются только к текущему сеансу брандмауэра. Для изменения постоянной конфигурации брандмауэра следует использовать флаг --permanent.

Например, если у нас запущен веб-сервер, обслуживающий стандартный трафик HTTP, мы можем временно разрешить этот трафик для интерфейсов в зоне public с помощью следующей команды:

				
					
sudo firewall-cmd --zone=public --add-service=http

				
			

Вы можете опустить флаг --zone=, если хотите внести изменения в зону по умолчанию. Для проверки успешного выполнения операции можно использовать команду --list-all или --list-services:

				
					
sudo firewall-cmd --zone=public --list-services

				
			
				
					
[secondary_label Output]

cockpit dhcpv6-client <^>http<^> ssh

				
			

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

				
					
sudo firewall-cmd --zone=public --add-service=http <^>--permanent<^>

				
			
				
					
[secondary_label Output]

success

				
			

Также можно использовать флаг --runtime-to-permanent для сохранения текущей конфигурации брандмауэра в постоянной конфигурации:

				
					
sudo firewall-cmd --runtime-to-permanent

				
			

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

Если вы хотите убедиться. что изменения успешно сохранены в постоянной конфигурации, добавьте флаг --permanent к команде --list-services. Вам потребуются привилегии sudo для выполнения любых операций с флагом --permanent:

				
					
sudo firewall-cmd --zone=public --list-services <^>--permanent<^>

				
			
				
					
[secondary_label Output]

cockpit dhcpv6-client <^>http<^> ssh

				
			

Теперь в зоне public разрешен веб-трафик HTTP на порту 80. Если ваш веб-сервер настроен для использования SSL/TLS, вы также можете добавить службу https. Мы можем добавить ее в текущий сеанс и постоянный набор правил с помощью следующей команды:

				
					
sudo firewall-cmd --zone=public --add-service=https

sudo firewall-cmd --zone=public --add-service=https --permanent

				
			

Что делать, если подходящая служба отсутствует?

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

В этой ситуации у вас будет два варианта.

Открытие порта для зон

Проще всего добавить поддержку определенного приложения можно посредством открытия используемых им портов в соответствующих зонах. Для этого нужно указать порт или диапазон портов, а также протокол (TCP или UDP), связанный с портами.

Например, если наше приложение работает на порту 5000 и использует TCP, мы можем временно добавить его в зону public с помощью параметра --add-port=. Протоколы могут назначаться как tcp или udp:

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

				
			
				
					
[secondary_label Output]

success

				
			

Мы можем проверить успешность назначения с помощью операции --list-ports:

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

				
			
				
					
[secondary_label Output]

5000/tcp

				
			

Также можно указать последовательный диапазон портов, разделив начальный и конечный порты диапазона дефисом. Например, если наше приложение используйте порты UDP с 4990 по 4999, мы можем открыть их на public с помощью следующей команды:

				
					
sudo firewall-cmd --zone=public --add-port=4990-4999/udp

				
			

После тестирования мы вероятно захотим добавить это правило в брандмауэр на постоянной основе. Используйте для этого sudo firewall-cmd --runtime-to-permanent или запустите команды снова с флагом --permanent:

				
					
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp

sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp

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

				
			
				
					
[secondary_label Output]

success

success

5000/tcp 4990-4999/udp

				
			

Определение службы

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

Службы представляют собой наборы портов с именем и описанием. Использование служб упрощает администрирование портов, но требует некоторой предварительной подготовки. Проще всего начать с копирования существующего скрипта (из директории /usr/lib/firewalld/services) в директорию /etc/firewalld/services, где брандмауэр ищет нестандартные определения.

Например, мы можем скопировать определение службы SSH и использовать его для определения службы example. Имя файла без суффикса .xml определяет имя службы в списке служб брандмауэра:

				
					
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/<^>example<^>.xml

				
			

Теперь можно изменить определение в скопированном вами файле. Вначале откройте его в предпочитаемом текстовом редакторе. Здесь мы используем vi:

				
					
sudo vi /etc/firewalld/services/<^>example<^>.xml

				
			

Вначале файл будет содержать только что скопированное вами определение SSH:

				
					
[label /etc/firewalld/services/example.xml]

<?xml version="1.0" encoding="utf-8"?>

<service>

 <short>SSH</short>

 <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>

 <port protocol="tcp" port="22"/>

</service>

				
			

Основная часть этого определения представляет собой метаданные. Вы можете изменить короткое имя службы, заключенное в тегах <short>. Это имя службы, предназначенное для чтения людьми. Также следует добавить описание на случай, если вам потребуется дополнительная информация при проведении аудита службы. Единственное изменение конфигурации, которое вам потребуется, и которое повлияет на функциональность службы, будет заключаться в определении портов, где вы идентифицируете номер порта и протокол, который хотите открыть. Можно указать несколько тегов <port/>.

Представьте, что для нашей службы example нам необходимо открыть порт 7777 для TCP и 8888 для UDP. Мы можем изменить существующее определение примерно так:

				
					
[label /etc/firewalld/services/example.xml]

&lt;?xml version="1.0" encoding="utf-8"?&gt;

&lt;service&gt;

 &lt;short&gt;&lt;^&gt;Example Service&lt;^&gt;&lt;/short&gt;

 &lt;description&gt;&lt;^&gt;This is just an example service. It probably shouldn't be used on a real system.&lt;^&gt;&lt;/description&gt;

 &lt;port protocol="&lt;^&gt;tcp&lt;^&gt;" port="&lt;^&gt;7777&lt;^&gt;"/&gt;

 &lt;port protocol="&lt;^&gt;udp&lt;^&gt;" port="&lt;^&gt;8888&lt;^&gt;"/&gt;

&lt;/service&gt;

				
			

Сохраните и закройте файл.

Перезагрузите брандмауэр, чтобы получить доступ к новой службе:

				
					
sudo firewall-cmd --reload

				
			

Теперь вы увидите ее в списке доступных служб:

				
					
firewall-cmd --get-services

				
			
				
					
[secondary_label Output]

RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server &lt;^&gt;example&lt;^&gt; finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

				
			

Теперь вы можете использовать эту службу в зонах, как и обычно.

Создание собственных зон

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

Например, вы можете захотеть создать для своего веб-сервера зону с именем publicweb. При этом вы можете также захотеть использовать другую зону для службы DNS в вашей частной сети. Эту зону вы можете назвать privateDNS.

При добавлении зоны вы _должны_ добавить ее в постоянную конфигурацию брандмауэра. Затем вы можете произвести перезагрузку для активации конфигурации для текущего сеанса. Например, мы можем создать две описанные выше зоны, введя следующие команды:

				
					
sudo firewall-cmd --permanent --new-zone=publicweb

sudo firewall-cmd --permanent --new-zone=privateDNS

				
			

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

				
					
sudo firewall-cmd --permanent --get-zones

				
			
				
					
[secondary_label Output]

block dmz drop external home internal &lt;^&gt;privateDNS&lt;^&gt; public &lt;^&gt;publicweb&lt;^&gt; trusted work

				
			

Как указывалось ранее, пока они будут недоступны в работающем брандмауэре:

				
					
firewall-cmd --get-zones

				
			
				
					
[secondary_label Output]

block dmz drop external home internal public trusted work

				
			

Перезагрузите брандмауэр, чтобы добавить эти зоны в активную конфигурацию:

				
					
sudo firewall-cmd --reload

firewall-cmd --get-zones

				
			
				
					
[secondary_label Output]

block dmz drop external home internal &lt;^&gt;privateDNS&lt;^&gt; public &lt;^&gt;publicweb&lt;^&gt; trusted work

				
			

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

				
					
sudo firewall-cmd --zone=publicweb --add-service=ssh

sudo firewall-cmd --zone=publicweb --add-service=http

sudo firewall-cmd --zone=publicweb --add-service=https

sudo firewall-cmd --zone=publicweb --list-all

				
			
				
					
[secondary_label Output]

publicweb

 target: default

 icmp-block-inversion: no

 interfaces:

 sources:

 services: http https ssh

 ports:

 protocols:

 masquerade: no

 forward-ports:

 source-ports:

 icmp-blocks:

 rich rules:

				
			

Для зоны privateDNS можно добавить службу DNS:

				
					
sudo firewall-cmd --zone=privateDNS --add-service=dns

sudo firewall-cmd --zone=privateDNS --list-all

				
			
				
					
[secondary_label Output]

privateDNS

 target: default

 icmp-block-inversion: no

 interfaces:

 sources:

 services: dns

 ports:

 protocols:

 masquerade: no

 forward-ports:

 source-ports:

 icmp-blocks:

 rich rules:

				
			

Затем мы можем изменить интерфейсы на новые зоны, чтобы протестировать их:

				
					
sudo firewall-cmd --zone=publicweb --change-interface=eth0

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

				
			

Сейчас вы можете протестировать свою конфигурацию. Если эти значения будут работать, эти правила можно будет добавить в постоянную конфигурацию. Для этого _можно_ снова запустить все команды с флагом --permanent, но в этом случае мы используем флаг --runtime-to-permanent для полного сохранения активной конфигурации как постоянной:

				
					
sudo firewall-cmd --runtime-to-permanent

				
			

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

				
					
sudo firewall-cmd --reload

				
			

Проверьте правильность назначения зон:

				
					
firewall-cmd --get-active-zones

				
			
				
					
[secondary_label Output]

privateDNS

 interfaces: eth1

publicweb

 interfaces: eth0

				
			

Убедитесь, что в обеих зонах доступны соответствующие службы:

				
					
sudo firewall-cmd --zone=publicweb --list-services

				
			
				
					
[secondary_label Output]

http https ssh

				
			
				
					
sudo firewall-cmd --zone=privateDNS --list-services

				
			
				
					
[secondary_label Output]

dns

				
			

Вы успешно настроили собственные зоны! Если вы захотите задать одну из этих зон по умолчанию для других интерфейсов, используйте для настройки параметр --set-default-zone=:

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

				
			

Заключение

Теперь вы должны неплохо понимать принципы администрирования службы firewalld в системе CentOS на каждодневной основе.

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

Дополнительную информацию о firewalld можно найти в официальной документации по firewalld.