Настройка сетевого фильтра firewalld в CentOS

До сравнительно недавнего времени администраторы Linux использовали для настройки сетевого фильтра Iptables.
Однако последний немного неудобен для использования, и разработчики начали придумывать более лояльные к пользователю продукты.
Debian-системы обзавелись очень удобной системой UFW (лично мне она нравится больше всех).
Redhat-системы (в т.ч. CentOS и Fedora) разработали свою систему, firewalld.
Про неё и пойдёт речь в этой статье.
Существенное отличие firewalld от iptables в том, что тут используются зоны и службы (сервисы).
В зону firewalld могут входить интерфейсы, ip-адреса или подсети.
Службы — уже готовые именованные наборы портов. Примеры служб: http, ssh, ftp

Простота достигается за счёт добавления необходимых IP-адресов в нужную зону, а также добавления на зону правила открытия/закрытия сервиса (а если его не предопределено, то порта).

 

УСТАНОВКА И ЗАПУСК

 

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

▏yum install firewalld

далее добавляем сервис в автозапуск при старте системы:

▏systemctl enable firewalld

и запускаем службу:

▏systemctl start firewalld

 

УПРАВЛЕНИЕ

 

Для управления firewalld используется консольная утилита firewall-cmd

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

▏firewall-cmd —help
▏man firewall-cmd

Тут я опишу список самых часто используемых опций.

Посмотреть состояние сервиса:

▏firewall-cmd —state

Применить внесённые настройки:

▏firewall-cmd —reload

Посмотреть созданные правила:

▏firewall-cmd —list-all

 

УПРАВЛЕНИЕ ЗОНАМИ

 

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

▏firewall-cmd —get-zones

по умолчанию в системе используется 9 зон:
block dmz drop external home internal public trusted work

в подавляющем большинстве случаев для настройка хватает трёх зон:
public — зона по умолчанию, в ней прописываются правила доступа для всех адресов.
drop — зона, в которую заносятся нежелательные IP-адреса
trusted — зона, в которую заносятся IP-адреса, которые имеют доступ без ограничений.

по каждой из них можно посмотреть информацию и правила (в примере мы смотрим зону trusted):

▏firewall-cmd —list-all —zone=trusted

добавить адрес в зону:

▏firewall-cmd —permanent —zone=drop —add-source=8.8.8.8

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

удалить адрес из зоны:

▏firewall-cmd —permanent —zone=drop —remove-source=8.8.8.8

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

 

УПРАВЛЕНИЕ СЛУЖБАМИ

 

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

Вывести список доступных служб:

▏firewall-cmd —get-services

Вывести информацию о конкретной службе. Пример информации о службе openvpn:

▏firewall-cmd —info-service openvpn

Создать собственную службу.
Вообще-то в firewalld по умолчанию прописаны очень большое количество служб. Закрыты почти все используемые службы.
Но бывает ситуация, когда мы вешаем службу на нестандартный порт. Или являемся разработчиками.
К примеру, мы разработали приложение с названием my_app, которое слушает порты 7856/TCP и 3878/UDP/
добавим его в список служб и привязываем необходимые порты:

▏firewall-cmd —permanent —new-service=my_app
▏firewall-cmd —permanent —service=my_app —add-port=7856/tcp
▏firewall-cmd —permanent —service=my_app —add-port=3878/udp

и применяем изменения:

▏firewall-cmd —reload

без выполнения последней команды правило не появится в системе. Далее в тексте эта команда будет уже без объяснения.

 

УПРАВЛЕНИЕ ПРАВИЛАМИ

 

тут мы научимся создавать правила доступа.

Примечание: ниже не указывается зона, в которую добавляется правило. в этом случае правило добавляется в зону по умолчанию (public, если она не была изменена руками). Правило можно применить для любой другой зоны. Для этого необходимо добавить в команду —zone=*имя зоны*

разрешить созданную нами выше службу:

▏firewall-cmd —permanent —add-service=my_app
▏firewall-cmd —reload

удалить службу из разрешённых:

▏firewall-cmd —permanent —remove-service=my_app
▏firewall-cmd —reload

разрешить порт:

▏firewall-cmd —permanent —add-port=6956/tcp
▏firewall-cmd —reload

удалить порт:

▏firewall-cmd —permanent —remove-port=6956/tcp
▏firewall-cmd —reload

проброс порта на другой порт на локальной машине:

▏firewall-cmd —add-forward-port=port=22 ▏892:proto=tcp:toport=22
▏firewall-cmd —reload

настроить сеть NAT:

▏sudo firewall-cmd —add-masquerade
▏firewall-cmd —reload

после настройки NAT можно пробросить порт на другую машинку в сети:

▏firewall-cmd —add-forward-port=port=22 ▏892:proto=tcp:toport=22:toaddr=172.21.0.7
▏firewall-cmd —reload

 

РАСШИРЕННЫЕ ПРАВИЛА

 

опция -rich-rule позволяет создавать правила с условиями.

Например, разрешаем службу http для подсети 172.20.0.0:

▏firewall-cmd —permanent —add-rich-rule ‘rule family=»ipv4″ ▏source address=»172.20.0.0/24″ service name=»http» accept’

Или для конкретного порта:

▏firewall-cmd —permanent —add-rich-rule ‘rule family=»ipv4″ ▏source address=»172.20.0.0/24″ port port=»3694″ protocol=»tcp» accept’

Список правил с условиями можно отобразить командой:

▏firewall-cmd —list-rich-rules

 

ВОЗМОЖНЫЕ ПРОБЛЕМЫ

 

Ошибка: «firewall-cmd: command not found»
Причина: не установлен пакет firewalld
Решение: установить пакет firewalld и запустить службу:
▏yum install firewalld
▏systemctl start firewalld

Проблема: Не применяются правила
Причина: не была применена новая конфигурация после внесения изменений.
Решение: применить конфигурацию:
▏firewall-cmd —reload

Ошибка при добавлении IP-адреса в зону: Error: ZONE_CONFLICT:
Причина: IP-адрес уже состоит в другой зоне.
Решение: сначала удалить адрес из зоны, в которой он состоит с помощью команды:
firewall-cmd —permanent —zone=*зона с IP* —remove-source=*IP*

Другие статьи

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

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

7 распространенных мифов об ИТ-аутсорсинге, в которые продолжают верить даже опытные руководители

Среди руководителей есть те, кто относится к аутсорсингу настороженно. Так какие мифы не имеют ничего общего с реальностью?

Настройка сетевого фильтра firewalld в CentOS

Сомневаетесь?

Оставьте контакты, мы всё расскажем.

Заполните данные