Red Hat System Administration II 8.2

Глава 11. Управление сетевой безопасностью

Аннотация

Цель Управление сетевыми подключениями к службам с помощью системного брандмауэра и правил SELinux
Задачи
  • Принятие и отклонение сетевых подключений к системным службам с помощью правил firewalld

  • Управление использованием сетевыми службами определенных сетевых портов с помощью меток портов SELinux

Разделы
  • Управление серверными брандмауэрами (и упражнение)

  • Управление метками портов SELinux (и упражнение)

Лабораторная работа

Управление серверными брандмауэрами

Управление серверными брандмауэрами

Задачи

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

Концепции архитектуры брандмауэра

Ядро Linux содержит netfilter ― платформу для операций с сетевым трафиком, таким как фильтрация пакетов, преобразование сетевых адресов и преобразование портов. Netfilter внедряет в ядро обработчики, которые перехватывают вызовы функций и сообщения, позволяя другим модулям ядра взаимодействовать напрямую с сетевым стеком ядра. Программное обеспечение брандмауэра использует эти обработчики для регистрации правил фильтрации и функций изменения пакетов, что позволяет обрабатывать каждый пакет, проходящий через сетевой стек. Любой входящий, исходящий или переадресуемый сетевой пакет может быть программно проверен, изменен, отброшен или маршрутизирован до того, как он достигнет компонентов или приложений в пространстве пользователя. Netfilter ― это основной компонент в брандмауэрах Red Hat Enterprise Linux 8.

Nftables как усовершенствованная версия netfilter

Ядро Linux также содержит nftables ― новую подсистему фильтрации и классификации пакетов, в которой используется усовершенствованный код netfilter, но сохраняется архитектура netfilter, например обработчики сетевых стеков, система отслеживания подключений и функция ведения журналов. Преимущества nftables — это более быстрая обработка пакетов, более быстрое обновление наборов правил и одновременная обработка IPv4 и IPv6 на основе одних и тех же правил. Еще одно важное различие между nftables и netfilter ― их интерфейсы. Netfilter настраивается при помощи различных утилит, включая iptables, ip6tables, arptables и ebtables, которые устарели. Nftables использует лишь одну утилиту пространства пользователя ― nft, что позволяет осуществлять управление всеми протоколами через единый интерфейс и избежать конфликтов, связанных с большим разнообразием клиентских интерфейсов и разными интерфейсами netfilter.

Введение в firewalld

Firewalld ― это диспетчер динамического брандмауэра, клиентский интерфейс для платформы nftables, использующий команду nft. До появления nftables подсистема firewalld использовала команду iptables для настройки netfilter напрямую (что является улучшенной альтернативой службе iptables). В RHEL 8 firewalld остается рекомендуемым клиентским интерфейсом, который управляет наборами правил брандмауэра с помощью nft. Firewalld может читать файлы конфигурации и наборы правил iptables и управлять ими, используя xtables-nft-multi для преобразования объектов iptables напрямую в правила и объекты nftables. Подсистему firewalld можно настроить на использование серверной части iptables в сложных случаях, когда существующие наборы правил iptables не могут быть должным образом обработаны командой nft, но делать это не рекомендуется.

Приложения отправляют запросы в подсистему через интерфейс D-Bus. Подсистема firewalld, доступная в RPM-пакете firewalld, не входит в минимальную установку, но входит в базовую установку. Firewalld упрощает управление брандмауэром, распределяя весь сетевой трафик по зонам. Трафик обрабатывается правилами брандмауэра для соответствующей зоны на основе таких критериев, как IP-адрес источника пакета и входящий сетевой интерфейс. Каждая зона имеет собственный список портов и служб, которые могут быть открыты или закрыты.

Примечание

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

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

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

Зона по умолчанию ― это не отдельная зона, а назначение в существующую зону. Изначально firewalld назначает public в качестве зоны по умолчанию и сопоставляет кольцевой (loopback) интерфейс lo с зоной trusted.

Большинство зон пропускают через брандмауэр трафик, соответствующий списку определенных портов и протоколов, например 631/udp, или стандартных служб, например ssh. Трафик, который не соответствует разрешенному порту/протоколу или службе, как правило, отклоняется. (Зона trusted, пропускающая весь трафик по умолчанию, — единственное исключение из этого правила.)

Стандартные зоны

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

Таблица 11.1. Конфигурация зон firewalld по умолчанию

