Перейти к содержимому

Настройка брандмауэра с помощью firewalld в CentOS 8

Введение

firewalld — программное обеспечение для управления брандмауэрами, поддерживаемое многими дистрибутивами Linux. Выступает в качестве клиентского интерфейса для встроенных в ядро Linux систем фильтрации пакетов nftables и iptables.

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

Предварительные требования

Для прохождения этого обучающего руководства нам потребуется сервер под управлением CentOS 8. Мы будем считать, что вы выполнили вход на этот сервер в качестве пользователя non-root user с привилегиями sudo.

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

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

Зоны

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

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

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

  • drop: самый низкий уровень доверия. Все входящие соединения отбрасываются без ответа и разрешаются только исходящие соединения.
  • block: аналогично вышеописанному, но запросы входящих соединений не просто отбрасываются, а отклоняются с сообщением  «icmp-host-prohibited» или  «icmp6-adm-prohibited»
  • public: публичные сети, к которым нет доверия. Вы не доверяете другим компьютерам, но можете разрешать отдельные входящие соединения на разовой основе.
  • external: внешние сети, если вы используете брандмауэр в качестве шлюза. Эта зона настроена для маскировки NAT, чтобы ваша внутренняя сеть оставалась частной, но доступной.
  • internal: другая сторона внешней зоны, используемая для внутренней части шлюза. Компьютеры в основном достойны доверия, доступны некоторые дополнительные службы.
  • dmz: используется для компьютеров в ДМЗ (изолированные компьютеры, у которых нет доступа к остальной части вашей сети). Разрешены только некоторые входящие соединения.
  • work: используется для рабочих компьютеров. Большинство компьютеров в сети являются доверенными. Могут быть разрешены некоторые дополнительные службы.
  • home: домашняя среда. Обычно подразумевается, что вы доверяете большей части других компьютеров и что будут приниматься запросы еще нескольких служб.
  • trusted: все компьютеры в сети являются доверенными. Наиболее открытый из доступных вариантов, который следует использовать с осторожностью.

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

Постоянство правил

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

Большинство операций firewall-cmd могут принимать флаг —permanent, указывающий на необходимость применения изменений к постоянной конфигурации. Кроме того, текущую конфигурацию брандмауэра можно сохранить в постоянной конфигурации с помощью команды firewall-cmd —runtime-to-permanent.

Такое разделение конфигурации времени исполнения и постоянной конфигурации позволяет безопасно тестировать правила на активном брандмауэре и просто перезагружать его в случае возникновения проблем.

Установка и активация firewalld

Брандмауэр firewalld установлен по умолчанию в некоторых дистрибутивах Linux, в том числе во многих образах CentOS 8. Однако вам может потребоваться установить firewalld самостоятельно:

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

После перезагрузки сервера брандмауэр запускается, сетевые интерфейсы помещаются в настроенные зоны (или возвращаются в заданные по умолчанию зоны), и все правила зон применяются к соответствующим интерфейсам.

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

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

Знакомство с текущими правилами брандмауэра

Прежде чем мы начнем вносить изменения, мы познакомимся со средой и правилами firewalld, используемыми по умолчанию.

Изучение параметров по умолчанию

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

Поскольку мы не отправили firewalld никаких команд для отклонения от основной зоны и никакие наши интерфейсы не настроены на привязку к другой зоне, эта зона будет единственной активной зоной (зоной, контролирующей трафик для наших интерфейсов). Это можно проверить с помощью следующей команды:

Здесь мы видим, что на нашем сервере брандмауэр контролирует один сетевой интерфейс (ens3). Управление обоими интерфейсами осуществляется в соответствии с правилами, заданными для зоны public.

Как же узнать, какие правила заданы для зоны public? Конфигурацию зоны по умолчанию можно распечатать с помощью следующей команды:

Из выводимых результатов мы видим, что эта зона активна и используется по умолчанию и что с ней связан интерфейс ens3 (все это мы уже знали из предыдущих запросов). Также мы видим, что эта зона разрешает трафик клиента DHCP (для назначения IP-адресов), SSH (для удаленного администрирования) и Cockpit (веб-консоль).

Изучение альтернативных зон

Мы получили представление о конфигурации зоны по умолчанию и активной зоны. Также мы можем получить информацию о других зонах.

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

Чтобы посмотреть конкретную конфигурацию, относящуюся к зоне, необходимо добавить параметр —zone= к команде —list-all:

Вы можете вывести все определения зон, используя опцию —list-all-zones. Возможно вы захотите вывести результаты на пейджер для удобства просмотра:

Далее мы узнаем о назначении зон сетевым интерфейсам.

Выбор зон для интерфейсов

Если вы не настроили сетевые интерфейсы иным образом, каждый интерфейс будет помещен в зону по умолчанию при запуске брандмауэра.

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

