From Fedora Project Wiki
Line 476: Line 476:
Поддержка ebtables нужна для удовлетворения всех потребностей демона libvirt, а также чтобы предотвратить проблемы доступа между ip*tables и ebtables на уровне вспомогательных модулей ядра для межсетевого экрана. Все эти команды получают доступ к одним и тем же структурам, поэтому они не должны использоваться одновременно.
Поддержка ebtables нужна для удовлетворения всех потребностей демона libvirt, а также чтобы предотвратить проблемы доступа между ip*tables и ebtables на уровне вспомогательных модулей ядра для межсетевого экрана. Все эти команды получают доступ к одним и тем же структурам, поэтому они не должны использоваться одновременно.


=== Конфигурация по умолчанию (для отката), хранящаяся в /usr/lib/firewalld ===
=== Конфигурация по умолчанию / для отката, хранящаяся в /usr/lib/firewalld ===


This directory contains the default and fallback configuration provided by firewalld for icmptypes, services and zones. The files provided with the firewalld package should not get changed and the changes are gone with an update of the firewalld package. Additional icmptypes, services and zones can be provided with packages or by creating files.
Данная директория содержит конфигурацию по умолчанию / для отката, обеспечиваемую FirewallD для типов ICMP, служб и зон. Файлы, предоставляемые пакетом FirewallD, не должны изменяться, изменения производятся при обновлении пакета FirewallD. Дополнительные типы ICMP, службы и зоны могут быть предоставлены соответствующими пакетами или созданием соответствующих файлов.


=== Системные параметры конфигурации, хранящиеся в /etc/firewalld ===
=== Системные параметры конфигурации, хранящиеся в /etc/firewalld ===

Revision as of 06:13, 30 April 2013

Динамический брандмауэр с использованием FirewallD (firewall daemon / демон межсетевого экрана)

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

Прежняя модель брандмауэра (с применением system-config-firewall/lokkit) была статической и каждое изменение требовало полной перезагрузки межсетевого экрана. Такая модель также подразумевала и выгрузку модулей ядра, обеспечивающих функционирование брандмауэра, а также загрузку модулей, необходимых для работы новой конфигурации. Выгрузка модулей приводила к нарушению состояния межсетевого экрана и установленных соединений.

С другой стороны, FirewallD обеспечивает динамическое управление брандмауэром и применяет изменения конфигурации без перезагрузки всего межсетевого экрана. Следовательно, нет необходимости перезагружать все модули ядра, обеспечивающие функционирование брандмауэра. Но использование FirewallD требует, чтобы все изменения в конфигурации межсетевого экрана выполнялись именно демоном, для обеспечения соответствия в состояниях демона и брандмауэра. FirewallD не может анализировать правила брандмауэра, добавленные консольными утилитами ip*tables и ebtables.

FirewallD предоставляет информацию об активных в текущее время параметрах межсетевого экрана через шину D-BUS, а также утверждает изменения, полученные посредством D-BUS, использую метод аутентификации PolicyKit.

Демон

Приложения, демоны и пользователь могут сделать запрос через D-BUS для разрешения функции брандмауэра. Это может быть одна из предопределённых функций межсетевого экрана, таких как комбинации служб, порта и протокола, перенаправление порта/пакета, маскарадинг или блокирование ICMP. Функция может быть включена на определённое время или может быть снова отключена.

С помощью так называемого прямого интерфейса другие службы (например, такие как libvirt) могут добавлять собственные правила, используя аргументы и параметры iptables.

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

Статический межсетевой экран (system-config-firewall/lokkit)

Действующая статическая модель брандмауэра (с применением system-config-firewall и lokkit) всё ещё будет доступна и пригодна к использованию, но не одновременно с запущенным FirewallD. Пользователь либо администратор могут принимать решение, какой из вариантов межсетевого экрана следует исползовать, путём запуска соответствующей службы.

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

FirewallD не зависит от system-config-firewall, тем не менее, их не следует использовать одновременно.

Что такое зона?

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

Большинство зон являются изменяемыми, но также есть и неизменяемые зоны. Неизменяемые зоны нельзя настроить, не существует способа их перегрузить.

Определённые заранее службы

