Как настроить межсетевой экран с FirewallD на CentOS 7

Как настроить межсетевой экран с FirewallD на CentOS 7

21 Декабря 2019 | CentOS

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

Как настроить межсетевой экран с FirewallD на CentOS 7

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

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

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

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

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

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

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

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

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

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

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

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

  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 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 опцию using в сочетании с --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 опцию.

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

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


Для пересылки трафика с одного порта на другой порт или адрес сначала включите маскирование для нужной зоны с помощью --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 опцию.


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

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

    Мы будем использовать зону dmz (demilitarized), потому что по умолчанию она разрешает только 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.

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


    Комментарии

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

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