0

Firewalld в CentOS

15.02.2021

Firewalld — утилита для управления встроенным в ядро Linux брандмауэром Netfilter. Несмотря на собственный синтаксис, имеет такой же принцип работы, как Iptables. Дополнительно про управление Netfilter при помощи последнего.

Установка и запуск

В некоторых системах CentOS может не оказаться firewalld. Для его установки вводим:

dnf install firewalld

Для автоматического зауска вводим:

systemctl enable firewalld

И для запуска службы:

systemctl start firewalld

Общие команды для управления firewalld

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

firewall-cmd --state

Мягко перечитать правила (применить настройки):

firewall-cmd --reload

Перечитать правила и сбросить текущие подключения:

firewall-cmd --complete-reload

* в официальной документации сказано, что данную команду стоит применять только в случаях проблем с firewalld.

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

firewall-cmd --list-all

Остановить службу:

systemctl stop firewalld

Запустить сервис:

systemctl start firewalld

Запретить автозапуск:

systemctl disable firewalld
systemctl enable firewalld

Сохранить текущие правила, сделав их постоянными (permanent):

firewall-cmd --runtime-to-permanent

Управление правилами

Синтаксис

Общий синтаксис для работы с правилами:

firewall-cmd [опции] [зона] <правило>

* порядок следования параметров не важен.

где:

  • [опции] — дополнительные параметры для создаваемого правила, например –permanent — постоянное правило, то есть будет действовать после перезагрузки. Не обязательный.
  • [зона] — по умолчанию, правила создаются для зоны public. Для работы с конкретной зоной ее необходимо указать, например, –zone=dmz. Не обязательный.
  • <правило> — само правило. Обязательный.

Чтобы правила применялись, не забываем их перечитывать:

firewall-cmd --reload

Добавление портов

Открыть порт 80:

firewall-cmd --permanent --add-port=80/tcp

* где ключ –permanent — добавить постоянное правило (будет действовать после перезагрузки).

Добавить правило для определенной зоны:

firewall-cmd --permanent --zone=external --add-port=80/tcp

Добавить диапазон портов:

firewall-cmd --permanent --add-port=6500-6700/udp

Добавить несколько правил одной командой:

firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp

Добавление сервиса

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

Посмотреть список доступных служб:

firewall-cmd --get-services

Разрешить порт, например, для сервиса ntp:

firewall-cmd --permanent --add-service=ntp

Создать собственную службу:

firewall-cmd --permanent --new-service=name-service

* где name-service — произвольное имя создаваемой службы.

Добавить порт, например TCP 2200 к службе:

firewall-cmd --permanent --service=name-service --add-port=2200/tcp

Задать описание для удобства:

firewall-cmd --permanent --service=name-service --set-short="Service With This Name"

firewall-cmd --permanent --service=name-service --set-description="Long Description For Service With This Name"

Информацию о созданном сервисе можно получить командой:

firewall-cmd --info-service=name-service

Теперь созданную службу можно использовать для создания правил, например:

firewall-cmd --permanent --add-service=name-service

Rich-Rule

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

Например, разрешаем службу http с условием, что запросы будут с определенных IP-адресов (подсети 192.168.0):

firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept'

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

firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" port port="5038" protocol="tcp" accept'

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

firewall-cmd --list-rich-rules

Удаление правил

Аналогично созданию, но вместо add вводим remove, например –remove-port (удалит порт) или –remove-service (службу).

Удалим правило для открытия 80-о порта:

firewall-cmd --permanent --remove-port=80/tcp

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

Все правила в firewalld могут быть разбиты по зонам. Для каждой свой набор правил и свои сетевые интерфейсы. Это нужно использовать, если мы захотим для разных сетевых адаптеров сделать разные по строгости правила.

Посмотреть список всех имеющихся зон:

firewall-cmd --list-all-zones

Посмотреть список используемых зон:

firewall-cmd --get-active-zones

Информация о конкретной зоне:

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

Создать правило для зоны public:

firewall-cmd --permanent --zone=public --add-port=80/tcp

Добавить сетевой интерфейс в зону:

firewall-cmd --permanent --zone=public --remove-interface=ens34

firewall-cmd --permanent --zone=internal --add-interface=ens34

* сначала нужно удалить адаптер из текущей зоны. 

Задать действие по умолчанию для зоны:

firewall-cmd --permanent --zone=public --set-target=DROP

Создать новую зону:

firewall-cmd --permanent --new-zone=custom_zone

firewall-cmd --reload

* чтобы система увидела новую зону custom_zone, команда reload обязательная.

Пример настройки NAT (шлюза)

Включить маскарадинг:

firewall-cmd --permanent --zone=dmz --add-masquerade

* без указания зон, будет включен для public и external.

