Как и было обещано в Часть 1 (“Настройка статической сетевой маршрутизации"), в этой статье (Часть 2 из RHCE серии) мы начнем с ознакомления с принципами фильтрации пакетов и трансляции сетевых адресов (NAT) в Red Hat Enterprise Linux 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 Project Wiki для получения дополнительных сведений о расширенных правилах.
Трансляция сетевых адресов (NAT) - это процесс, при котором группе компьютеров (это может быть только один из них) в частной сети назначается уникальный общедоступный IP-адрес. В результате они по-прежнему однозначно идентифицируются по собственному частному IP-адресу внутри сети, но снаружи все они «кажутся» одинаковыми.