Служба ― это комбинация записей портов и/или протоколов. Опционально могут добавляться вспомогательные модули, а также адрес назначения IPv4 и IPv6.

Порты и протоколы

Определение портов TCP или UDP, где порты могут представлять собой единственный порт либо диапазон поротов.

Блоки ICMP

Отдельные блоки межсетевого протокола управляющих сообщений (Internet Control Message Protocol, ICMP). Эти блоки являются либо информационными запросами, либо сообщениями, созданными в ответ на информационные запросы, либо сообщениями об ошибках.

Маскарадинг

Адреса частной сети спрятаны за доступным извне адресом IP и привязаны к нему. Это разновидность трансляции адресов.

Проброс портов

Порт переназначается на другой порт и/или другой узел.

Какие доступны зоны?

Предоставляемые FirewallD зоны по умолчанию отсортированы в соответствии с уронями доверия ― от ненадёжного до доверенного:

Сброс (drop, неизменяемая зона)

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

Блокирование (block, неизменяемая зона)

Все входящие сетевые соединения отклоняются с сообщениями icmp-host-prohibited (для IPv4) и icmp6-adm-prohibited (для IPv6). Возможны только инициированные в рамках данной системы сетевые соединения.

Общественное место (public)

Предназначено для использования в общественных местах. Остальные компьютеры сети считаются ненадёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.

"Внешняя" сеть (external)

Предназначено для использования во "внешних" сетях с активированным режимом маскарадинга, особенно с применением роутеров. Остальные компьютеры сети считаются ненадёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.

"Безоружная" зона (demilitarized zone, DMZ)

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

Рабочее пространство (work)

Предназначено для использования в рабочем пространстве. Остальные компьютеры сети, по большей части, считаются надёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.

Домашняя сеть (home)

Предназначено для использования в домашних сетях. Остальные компьютеры сети, по большей части, считаются надёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.

"Внутренняя" сеть (internal)

Предназначено для использования во "внутренних" сетях. Остальные компьютеры сети, по большей части, считаются надёжными (с точки зрения причинения вреда вашему ПК). Разрешены лишь отдельные входящие соединения.

Доверенная сеть (trusted, неизменяемая зона)

Разрешены все сетевые соединения.

Какую зону следует использовать?

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

Как добавить или настроить зоны?

Чтобы создать или настроить зоны, вы можете использовать какой-либо из интерфейсов FirewallD, предназначенных для обработки и изменения конфигурации. Ими являются графическое средство конфигурирования firewall-config, консольная утилита firewall-cmd или интерфейс D-BUS. Также вы можете создать или скопировать файл зоны в одном из каталогов конфигурации. Директория /etc/firewalld/zone используется для хранения настроек по-умолчанию, а также для возврата к ним в случае необходимости; каталог @PREFIX@/lib/firewalld/zones используется для хранения изменённых файлов конфигурации либо созданных пользователем.

Как указать или изменить зону для соединения?

Для соединения тип зоны сохраняется в значении опции ZONE= для ifcfg. Если данная опция отсутствует или ей не присвоено значение, то применяется зона, указанная FirewallD по умолчанию.

Если соединение управляется NetworkManager, то для изменения зоны вы также можете использовать nm-connection-editor.

Сетевые соединения, обрабатываемые NetworkManager

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

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

Кроме того, NetworkManager указывает FirewallD удалить соединения из зон в том случае, если соединение разорвано.

Если FirewallD запускается или перезапускается посредством systemd или скриптов инициализации (init scripts), FirewallD уведомляет NetworkManager и соединения добавятся в соответствующие зоны.

Сетевые соединения, обрабатываемые сетевыми скриптами (network scripts)

Для соединений, обрабатываемых сетевыми скриптами, существуют ограничения. Не существует демона, который мог бы указать FirewallD отнести соединения к той или иной зоне. Это делается только в случае использования скриптов ifcfg-post. Поэтому изменения в именах, произведённые после, не могут буть сообщены FirewallD. Кроме того, перезапуск FirewallD в случае, если соединения уже активны, приведёт к потере связи соединений с зонами. Но существуют идеи, как это исправить. Самая простая из них — относить все соединения к зоне, указанной FirewallD по умолчанию, если не задано другого.

