Изменение зоны интерфейса на постоянной основе
Если в настройках интерфейса не указана никакая другая зона, после перезапуска брандмауэра интерфейс будет снова привязан к зоне по умолчанию. В РЕД ОС такие конфигурации хранятся в каталоге /etc/sysconfig/network-scripts, в файлах формата ifcfg-interface.
Чтобы определить зону интерфейса, откройте конфигурационный файл этого интерфейса, например:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
В конец файла добавьте переменную ZONE= и в качестве значения укажите другую зону, например, home:
Содержимое файла:
. . . DNS1=2001:4860:4860::8844 DNS2=2001:4860:4860::8888 DNS3=8.8.8.8 ZONE=home
Сохраните и закройте файл.
Чтобы обновить настройки, перезапустите сетевой сервис и брандмауэр:
sudo systemctl restart network.service sudo systemctl restart firewalld.service
После перезапуска интерфейс eth0 будет привязан к зоне home.
firewall-cmd --get-active-zones home interfaces: eth0 public interfaces: eth1
Что такое firewalld
Программа представляет собой графическую оболочку для брандмауэра iptables и кроме интерфейса также отличается схемой взаимодействия:
- распределяет трафик не по зонам, а согласно правилам;
- содержит правила «белого» и «черного» списка, в соответствии с которыми работает на данной сетевой точке;
- может как ограничивать, так и блокировать трафик.
Облачные серверыIntel Xeon Gold 6254 3.
Основные концепции firewalld, зоны и правила
Перед тем как приступить к установке и настройке firewalld, мы познакомимся с понятием зон, которые используются для определения уровня доверия к различным соединениям. Для различных зон firewalld можно применить различные правила фильтрации, указывать активные опции брандмауэра в виде предварительно определенных служб, протоколов и портов, перенаправления портов и rich-rules.
Firewalld фильтрует входящий трафик по зонам в зависимости от примененных к зоне правил. Если IP-адрес отправителя запроса соответствует правилам какой-либо зоны, то пакет будет отправляться через эту зону. Если же адрес не соответствует ни одной из настроенных на сервере зоне, пакет будет обрабатываться зоной используемой по умолчанию. При установке firewalld зона по умолчанию называется public.
В firewalld есть зоны, где уже предварительно настроены разрешения для различных служб. Можно использовать эти настройки или создавать собственные зоны. Список зон по-умолчанию, которые создаются при установке firewalld (хранятся в каталоге /usr/lib/firewalld/zones/):
Введение
firewalld — программное обеспечение для управления брандмауэрами, поддерживаемое многими дистрибутивами Linux. Выступает в качестве клиентского интерфейса для встроенных в ядро Linux систем фильтрации пакетов nftables и iptables.
В этом обучающем руководстве мы покажем, как настраивать брандмауэр firewalld для сервера CentOS 8 и расскажем об основах управления брандмауэром с помощью административного инструмента firewall-cmd.
Что делать, если подходящая служба отсутствует?
В базовом комплекте firewalld представлены многие распространенные приложения, к которым вы можете захотеть предоставить доступ. Однако возможны ситуации, когда эти службы не будут соответствовать вашим требованиям.
В этой ситуации у вас будет два варианта.
Основные концепции в firewalld
Прежде чем обсуждать фактическое использование утилиты firewall-cmd для управления конфигурацией брандмауэра, мы должны познакомиться с несколькими концепциями, которые вводит этот инструмент.
В этом руководстве мы покажем вам, как настроить брандмауэр с firewalld в вашей системе centos 7, и объясним вам основные концепции firewalld.
Правильно настроенный межсетевой экран является одним из наиболее важных аспектов общей безопасности системы.
FirewallD – это законченное решение брандмауэра, которое управляет системными правилами iptables и предоставляет интерфейс D-Bus для их работы. Начиная с CentOS 7, FirewallD заменяет iptables как инструмент управления брандмауэром по умолчанию.
Перед началом работы с этим учебным курсом убедитесь, что вы вошли на свой сервер с учетной записью пользователя с привилегиями sudo или с пользователем root. Лучше всего запускать административные команды как пользователь sudo вместо root. Если у вас нет пользователя sudo в вашей системе CentOS, вы можете создать его, следуя этим инструкциям .
Основные концепции firewalld
FirewallD использует понятия зон и сервисов вместо цепочки и правил iptables. На основе зон и служб, которые вы настраиваете, вы можете контролировать, какой трафик разрешен или запрещен в систему и из нее.
FirewallD можно настроить и управлять с помощью firewall-cmd утилиты командной строки.
Firewalld zones
Зоны – это предопределенные наборы правил, определяющие, какой трафик должен быть разрешен в зависимости от уровня доверия в сетях, к которым подключен ваш компьютер. Вы можете назначить сетевые интерфейсы и источники для зоны.
Ниже приведены зоны, предоставленные FirewallD, упорядоченные в соответствии с уровнем доверия зоны от ненадежного до доверенного:
- drop: все входящие соединения сбрасываются без какого-либо уведомления. Разрешены только исходящие соединения.
- block: все входящие соединения отклоняются с
icmp-host-prohibitedсообщением дляIPv4иicmp6-adm-prohibitedдля IPv6n. Разрешены только исходящие соединения. - public: для использования в ненадежных общественных местах. Вы не доверяете другим компьютерам в сети, но можете разрешить выбранные входящие подключения.
- external: для использования во внешних сетях с включенным маскированием NAT, когда ваша система выступает в качестве шлюза или маршрутизатора. Разрешены только выбранные входящие соединения.
- internal: для использования во внутренних сетях, когда ваша система выступает в качестве шлюза или маршрутизатора. Другие системы в сети, как правило, доверяют. Разрешены только выбранные входящие соединения.
- dmz : используется для компьютеров, расположенных в демилитаризованной зоне, которые имеют ограниченный доступ к остальной части вашей сети. Разрешены только выбранные входящие соединения.
- work: Используется для работы машин. Другие компьютеры в сети, как правило, являются доверенными. Разрешены только выбранные входящие соединения.
- home : Используется для домашних машин. Другие компьютеры в сети, как правило, являются доверенными. Разрешены только выбранные входящие соединения.
- trusted: все сетевые подключения принимаются. Доверяйте всем компьютерам в сети.
Услуги брандмауэра
Службы Firewalld – это предопределенные правила, которые применяются внутри зоны и определяют необходимые параметры, чтобы разрешить входящий трафик для определенной службы.
Firewalld runtime и постоянные настройки
Firewalld использует два отдельных набора конфигурации, среду выполнения и постоянную конфигурацию.
Конфигурация времени выполнения является фактической рабочей конфигурацией, и она не является постоянной при перезагрузке. Когда служба Firewalld запускается, она загружает постоянную конфигурацию, которая становится конфигурацией времени выполнения.
По умолчанию при внесении изменений в конфигурацию Firewalld с помощью firewall-cmd утилиты эти изменения применяются к конфигурации времени выполнения. Чтобы сделать изменения постоянными, вам нужно использовать --permanent опцию.
Установка и включение firewalld
Firewalld по умолчанию устанавливается в CentOS 7, но если он не установлен в вашей системе, вы можете установить пакет, набрав:
sudo yum install firewalldСервис Firewalld по умолчанию отключен. Вы можете проверить состояние брандмауэра с помощью:
sudo firewall-cmd --stateЕсли вы только что установили или никогда не активировали ранее, команда напечатает
not running. В противном случае вы увидитеrunning.Чтобы запустить службу FirewallD и включить ее при загрузке, введите:
sudo systemctl start firewalldsudo systemctl enable firewalld
Работа с firewalld zones
После первого включения службы FirewallD public зона становится зоной по умолчанию. Вы можете просмотреть зону по умолчанию, набрав:
sudo firewall-cmd --get-default-zonepublicЧтобы получить список всех доступных зон, введите:
sudo firewall-cmd --get-zonesblock dmz drop external home internal public trusted workПо умолчанию всем сетевым интерфейсам назначена зона по умолчанию. Чтобы проверить, какие зоны используются вашим сетевым интерфейсом (ами), наберите:
sudo firewall-cmd --get-active-zonespublic interfaces: eth0 eth1 Вывод выше говорит нам, что оба интерфейса eth0 и eth1 назначены для публичной зоны.
Вы можете распечатать настройки конфигурации зоны с помощью:
sudo firewall-cmd --zone=public --list-allpublic (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: Из приведенного выше вывода, мы можем видеть , что публика зона активна и набор по умолчанию, используемый как eth0 и eth1 интерфейсов. Также разрешены подключения, связанные с DHCP-клиентом и SSH.
Если вы хотите проверить настройки всех доступных зон, введите:
sudo firewall-cmd --list-all-zonesКоманда выводит огромный список с настройками всех доступных зон.
Изменение зоны интерфейса
Вы можете легко изменить интерфейсную зону, используя --zone опцию using в сочетании с --change-interface опцией. Следующая команда назначит eth1 интерфейс рабочей зоне:
sudo firewall-cmd --zone=work --change-interface=eth1Проверьте изменения, набрав:
sudo firewall-cmd --get-active-zoneswork interfaces: eth1
public interfaces: eth0Изменение зоны по умолчанию
Чтобы изменить зону по умолчанию, используйте --set-default-zone параметр, за которым следует имя зоны, которую вы хотите установить по умолчанию.
Например, чтобы изменить зону по умолчанию на домашнюю, вы должны выполнить следующую команду:
sudo firewall-cmd --set-default-zone=homeПроверьте изменения с помощью:
sudo firewall-cmd --get-default-zonehomeОткрытие порта или службы
С FirewallD вы можете разрешить трафик для определенных портов на основе предопределенных правил, называемых сервисами.
Чтобы получить список всех доступных по умолчанию сервисов, наберите:
sudo firewall-cmd --get-services
Вы можете найти больше информации о каждой службе, открыв соответствующий XML-файл в /usr/lib/firewalld/services каталоге. Например, служба HTTP определяется следующим образом:
/usr/lib/firewalld/services/http.xml
Чтобы разрешить входящий трафик HTTP (порт 80) для интерфейсов в публичной зоне, только для текущего сеанса (конфигурация времени выполнения) введите:
sudo firewall-cmd --zone=public --add-service=httpЕсли вы изменяете зону по умолчанию, вы можете опустить --zone опцию.
Чтобы убедиться, что служба была добавлена успешно, используйте --list-services параметр:
sudo firewall-cmd --zone=public --list-servicesssh dhcpv6-client http Если вы хотите оставить порт 80 открытым после перезагрузки, вам нужно будет набрать ту же команду еще раз, но на этот раз с --permanent опцией:
sudo firewall-cmd --permanent --zone=public --add-service=http Используйте --list-servicesвместе с --permanentопцией, чтобы проверить ваши изменения:
sudo firewall-cmd --permanent --zone=public --list-servicesssh dhcpv6-client http Синтаксис для удаления службы такой же, как и при добавлении службы. Просто используйте --remove-serviceвместо --add-serviceопции:
sudo firewall-cmd --zone=public --remove-service=http --permanentПриведенная выше команда удаляет службу http из постоянной конфигурации публичной зоны.
Что если вы используете приложение, такое как Plex Media Server, для которого нет подходящей службы?
В подобных ситуациях у вас есть два варианта. Вы можете открыть соответствующие порты или определить новую службу FirewallD.
Например, Plex Server прослушивает порт 32400 и использует TCP, чтобы открыть порт в публичной зоне для текущего сеанса, используйте --add-port= параметр:
sudo firewall-cmd --zone=public --add-port=32400/tcpПротоколы могут быть tcp или udp.
Чтобы убедиться, что порт был успешно добавлен, используйте --list-ports параметр:
sudo firewall-cmd --zone=public --list-ports32400/tcp Чтобы оставить порт 32400 открытым после перезагрузки, добавьте правило к постоянным настройкам, выполнив ту же команду с помощью --permanent параметра.
Синтаксис для удаления порта такой же, как и при добавлении порта. Просто используйте --remove-port вместо --add-port опции.
sudo firewall-cmd --zone=public --remove-port=32400/tcpСоздание новой службы 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.
/etc/firewalld/services/plexmediaserver.xml
Сохраните файл и перезагрузите службу FirewallD:
sudo firewall-cmd --reload Теперь вы можете использовать plexmediaserver сервис в своих зонах так же, как и любой другой сервис.
Порт переадресации с firewalld
Для пересылки трафика с одного порта на другой порт или адрес сначала включите маскирование для нужной зоны с помощью --add-masquerade коммутатора. Например, чтобы включить маскировку для external типа зоны:
sudo firewall-cmd --zone=external --add-masquerade- Переадресация трафика с одного порта на другой на том же сервере
В следующем примере мы перенаправляем трафик от порта 80 к порту 8080 на одном сервере:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080- Переадресация трафика на другой сервер
В следующем примере мы перенаправляем трафик от порта 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 Если вы хотите сделать перманент перманентом, просто добавьте --permanent опцию.
Создание набора правил с помощью firewalld
В следующем примере мы покажем, как настроить брандмауэр, если вы используете веб-сервер. Мы предполагаем, что ваш сервер имеет только один интерфейс eth0, и вы хотите разрешить входящий трафик только через порты SSH, HTTP и HTTPS.
Измените зону по умолчанию на dmz
Мы будем использовать зону dmz (demilitarized), потому что по умолчанию она разрешает только SSH-трафик. Чтобы изменить зону по умолчанию на dmz и назначить ее
eth0интерфейсу, выполните следующие команды:sudo firewall-cmd --set-default-zone=dmzsudo firewall-cmd --zone=dmz --add-interface=eth0Откройте порты HTTP и HTTPS:
Чтобы открыть порты HTTP и HTTPS, добавьте правила постоянного обслуживания в зону dmz:
sudo firewall-cmd --permanent --zone=dmz --add-service=httpsudo firewall-cmd --permanent --zone=dmz --add-service=httpsЧтобы изменения вступили в силу немедленно, перезагрузите брандмауэр:
sudo firewall-cmd --reloadПроверьте изменения
Чтобы проверить параметры конфигурации зоны dmz, введите:
sudo firewall-cmd --zone=dmz --list-alldmz (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:Вывод выше говорит нам, что dmz является зоной по умолчанию, применяется к
eth0интерфейсу и порты ssh (22) http (80) и https (443) открыты.
Вывод
Вы узнали, как настроить и управлять службой FirewallD в вашей системе CentOS.
Обязательно разрешите все входящие соединения, которые необходимы для правильного функционирования вашей системы, одновременно ограничивая все ненужные соединения.
Firewalld zones
Зоны – это предопределенные наборы правил, определяющие, какой трафик должен быть разрешен в зависимости от уровня доверия в сетях, к которым подключен ваш компьютер. Вы можете назначить сетевые интерфейсы и источники для зоны.
Ниже приведены зоны, предоставленные FirewallD, упорядоченные в соответствии с уровнем доверия зоны от ненадежного до доверенного:
Firewalld: блокировка ip-адресов, создание исключений
Вы можете добавлять в исключения firewalld доверенные адреса IP адреса или блокировать нежелательные.
Чтобы добавить в исключения конкретный IP- адрес (например 8.8.8.8) на вашем сервере через firewalld, используйте команду:
# firewall-cmd –zone=public –add-rich-rule=’rule family=”ipv4″ source address=”8.8.8.8″ accept’
Проверьте зону, и убедитесь что IP добавлен в исключения в правиле rich rules:
# firewall-cmd –zone=public –list-all
Автоматический запуск брандмауэра
Теперь, когда вы проверили все настройки и убедились, что все правила работают должным образом, вы можете настроить автозапуск брандмауэра.
Для этого введите:
sudo systemctl enable firewalld
Теперь брандмауэр будет запускаться вместе с сервером.
Выбор зон для интерфейсов
Если вы не настроили сетевые интерфейсы иным образом, каждый интерфейс будет помещен в зону по умолчанию при запуске брандмауэра.
Добавление правил для приложений
Чтобы открыть порт для приложения, можно добавить в исключения сервис. Вывести список доступных сервисов:
# firewall-cmd –get-services
Вывод будет содержать большое количество сервисов. Подробная информация о службе содержится в ее xml файле. Эти файлы расположены в директории /usr/lib/firewalld/services.
Например:
# cd /usr/lib/firewalld/services
# cat smtp.xml
Добавление сервиса в зону
Проще всего добавить сервис или порт в зону, которую использует брандмауэр. Просмотрите доступные сервисы:
Добавление собственных зон
Вы можете создать собственную зону (назову ее our):
# firewall-cmd –permanent –new-zone=our
После создания новой зоны, как и после создания сервиса, нужна перезагрузка firewalld:
# firewall-cmd –reload
success
# firewall-cmd –get-zones
Доступные зоны
Чтобы просмотреть список всех зон, нужно выполнить команду:
# firewall-cmd –get-zones
У меня получился такой список:
Знакомство с текущими правилами брандмауэра
Прежде чем мы начнем вносить изменения, мы познакомимся со средой и правилами firewalld, используемыми по умолчанию.
Изменение зоны интерфейса
Для перемещения интерфейса между зонами во время сеанса следует использовать параметр –zone= в сочетании с параметром –change-interface=. Как и для всех остальных команд, изменяющих брандмауэр, вам потребуется использовать sudo.
Например, интерфейс eth0 можно переместить в зону home с помощью следующей команды:
Output
successПримечание. При перемещении интерфейса в новую зону следует помнить, что это может повлиять на работоспособность служб. Например, в данном случае мы перемещаемся в зону home, в которой поддерживается SSH. Это означает, что наше соединение не должно быть отброшено.
Чтобы убедиться в успешности операции мы можем снова запросить активные зоны:
Output
home interfaces: eth0
public interfaces: eth1Изучение альтернативных зон
Мы получили представление о конфигурации зоны по умолчанию и активной зоны. Также мы можем получить информацию о других зонах.
Чтобы получить список доступных зон, введите команду:
Инсталляция
По умолчанию Firewalld не входит в состав CentOS. Установим его:
sudo yum install firewalld
Для помещения его в автозагрузочную область прописываем:
sudo systemctl enable firewalld
Перезагружаем серверную платформу для активации изменений.
Как добавить новую службу
Как говорилось выше, полное описание служб внутри серверной ОС расположено по следующему пути: /usr/lib/firewalld/services/, далее идет xml-файл с именем службы.
Чтобы создать новый сервис, просто скопируем один из готовых вариантов в папку services, которая расположена внутри директории firewalld. В качестве примера взяли описание сервиса SSH и скопировали его с именем test:
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/test.xml
Важно! Операция копирования выполняется только с правами администратора.
Откроем его при помощи текстового редактора nano:
sudo nano /etc/firewalld/services/test.xml
На экране появится подробное описание сервиса SSH:

В первом пункте меняем название службы на произвольное. По полю short она активируется через команды в дальнейшем. Второй пункт дает полное описание сервиса: прописываем детально.
Третий шаг – указываем порты и протокол по которым она будет работать. В дальнейшем firewalld будет активировать значения после указания соответствующего ключа.
Отредактировав файл, сохраняем изменения и перезапускаем службу.
Конвертируем правила iptables в firewalld
Многих пугает переход с Iptables на Firewalld из-за того, что нет привычного вида правил и это заблуждение.
Преобразуем, для примера, следующие правила Iptables
В файле /etc/firewalld/zones/public.xml добавляем строчки:
Создаем файл /etc/firewalld/services/custom_ports.xml:
Либо всю процедуру можно выполнить следующим образом:
Перезагружаем Firewalld и проверяем:
Конфигурирование firewalld
Определим текущую настройку утилиты:
firewall-cmd --get-default-zone

Сейчас установлен шаблон public, т.е. все разрешено. Если необходимо получить подробный отчет, то используем —list-all в качестве ключа. Результат приведен ниже.
Важно! Команда запускается только с правами sudo.

Маскарадинг
Данная команда включает маскарадинг для зоны. Адреса частной сети спрятаны за доступным извне IP адресом и привязаны к нему. Это разновидность трансляции адресов, обычно используется в роутерах. Маскарадинг доступен только для IPv4 из-за ограничений ядра.
Проверяем статус работы:
Перенаправим запросы входящие на настроенный ранее SSH порт на нужный хост:
Также мы можем перенаправить запросы с изменением порта назначения, например:
Настройка зоны по умолчанию
Также вы можете выбрать другую зону по умолчанию.
Для этого используется параметр —set-default-zone=. После этого все интерфейсы будут привязаны к другой зоне:
sudo firewall-cmd --set-default-zone=home home interfaces: eth0 eth1
Настройка правил
Настройка правил может выполняться “на лету” либо через XML.Предлагаю начать с настройки правила для нестандартного порта, например для SSH.
Проверяем, что разрешено на нашем сервере:
Если в конфигурации сервера не используется IPv6 протокол, то лучше его убрать:
Выбираем новый порт для SSH, но запоминаем его в уме.Не надо рваться его сразу поменять в настройках SSH, добавим сразу правило для него на постоянной основе (–permanent):
Перезагрузим правила:
Проверяем:
Отлично. Теперь можно смело изменять настройки SSH и удалять правило на сервис с 22 портом.
Проверяем результат:
Второй вариант настройки – через XML.Рассмотрим на примере настройки SNMP.
Создаем файл /etc/firewalld/services/snmp.xml
Перезагружаем Firewalld:
Добавляем правило на постоянной основе:
И снова перезагружаем Firewalld:
Определение службы
Открыть порты для зон довольно просто, но также может быть сложно следить за тем, для чего предназначен каждый порт. Если вы будете выводить из эксплуатации службы на своем сервере, вы можете забыть, какие из открытых портов вам еще нужны. Чтобы избежать подобной ситуации, можно определить новую службу.
Службы представляют собой наборы портов с именем и описанием. Использование служб упрощает администрирование портов, но требует некоторой предварительной подготовки. Проще всего начать с копирования существующего скрипта (из директории /usr/lib/firewalld/services) в директорию /etc/firewalld/services, где брандмауэр ищет нестандартные определения.
Например, мы можем скопировать определение службы SSH и использовать его для определения службы example. Имя файла без суффикса .xml определяет имя службы в списке служб брандмауэра:
Теперь можно изменить определение в скопированном вами файле. Вначале откройте его в предпочитаемом текстовом редакторе. Здесь мы используем vi:
Вначале файл будет содержать только что скопированное вами определение SSH:
/etc/firewalld/services/example.xml
Основная часть этого определения представляет собой метаданные. Вы можете изменить короткое имя службы, заключенное в тегах <short>. Это имя службы, предназначенное для чтения людьми. Также следует добавить описание на случай, если вам потребуется дополнительная информация при проведении аудита службы.
Единственное изменение конфигурации, которое вам потребуется, и которое повлияет на функциональность службы, будет заключаться в определении портов, где вы идентифицируете номер порта и протокол, который хотите открыть. Можно указать несколько тегов <port/>.
Представьте, что для нашей службы example нам необходимо открыть порт 7777 для TCP и 8888 для UDP. Мы можем изменить существующее определение примерно так:
/etc/firewalld/services/example.xml
Сохраните и закройте файл.
Перезагрузите брандмауэр, чтобы получить доступ к новой службе:
Теперь вы увидите ее в списке доступных служб:
Опции
Firewalld имеет набор встроенных правил:
Кроме стандартного набора утилита поддерживает два режима загрузки. Первый называется Runtime. Он означает активность выбранных параметров до перезагрузки приложения или сервера. Если во время данного режима указываются дополнительные опции сохранения, то они остаются активными всегда.
Второй вариант — Permanent. Любые изменения, которые внесены в данном режиме, сохраняются навсегда.
Открываем порт (сервис)
Firewalld также предоставляет сервисам доступ к портам используя ключ —add-service=<имя службы>. Для начала проверим список сервисов на сервере, запустив утилиту с опцией —get-services.

Получить подробную информацию о любом сервисе, обратившись через команду cat к внутреннему списку firewalld. Например, просмотрим описание службы audit:
cat /usr/lib/firewalld/services/audit.xml

Для активации порта любого сервиса из перечня прописываем в терминале:
sudo firewall-cmd --zone=work --add-service=audit
Данная конфигурация будет активна только до перезагрузки серверной платформы. Чтобы сделать ее постоянной, прописываем ключ —permanent:
sudo firewall-cmd --permanent --zone=work --add-service=audit
Если сервис audit больше не нужен, удалим его, используя опцию –remove-service=<имя службы>:
sudo firewall-cmd --zone=work --remove-service=audit --permanent
Альтернативный вариант открытия порта – указываем номер и имя протокола с указанием флага —add-port:
sudo firewall-cmd --zone=work --add-port=443/tcp
Важно! Любое изменение в списке сервисов можно отследить используя опцию —list-ports.
Удаление порта происходит при замене ключа —add-port на —remove-port с сохранением дальнейшего синтаксиса.
Открытие порта для зон
Проще всего добавить поддержку определенного приложения можно посредством открытия используемых им портов в соответствующих зонах. Для этого нужно указать порт или диапазон портов, а также протокол (TCP или UDP), связанный с портами.
Например, если наше приложение работает на порту 5000 и использует TCP, мы можем временно добавить его в зону public с помощью параметра –add-port=. Протоколы могут назначаться как tcp или udp:
Output
successМы можем проверить успешность назначения с помощью операции –list-ports:
Output
5000/tcpТакже можно указать последовательный диапазон портов, разделив начальный и конечный порты диапазона дефисом. Например, если наше приложение используйте порты UDP с 4990 по 4999, мы можем открыть их на public с помощью следующей команды:
После тестирования мы вероятно захотим добавить это правило в брандмауэр на постоянной основе. Используйте для этого sudo firewall-cmd –runtime-to-permanent или запустите команды снова с флагом –permanent:
Output
success
success
5000/tcp 4990-4999/udpПеренаправление портов в firewalld
Вы можете создать правило перенаправления портов (port forwarding) в firewalld. Чтобы перенаправить 443 порт на 9090:
# firewall-cmd –zone=public –add-forward-port=port=443:proto=tcp:toport=9090 –permanent
Чтобы удалить правило перенаправления порта:
# firewall-cmd –zone=public –remove-forward-port=port=443:proto=tcp:toport=9090
Полезные команды при работе в firewalld
Включить режим блокировки всех исходящих и входящих пакетов:
Выключить режим блокировки всех исходящих и входящих пакетов:
Проверить режим “паника”:
Перезагрузить правила firewalld без потери текущих соединений:
Перезагрузить правила firewalld и сбросить текущие соединения:
Добавить к зоне сетевой интерфейс:
В конфигурации интерфейса ens3 можно указать, какой зоне принадлежит этот интерфейс. Для этого добавим ZONE=work.Если параметр ZONE не указан, будет назначена зона по-умолчанию.
Разрешить диапазон портов:
Открыть порт MySQL
Более подробную информацию, а также описание всех возможностей можно найти на сайте FedoraProject
Порт переадресации с firewalld
Для пересылки трафика с одного порта на другой порт или адрес сначала включите маскирование для нужной зоны с помощью –add-masquerade коммутатора. Например, чтобы включить маскировку для external типа зоны:
sudo firewall-cmd --zone=external --add-masquerade- Переадресация трафика с одного порта на другой на том же сервере
В следующем примере мы перенаправляем трафик от порта 80 к порту 8080 на одном сервере:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080- Переадресация трафика на другой сервер
В следующем примере мы перенаправляем трафик от порта 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Если вы хотите сделать перманент перманентом, просто добавьте –permanent опцию.
Постоянство правил
В firewalld правила можно применять к текущему набору правил времени исполнения или использовать как постоянные. При добавлении или изменении правила по умолчанию изменяется только работающий брандмауэр. После перезагрузки системы или службы firewalld сохраняются только постоянные правила.
Большинство операций firewall-cmd могут принимать флаг –permanent, указывающий на необходимость применения изменений к постоянной конфигурации. Кроме того, текущую конфигурацию брандмауэра можно сохранить в постоянной конфигурации с помощью команды firewall-cmd –runtime-to-permanent.
Такое разделение конфигурации времени исполнения и постоянной конфигурации позволяет безопасно тестировать правила на активном брандмауэре и просто перезагружать его в случае возникновения проблем.
Просмотр правил по умолчанию
Чтобы узнать, какая зона используется по умолчанию, введите:
firewall-cmd --get-default-zone public
На данный момент firewalld не получал никаких инструкций относительно других зон, кроме того, к другим зонам не привязан ни один интерфейс, поэтому сейчас зона public является зоной по умолчанию, а также единственной активной зоной.
Чтобы получить список активных зон, введите:
firewall-cmd --get-active-zones public interfaces: eth0 eth1
К зоне public привязаны два сетевых интерфейса: eth0 и eth1. Интерфейсы, привязанные к зоне, работают согласно правилам этой зоны.
Чтобы узнать, какие правила использует зона по умолчанию, введите:
Смена политики и интерфейса
Для смены шаблона, используем ключ —zone совместно с опцией смены сетевого интерфейса —change-interface. Например, заменить политику public на work с ее активацией на eth0:
sudo firewall-cmd --zone=work --change-interface=eth0
В случае успешной операции на мониторе появится соответствующее сообщение. Наберем следующую команду, чтобы убедиться в правильности выполненных действий:
sudo firewall-cmd --get-active-zones

Как видно на изображении выше, сетевой интерфейс использует политику work, а другие по-прежнему работают с public.
Если требуется сменить политику, которая наследуется по умолчанию для всех интерфейсов, используем другой синтаксис:
sudo firewall-cmd --set-default-zone=home
После выполнения команды всем сетевым интерфейсам пропишется шаблон home. Для показа текущего уровня вводим уже известный ключ —get-default-zone.
Создание собственных зон
Хотя большинству пользователей будет достаточно заданных зон, иногда может быть полезно определить собственные зоны с названиями, соответствующими их функции.
Например, вы можете захотеть создать для своего веб-сервера зону с именем publicweb. При этом вы можете также захотеть использовать другую зону для службы DNS в вашей частной сети. Эту зону вы можете назвать privateDNS.
При добавлении зоны вы должны добавить ее в постоянную конфигурацию брандмауэра. Затем вы можете произвести перезагрузку для активации конфигурации для текущего сеанса. Например, мы можем создать две описанные выше зоны, введя следующие команды:
Вы можете проверить их наличие в постоянной конфигурации с помощью следующей команды:
Услуги брандмауэра
Службы Firewalld – это предопределенные правила, которые применяются внутри зоны и определяют необходимые параметры, чтобы разрешить входящий трафик для определенной службы.
Установка и включение firewalld
Firewalld по умолчанию устанавливается в CentOS 7, но если он не установлен в вашей системе, вы можете установить пакет, набрав:
sudo yum install firewalldСервис Firewalld по умолчанию отключен. Вы можете проверить состояние брандмауэра с помощью:
sudo firewall-cmd --stateЕсли вы только что установили или никогда не активировали ранее, команда напечатает
not running. В противном случае вы увидитеrunning.Чтобы запустить службу FirewallD и включить ее при загрузке, введите:
sudo systemctl start firewalldsudo systemctl enable firewalld
Установка правил для приложений
Рассмотрим базовый способ определения исключений брандмауэра для служб, которые вы хотите сделать доступными.
Вывод
Вы узнали, как настроить и управлять службой FirewallD в вашей системе CentOS.
Обязательно разрешите все входящие соединения, которые необходимы для правильного функционирования вашей системы, одновременно ограничивая все ненужные соединения.
Заключение
Теперь вы должны неплохо понимать принципы администрирования службы firewalld в системе CentOS на каждодневной основе.
Служба firewalld позволяет настраивать администрируемые правила и наборы правил, учитывающие условия вашей сетевой среды. Она позволяет легко переключаться между разными политиками брандмауэра посредством использования зон и дает администраторам возможность абстрагировать управление портами в более удобную систему определения служб.
Дополнительную информацию о firewalld можно найти в официальной документации по firewalld.




