Wyszukiwanie w witrynie

Jak skonfigurować zaporę sieciową Iptables, aby umożliwić zdalny dostęp do usług w systemie Linux — część 8


Przedstawiamy program certyfikacji Linux Foundation

Pamiętasz z Części 1 – Informacje o Iptables z tej serii LFCE (Certyfikowany inżynier Linux Foundation), w której podaliśmy podstawowy opis tego, czym jest zapora sieciowa: mechanizm zarządzania pakietów przychodzących i wychodzących z sieci. Przez „zarządzanie” mamy na myśli:

  1. Aby zezwolić lub uniemożliwić niektórym pakietom wejście lub opuszczenie naszej sieci.
  2. Aby przekazać inne pakiety z jednego punktu sieci do drugiego.

w oparciu o z góry ustalone kryteria.

W tym artykule omówimy, jak zaimplementować podstawowe filtrowanie pakietów i jak skonfigurować zaporę ogniową za pomocą iptables, nakładki na netfilter, który jest natywnym modułem jądra używanym do tworzenia zapór ogniowych.

Należy pamiętać, że zapora sieciowa to obszerny temat i ten artykuł nie ma być kompleksowym przewodnikiem pozwalającym zrozumieć wszystko, co trzeba o niej wiedzieć, ale raczej punktem wyjścia do głębszego przestudiowania tego tematu. Jednakże powrócimy do tego tematu w Części 10 tej serii, kiedy przeanalizujemy kilka konkretnych przypadków użycia zapory ogniowej w systemie Linux.

Firewall można traktować jako międzynarodowe lotnisko, na które samoloty pasażerskie przylatują i odlatują niemal 24 godziny na dobę, 7 dni w tygodniu. W zależności od szeregu warunków, takich jak ważność paszportu danej osoby lub jej kraj pochodzenia (by wymienić tylko kilka przykładów), może ona zostać zezwolona na wjazd lub wyjazd z określonego kraju lub nie.

Jednocześnie funkcjonariusze lotniska mogą poinstruować ludzi, aby w razie potrzeby przenieśli się z jednego miejsca na lotnisku do drugiego, na przykład w przypadku konieczności przejścia przez Służbę Celną.

W dalszej części tego samouczka analogia z lotniskiem może okazać się przydatna. Kontynuując, pamiętaj tylko o następujących relacjach:

  1. Osoby=Pakiety
  2. Zapora sieciowa=lotnisko
  3. Kraj nr 1=Sieć nr 1
  4. Kraj nr 2=Sieć nr 2
  5. Przepisy lotniskowe egzekwowane przez funkcjonariuszy=zasady zapory sieciowej

Iptables – podstawy

Na niskim poziomie to samo jądro „decyduje”, co zrobić z pakietami w oparciu o reguły pogrupowane w łańcuchy lub zdania. Łańcuchy te definiują, jakie działania należy podjąć, gdy paczka spełnia określone przez nie kryteria.

Pierwszą akcją iptables będzie podjęcie decyzji, co zrobić z pakietem:

  1. Zaakceptować to (przepuścić do naszej sieci)?
  2. Odrzucić (zablokować dostęp do naszej sieci)?
  3. Przekazać go (do innego łańcucha)?

Na wypadek gdybyś zastanawiał się, dlaczego to narzędzie nazywa się iptables, dzieje się tak dlatego, że łańcuchy te są zorganizowane w tabele, przy czym tabela filtrów jest najbardziej znana i ta, która jest używany do implementacji filtrowania pakietów z trzema domyślnymi łańcuchami:

1. Łańcuch INPUT obsługuje pakiety przychodzące do sieci, które są przeznaczone dla programów lokalnych.

2. Łańcuch OUTPUT służy do analizy pakietów pochodzących z sieci lokalnej, które mają zostać wysłane na zewnątrz.

3. Łańcuch FORWARD przetwarza pakiety, które powinny zostać przesłane do innego miejsca docelowego (jak w przypadku routera).

Dla każdego z tych łańcuchów istnieje domyślna polityka, która określa, co należy zrobić domyślnie, gdy pakiety nie odpowiadają żadnej z reguł w łańcuchu. Możesz wyświetlić reguły utworzone dla każdego łańcucha i politykę domyślną, uruchamiając następującą komendę:

iptables -L

Dostępne zasady są następujące:

  1. AKCEPTUJ → przepuszcza pakiet. Każdy pakiet, który nie pasuje do żadnej reguły w łańcuchu, jest dozwolony w sieci.
  2. DROP → cicho odrzuca pakiet. Każdy pakiet, który nie pasuje do żadnej reguły w łańcuchu, nie może przedostać się do sieci.
  3. ODRZUT → odrzuca pakiet i zwraca komunikat informacyjny. Ta w szczególności nie działa jako polityka domyślna. Zamiast tego ma uzupełniać reguły filtrowania pakietów.

Podejmując decyzję, którą politykę wdrożysz, musisz rozważyć zalety i wady każdego podejścia, jak wyjaśniono powyżej – pamiętaj, że nie ma jednego rozwiązania -wszystkie rozwiązania.

Dodawanie reguł

Aby dodać regułę do zapory, wywołaj polecenie iptables w następujący sposób:

