Простыми словами, брандмауэр – это система безопасности, которая контролирует входящий и исходящий трафик в сети на основе набора заранее определенных правил (например, назначение/источник пакета или тип трафика).

В этой статье мы рассмотрим основы firewalld, демона динамического брандмауэра по умолчанию в Red Hat Enterprise Linux 7, и службы iptables, устаревшей службы брандмауэра для Linux, с которой знакомы большинство системных и сетевых администраторов, и которая также доступна в RHEL 7.
A Comparison Between FirewallD and Iptables
Под капотом как firewalld, так и служба iptables общаются с фреймворком netfilter в ядре через тот же интерфейс, неудивительно, через команду iptables. Однако, в отличие от службы iptables, firewalld может изменять настройки во время нормальной работы системы без потери существующих соединений.
Firewalld должен быть установлен по умолчанию в вашей системе RHEL, хотя он может быть не запущен. Вы можете проверить с помощью следующих команд (firewall-config – это инструмент конфигурации пользовательского интерфейса):
# yum info firewalld firewall-config

и,
# systemctl status -l firewalld.service

С другой стороны, служба iptables не включена по умолчанию, но может быть установлена через.
# yum update && yum install iptables-services
Оба демона могут быть запущены и включены для автозапуска с помощью обычных команд systemd:
# systemctl start firewalld.service | iptables-service.service # systemctl enable firewalld.service | iptables-service.service
Читайте также: Полезные команды для управления службами systemd
Что касается файлов конфигурации, служба iptables использует /etc/sysconfig/iptables
(который не будет существовать, если пакет не установлен в вашей системе). На узле кластера RHEL 7 этот файл выглядит следующим образом:

В то время как firewalld хранит свою конфигурацию в двух каталогах, /usr/lib/firewalld
и /etc/firewalld
:
# ls /usr/lib/firewalld /etc/firewalld

Мы рассмотрим эти файлы конфигурации более подробно позже в этой статье, после того, как добавим здесь и там несколько правил. Пока достаточно напомнить вам, что вы всегда можете найти больше информации о обоих инструментах с.
# man firewalld.conf # man firewall-cmd # man iptables
Кроме того, не забудьте взглянуть на Обзор основных команд и документации системы – Часть 1 текущей серии, где я описал несколько источников, где вы можете получить информацию о установленных пакетах на вашей системе RHEL 7.
Использование Iptables для управления сетевым трафиком
Вы можете обратиться к Настройка брандмауэра Iptables – Часть 8 серии Сертифицированный инженер Linux Foundation (LFCE), чтобы освежить ваши знания об iptables перед продолжением. Таким образом, мы сможем сразу перейти к примерам.
Пример 1: Разрешение как входящего, так и исходящего веб-трафика
Порты TCP 80 и 443 являются портами по умолчанию, используемыми веб-сервером Apache для обработки обычного (HTTP) и защищенного (HTTPS) веб-трафика. Вы можете разрешить входящий и исходящий веб-трафик через оба порта на интерфейсе enp0s3 следующим образом:
# iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Пример 2: Блокировка всех (или некоторых) входящих соединений из определенной сети
Иногда вам может потребоваться заблокировать все (или некоторые) типы трафика, исходящего из определенной сети, скажем, 192.168.1.0/24, например:
# iptables -I INPUT -s 192.168.1.0/24 -j DROP
будет отбрасывать все пакеты, поступающие из сети 192.168.1.0/24, тогда как,
# iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT
позволит только входящий трафик через порт 22.
Пример 3: Перенаправление входящего трафика на другое направление
Если вы используете вашу коробку RHEL 7 не только в качестве программного брандмауэра, но и в качестве фактического аппаратного брандмауэра, чтобы она находилась между двумя различными сетями, IP-перенаправление должно уже быть включено в вашей системе. Если нет, вам нужно отредактировать /etc/sysctl.conf
и установить значение net.ipv4.ip_forward в 1, следуя этим шагам:
net.ipv4.ip_forward = 1
затем сохраните изменения, закройте текстовый редактор и, наконец, выполните следующую команду, чтобы применить изменения:
# sysctl -p /etc/sysctl.conf
Например, у вас может быть установлен принтер на внутреннем компьютере с IP 192.168.0.10, с сервисом CUPS, слушающим порт 631 (как на принт-сервере, так и на вашем брандмауэре). Чтобы перенаправлять запросы на печать от клиентов с другой стороны брандмауэра, вам следует добавить следующее правило iptables:
# iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631
Помните, что iptables читает свои правила последовательно, поэтому убедитесь, что значения по умолчанию или более поздние правила не переопределяют те, описанные в приведенных выше примерах.
Начало работы с FirewallD
Одним из изменений, внесенных в firewalld, являются зоны. Этот концепт позволяет разделить сети на различные зоны уровня доверия, который пользователь решил установить на устройства и трафик внутри этой сети.
Чтобы просмотреть активные зоны:
# firewall-cmd --get-active-zones
В приведенном ниже примере активна общедоступная зона, и интерфейс enp0s3 был назначен ей автоматически. Чтобы просмотреть всю информацию о конкретной зоне:
# firewall-cmd --zone=public --list-all

Поскольку вы можете узнать больше о зонах в Руководстве по безопасности RHEL 7, здесь мы приведем только некоторые конкретные примеры.
Пример 4: Разрешение служб через брандмауэр
Чтобы получить список поддерживаемых служб, используйте.
# firewall-cmd --get-services

Чтобы разрешить веб-трафик http и https через брандмауэр, немедленно и при последующей загрузке:
# firewall-cmd --zone=MyZone --add-service=http # firewall-cmd --zone=MyZone --permanent --add-service=http # firewall-cmd --zone=MyZone --add-service=https # firewall-cmd --zone=MyZone --permanent --add-service=https # firewall-cmd --reload
Если код>–zone не указан, используется зона по умолчанию (вы можете проверить с помощью firewall-cmd –get-default-zone).
Чтобы удалить правило, замените слово add на remove в вышеприведенных командах.
Пример 5: Перенаправление IP / порта
Сначала вам нужно узнать, включено ли замаскирование для желаемой зоны:
# firewall-cmd --zone=MyZone --query-masquerade
На изображении ниже мы видим, что замаскирование включено для внешней зоны, но не для общественной:

Вы можете либо включить замаскирование для общественной:
# firewall-cmd --zone=public --add-masquerade
либо использовать замаскирование в внешней. Вот что мы сделали бы, чтобы воспроизвести Пример 3 с firewalld:
# firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10
И не забудьте перезагрузить брандмауэр.
Вы можете найти дополнительные примеры в Части 9 серии RHCSA, где мы объяснили, как разрешить или запретить порты, обычно используемые веб-сервером и ftp-сервером, и как изменить соответствующее правило, когда порт по умолчанию для этих служб изменен. Кроме того, вы можете обратиться к вики firewalld для дополнительных примеров.
Читайте также: Полезные примеры настройки брандмауэра FirewallD в RHEL 7
Заключение
В этой статье мы объяснили, что такое брандмауэр, какие доступны службы для его реализации в RHEL 7 и предоставили несколько примеров, которые могут помочь вам начать выполнение этой задачи. Если у вас есть комментарии, предложения или вопросы, не стесняйтесь сообщить нам, используя форму ниже. Заранее спасибо!
Source:
https://www.tecmint.com/firewalld-vs-iptables-and-control-network-traffic-in-firewall/