Название зоныКонфигурация по умолчанию
trustedПропускает весь входящий трафик.
home Отклоняет входящий трафик, если он не связан с исходящим трафиком или не соответствует стандартным службам ssh, mdns, ipp-client, samba-client и dhcpv6-client.
internal Отклоняет входящий трафик, если он не связан с исходящим трафиком или не соответствует стандартным службам ssh, mdns, ipp-client, samba-client и dhcpv6-client (как и зона home).
work Отклоняет входящий трафик, если он не связан с исходящим трафиком или не соответствует стандартным службам ssh, ipp-client и dhcpv6-client.
public Отклоняет входящий трафик, если он не связан с исходящим трафиком или не соответствует стандартным службам ssh и dhcpv6-client. Зона по умолчанию для добавляемых сетевых интерфейсов.
external Отклоняет входящий трафик, если он не связан с исходящим трафиком или не соответствует стандартной службе ssh. Исходящий трафик IPv4, перенаправляемый через эту зону, замаскирован (masqueraded) под поступающий с адреса IPv4 исходящего сетевого интерфейса.
dmz Отклоняет входящий трафик, если он не связан с исходящим трафиком или не соответствует стандартной службе ssh.
block Отклоняет весь входящий трафик, если он не связан с исходящим трафиком.
drop Блокирует весь входящий трафик, если он не связан с исходящим трафиком (даже не выдает сообщения об ошибках ICMP).

Список доступных стандартных зон и описание их предполагаемого использования см. на man-странице firewalld.zones(5).

Стандартные службы

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

Таблица 11.2. Стандартные службы firewalld

Название службыКонфигурация
ssh Локальный SSH-сервер. Трафик к 22/tcp.
dhcpv6-clientЛокальный клиент DHCPv6. Трафик к 546/udp в сети fe80::/64 IPv6.
ipp-clientЛокальная печать IPP. Трафик к 631/udp.
samba-clientЛокальный файл Windows и клиент совместного доступа к принтеру. Трафик к 137/udp и 138/udp.
mdnsРазрешение имен в сегменте локальной сети с помощью многоадресной системы DNS (mDNS). Трафик к 5353/udp на адреса многоадресной рассылки 224.0.0.251 (IPv4) или ff02::fb (IPv6).

Примечание

Многие стандартные службы включены в пакет firewalld. Используйте команду firewall-cmd --get-services, чтобы отобразить список этих служб. Файлы конфигурации для стандартных служб находятся в каталоге /usr/lib/firewalld/services в формате, определенном на man-странице firewalld.zone(5).

Используйте стандартные службы или напрямую укажите нужные порт и протокол. Для просмотра стандартных служб и определения дополнительных служб можно использовать графический интерфейс веб-консоли.

Настройка брандмауэра

Системные администраторы могут работать с firewalld тремя способами:

  • редактирование файлов конфигурации в /etc/firewalld/ напрямую (этот способ не рассматривается в данной главе);

  • графический интерфейс веб-консоли;

  • утилита командной строки firewall-cmd.

Настройка служб брандмауэра с помощью веб-консоли

Чтобы настроить службы брандмауэра с помощью веб-консоли, необходимо войти в систему с привилегированным доступом, установив флажок Reuse my password for privileged tasks. Таким образом, можно будет выполнять команды с правами sudo для изменения служб брандмауэра.

Рисунок 11.1: Вход на веб-консоль с правами привилегированного пользователя

Нажмите Networking в меню навигации слева, чтобы отобразить раздел Firewall на главной странице Networking. Щелкните ссылку Firewall, чтобы открыть список разрешенных служб (Allowed Services).

Рисунок 11.2: Страница Networking на веб-консоли

В списке разрешенных служб указаны службы, которые в данный момент разрешены брандмауэром. Нажмите стрелку (>) слева от названия службы, чтобы просмотреть сведения о службе. Чтобы добавить службу, нажмите кнопку Add Services... в правом верхнем углу страницы Firewall Allowed Services.

Рисунок 11.3: Список разрешенных служб брандмауэра на веб-консоли

На странице Add Services показаны доступные стандартные службы.

Рисунок 11.4: Экран добавления служб брандмауэра на веб-консоли

