Глава 14. Настройка Межсетевого экрана при помощи firewalld

Межсетевой экран жизненно необходим при защите вычислительной системы или сетевых компьютеров от внешних атак (обычно из внешних источников через Интернет подключения). Например, всякий напрямую подключённый к внешнему соединению компьютер обязан исполнять межсетевой экран для защиты от вредоносной активности. Аналогично, всякая внутренняя сетевая среда обязана обладать неким видом межсетевого экрана между нею и внешним подключением к Интернету.

Дистрибутивы Linux предоставляются с решением межсетевого экрана в нескольких формах. В случае RHEL9 это имеет форму службы с названием firewalld.

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

Введение в firewalld

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

Данная система firewalld предоставляет гибкий способ управления входящим обменом. Такое облако межсетевого экрана, скажем, была настроена для блокирования обмена возникающего от конкретного внешнего IP адреса или для предотвращения всего обмена, появляющегося в определённом порту TCP/IP. Правила могут также определяться для пересылки входящего обмена в различные системы или действовать в качестве шлюза Интернета для защиты прочих компьютеров в сетевой среде.

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

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

Зоны

По умолчанию firewalld устанавливается с диапазоном предварительно настроенных зон. Зона это предварительно настроенный набор правил, который может применяться быстро для данной системы в любой момент реализации конфигураций межсетевого экрана для конкретных ситуаций. Чёрная зона, к примеру, блокирует входящий обмен, в то время как домашняя зона выставляет менее строгие правила в предположении, что данная система запущена в более сохранной среде, в которой ожидается более высокий уровень доверия. Во всякую систему могут добавляться новые зоны, а уже имеющиеся зоны могут видоизменяться для добавления или удаления правил. Зоны могут также удаляться из соответствующей системы целиком. Таблица 14-1 перечисляет тот набор зон, которые по умолчанию доступны в системе RHEL9:

Таблица 1-14. Зоны RHEL9
Зона Описание

drop

Наиболее безопасная зона. Допустимы только исходящие соединения, а все входящие соединения отбрасываются (dropped) без какого бы то ни было уведомления такому подключающемуся клиенту.

block

Аналогична зоне drop, за тем исключением, сто входящие соединения отвергаются с неким уведомлением icmp-host-prohibited или icmp6-adm-prohibited.

public

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

external

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

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

internal

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

dmz

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

work

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

home

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

trusted

Самая наименьшая зона безопасности. Принимаются все входящие подключения.

nm-shared

Эта зона внутренним образом применяется NetworkManager при реализации совместно используемых соединений.

libvirt

Используется виртуальными сетями, обычно когда её сервер выступает в роли хоста виртуальных машин.

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


<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="cockpit"/>
  <forward/>
</zone>
 	   

Интерфейсы

Всякая подключённая к Интернету или сетевой среде (или к ним обоим) система RHEL9 будет содержать по крайней мере один интерфейс в виде либо физического, либо виртуального сетевого устройства. Когда задействован firewalld, каждый из таких интерфейсов назначается некой зоне, что делает возможным выделять различным интерфейсам различные уровни безопасности межсетевого экрана. Например, рассмотрим содержащий два интерфейса сервер; один, соединяемый внешним образом, скорее всего будет выделен обладающей большими ограничениями external зоне, в то время как внутренний интерфейс может пользоваться internal зоной.

Службы

TCP/IP определяет множество служб, которые взаимодействуют по стандартным портам. Безопасные веб соединения HTTPS, например, пользуются портом 443, в то время как служба электронной почты SMTP применяет порт 25. Для выборочного разрешения входящего обмена под конкретные службы, в зоны могут добавляться правила firewalld. К примеру, зона home по умолчанию не допускает входящие соединения HTTPS. Такой обмен может быть разрешён добавлением правил допускающих входящие подключения HTTPS без наличия ссылок на конкретный номер порта.

Порты

Хотя на распространённые службы TCP/IP можно ссылаться при добавлении правил firewalld, могут возникать ситуации, при которых входящие подключения нуждаются в допуске по конкретному порту, который не выделен для данной службы. Этого можно достигать добавлением правил, которые ссылаются на определённый порт вместо служб. Такая методика была применена в Главе 7, Обзор веб интерфейса Cockpit, когда порт 9090 открывался чтобы допускать веб интерфейс Cockpit.

Проверка Состояния firewalld

По умолчанию для всех установок RHEL9 обсуждаемая нами служба firewalld установлена и включена. Значение состояния данной службы можно проверить такой командой:


# systemctl status firewalld
 firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-02-14 14:24:31 EST; 3 days ago
     Docs: man:firewalld(1)
 Main PID: 816 (firewalld)
    Tasks: 2 (limit: 25026)
   Memory: 30.6M
   CGroup: /system.slice/firewalld.service
           816 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
		

Если это необходимо, служба firewalld может быть установлена следующим образом:


# dnf install firewalld
		

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

Настройка Правил Межсетевого экрана при помощи firewall-cmd

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

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