Зона определяет функции межсетевого экрана, разрешённые в данной зоне:

Работа с FirewallD

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

Использование firewall-cmd

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

Общие положения об использовании

  • Получение статуса FirewallD:
 firewall-cmd --state

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

 firewall-cmd --state && echo "Running" || echo "Not running"
  • Перезагрузка брандмауэра без потери информации о состоянии:
 firewall-cmd --reload

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

  • Получение списка всех поддерживаемых зон:
 firewall-cmd --get-zones

Данная команда выводит список, разделённый пробелами.

  • Получение списка всех поддерживаемых служб:
 firewall-cmd --get-services

Данная команда выводит список, разделённый пробелами.

  • Получение списка всех поддерживаемых типов ICMP:
 firewall-cmd --get-icmptypes

Данная команда выводит список, разделённый пробелами.

  • Вывод всех зон с включённым функционалом:
 firewall-cmd --list-all-zones

Формат вывода таков:

 <zone>
   interfaces: <interface1> ..
   services: <service1> ..
   ports: <port1> ..
   forward-ports: <forward port1> ..
   icmp-blocks: <icmp type1> ..
   
   ..
  • Отображение зоны <zone> с включённым функционалом (если зона не задана, задействуется зона, указанная по умолчанию):
 firewall-cmd [--zone=<zone>] --list-all
  • Получение зоны, указанной по умолчанию для сетевых соединений:
 firewall-cmd --get-default-zone
  • Задание зоны по умолчанию:
 firewall-cmd --set-default-zone=<zone>

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

  • Получение активных зон:
 firewall-cmd --get-active-zones

Данная команда выводит интерфейсы, указанные в качестве части зоны, в следующей форме:

 <zone1>: <interface1> <interface2> ..
 <zone2>: <interface3> ..
  • Получение зон, относящихся к интерфейсу:
 firewall-cmd --get-zone-of-interface=<interface>

Данная команда выводит имя зоны, если интерфейс является частью зоны.

  • Добавление интерфейса в зону:
 firewall-cmd [--zone=<zone>] --add-interface=<interface>

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

  • Изменение зоны, которой принадлежит интерфейс:
 firewall-cmd [--zone=<zone>] --change-interface=<interface>

Данная команда схожа с опцией --add-interface, но она соотносит интерфейс новой зоне, даже если до этого он принадлежал другой зоне.

  • Удаление интерфейса из зоны:
 firewall-cmd [--zone=<zone>] --remove-interface=<interface>
  • Сделать запрос, относится ли интерфейс к зоне:
 firewall-cmd [--zone=<zone>] --query-interface=<interface>

Осуществляет возврат, если интерфейс в зоне. Видимого ответного сообщения нет.

  • Вывод включённых в зоне служб:
 firewall-cmd [ --zone=<zone> ] --list-services
  • Включение "режима паники", блокирующего весь сетевой трафик в случае крайней необходимости:
 firewall-cmd --enable-panic
  • Отключение "режима паники":
 firewall-cmd --disable-panic
  • Сделать запрос на предмет "режима паники":
 firewall-cmd --query-panic

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

 firewall-cmd --query-panic && echo "On" || echo "Off"

Обработка зон с изменяемыми во время выполнения параметрами

В режиме выполнения изменения в зонах не постоянны. Изменения будут применены после перезагрузки или перезапуска.

  • Включение службы в пределах зоны:
 firewall-cmd [--zone=<zone>] --add-service=<service> [--timeout=<seconds>]

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

  • Пример: Включение службы ipp-client в пределах зоны на 60 секунд:
 firewall-cmd --zone=home --add-service=ipp-client --timeout=60
  • Пример: Включение службы http в пределах зоны, указанной по умолчанию:
 firewall-cmd --add-service=http
  • Отключение службы для зоны:
 firewall-cmd [--zone=<zone>] --remove-service=<service>

Данная команда выключает службу для зоны. Если зона не задана, будет использована зона, указанная по умолчанию.

  • Пример: Отключение службы http для зоны home:
 firewall-cmd --zone=home --remove-service=http

