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

Настройка брандмауэра с помощью FirewallD на CentOS 7

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

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

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

Предпосылки

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

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

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

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

Зоны Firewalld

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

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

  • drop : Все входящие соединения сбрасываются без уведомления. Разрешены только исходящие соединения.
  • block : Все входящие соединения отклоняются с сообщением icmp-host-prohibited для IPv4 и icmp6-adm-prohibited для IPv6n. Разрешены только исходящие соединения.
  • public : для использования в ненадёжных общественных местах. Вы не доверяете другим компьютерам в сети, но можете разрешить определённые входящие соединения.
  • Внешний : для использования во внешних сетях с включённым маскированием NAT, когда ваша система выступает в качестве шлюза или маршрутизатора. Разрешены только выбранные входящие соединения.
  • Внутренний : для использования во внутренних сетях, когда ваша система выполняет функции шлюза или маршрутизатора. Другие системы в сети, как правило, считаются доверенными. Разрешены только выбранные входящие соединения.
  • dmz : используется для компьютеров, расположенных в демилитаризованной зоне и имеющих ограниченный доступ к остальной части сети. Разрешены только определённые входящие соединения.
  • work : используется для рабочих машин. Остальные компьютеры в сети, как правило, считаются доверенными. Разрешены только выбранные входящие соединения.
  • 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 
службы firewalld

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

/usr/lib/firewalld/services/http.xml

    WWW (HTTP)   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.   protocol= "tcp" port= "80" /> 

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

В следующем примере мы открываем порты 1900 UDP и 32400 TCP.

/etc/firewalld/services/plexmediaserver.xml

   version= "1.0" >  plexmediaserver   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.   protocol= "udp" port= "1900" />  protocol= "tcp" port= "32400" /> 

Сохраните файл и перезагрузите службу 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.

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

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

firewalld брандмауэр iptables centos безопасность

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *