Как настроить брандмауэр в CentOS 8 и управлять им

Как настроить брандмауэр в CentOS 8 и управлять им

How to Configure and Manage the Firewall on CentOS 8

2 Апреля 2021 | CentOS

В этом руководстве мы поговорим о том, как настроить и управлять брандмауэром в CentOS 8. Мы также объясним основные концепции FirewallD.

Как настроить брандмауэр в CentOS 8 и управлять им

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

CentOS 8 поставляется с демоном межсетевого экрана с именем firewalld . Это законченное решение с интерфейсом D-Bus, которое позволяет динамически управлять брандмауэром системы.

 

Прежде чем продолжить

Чтобы настроить службу брандмауэра, вы должны войти в систему как пользователь root или пользователь с привилегиями sudo .


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

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

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


Зоны Firewalld

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

Ниже приведены зоны, предоставляемые FirewallD, упорядоченные в соответствии с уровнем доверия зоны от ненадежных до доверенных:

  • drop : все входящие соединения отбрасываются без какого-либо уведомления. Разрешены только исходящие соединения.
  • блок : все входящие соединения отклоняются с icmp-host-prohibited сообщением для IPv6n IPv4 и icmp6-adm-prohibited для него. Разрешены только исходящие соединения.
  • public : для использования в ненадежных общественных местах. Вы не доверяете другим компьютерам в сети, но можете разрешить выбранные входящие соединения.
  • external : для использования во внешних сетях с включенной маскировкой NAT, когда ваша система действует как шлюз или маршрутизатор. Разрешены только выбранные входящие соединения.
  • internal : для использования во внутренних сетях, когда ваша система действует как шлюз или маршрутизатор. Другим системам в сети обычно доверяют. Разрешены только выбранные входящие соединения.
  • dmz : используется для компьютеров, расположенных в вашей демилитаризованной зоне, которые имеют ограниченный доступ к остальной части вашей сети. Разрешены только выбранные входящие соединения.
  • работа : Используется для рабочих машин. Другим компьютерам в сети обычно доверяют. Разрешены только выбранные входящие соединения.
  • home : Используется для домашних машин. Другим компьютерам в сети обычно доверяют. Разрешены только выбранные входящие соединения.
  • доверенные : все сетевые подключения принимаются. Доверяйте всем компьютерам в сети.


Услуги межсетевого экрана

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

Например, служба может содержать определения об открытии портов, пересылке трафика и т. Д.


Среда выполнения Firewalld и постоянные настройки

Firewalld использует два отдельных набора конфигураций: время выполнения и постоянную конфигурацию.

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

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

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

  1. Измените конфигурацию среды выполнения и сделайте ее постоянной:
     

    sudo firewall-cmd <options> sudo firewall-cmd --runtime-to-permanent
    
    
  2. Измените постоянную конфигурацию и перезагрузите демон 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 .


Зоны 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 и разрешим доступ только с 192.168.100.30 IP-адреса:

  1. Создайте зону:
     

    sudo firewall-cmd --new-zone=memcached --permanent
    
    
  2. Добавьте правила в зону:
     

    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
    
    
  3. Перезагрузите демон firewalld, чтобы изменения вступили в силу:
     

    sudo firewall-cmd --reload


Услуги Firewalld

С 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 опцию.

Чтобы убедиться, что служба была добавлена ​​успешно, используйте --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 файл и изменить краткое имя и описание службы в пределах <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 услугой в своих зонах так же, как и любой другой услугой.
 

Открытие портов и исходных 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.

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


    Комментарии

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

Загрузка комментариев...