Служба будет отключена для зоны. Если служба не включена в пределах зоны, то будет предупреждающее сообщение.

  • Сделать запрос, включена ли служба в пределах зоны:
 firewall-cmd [--zone=<zone>] --query-service=<service>

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

  • Включение сочетания порта и протокола в пределах зоны:
 firewall-cmd [--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]

Данная команда включает сочетание порта и протокола. Порт может представлять собой единственный порт <port> или диапазон портов <port>-<port>. Протоколом может быть как tcp, так и udp.

  • Отключение сочетания порта и протокола в пределах зоны:
 firewall-cmd [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
  • Сделать запрос, включено ли сочетание порта и протокола в пределах зоны:
 firewall-cmd [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>

Осуществляет возврат, если сочетание включено, видимого ответного сообщения нет.

  • Включение маскарадинга в пределах зоны:
 firewall-cmd [--zone=<zone>] --add-masquerade

Данная команда включает маскарадинг для зоны. Адреса частной сети спрятаны за доступным извне адресом IP и привязаны к нему. Это разновидность трансляции адресов, обычно используется в роутерах. Маскарадинг доступен только для IPv4 из-за ограничений ядра.

  • Отключение маскарадинга для зоны:
 firewall-cmd [--zone=<zone>] --remove-masquerade
  • Сделать запрос на предмет маскарадинга в пределах зоны:
 firewall-cmd [--zone=<zone>] --query-masquerade

Осуществляет возврат, если маскарадинг включён, видимого ответного сообщения нет.

  • Включение блока ICMP в пределах зоны:
 firewall-cmd [--zone=<zone>] --add-icmp-block=<icmptype>

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

  • Отключение блока ICMP для зоны:
 firewall-cmd [--zone=<zone>] --remove-icmp-block=<icmptype>
  • Сделать запрос на предмет блока ICMP в пределах зоны:
 firewall-cmd [--zone=<zone>] --query-icmp-block=<icmptype>

Осуществляет возврат, если блок включён, видимого ответного сообщения нет.

  • Пример: Включение блока сообщений "эхо-ответ" в зоне public:
 firewall-cmd --zone=public --add-icmp-block=echo-reply
  • Включение перенаправления или переназначения портов в пределах зоны:
 firewall-cmd [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }

Порт переназначается либо на такой же порт на другом узле, либо на другой порт на том же узле, либо на другой порт на другом узле. Порт может представлять собой единственный порт <port> или диапазон портов <port>-<port>. Протоколом может быть как tcp, так и udp. Значение опции toport может быть как портом <port>, так и диапазоном портов <port>-<port>. Значение опции toaddr является адресом IPv4. Перенаправление портов доступно только для IPv4 из-за ограничений ядра.

  • Отключение перенаправления или переназначения портов для зоны:
 firewall-cmd [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
  • Сделать запрос на предмет перенаправления или переназначения портов в пределах зоны:
 firewall-cmd [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }

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

  • Пример: Перенаправление ssh на узел 127.0.0.2 в пределах зоны home:
 firewall-cmd --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2

Обработка зон с постоянными/устойчивыми параметрами

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

  • Получение списка поддерживаемых постоянно служб:
 firewall-cmd --permanent --get-services
  • Получение списка поддерживаемых постоянно типов ICMP:
 firewall-cmd --permanent --get-icmptypes
  • Получение списка поддерживаемых постоянно зон:
 firewall-cmd --permanent --get-zones
  • Включение службы в пределах зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --add-service=<service>

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

  • Отключение службы для зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --remove-service=<service>
  • Сделать запрос, включена ли служба в пределах зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --query-service=<service>

Осуществляет возврат, если служба включена, видимого ответного сообщения нет.

  • Пример: Включение службы ipp-client в пределах зоны home на постоянно:
 firewall-cmd --permanent --zone=home --add-service=ipp-client
  • Включение сочетание порта и протокола в пределах зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --add-port=<port>[-<port>]/<protocol>
  • Отключение сочетания порта и протокола для зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
  • Сделать запрос, включено ли сочетание порта и протокола в пределах зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>

Осуществляет возврат, если сочетание включено, видимого ответного сообщения нет.

  • Пример: Включение порта 443/TCP для https в пределах зоны home на постоянно:
 firewall-cmd --permanent --zone=home --add-port=443/tcp
  • Включение маскарадинга в пределах зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --add-masquerade

Данная команда включает маскарадинг в пределах зоны. Адреса частной сети спрятаны за доступным извне адресом IP и привязаны к нему. Это разновидность трансляции адресов, обычно используется в роутерах. Маскарадинг доступен только для IPv4 из-за ограничений ядра.

  • Отключение маскарадинга для зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --remove-masquerade
  • Сделать запрос, включён ли маскарадинг в пределах зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --query-masquerade

Осуществляет возврат, если маскарадинг включён, видимого ответного сообщения нет.

  • Включение блока ICMP в пределах зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --add-icmp-block=<icmptype>

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

  • Отключение блока ICMP для зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --remove-icmp-block=<icmptype>
  • Сделать запрос, включён ли блок ICMP в пределах зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --query-icmp-block=<icmptype>

Осуществляет возврат, если блок ICMP включён, видимого ответного сообщения нет.

  • Пример: Включение блока сообщений "эхо-ответ" в зоне public на постоянно:
 firewall-cmd --permanent --zone=public --add-icmp-block=echo-reply
  • Включение перенаправления или переназначения портов в пределах зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }

Порт переназначается либо на такой же порт на другом узле, либо на другой порт на том же узле, либо на другой порт на другом узле. Порт может представлять собой единственный порт <port> или диапазон портов <port>-<port>. Протоколом может быть как tcp, так и udp. Значение опции toport может быть как портом <port>, так и диапазоном портов <port>-<port>. Значение опции toaddr является адресом IPv4. Перенаправление портов доступно только для IPv4 из-за ограничений ядра.

  • Отключение перенаправления или переназначения портов для зоны на постоянно:
 firewall-cmd --permanent [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
  • Сделать запрос на предмет постоянных перенаправления или переназначения портов в пределах зоны:
 firewall-cmd --permanent [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }

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

  • Пример: Перенаправление ssh на узел 127.0.0.2 в пределах зоны home на постоянно:
 firewall-cmd --permanent --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2

Прямые опции

Прямые опции предназначены, в основном, для возможности назначения пользовательских правил службам и приложениям. Правила не сохраняются и должны быть переопределены после перезагрузки или перезапуска. Аргументы <args> сквозной опции такие же, как и соответствующие аргументы iptables, ip6tables ebtables.

Ключ --direct следует указывать перед всеми прямыми опциями.

  • Передача команды через межсетевой экран; аргументами <args> могут быть все аргументы командной строки iptables, ip6tables и ebtables:
 firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb } <args>
  • Добавление новой последовательности <chain> таблице <table>:
 firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb } <table> <chain>
  • Удаление последовательности с именем <chain> из таблицы <table>:
 firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb } <table> <chain>
  • Сделать запрос, существует ли последовательность <chain> в таблице <table>; возвращает 0, если верно, иначе — 1:
 firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb } <table> <chain>

