Настраиваем службу FirewallD

Начиная с Fedora 17, во всех клонах Red Hat Linux (например в Red Hat Enterprise Linux и CentOS 7) появилась новая служба FirewallD для динамического управления межсетевым экраном с поддержкой доверительных зон сетевых соединений или интерфейсов. Ввиду того, что FirewallD запускается как служба, новые правила можно добавлять без перезапуска, как это было с iptables, то есть без сброса установленного фаервола и установления соединений заново. Изменения в конфигурации могут быть сделаны в любое время, причем применяются мгновенно: сохранять или применять изменения не требуется. Служба  FirewallD использует инструментарий iptables (iptables tool) для взаимодействия с фильтром пакетов ядра.

Сравнение

Рассмотрим основные отличия FirewallD и iptables:

  • Служба iptables хранит конфигурацию в /etc/sysconfig/iptables в то время как FirewallD хранит ее в различных XML-файлах в /usr/lib/firewalld/ и /etc/firewalld/. Интересно заметить, что файл /etc/sysconfig/iptables не будет существовать, если современную систему Linux (например, Red Hat Enterprise Linux) установить с FirewallD по умолчанию.
  • Для iptables service каждое изменение означало сброс сброс старых правил и чтение всех новых из /etc/sysconfig/iptables, однако для FirewallD не существует понятия «воссоздания» правил; при конфигурации только различия в правилах учитываются и применяются. Таким образом, FirewallD может изменять настройки во время выполнения без потери старых соединений.

Основное сходство: оба iptables и FirewallD используют одинаковый инструментарий iptables (iptables tool).

Избавляемся от FirewallD

Если, являясь сторонником старой школы, мы решили избавиться от FirewallD и вернуться, к iptables, то это вполне возможно даже на CentOS 7:

# systemctl disable firewalld
# systemctl stop firewalld
# yum install iptables-services
# touch /etc/sysconfig/iptables
# touch /etc/sysconfig/ip6tables
# systemctl start iptables
# systemctl start ip6tables
# systemctl enable iptables
# systemctl enable ip6tables

Если же мы переходим на FirewallD, то разбираемся дальше.

Проверяем, установлены ли нужные пакеты, ставим если нужно

yum -y install firewalld firewall-config

Поехали!

Концепция зон FirewallD

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

Для использования в общих случаях создано несколько предопределённых зон:

  • drop – входящие сетевые пакеты сбрасываются, без ответа, допускаются только исходящие соединения
  • block – входящие сетевые соединения отклоняются с сообщением icmp-host-prohibited, допускаются только сетевые соединения инициированные внутри нашей системы.
  • public – при недоверии к компьютерам, разрешается устанавливать только конкретные входящие соединения.
  • external – для использования во внешних сетях с разрешенным маскарадингом, особенно для роутеров, разрешается устанавливать только конкретные входящие соединения
  • dmz – для компьютеров собственной demilitarized zone которые публично доступны с ограниченным доступом к нашей внутренней сети, разрешается устанавливать только конкретные входящие соединения.
  • work/home/internal – максимальное доверие к компьютерам, уверенность в том, что они не приченят вреда нашему компьютеру, разрешается устанавливать только конкретные входящие соединения
  • trusted – все сетевые соединения разрешены.

Конфигурация

FirewallD может быть настроен через инструмент конфигурации firewall-config с графическим интерфейсом, через командную строку firewall-cmd или интерфейс D-BUS.

Доступ к инструмент конфигурации firewall-config с графическим интерфейсом осуществляется командой firewall-config или же запуском через меню.

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

  • Services - trusted services that can be accessed from all hosts.
  • Ports - trusted ports that will be open in this zone
  • Masquerading - allows you to setup a host or router that connects your local network to the internet
  • Port Forwarding - add entries to allow port forward either from one port to another or one host to another.
  • ICMP Filters - trusted icmp services
  • Rich rules - use rich language to add complex rules
  • Interfaces - bind interfaces to the zone
  • Sources - bind source address or ares to the zone

На мой взгляд, наиболее удобным инструментом настройки остаётся командная строка и, соответственно, команда firewall-cmd. Рассмотрим наиболее употребимые команды:

КомандаЗначение
   