# firewall-cmd --reload
		

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

Выявление и изменение Зоны по умолчанию

Для идентификации значения зоны по умолчанию (иначе говоря, той зоны, которой назначаются все интерфейсы, пока не выбрана конкретно иная зона), воспользуйтесь командой firewall-cmd:


# firewall-cmd --get-default-zone
public
		

Для изменения значения зоны по умолчанию на иную:


# firewall-cmd --set-default-zone=home
success
		

Отображение сведений о Зоне

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


# firewall-cmd --get-zones
block dmz drop external home internal libvirt nm-shared public trusted work
		

Получить список зон, активных совместно с теми интерфейсами, которым они назначены:


# firewall-cmd --get-active-zones
external
  interfaces: eth0
internal
 interfaces: eth1
		

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


# firewall-cmd --zone=home --list-all
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
		

Для перечисления всех служб, доступных на данный момент для включения в правило firewalld примените следующую команду:


# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine cockpit ...
		

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


# firewall-cmd --zone=public --list-services
cockpit dhcpv6-client ssh
		

Список правил порта можно получить так:


# firewall-cmd --zone=public --list-ports
9090/tcp
		

Добавление и удаление Служб Зоны

Для добавления службы в зону, в данной ситуации, добавления HTTPS в зону public, следует воспользоваться такой командой:


# firewall-cmd --zone=public --add-service=https
success
		

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


# firewall-cmd --zone=public --permanent --add-service=https
success
		

Чтобы проверить, что данная служба была добавлена на постоянной основе, убедитесь что флаг --permanent содержится при запросе данной службы в списке:


# firewall-cmd --zone=public --permanent --list-services
cockpit dhcpv6-client http https ssh
		

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


# firewall-cmd --reload
		

Удаляйте службу из зоны при помощи параметра -remove-service. Так как это изменение времени исполнения, данное правило будет восстановлено при запуске данной системы в следующий раз:


# firewall-cmd --zone=public --remove-service=https
		

Чтобы удалить службу на постоянной основе, воспользуйтесь флагом --permanent, не забывая перезапускать firewalld когда требуется вступления в действие этого изменения немедленно:


# firewall-cmd --zone=public --permanent --remove-service=https
		

Работа с Правилами на основе Портов

Чтобы разрешить конкретный порт, воспользуйтесь параметром --add-port. Обратите внимание, что при задании значения порта вручную требуется предоставления и номера порта и протокола (TCP или UDP):


# firewall-cmd --zone=public --permanent --add-port=5000/tcp
		

При добавлении правила в зону также допускается определение диапазона портов:


# firewall-cmd --zone=public --permanent --add-port=5900-5999/udp
		

Создание новой Зоны

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


# firewall-cmd --permanent --new-zone=myoffice
success
		

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


# firewall-cmd --reload
success
		

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

Как уже обсуждалось ранее, всякий интерфейс в системе должен быть назначен некой зоне. Значение выделенного интерфейсу зоны также можно изменить при помощи инструмента firewall-cmd . В приводимом далее примере наш интерфейс eth0 назначается зоне public:


# firewall-cmd --zone=public --change-interface=eth0
success
		

Маскарад

Маскарад (Masquerading) более известен в кругах сетевых администраторов в качестве трансляции сетевых адресов (NAT, Network Address Translation). При использовании системы RHEL9 в качестве шлюза в Интернет для вычислительной сетевой среды, маскарад позволяет всем внутренним системам пользоваться IP адресом данной системы RHEL9 при общении через Интернет. Это обладает тем преимуществом, что скрывает внутренние IP адреса всех систем от вредоносных внешних логических объектов, а также делает возможным избегать необходимости выделения общедоступного IP адреса каждому из компьютеров в данной сетевой среде.

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


# firewall-cmd --zone=external --query-masquerade
		

Для включения маскарада (не забывайте пользоваться флагом --permanent когда изменение производится на постоянной основе) примените следующую команду:


# firewall-cmd --zone=external --add-masquerade
		

Добавление Правил ICMP

ICMP (Internet Control Message Protocol, протокол управляющих сообщений Интернета) применяется клиентскими системами в сетях для отправки друг другу информации, например, сообщений об ошибках. Он также составляет основу команды ping, которая применяется как сетевыми администраторами, так и пользователями, для определения того, активен ли определённый клиент в сетевой среде. Соответствующая категория ICMP позволяет блокировать определённые типы сообщений ICMP. Например, администратор может заблокировать входящие сообщения ICMP ping (Echo Request, эхо- запроса), чтобы предотвращать атаки типа отказа в обслуживании (DoS, denial of service) на основе ping (когда сервер подвергается бомбардировке таким количеством сообщений ping, что становится невозможным его ответ на допустимые запросы).

Для просмотра доступных на включение в правила firewalld типов ICMP выполните такую команду:


# firewall-cmd --get-icmptypes
address-unreachable bad-header beyond-scope communication-prohibited destination-unreachable echo-reply ...
		

