
Настройка сетевого фильтра 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*
Другие статьи

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

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

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