Чтобы выбрать службу, найдите ее в списке или введите в текстовом поле Filter Services. В следующем примере в текстовое поле поиска вводится строка http для поиска служб, содержащих эту строку (то есть, веб-служб). Установите флажок слева от служб, которым необходимо предоставить доступ через брандмауэр. Нажмите кнопку Add Services, чтобы завершить процесс.

Рисунок 11.5: Поиск служб брандмауэра с помощью фильтра на веб-консоли

Снова откроется страница Firewall Allowed Services, где можно просмотреть обновленный список разрешенных служб.

Рисунок 11.6: Список разрешенных служб брандмауэра на веб-консоли

Настройка брандмауэра из командной строки

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

В таблице ниже указаны наиболее часто используемые команды firewall-cmd с пояснениями. Почти все команды будут работать с конфигурацией среды выполнения (runtime), если не указана опция --permanent. Если опция --permanent указана, необходимо активировать настройку, выполнив команду firewall-cmd --reload, которая считывает текущую постоянную (permanent) конфигурацию и применяет ее в качестве новой конфигурации среды выполнения. Многие из указанных команд принимают опцию --zone=ZONE, которая определяет, на какую зону они влияют. Если требуется маска сети, используйте нотацию CIDR, например 192.168.1/24.

Команды firewall-cmdОбъяснение
--get-default-zone

Запросить текущую зону по умолчанию.

--set-default-zone=ZONE

Задать зону по умолчанию. Будут изменены и конфигурация среды выполнения, и постоянная конфигурация.

--get-zones

Отобразить список всех доступных зон.

--get-active-zones

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

--add-source=CIDR [--zone=ZONE]

Направить весь трафик, поступающий с IP-адреса или из сети/маски сети, в указанную зону. Если опция --zone= не указана, будет использоваться зона по умолчанию.

--remove-source=CIDR [--zone=ZONE]

Удалить правило, направляющее весь трафик, поступающий с IP-адреса или из сети/маски сети, из указанной зоны. Если опция --zone= не указана, будет использоваться зона по умолчанию.

--add-interface=INTERFACE [--zone=ZONE]

Направить весь трафик, поступающий из INTERFACE, в указанную зону. Если опция --zone= не указана, будет использоваться зона по умолчанию.

--change-interface=INTERFACE [--zone=ZONE] Связать интерфейс с ZONE вместо его текущей зоны. Если опция --zone= не указана, будет использоваться зона по умолчанию.
--list-all [--zone=ZONE]

Отобразить список всех настроенных интерфейсов, источников, служб и портов для ZONE. Если опция --zone= не указана, будет использоваться зона по умолчанию.

--list-all-zones

Получить всю информацию по всем зонам (интерфейсы, источники, порты, службы).

--add-service=SERVICE [--zone=ZONE]

Пропустить трафик к SERVICE. Если опция --zone= не указана, будет использоваться зона по умолчанию.

--add-port=PORT/PROTOCOL [--zone=ZONE]

Пропустить трафик к портам PORT/PROTOCOL. Если опция --zone= не указана, будет использоваться зона по умолчанию.

--remove-service=SERVICE [--zone=ZONE]

Удалить SERVICE из разрешенного списка для зоны. Если опция --zone= не указана, будет использоваться зона по умолчанию.

--remove-port=PORT/PROTOCOL [--zone=ZONE]

Удалить порты PORT/PROTOCOL из разрешенного списка для зоны. Если опция --zone= не указана, будет использоваться зона по умолчанию.

--reload

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

В приведенных ниже примерах команд назначается зона по умолчанию dmz, весь трафик, поступающий из сети 192.168.0.0/24, назначается зоне internal и открываются сетевые порты для службы mysql в зоне internal.

[root@host ~]# firewall-cmd --set-default-zone=dmz
[root@host ~]# firewall-cmd --permanent --zone=internal \
--add-source=192.168.0.0/24
[root@host ~]# firewall-cmd --permanent --zone=internal --add-service=mysql
[root@host ~]# firewall-cmd --reload

Примечание

Для ситуаций, где базового синтаксиса firewalld недостаточно, можно добавить элементы rich-rule (более информативный синтаксис) для создания более сложных правил. Если и синтаксиса rich-rule недостаточно, можно использовать правила прямой (direct) настройки — по сути, исходный синтаксис nft, смешанный с правилами firewalld.

Эти расширенные режимы не рассматриваются в данной главе.

Ссылки

Man-страницы firewall-cmd(1), firewalld(1), firewalld.zone(5), firewalld.zones(5) и nft(8)