К примеру, приводимая ниже команда на постоянной основе добавляет правило блокирования сообщений echo-reply (запроса ping) для общедоступной зоны.


# firewall-cmd --zone=public --permanent --add-icmp-block=echo-reply
		

Реализация передачи Портов

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

Допустим, что система RHEL9 действует в качестве межсетевого экрана для внутренней сетевой среды компьютеров и одна из имеющихся в такой сети систем настроена в качестве веб сервера. Предположим, что эта система веб сервера обладает IP адресом 192.168.2.20. Имеющаяся запись домена для вебсайта, размещающегося в данной системе настроена на общедоступный IP адрес позади которого располагается система межсетевого экрана RHEL9. Когда по порту 80 в этой RHEL системе появляется запрос на веб страницу HTTP, той необходимо знать что с ним делать. Настраивая передачу (forwarding) порта становится возможным направлять весь веб обмен в ту внутреннюю систему, в которой размещён наш веб сервер (в данном случае, с IP адресом 192.168.2.20), причём либо продолжая пользоваться портом 80, либо преобразовывать весь обмен в иной порт в сервере назначения. На самом деле, передача порта может настраиваться для передачи всего обмена в иной порт в той же самой системе, в которой находится сам межсетевой экран (данное понятие носит название локального проброса).

Чтобы воспользоваться передачей (пробросом) порта, начните с разрешения маскарада как это показано ниже (в данной ситуации это выполняется в предположении, что этот интерфейс подключён к Интернету и назначен зоне external):


# firewall-cmd --zone=external --add-masquerade
		

Для передачи порта в иной локальный порт следует воспользоваться такой командой:


# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2750
		

В приведённом выше примере весь обмен TCP для порта 22 будет направляться в порт 2750 в этой локальной системе. Приводимая следом команда, с другой стороны, отправляет порт 20 из своей локальной системы в порт 22 в системе с IP адресом 192.168.0.19:


# firewall-cmd --zone=external \
          --add-forward-port=port=20:proto=tcp:toport=22:toaddr=192.168.0.19
		

Аналогичным образом, наша следующая команда переправляет порт20 в порт 2750 системы с IP адресом 192.168.0.18:


# firewall-cmd --zone=external --add-forward-port=port=20:proto=tcp:toport=2750:toaddr=192.168.0.18
		

Управление firewalld из интерфейса Cockpit

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

Для доступа к установкам firewalld, подпишитесь в интерфейсе Cockpit и выберите в панели навигации Networking. На этой странице управления сетями определите раздел Firewall, как это отражено на Рисунке 14-1 ниже и кликните по кнопке Edit rules and zones:

 

Рисунок 14-1


 

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

 

Рисунок 14-2


 

Управление firewalld с применением firewall-config

Если у вас имеется доступ к среде графического рабочего места, имеющийся межсетевой экран также можно настраивать при помощи средства firewall-config. Хотя он не устанавливается по умолчанию, firewall-config можно установить так:


# dnf install firewall-config
		

После его запуска появится основной экран firewall-config, иллюстрируемый Рисунком 14-3:

 

Рисунок 14-3


 

Ключевые области этого инструмента можно суммировать следующим образом:

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

  2. Контролирует будет ли отображаемая информация и все проделанные в данном средстве изменения применяться к правилам на время исполнения или на постоянной основе.

  3. Список зон, служб или IPset, назначенных в данной системе. Все сведения в данной панели зависят от того выбора, который осуществлён в полосе инструментов F. Выбранный из списка в этой панели элемент обновляет основную панель, помеченную как D.

  4. Это основная панель, содержащая сведения относительно текущей категории, выбранной из полосы инструментов E. В данном примере эта панель отображает службы для зоны public. Соответствующие флаговые кнопки вслед за каждой службой контролируют включена ли данная служба внутри этого межсетевого экрана. Внутри данной панели категории можно добавлять новые правила, либо настраивать или удалять уже имеющиеся правила.

  5. Контролирует то содержимое, которое отображается в панели D. Выбирая элементы из данной полосы отображается выбор текущего правила для избранной категории.

  6. Контролирует отображаемый в панели C список.

Средство firewall-config простое и интуитивно понятное для его использования, к тому же позволяет для выполнения в визуальной среде многие из задач, доступных в firewall-cmd.

Заключение

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

Данная служба firewalld пользуется понятием зон для группирования наборов правил межсетевого экрана и содержит некий комплект предварительно заданных зон, спроектированных для того, чтобы соответствовать некому диапазону требований защиты межсетевым экраном. Эти зоны можно изменять для добавления или удаления правил, либо для создания и настройки целиком новых зон. Имеющиеся сетевые устройства в своей системе, которые соединены с сетями или Интернетом носят название интерфейсов. Всякий интерфейс, в свою очередь, назначается некой зоне. Первейшими средствами для работы с firewalld являются инструмент командной строки firewall-cmd и утилита firewall-config. Минимальные варианты управления межсетевым экраном также доступны через веб интерфейс Cockpit.