Осуществляет возврат, если последовательность существует, видимого ответного сообщения нет.

  • Получение перечня всех последовательностей, добавленных в таблицу <table>, в виде списка, разделённого пробелами:
 firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb } <table>
  • Добавление правила с аргументами <args> в последовательность <chain> в таблице <table> с приоритетом <priority>:
 firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
  • Удаление правила с аргументами <args> из последовательности <chain> в таблице <table>:
 firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <args>
  • Сделать запрос, существует ли правило с аргументами <args> в последовательности <chain> в таблице <table>; возвращает 0, если верно, иначе — 1:
 firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb } <table> <chain> <args>

Осуществляет возврат, если правило существует, видимого ответного сообщения нет.

  • Получение перечня всех правил, добавленных в последовательность <chain> в таблице <table>, в виде списка, состоящего из строк аргументов.
 firewall-cmd --direct --get-rules { ipv4 | ipv6 | eb } <table> <chain>

Функционал FirewallD на данный момент

Интерфейс D-BUS

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

Зоны

Сетевая зона определяет уровень доверия интерфейса, используемого для сетевого соединения. Существует несколько предопределённых зон, обеспечиваемых FirewallD. Опции конфигурации зоны и общий информационный файл описываются в man-странице firewalld.zone(5).