iptables -A chain_name criteria -j target

Gdzie,

  1. -A oznacza Dołącz (dołącz bieżącą regułę na końcu łańcucha).
  2. nazwa_łańcucha to WEJŚCIE, WYJŚCIE lub W PRZÓD.
  3. cel to akcja lub zasada, którą należy zastosować w tym przypadku (ZAAKCEPTUJ, ODRZUĆ lub UPUŚĆ).
  4. kryteria to zestaw warunków, według których pakiety mają być sprawdzane. Składa się z co najmniej jednej (najprawdopodobniej większej liczby) z następujących flag. Opcje w nawiasach, oddzielone pionową kreską, są sobie równoważne. Reszta to opcjonalne przełączniki:
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

Nasze środowisko testowe

Sklejmy to wszystko w 3 klasyczne przykłady, wykorzystując dla pierwszych dwóch następujące środowisko testowe:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

I to dla ostatniego przykładu

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
PRZYKŁAD 1: Analiza różnicy pomiędzy polityką DROP i REJECT

Najpierw zdefiniujemy politykę DROP dla pingów wejściowych do naszej zapory sieciowej. Oznacza to, że pakiety icmp będą odrzucane po cichu.

ping -c 3 192.168.0.15
iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Zanim przejdziemy do części REJECT, opróżnimy wszystkie reguły z łańcucha INPUT, aby mieć pewność, że nasze pakiety zostaną przetestowane według nowej reguły:

iptables -F INPUT
iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
ping -c 3 192.168.0.15

PRZYKŁAD 2: Wyłączenie/ponowne włączenie logowania ssh z wersji dev2 na dev1

Będziemy zajmować się łańcuchem OUTPUT podczas obsługi ruchu wychodzącego:

iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

PRZYKŁAD 3: Zezwalanie/blokowanie klientom NFS (od 192.168.0.0/24) na montowanie udziałów NFS4

Uruchom następujące polecenia na serwerze/zaporze NFSv4, aby zamknąć porty 2049 i 111 dla wszelkiego rodzaju ruchu:

iptables -F
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Teraz otwórzmy te porty i zobaczmy, co się stanie.

iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Jak widać, po otwarciu ruchu udało nam się zamontować udział NFSv4.

Wstawianie, dołączanie i usuwanie reguł

W poprzednich przykładach pokazaliśmy, jak dołączać reguły do łańcuchów INPUT i OUTPUT. Jeśli zamiast tego chcielibyśmy wstawić je we wcześniej określonej pozycji, powinniśmy zamiast tego użyć przełącznika -I (wielkie i).

Należy pamiętać, że reguły będą oceniane jedna po drugiej i że ocena zatrzyma się (lub przeskoczy), gdy zostanie dopasowana zasada DROP lub ACCEPT. Z tego powodu może się okazać, że będziesz musiał w razie potrzeby przenieść reguły w górę lub w dół na liście łańcuchów.

Aby to zademonstrować, użyjemy trywialnego przykładu:

Umieśćmy następującą regułę,

iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

na pozycji 2) w łańcuchu INPUT (przenosząc w ten sposób poprzedni #2 jako #3)

Korzystając z powyższej konfiguracji, ruch będzie sprawdzany, czy jest kierowany do portu 80, a następnie sprawdzany jest port 2049.

Alternatywnie możesz usunąć regułę i zmienić cel pozostałych reguł na REJECT (używając przełącznika -R):

iptables -D INPUT 1
iptables -nL -v --line-numbers
iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Na koniec musisz pamiętać, że aby reguły zapory sieciowej były trwałe, musisz zapisać je w pliku, a następnie przywrócić je automatycznie po uruchomieniu (używając preferowanej metody, którą wybierzesz lub tej, która jest dostępny do Twojej dystrybucji).

Zapisywanie reguł zapory sieciowej:

iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Przywracanie reguł:

iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Tutaj możemy zobaczyć podobną procedurę (ręczne zapisywanie i przywracanie reguł zapory sieciowej) przy użyciu fikcyjnego pliku o nazwie iptables.dump zamiast domyślnego, jak pokazano powyżej.

iptables-save > iptables.dump

Aby te zmiany były trwałe w różnych butach:

Ubuntu: zainstaluj pakiet iptables-persistent, który załaduje reguły zapisane w pliku /etc/iptables/rules.v4.

apt-get install iptables-persistent

CentOS: Dodaj następujące 2 linie do pliku /etc/sysconfig/iptables-config.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: lista dozwolonych portów, protokołów, adresów i tak dalej (oddzielonych przecinkami) w pliku /etc/sysconfig/SuSEfirewall2.

Więcej informacji można znaleźć w samym pliku, który jest mocno komentowany.

Wniosek

Przykłady podane w tym artykule, chociaż nie obejmują wszystkich ciekawostek iptables, mają na celu zilustrowanie, jak włączać i wyłączać ruch przychodzący i wychodzący.

Ci z Was, którzy są fanami firewalli, powinni pamiętać, że powrócimy do tego tematu z bardziej szczegółowymi zastosowaniami w Części 10 tej serii LFCE.

Jeśli masz jakieś pytania lub uwagi, daj nam znać.