Для перемещения интерфейса между зонами во время сеанса следует использовать параметр —zone= в сочетании с параметром —change-interface=. Как и для всех остальных команд, изменяющих брандмауэр, вам потребуется использовать sudo.

Например, интерфейс eth0 можно переместить в зону home с помощью следующей команды:

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

Чтобы убедиться в успешности операции мы можем снова запросить активные зоны:

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

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

Вы можете изменить зону по умолчанию с помощью параметра —set-default-zone=. При этом немедленно изменятся все интерфейсы, использующие зону по умолчанию:

Установка правил для приложений

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

Добавление службы к зонам

Самый простой метод заключается в том, чтобы добавлять необходимые службы или порты в используемые зоны. Список доступных определений служб можно получить с помощью опции —get-services:

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

Вы можете активировать службу для зоны с помощью параметра —add-service=. Данная операция будет нацелена на зону по умолчанию или на другую зону, заданную параметром —zone=. По умолчанию изменения применяются только к текущему сеансу брандмауэра. Для изменения постоянной конфигурации брандмауэра следует использовать флаг —permanent.

Например, если у нас запущен веб-сервер, обслуживающий стандартный трафик HTTP, мы можем временно разрешить этот трафик для интерфейсов в зоне public с помощью следующей команды:

Вы можете опустить флаг —zone=, если хотите внести изменения в зону по умолчанию. Для проверки успешного выполнения операции можно использовать команду —list-all или —list-services:

После подтверждения надлежащей работы всех систем вы можете изменить постоянные правила брандмауэра, чтобы служба была доступна после перезагрузки системы. Чтобы сделать предыдущие изменения постоянными, нужно ввести их повторно и добавить флаг —permanent:

Также можно использовать флаг —runtime-to-permanent для сохранения текущей конфигурации брандмауэра в постоянной конфигурации:

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

Если вы хотите убедиться. что изменения успешно сохранены в постоянной конфигурации, добавьте флаг —permanent к команде —list-services. Вам потребуются привилегии sudo для выполнения любых операций с флагом —permanent:

Теперь в зоне public разрешен веб-трафик HTTP на порту 80. Если ваш веб-сервер настроен для использования SSL/TLS, вы также можете добавить службу https. Мы можем добавить ее в текущий сеанс и постоянный набор правил с помощью следующей команды:

Что делать, если подходящая служба отсутствует?

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

В этой ситуации у вас будет два варианта.

Открытие порта для зон

Проще всего добавить поддержку определенного приложения можно посредством открытия используемых им портов в соответствующих зонах. Для этого нужно указать порт или диапазон портов, а также протокол (TCP или UDP), связанный с портами.

Например, если наше приложение работает на порту 5000 и использует TCP, мы можем временно добавить его в зону public с помощью параметра —add-port=. Протоколы могут назначаться как tcp или udp:

Мы можем проверить успешность назначения с помощью операции —list-ports:

Также можно указать последовательный диапазон портов, разделив начальный и конечный порты диапазона дефисом. Например, если наше приложение используйте порты UDP с 4990 по 4999, мы можем открыть их на public с помощью следующей команды:

После тестирования мы вероятно захотим добавить это правило в брандмауэр на постоянной основе. Используйте для этого sudo firewall-cmd —runtime-to-permanent или запустите команды снова с флагом —permanent:

Определение службы

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

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

Сохраните и закройте файл.

Перезагрузите брандмауэр, чтобы получить доступ к новой службе:

Теперь вы увидите ее в списке доступных служб:

Теперь вы можете использовать эту службу в зонах, как и обычно.

Создание собственных зон

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

Например, вы можете захотеть создать для своего веб-сервера зону с именем publicweb. При этом вы можете также захотеть использовать другую зону для службы DNS в вашей частной сети. Эту зону вы можете назвать privateDNS.

При добавлении зоны вы должны добавить ее в постоянную конфигурацию брандмауэра. Затем вы можете произвести перезагрузку для активации конфигурации для текущего сеанса. Например, мы можем создать две описанные выше зоны, введя следующие команды:

Вы можете проверить их наличие в постоянной конфигурации с помощью следующей команды:

Как указывалось ранее, пока они будут недоступны в работающем брандмауэре:

Перезагрузите брандмауэр, чтобы добавить эти зоны в активную конфигурацию:

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

Для зоны privateDNS можно добавить службу DNS:

Затем мы можем изменить интерфейсы на новые зоны, чтобы протестировать их:

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

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

Проверьте правильность назначения зон:

Убедитесь, что в обеих зонах доступны соответствующие службы:

Вы успешно настроили собственные зоны! Если вы захотите задать одну из этих зон по умолчанию для других интерфейсов, используйте для настройки параметр

Заключение

Теперь вы должны неплохо понимать принципы администрирования службы firewalld в системе CentOS на каждодневной основе.

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

Дополнительную информацию о firewalld можно найти в официальной документации по firewalld.

Опубликовано вLinux

Ваш комментарий будет первым

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

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