firewall-cmd --state узнать состояние FirewallD
firewall-cmd --reload перезагрузить FirewallD
firewall-cmd --get-zones вывести список всех заданных зон
firewall-cmd --get-services список всех поддерживаемых служб
firewall-cmd --get-active-zones список всех активных зон
firewall-cmd [--zone=] --add-interface= добавить интерфейс к зоне
firewall-cmd [--zone=] --change-interface= изменить интерфейс
firewall-cmd [--zone=] --remove-interface= удалить интерфейс из зоны
firewall-cmd --panic-on режим паники, блокирующий все сетевые соединения
firewall-cmd --panic-off отмена режима паники
firewall-cmd [--zone=] --add-service= [--timeout=] добавить службу к зоне
firewall-cmd [--zone=] --remove-service= [--timeout=] удалить службу из зоны
firewall-cmd [--zone=] --add-port=[-]/ [--timeout=] добавить порт к зоне
firewall-cmd [--zone=] --remove-port=[-]/ [--timeout=] удалить порт из зоны
firewall-cmd [--zone=] --add-masquerade добавить маскарадинг к зоне
firewall-cmd [--zone=] --remove-masquerade удалить маскарадинг
firewall-cmd [--zone=] --add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=} добавить проброс портов к зоне
firewall-cmd [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=| :toport=[-]:toaddr=} удалить проброс портов из зоны

 Конец.

 

16 комментарии

  • Павел

    написал Павел

    Понедельник, 08 Декабрь 2014 14:42

    Параметры командной строки Вы неверно указали, везде нужно два дефиса '--':
    firewall-cmd --state

    а у Вас то один дефис '-'
    firewall-cmd -state

    то вообще длинное тире '–'
    firewall-cmd [--zone=] –add-masquerade

  • Владимир Драч

    написал Владимир Драч

    Четверг, 11 Декабрь 2014 00:47

    Спасибо за замечание! Исправил текст.

  • SergKz

    написал SergKz

    Воскресенье, 08 Февраль 2015 05:50

    А если надо к зоне добавить не интерфейс, а ip адрес или диапазон - тогда как? все равно вручную в iptables?

  • Виктор

    написал Виктор

    Четверг, 19 Март 2015 11:55

    firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="172.16.0.0/12" service name="ftp" accept"

  • Владимир Драч

    написал Владимир Драч

    Пятница, 27 Март 2015 20:10

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

  • Павел

    написал Павел

    Вторник, 02 Июнь 2015 21:18

    Можно немного больше подробностей о зависимости выбранной стратегии роутинга и указанием диапазонов ip-адресов в правилах фаервола, вместо интерфейсов?

  • Владимир Драч

    написал Владимир Драч

    Воскресенье, 07 Июнь 2015 00:32

    Павел, какие именно подробности интересуют? Могу сказать, что в общем случае IP-адреса всё время меняются, поэтому переконфигурирование отъедает время и нервы. Если же заранее тщательно продумать стратегию роутинга и ссылаться на интерфейсы, то гарантированно снимается вопрос переконфигурации. Более того, удаётся на начальном этапе избежать нелепых ошибок и опечаток. Основываюсь на собственном опыте.

  • Фунт

    написал Фунт

    Суббота, 12 Декабрь 2015 23:15

    Немного странно начинать описывающую технологию статью с вопросов о том, как эту технологию отключить.

  • Алексадр

    написал Алексадр

    Среда, 09 Март 2016 21:58

    К зоне наряду с интерфейсами можно добавлять и IP-адреса и подсети с помощью параметра
    [--permanent] [--zone=zone] --add-source=source[/mask]

    Предлагаю дополнить статью этой командой, это уберет некоторые вопросы у людей.

  • Эдуард

    написал Эдуард

    Вторник, 12 Апрель 2016 16:17

    Здравствуйте! Подскажите, меняю зону на интерфейсе с home на drop, но комп как пинговался так и продолжает пинговаться. В настройках интерфеса показывает зону drop. Хочу закрыть комп чтоб он не был виден в сети, по идее зона drop должна делать то, что я хочу, но почему-то не работает.

  • gold

    написал gold

    Четверг, 28 Апрель 2016 02:52

    Благодарю за информацию.

  • unixanon

    написал unixanon

    Четверг, 14 Июль 2016 18:48

    Класс, спасибо за статейку. Смени шрифт на сайте на open sans или vardana. Будет гораздо лучше, они более пригодны для целей блога.

  • Cyberproxy

    написал Cyberproxy

    Воскресенье, 11 Сентябрь 2016 08:58

    Спасибо за материал!

  • Денис

    написал Денис

    Вторник, 21 Март 2017 14:34

    Это далеко не конец, вот если бы разобрали, к примеру --add-rich-rule, а то общие сведения.

  • FilippUX

    написал FilippUX

    Пятница, 15 Февраль 2019 04:28

    Хорошая информация для начинающих. Благодарю.

  • KostrikinIF

    написал KostrikinIF

    Вторник, 09 Апрель 2019 08:03

    Спасибо!!!!

Авторизуйтесь, чтобы получить возможность оставлять комментарии

Другие материалы в этой категории:

Go to top