Службы

Служба может быть списком локальных портов и направлений, а также, кроме того, перечнем вспомогательных модулей межсетевого экрана, загружаемых автоматически, если служба включена. Использование предопределённых служб позволяет пользователю легче разрешать и запрещать доступ к службе. Опции конфигурации службы и общий информационный файл описываются в man-странице firewalld.service(5).

Типы ICMP

Межсетевой протокол управляющих сообщений (Internet Control Message Protocol, ICMP) используется для обмена информацией, а также сообщениями об ошибках в пределах IP-адресации (Internet Protocol, IP). Типы ICMP могут быть использованы в FirewallD для ограничения обмена этими сообщениями. Опции конфигурации типов ICMP и общий информационный файл описываются в man-странице firewalld.icmptype(5).

Прямой интерфейс

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

Конфигурация времени выполнения

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

Постоянная/устойчивая конфигурация

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

Апплет в системном трее

Апплет в системном трее firewall-applet визуализирует для пользователя состояние межсетевого экрана, а также проблемы с брандмауэром. Он также может использован для конфигурирования с помощью возможности запуска утилиты firewall-config.

Графическое средство конфигурирования

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

Консольный клиент

Консольная утилита firewall-cmd обеспечивает большую часть функционала графического средства по настройке.

Поддержка ebtables

Поддержка ebtables нужна для удовлетворения всех потребностей демона libvirt, а также чтобы предотвратить проблемы доступа между ip*tables и ebtables на уровне вспомогательных модулей ядра для межсетевого экрана. Все эти команды получают доступ к одним и тем же структурам, поэтому они не должны использоваться одновременно.

Конфигурация по умолчанию / для отката, хранящаяся в /usr/lib/firewalld

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

Системные параметры конфигурации, хранящиеся в /etc/firewalld

The system or user configuration stored here is either created by the system administrator or by customization with the configuration interface of firewalld or by hand. The files will overload the default configuration files.

To manually change settings of pre-defined icmptypes, zones or services, copy the file from the default configuration directory to the corresponding directory in the system configuration directory and change it accordingly.

It is not possible to overload immutable zones, because these may not get changed. If you are loading the defaults for a zone that has a default or fallback file, the file in /etc/firewalld will be renamed to <file>.old and the fallback will be used again.

Planned and Proposed Features

Firewall Abstraction Model

Adding an abstraction layer on top of ip*tables and ebtables firewall rules makes adding rules simple and more intuitive. The abstraction layer needs to be powerful, but also simple, which makes this not an easy task. A firewall language has to gen invented for this. Firewall rules have a fixed position and querying generic information about access state, access policies for ports and other firewall features is possible.

Support for conntrack

Conntrack is needed to be able to terminate established connections for features that get disabled. For some use cases it might not be good to terminate the connection: Enabling of a firewall service for a limited time to establish a persistent external connection.

User interaction mode

This is a special mode of in the firewall the user or admin can enable. All requests of applications to alter the firewall are directed to the user to get notified and granted or denied. It is possible to set a time limit for the acceptance of a connection and to limit it to hosts, networks or connections. It can be saved to behave the same in the future without notification.

An additional feature of this mode is direct external connection attempts on preselected services or ports to the user with the same features as the application initiated requests. The limitation on services and ports will also limit the amount of requests sent to the user.

User policy support

The administrator can define which users are able to use the User Interaction Mode and can also limit the firewall features, that can be used with it.

Port metadata information (proposed by Lennart Poettering)

To have a port independent metadata information would be good to have. The current model with a static assignment of ports and protocols from /etc/services is not a good solution and is not reflecting current use cases. Ports in applications or services are dynamic and therefore the port itself does not describe the use case.

This metadata information could be used to form simple rules for the firewall. Here are some examples:

 allow external access to file sharing applications or services
 allow external access to music sharing applications or services
 allow external access to all sharing applications or services
 allow external access to torrent file sharing applications or services
 allow external access to http web services

