Wyszukiwanie w witrynie

Jak przeprowadzić filtrowanie pakietów, translację adresów sieciowych i ustawić parametry wykonawcze jądra — część 2


Zgodnie z obietnicą zawartą w Części 1 („Konfiguracja routingu sieci statycznej”), w tym artykule (Część 2 serii RHCE) zaczniemy od wprowadzenia zasady filtrowania pakietów i translacji adresów sieciowych (NAT) w Red Hat Enterprise Linux 7, a następnie zagłębiamy się w ustawianie parametrów jądra w czasie wykonywania, aby modyfikować zachowanie działającego jądra, jeśli zmienią się pewne warunki lub pojawią się potrzeby.

Filtrowanie pakietów sieciowych w RHEL 7

Kiedy mówimy o filtrowaniu pakietów, mamy na myśli proces wykonywany przez zaporę sieciową, podczas której odczytuje nagłówek każdego pakietu danych, który próbuje przez nią przejść. Następnie filtruje pakiet podejmując wymagane działania w oparciu o reguły zdefiniowane wcześniej przez administratora systemu.

Jak zapewne wiesz, począwszy od wersji RHEL 7, domyślną usługą zarządzającą regułami zapory sieciowej jest zapora sieciowa. Podobnie jak iptables, komunikuje się z modułem netfilter w jądrze Linuksa w celu sprawdzania i manipulowania pakietami sieciowymi. W przeciwieństwie do iptables aktualizacje mogą zacząć obowiązywać natychmiast, bez przerywania aktywnych połączeń – nie musisz nawet ponownie uruchamiać usługi.

Kolejną zaletą firewalld jest to, że pozwala nam definiować reguły w oparciu o wstępnie skonfigurowane nazwy usług (więcej o tym za chwilę).

W Części 1 zastosowaliśmy następujący scenariusz:

Jednak pamiętasz, że wyłączyliśmy zaporę na routerze nr 2, aby uprościć przykład, ponieważ nie omówiliśmy jeszcze filtrowania pakietów. Zobaczmy teraz, jak możemy włączyć przychodzące pakiety przeznaczone dla określonej usługi lub portu w miejscu docelowym.

Najpierw dodajmy stałą regułę zezwalającą na ruch przychodzący w enp0s3 (192.168.0.19) do enp0s8 (10.0.0.18):

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

Powyższe polecenie zapisze regułę w pliku /etc/firewalld/direct.xml:

cat /etc/firewalld/direct.xml

Następnie włącz regułę, aby natychmiast zaczęła obowiązywać:

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

Teraz możesz połączyć się telnetem z serwerem internetowym z poziomu RHEL 7 i ponownie uruchomić tcpdump, aby monitorować ruch TCP między dwoma komputerami, tym razem z zaporą ogniową na routerze nr 2 włączony.

telnet 10.0.0.20 80
tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

A co jeśli chcesz zezwolić tylko na połączenia przychodzące do serwera internetowego (port 80) z 192.168.0.18 i zablokować połączenia z innych źródeł w 192.168.0.0/ sieć 24?

W zaporze serwera WWW dodaj następujące reguły:

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

Teraz możesz wysyłać żądania HTTP do serwera internetowego z 192.168.0.18 i z innego komputera w 192.168.0.0/24. W pierwszym przypadku połączenie powinno zakończyć się pomyślnie, natomiast w drugim ostatecznie nastąpi przekroczenie limitu czasu.

Aby to zrobić, wystarczy wykonać dowolne z poniższych poleceń:

telnet 10.0.0.20 80
wget 10.0.0.20

Zdecydowanie radzę sprawdzić dokumentację Firewalld Rich Language na Wiki Projektu Fedora, aby uzyskać więcej szczegółów na temat bogatych reguł.

Translacja adresów sieciowych w RHEL 7

Translacja adresów sieciowych (NAT) to proces, podczas którego grupie komputerów (może to być również tylko jeden z nich) w sieci prywatnej przypisywany jest unikalny publiczny adres IP. W rezultacie nadal są one jednoznacznie identyfikowane w sieci na podstawie własnego prywatnego adresu IP, ale na zewnątrz wszystkie „wydają się” takie same.