Для примера берем два ethernet интерфейса — ens32 (внутренний) и ens33 (внешний). Для настройки nat последовательно вводим следующие 4 команды:

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o ens33 -j MASQUERADE

* правило включает маскарадинг на внешнем интерфейсе ens33. Где опция –direct требуется перед всеми пользовательскими правилами (–passthrough, –add-chain, –remove-chain, –query-chain, –get-chains, –add-rule, –remove-rule, –query-rule, –get-rules); nat — таблица, в которую стоит добавить правило; POSTROUTING 0 — цепочка в таблице nat; опция MASQUERADE указывает сетевому экрану менять внутренний IP-адрес на внешний.

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens32 -o ens33 -j ACCEPT

* добавляет в таблицу filter (цепочку FORWARD) правило, позволяющее хождение трафика с ens32 на ens33.

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens33 -o ens32 -m state --state RELATED,ESTABLISHED -j ACCEPT

добавляет правило в таблицу filter (цепочку FORWARD), позволяющее хождение трафика с ens33 на ens32 для пакетов, открывающих новый сеанс, который связан с уже открытым другим сеансом (RELATED) и пакетов, которые уже являются частью существующего сеанса (ESTABLISHED).

systemctl restart firewalld

* для того, чтобы сервер CentOS заработал в качестве шлюза, также необходимо настроить ядро. Подробнее в статье Настройка Интернет шлюза на CentOS 7.

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

firewall-cmd --direct --get-all-rules

Запретить или разрешить трафик между интерфейсами

Предположим, у нас есть два внутренних сетевых интерфейса ens35 и ens36. Мы хотим контролировать трафик между ними.

Запретить

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

Вводим следующие команды:

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j DROP

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j DROP

Разрешить

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

Для разрешения команды, практически, аналогичные:

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j ACCEPT

Разрешить трафик в одном направлении

В предыдущих примерах мы разрешали трафик в обоих направлениях. Если необходимо сделать так, чтобы только сеть ens35 видела сеть ens36, вводим одну команду:

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT

Возможные проблемы при работе с firewalld

1. Ошибка command not found (команда не найдена).

Возможные причины: не установлен пакет или не запущена служба.

Выполняем установку пакета firewalld:

dnf install firewalld firewall-config

Запускаем службу:

systemctl start firewalld

2. Не применяются правила.

Причина: не введена команда перезапуска правил.

Перечитываем правила:

firewall-cmd --reload

Если это не помогло, делаем перезапуск со сбросом подключений:

firewall-cmd --complete-reload

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

systemctl restart network

В исключительных случаях, перезагружаем компьютер:

shutdown -r now

3. The interface is under control of NetworkManager and already bound to the default zone.

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

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

vi /etc/sysconfig/network-scripts/ifcfg-ens34

И дописываем следующее:

ZONE=external

* в данном примере сетевой интерфейс ens34 будет добавлен в зону external.

Перезагружаем сетевую службу:

systemctl restart network

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

1 1.7K views

Настройка iptables

iptables для администраторов Фаервол в системе linux контролируется программой iptables (для ipv4) и ip6tables (для ipv6). В данной шпаргалке рассмотрены самые распространённые
2 iptables 1.6K views

Первичная настройка IPTables

Для начала порой есть смысл выполнить: Сбрасывает правила фаерволла как таковые. Можно не выполнять, если IPTables уже был кем-то настроен и Вы боитесь потерять
Nginx
Previous Story

Web сервер Nginx PHP 8.0 Php-fpm Centos 8

Next Story

VPN кластер.

Latest from Blog

Настройка и использование Redis

В этой статье мы расскажем что такое Redis, его преимущества и для каких целей он используется. Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа “ключ” — “значение” с открытым исходным кодом. По сути Redis представляет собой базу данных

Настройка и использование Memcached

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

Как настроить логирование и ротацию логов Nginx

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

Распределение выполнения запросов внутри приватной сети VPS через HAProxy

Приватную сеть можно использовать для распределения выполнения загрузки и балансировки запросов между несколькими серверами. Рассмотрим организацию такой балансировки на примере HAProxy – бесплатного ПО, предназначенного для распределения нагрузки и организации проксирования TCP-пакетов между несколькими обслуживающими

Использование MySQL на отдельном сервере с приватной сетью VPS

Приватную сеть – функционал, доступный пользователям VPS – можно использовать для вынесения MySQL на отдельный сервер. В этом случае веб-сервер обрабатывает запросы от клиентов и через приватное подключение обменивается данными с базой. Это
Go toTop

Don't Miss

Configure FirewallD on CentOS 9/8 and RHEL 9/8

Prerequisites Before you begin, ensure that you have: Step 1:
iptables

Перечисление и удаление правил брандмауэра Iptables

Перечисление и удаление правил брандмауэра Iptables Iptables — это брандмауэр,