The metadata information here could not only be application specific, but also a group of use cases. For example the "all sharing" group or the "file sharing" group could match all sharing or file sharing applications, for example torrent file sharing. These are examples, therefore it might be that they are not useful.

There are two possible solutions to get metadata information in the firewall:

The first is to add it to netfilter (kernel space). This has the advantage, that it can be used by everyone, but also limits the use. To get user or system specific information into account, all these need to be implemented in kernel space also.

The other one would be to add this to a firewall daemon. These abstract rules could be used together with information like the trust level of the network connections, the user decision to share with as specific person/host or the hard rule of the administrator to forbid sharing completely.

The second solution would have the advantage that new metadata groups or changes in incorporation of trust levels, user preferences or administrator rules would not require to push a new kernel. Adding these kind of abstract rules to a firewall daemon would make it much more flexible. Even new security levels would be easy to add without kernel updates.

sysctld

At the moment there are sysctl settings that are not properly applied. This happens if the module providing the setting is not loaded at boot time when rc.sysinit runs or it the module gets reloaded at runtime. Another example is net.ipv4.ip_forward, which is needed for example for specific firewall settings, libvirt and also user/admin changes. If there are two apps or daemons enabling ip_forwarding only if needed, then it could happen that one of them is turning it off again without knowing that there is another one, that still needs it tuned on.

The sysctl daemon could solve this by having an internal use count for settings, that will make it possible to turn it off or go to the previous setting again if the requester reverted the request to change it.

Firewall Rules

Netfilter firewalls are always susceptible to rule ordering issues, because a rule does not have a fixed position in a chain. The position can change if other rules are added or removed in a position before that rule.

In the static firewall model a firewall change is recreating a clean and sane firewall setup limited to the features directly supported by system-config-firewall / lokkit. Firewall rules created by other applications are not integrated and s-c-fw / lokkit does not know about them if the customs rules file feature is not in use. Default chains are used and there is no safe way to add and remove rules without interfering with others.

The dynamic model has additional chains for the firewall features. These specific chains are called in a defined ordering and rules added to a chain could not interfere with reject or drop rules in chains that were called before. This makes it possible to have a more sane firewall configuration.

Here are example rules created by the daemon in the filter table with ssh, ipp-client and mdns enabled in the public zone, all other zones have been removed to simplify and shorten the output:

 *filter
 :INPUT ACCEPT [0:0]
 :FORWARD ACCEPT [0:0]
 :OUTPUT ACCEPT [0:0]
 :FORWARD_ZONES - [0:0]
 :FORWARD_direct - [0:0]
 :INPUT_ZONES - [0:0]
 :INPUT_direct - [0:0]
 :IN_ZONE_public - [0:0]
 :IN_ZONE_public_allow - [0:0]
 :IN_ZONE_public_deny - [0:0]
 :OUTPUT_direct - [0:0]
 -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
 -A INPUT -i lo -j ACCEPT
 -A INPUT -j INPUT_direct
 -A INPUT -j INPUT_ZONES
 -A INPUT -p icmp -j ACCEPT
 -A INPUT -j REJECT --reject-with icmp-host-prohibited
 -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
 -A FORWARD -i lo -j ACCEPT
 -A FORWARD -j FORWARD_direct
 -A FORWARD -j FORWARD_ZONES
 -A FORWARD -p icmp -j ACCEPT
 -A FORWARD -j REJECT --reject-with icmp-host-prohibited
 -A OUTPUT -j OUTPUT_direct
 -A IN_ZONE_public -j IN_ZONE_public_deny
 -A IN_ZONE_public -j IN_ZONE_public_allow
 -A IN_ZONE_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
 -A IN_ZONE_public_allow -d 224.0.0.251/32 -p udp -m udp --dport 5353 -m conntrack --ctstate NEW -j ACCEPT
 -A IN_ZONE_public_allow -p udp -m udp --dport 631 -m conntrack --ctstate NEW -j ACCEPT

Used is a deny/allow model to have a clear behaviour and at best no rule interferences. Icmp blocks for example will go to the IN_ZONE_public_deny chain if set for the public zone and will be handled before the rules in the IN_ZONE_public_allow chain.

This model makes it more easy to add or remove rules from a specific block without interfering with accept or drop rules from another block.