Както е обещано в Част 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 филтър НАПРЕД 0 -i enp0s3 -o enp0s8 -j ПРИЕМАМ.
Горната команда ще запише правилото в /etc/firewalld/direct.xml:
# cat /etc/firewalld/direct.xml.
След това активирайте правилото, за да влезе в сила незабавно:
# защитна стена -cmd --direct --add -rule ipv4 филтър НАПРЕД 0 -i enp0s3 -o enp0s8 -j ПРИЕМАМ.
Сега можете да се свържете с telnet към уеб сървъра от RHEL 7 кутия и бягай tcpdump отново за наблюдение на TCP трафика между двете машини, този път с включена защитна стена рутер №2 активиран.
# telnet 10.0.0.20 80. # tcpdump -qnnvvv -i enp0s3 хост 10.0.0.20.
Ами ако искате да разрешите само входящи връзки към уеб сървъра (порт 80) от 192.168.0.18 и блокирайте връзките от други източници в 192.168.0.0/24 мрежа?
В защитната стена на уеб сървъра добавете следните правила:
# firewall-cmd --add-rich-rule 'правило семейство = "ipv4" адрес на източника = "192.168.0.18/24" име на услуга = "http" приемам' # firewall-cmd --add-rich-rule 'rule family = "ipv4" адрес на източника = "192.168.0.18/24" service name = "http" accept' --permanent. # firewall-cmd --add-rich-rule 'правило семейство = "ipv4" адрес на източника = "192.168.0.0/24" име на услуга = "http" капка' # firewall-cmd --add-rich-rule 'rule family = "ipv4" адрес на източника = "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 богат език документация във Wiki Wiki на Fedora Project за повече подробности относно богатите правила.
Превод на мрежов адрес (NAT) е процесът, при който на група компютри (може да бъде и само един от тях) в частна мрежа се присвоява уникален публичен IP адрес. В резултат на това те все още са уникално идентифицирани от собствения си частен IP адрес в мрежата, но отвън всички „изглеждат“ еднакви.