Как настроить брандмауэр с FirewallD на CentOS 7

Правильно настроенный брандмауэр — один из наиболее важных аспектов общей безопасности системы.

FirewallD — это законченное решение межсетевого экрана, которое управляет системными правилами iptables и предоставляет интерфейс D-Bus для работы с ними. Начиная с CentOS 7, FirewallD заменяет iptables в качестве инструмента управления брандмауэром по умолчанию.

В этом руководстве мы покажем вам, как настроить брандмауэр с помощью FirewallD в вашей системе CentOS 7, и объясним вам основные концепции FirewallD.

Подготовка

Прежде чем приступить к изучению этого руководства, убедитесь, что вы вошли на свой сервер с учетной записью пользователя с привилегиями sudo или с пользователем root. Лучше всего запускать административные команды от имени пользователя sudo, а не root. Если у вас нет пользователя sudo в вашей системе CentOS, вы можете создать его, следуя этим инструкциям .

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

FirewallD использует концепции зон и служб, а не цепочку и правила iptables. В зависимости от зон и служб, которые вы настраиваете, вы можете контролировать, какой трафик разрешен или запрещен в систему и из системы.

FirewallD можно настроить и управлять им с помощью утилиты командной строки firewall-cmd .

Зоны 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 .

Установка и включение FirewallD

  1. Firewalld по умолчанию установлен в CentOS 7, но если он не установлен в вашей системе, вы можете установить пакет, набрав:

     sudo yum install firewalld
  2. По умолчанию служба Firewalld отключена. Вы можете проверить статус брандмауэра с помощью:

     sudo firewall-cmd --state

    Если вы только что установили или не активирован ранее, команда печати not running . В противном случае вы увидите running .

  3. Чтобы запустить службу FirewallD и включить ее при загрузке:

     sudo systemctl start firewalld sudo systemctl enable firewalld

Работа с зонами Firewalld

После включения службы 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
public
  interfaces: eth0 eth1

Приведенный выше вывод говорит нам, что оба интерфейса 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:

Из выходных данных выше мы видим, что публичная зона активна и установлена по умолчанию, используемая как интерфейсами eth0 и eth1 . Кроме того, разрешены соединения, относящиеся к клиенту DHCP и SSH.

Если вы хотите проверить конфигурации всех доступных типов зон:

sudo firewall-cmd --list-all-zones

Команда выводит на печать огромный список с настройками всех доступных зон.

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

Вы можете легко изменить Зону интерфейса, используя параметр --zone в сочетании с параметром --change-interface . Следующая команда назначит интерфейс eth1 рабочей зоне:

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

Проверьте изменения, набрав:

sudo firewall-cmd --get-active-zones
work
  interfaces: eth1
public
  interfaces: eth0

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

Чтобы изменить зону по умолчанию, используйте параметр --set-default-zone за которым следует имя зоны, которую вы хотите сделать по умолчанию.

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

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

Проверьте изменения с помощью:

sudo firewall-cmd --get-default-zone
home

Открытие порта или сервиса

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

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

sudo firewall-cmd --get-services

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

/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 зону по умолчанию, вы можете не --zone параметр --zone .

Чтобы убедиться, что служба была успешно добавлена, используйте параметр --list-services :

sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http

Если вы хотите оставить порт 80 открытым после перезагрузки, вам нужно будет ввести ту же команду еще раз, но на этот раз с параметром --permanent :

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

Используйте --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 из постоянной конфигурации публичной зоны.

Что делать, если вы запускаете такое приложение, как 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-ports
32400/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
<?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 в своих зонах так же, как и любую другую услугу.

Порт пересылки с 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.

  1. Измените зону по умолчанию на dmz

    Мы будем использовать зону dmz (демилитаризованную), потому что по умолчанию она разрешает только SSH-трафик. Чтобы изменить зону по умолчанию на dmz и назначить ее интерфейсу eth0 , выполните следующие команды:

     sudo firewall-cmd --set-default-zone=dmz sudo firewall-cmd --zone=dmz --add-interface=eth0
  2. Откройте порты HTTP и HTTPS:

    Чтобы открыть порты HTTP и HTTPS, добавьте в зону dmz постоянные правила обслуживания:

     sudo firewall-cmd --permanent --zone=dmz --add-service=http sudo firewall-cmd --permanent --zone=dmz --add-service=https

    Немедленно внесите изменения в силу, перезагрузив брандмауэр:

     sudo firewall-cmd --reload
  3. Проверить изменения

    Чтобы проверить параметры конфигурации зоны dmz, введите:

     sudo firewall-cmd --zone=dmz --list-all
     dmz (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.

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

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Оставьте комментарий