Настройка Firewall CentOS 7

Основной брандмауэр в операционных системах Linux – это iptables. Но команды iptables сложны, и многим пользователям тяжело запомнить все опции и случаи, в которых их надо использовать. Поэтому разработчики дистрибутивов создают свои надстройки над iptables, которые помогают упростить управление фаерволом. У CentOS надстройка для управления iptables называется Firewalld.

У Firewalld есть несколько важных отличий, по сравнению с iptables. Здесь управление доступом к сети выполняется на уровне зон и сервисов, а не цепочек и правил. А также правила обновляются динамически, не прерывая запущенных сессий. В этой статье будет рассмотрена настройка Firewall CentOS 7 на примере Firewalld.

Основы использования Firewalld

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

  • drop – блокировать все входящие пакеты, разрешить только исходящие
  • block – в отличие от предыдущего варианта отправителю пакета будет отправлено сообщение по блокировке его пакета;
  • public – поддерживаются входящие соединения только для ssh и dhclient;
  • external – поддерживает NAT для скрытия внутренней сети;
  • internal – разрешены сервисы ssh, samba, mdns и dhcp;
  • dmz – используется для изолированных сервров, у которых нет доступа к сети. Разрешено только подключение по SSH;
  • work – разрешенны сервисы ssh и dhcp;
  • home – аналогично internal;
  • trusted – всё разрешено.

Таким образом, чтобы разрешить или запретить какой-либо сервис, вам достаточно добавить или удалить его из текущей зоны или сменить зону интерфейса на ту, где он разрешён. Можно провести аналогию с политикой действий по умолчанию для пакетов в iptables. Зона trusted имеет политику ACCEPT и разрешает все подключения, зона block имеет политику DENY, которая запрещает все подключения, а все остальные зоны можно считать наследниками зоны block, плюс в них уже предопределены правила разрешения сетевых подключений для некоторых сервисов.

Также у Firewalld есть два вида конфигурации:

  • runtime – действительна только до перезагрузки, все изменения, в которых явно не указано другое, применяются к этой конфигурации;
  • permanent – постоянные настройки, которые будут работать и после перезагрузки.

Теперь вы знаете всё необходимое, поэтому перейдём к утилите firewalld-cmd.

Синтаксис и опции firewall-cmd

Управлять настройками Firewalld можно как с помощью консольной утилиты firewall-cmd, так и в графическом интерфейсе. CentOS чаще всего используется на серверах, поэтому вам придётся работать в терминале. Давайте рассмотрим синтаксис утилиты:

firewall-cmd опции

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

firewall-cmd –конфигурация –zone=зона опции

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

  • –state – вывести состояние брандмауэра;
  • –reload – перезагрузить правила из постоянной конфигурации;
  • –complete-reload – жёсткая перезагрузка правил с разрывом всех соединений;
  • –runtime-to-permanent – перенести настройки конфигурации runtime в постоянную конфигурацию;
  • –permanent – использовать постоянную конфигурацию;
  • –get-default-zone – отобразить зону, используемую по умолчанию;
  • –set-default-zone – установить зону по умолчанию;
  • –get-active-zones – отобразить активные зоны;
  • –get-zones – отобразить все доступные зоны;
  • –get-services – вывести предопределенные сервисы;
  • –list-all-zones – вывести конфигурацию всех зон;
  • –new-zone – создать новую зону;
  • –delete-zone – удалить зону;
  • –list-all – вывести всё, что добавлено, из выбранной зоны;
  • –list-services – вывести все сервисы, добавленные к зоне;
  • –add-service – добавить сервис к зоне;
  • –remove-service – удалить сервис из зоны;
  • –list-ports – отобразить порты, добавленные к зоне;
  • –add-port – добавить порт к зоне;
  • –remove-port – удалить порт из зоны;
  • –query-port – показать, добавлен ли порт к зоне;
  • –list-protocols – вывести протоколы, добавленные к зоне;
  • –add-protocol – добавить протокол к зоне;
  • –remove-protocol – удалить протокол из зоны;
  • –list-source-ports – вывести порты источника, добавленные к зоне;
  • –add-source-port – добавить порт-источник к зоне;
  • –remove-source-port – удалить порт-источник из зоны;
  • –list-icmp-blocks – вывести список блокировок icmp;
  • –add-icmp-block – добавить блокировку icmp;
  • –add-icmp-block – удалить блокировку icmp;
  • –add-forward-port – добавить порт для перенаправления в NAT;
  • –remove-forward-port – удалить порт для перенаправления в NAT;
  • –add-masquerade – включить NAT;
  • –remove-masquerade – удалить NAT.

