Поиск по сайту:

Как выполнить фильтрацию пакетов, трансляцию сетевых адресов и установить параметры времени выполнения ядра — часть 2


Как и было обещано в Части 1 («Настройка статической сетевой маршрутизации»), в этой статье (Часть 2 серии RHCE) мы начнем с представления принципы фильтрации пакетов и трансляции сетевых адресов (NAT) в Red Hat Enterprise Linux 7, прежде чем углубляться в настройку параметров ядра во время выполнения, чтобы изменить поведение работающего ядра в случае изменения определенных условий или возникновения необходимости.

Фильтрация сетевых пакетов в RHEL 7

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

Как вы, вероятно, знаете, начиная с RHEL 7, службой по умолчанию, которая управляет правилами брандмауэра, является firewalld. Как и iptables, он взаимодействует с модулем netfilter в ядре Linux для проверки сетевых пакетов и управления ими. В отличие от iptables, обновления могут вступить в силу сразу, не прерывая активных соединений — вам даже не придется перезапускать службу.

Еще одним преимуществом firewalld является то, что он позволяет нам определять правила на основе предварительно настроенных имен служб (подробнее об этом через минуту).

В Части 1 мы использовали следующий сценарий:

Однако вы помните, что мы отключили брандмауэр на маршрутизаторе №2, чтобы упростить пример, поскольку мы еще не рассмотрели фильтрацию пакетов. Давайте теперь посмотрим, как мы можем включить входящие пакеты, предназначенные для определенной службы или порта в пункте назначения.

Во-первых, давайте добавим постоянное правило, разрешающее входящий трафик с enp0s3 (192.168.0.19) на enp0s8 (10.0.0.18 ). ):

firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

Приведенная выше команда сохранит правило в /etc/firewalld/direct.xml:

cat /etc/firewalld/direct.xml

Затем включите правило, чтобы оно вступило в силу немедленно:

firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

Теперь вы можете подключиться к веб-серверу через Telnet из окна RHEL 7 и снова запустить tcpdump, чтобы отслеживать TCP-трафик между двумя компьютерами, на этот раз с брандмауэром на маршрутизаторе №2. включено.

telnet 10.0.0.20 80
tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

Что делать, если вы хотите разрешить только входящие подключения к веб-серверу (порт 80) с 192.168.0.18 и заблокировать подключения из других источников в 192.168.0.0/ Сеть 24?

В брандмауэре веб-сервера добавьте следующие правила:

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

Теперь вы можете отправлять HTTP-запросы к веб-серверу с 192.168.0.18 и с любого другого компьютера в 192.168.0.0/24. В первом случае соединение должно завершиться успешно, тогда как во втором случае время ожидания истечет.

Для этого подойдет любая из следующих команд:

telnet 10.0.0.20 80
wget 10.0.0.20

Я настоятельно советую вам просмотреть документацию по расширенному языку Firewalld в вики-сайте проекта Fedora для получения более подробной информации о расширенных правилах.

Трансляция сетевых адресов в RHEL 7

Трансляция сетевых адресов (NAT) – это процесс, при котором группе компьютеров (также может быть только один из них) в частной сети присваивается уникальный общедоступный IP-адрес. В результате они по-прежнему однозначно идентифицируются по собственному частному IP-адресу внутри сети, но снаружи они все «кажутся» одинаковыми.