Это далеко не все опции утилиты, но для этой статьи нам будет их достаточно.

Настройка Firewall в CentOS 7

1. Статус брандмауэра

Первым делом необходимо посмотреть состояние брандмауэра. Для этого выполните:

sudo systemctl status firewalld

Настройка Firewall CentOS 7

Если служба Firewalld отключена, то необходимо её включить:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Теперь нужно посмотреть, запущен ли Firewalld, с помощью команды firewall-cmd:

sudo firewall-cmd –state

Настройка Firewall CentOS 7

Если программа запущена и всё хорошо, то вы получите сообщение “running”.

2. Управление зонами

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

sudo firewall-cmd –get-default-zone

Настройка Firewall CentOS 7

В моем случае это зона public. Вы можете изменить текущую зону с помощью опции –set-default-zone:

sudo firewall-cmd –set-default-zone=public

Настройка Firewall CentOS 7

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

sudo firewall-cmd –get-active-zones

Настройка Firewall CentOS 7

В списке будут выведены зоны и интерфейсы, для которых они присвоены. Такой командой можно посмотреть конфигурацию для определённой зоны. Например, для зоны public:

sudo firewall-cmd –zone=public –list-all

Настройка Firewall CentOS 7

3. Настройка сервисов

Вы можете посмотреть все предопределенные сервисы командой:

sudo firewall-cmd –get-services

Настройка Firewall CentOS 7

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

sudo firewall-cmd –zone=public –add-service=http –permanent

Настройка Firewall CentOS 7

А чтобы удалить этот сервис, выполните:

sudo firewall-cmd –zone=public –remove-service=http –permanent

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

sudo firewall-cmd –reload

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

sudo firewall-cmd –zone=public –list-all

Настройка Firewall CentOS 7

4. Как открыть порт в Firewalld

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

sudo firewall-cmd –zone=public –add-port=8083/tcp –permanent

Настройка Firewall CentOS 7

Чтобы удалить этот порт из зоны, выполните:

sudo firewall-cmd –zone=public –remove-port=8083/tcp –permanent

Аналогично сервисам, чтобы открыть порт в firewall centos 7 надо перезагрузить брандмауэр.

sudo firewall-cmd –reload

Настройка Firewall CentOS 7

5. Проброс портов Firewalld

Проборс портов в Firewalld настраивается намного проще, чем в iptables. Если вам нужно, например, перенаправить трафик с порта 2223 на порт 22, достаточно добавить к зоне перенаправление:

sudo firewall-cmd –zone=public –add-forward-port=port=2223:proto=tcp:toport=22

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

sudo firewall-cmd –zone=public –add-masquerade

Затем уже можно добавить порт:

sudo firewall-cmd –zone=publiс –add-forward-port=port=2223:proto=tcp:toport=22:toaddr=192.168.56.4

6. Расширенные правила

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

rule family = “семейтво” source значение destination значение log audit действие

Вот значение основных параметров:

  • В качестве семейства протоколов можно указать ipv4 или ipv6 или ничего не указывать, тогда правило будет применяться к обоим протоколам;
  • source и destination – это отправитель и получатель пакета. В качестве этих параметров может быть использован IP-адрес (address), сервис (service name), порт (port), протокол (protocol) и так далее;
  • log – позволяет логгировать прохождение пакетов, например в syslog. В этой настройке вы можете указать префикс строчки лога и уровень подробности логгирования;
  • audit – это альтернативный способ логгирования, когда сообщения будут отправляться в службу auditd.
  • Действие – это действие, которое необходимо выполнить с совпавшим пакетом. Доступны: accept, drop, reject, mark.

Давайте рассмотрим несколько примеров. Нам необходимо заблокировать доступ к серверу для пользователя с IP 135.152.53.5:

sudo firewall-cmd –zone=public –add-rich-rule ‘rule family=”ipv4″ source address=135.152.53.5 reject’

Настройка Firewall CentOS 7

Или нам нужно запретить для этого же пользователя только доступ к порту 22:

sudo firewall-cmd –zone=public –add-rich-rule ‘rule family=”ipv4″ source address=135.152.53.5 port port=22 protocol=tcp reject’

Посмотреть все расширенные правила можно командой:

sudo firewall-cmd –list-rich-rules

Настройка Firewall CentOS 7

Выводы

В этой статье мы разобрали, как выполняется настройка firewall в CentOS 7 и какие задачи можно с помощью него выполнить. Программой намного проще пользоваться, чем iptables, но по моему мнению надстройка фаервола от Ubuntu – ufw ещё проще в использовании.