Wyszukiwanie w witrynie

25 Przydatnych reguł zapory IPtable, które powinien znać każdy administrator Linuksa


Zarządzanie ruchem sieciowym to jedno z najtrudniejszych zadań, z jakimi muszą się zmierzyć administratorzy systemów. Musi skonfigurować zaporę sieciową w taki sposób, aby spełniała wymagania systemu i użytkowników zarówno w zakresie połączeń przychodzących, jak i wychodzących, nie narażając systemu na ataki.

Tutaj z pomocą przychodzą iptables. Iptables to zapora sieciowa wiersza poleceń systemu Linux, która umożliwia administratorom systemu zarządzanie ruchem przychodzącym i wychodzącym za pomocą zestawu konfigurowalnych reguł tabel.

Iptables używa zestawu tabel zawierających łańcuchy zawierające zestaw reguł wbudowanych lub zdefiniowanych przez użytkownika. Dzięki nim administrator systemu może właściwie filtrować ruch sieciowy swojego systemu.

Według instrukcji iptables istnieją obecnie 3 typy tabel:

    1. FILTER – jest to domyślna tabela, która zawiera wbudowane łańcuchy dla:

      1. INPUT  – pakiety przeznaczone dla gniazd lokalnych
      2. DO PRZODU – pakiety kierowane przez system
      3. WYJŚCIE – pakiety generowane lokalnie
    2. NAT – tabela, z której korzysta się, gdy pakiet próbuje utworzyć nowe połączenie. Posiada wbudowane następujące elementy:

      1. PREROUTING – służy do modyfikowania pakietu zaraz po jego odebraniu
      2. WYJŚCIE – używane do zmiany pakietów generowanych lokalnie
      3. POSTROUTING – używany do modyfikowania pakietów, które mają zostać wysłane
    3. MANGLE – ta tabela służy do zmiany pakietów. Do wersji jądra 2.4 ta tabela miała tylko dwa łańcuchy, ale teraz jest ich 5:

      1. PREROUTING – do zmiany połączeń przychodzących
      2. WYJŚCIE – do zmiany lokalnie generowanych pakietów
      3. INPUT – dla pakietów przychodzących
      4. POSTROUTING – do modyfikowania pakietów tuż przed ich wysłaniem
      5. DO PRZODU – dla pakietów kierowanych przez urządzenie

W tym artykule zobaczysz kilka przydatnych poleceń, które pomogą Ci zarządzać zaporą systemu Linux za pomocą iptables. Na potrzeby tego artykułu zacznę od prostszych poleceń, a na koniec przejdę do bardziej złożonych.

1. Uruchom/Zatrzymaj/Uruchom ponownie zaporę sieciową Iptables

Po pierwsze, powinieneś wiedzieć, jak zarządzać usługą iptables w różnych dystrybucjach Linuksa. To jest całkiem proste:

W dystrybucjach Linuksa opartych na SystemD

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

W dystrybucjach Linuksa opartych na SysVinit

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Sprawdź wszystkie reguły zapory sieciowej IPtables

Jeśli chcesz sprawdzić istniejące reguły, użyj następującego polecenia:

iptables -L -n -v

Powinno to zwrócić dane wyjściowe podobne do poniższych:

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Jeśli wolisz sprawdzić reguły dla konkretnej tabeli, możesz użyć opcji -t, a następnie podać tabelę, którą chcesz sprawdzić. Na przykład, aby sprawdzić reguły w tabeli NAT, możesz użyć:

iptables -t nat -L -v -n

3. Zablokuj określony adres IP w zaporze IPtables

Jeśli zauważysz nietypową lub obraźliwą aktywność związaną z adresem IP, możesz zablokować ten adres IP, stosując następującą regułę:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Gdzie należy zmienić "xxx.xxx.xxx.xxx" na rzeczywisty adres IP. Zachowaj szczególną ostrożność podczas uruchamiania tego polecenia, ponieważ możesz przypadkowo zablokować własny adres IP. Opcja -A dołącza regułę na końcu wybranego łańcucha.

Jeśli chcesz blokować tylko ruch TCP z tego adresu IP, możesz użyć opcji -p, która określa protokół. W ten sposób polecenie będzie wyglądać następująco:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Odblokuj adres IP w zaporze IPtables

Jeśli zdecydowałeś, że nie chcesz już blokować żądań z określonego adresu IP, możesz usunąć regułę blokowania za pomocą następującego polecenia:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

Opcja -D usuwa jedną lub więcej reguł z wybranego łańcucha. Jeśli wolisz użyć dłuższej opcji, możesz użyć --delete.

5. Zablokuj określony port w zaporze IPtables

Czasami możesz chcieć zablokować połączenia przychodzące lub wychodzące na określonym porcie. Jest to dobry środek bezpieczeństwa i naprawdę powinieneś o tym pomyśleć podczas konfigurowania zapory sieciowej.

Aby zablokować połączenia wychodzące na określonym porcie, użyj:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

Aby zezwolić na połączenia przychodzące, użyj:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

W obu przykładach zmień "xxx" na rzeczywisty port, na który chcesz zezwolić. Jeśli chcesz blokować ruch UDP zamiast TCP, po prostu zmień "tcp" na "udp" w powyżej reguły iptables.

6. Zezwalaj na wiele portów na IPtables za pomocą Multiport

Możesz zezwolić na wiele portów jednocześnie, używając multiport. Poniżej znajdziesz taką regułę zarówno dla połączeń przychodzących, jak i wychodzących:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. Zezwól na określony zakres sieci na określonym porcie na tabletach IP

Możesz chcieć ograniczyć niektóre połączenia na określonym porcie do danej sieci. Załóżmy, że chcesz zezwolić na połączenia wychodzące na porcie 22 z siecią 192.168.100.0/24.

Można to zrobić za pomocą tego polecenia:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Zablokuj Facebooka na zaporze IPtables

Niektórzy pracodawcy lubią blokować dostęp do Facebooka swoim pracownikom. Poniżej znajduje się przykład blokowania ruchu do Facebooka.

Uwaga: jeśli jesteś administratorem systemu i musisz zastosować się do tych zasad, pamiętaj, że Twoi współpracownicy mogą przestać z Tobą rozmawiać :)

Najpierw znajdź adresy IP używane przez Facebooka:

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Następnie możesz zablokować tę sieć Facebooka za pomocą:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Należy pamiętać, że zakres adresów IP wykorzystywany przez Facebooka może różnić się w zależności od kraju.

9. Skonfiguruj przekierowanie portów w IPtables

Czasami możesz chcieć przekierować ruch jednej usługi do innego portu. Można to osiągnąć za pomocą następującego polecenia:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Powyższe polecenie przekazuje cały ruch przychodzący na interfejsie sieciowym eth0 z portu 25 do portu 2525. Możesz zmienić porty na te, których potrzebujesz.

10. Zablokuj zalanie sieci na porcie Apache za pomocą IPtables

Czasami adresy IP mogą żądać zbyt wielu połączeń do portów internetowych w Twojej witrynie. Może to powodować wiele problemów i aby im zapobiec, możesz zastosować następującą regułę:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

Powyższe polecenie ogranicza połączenia przychodzące na minutę do 100 i ustawia limit serii na 200. Możesz edytować limit i impuls limitu zgodnie z własnymi, specyficznymi wymaganiami.

11. Blokuj przychodzące żądania ping na IPtables

Niektórzy administratorzy systemów lubią blokować przychodzące żądania ping ze względów bezpieczeństwa. Choć zagrożenie nie jest aż tak duże, warto wiedzieć, jak zablokować takie żądanie:

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Zezwól na dostęp do pętli zwrotnej

Dostęp do pętli zwrotnej (dostęp z 127.0.0.1) jest ważny i zawsze powinieneś pozostawić go aktywnym:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. Prowadź dziennik porzuconych pakietów sieciowych na IPtables

Jeśli chcesz rejestrować upuszczone pakiety na interfejsie sieciowym eth0, możesz użyć następującego polecenia:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

Możesz zmienić wartość po "--log-prefix" na coś według własnego uznania. Wiadomości są rejestrowane w /var/log/messages i możesz je wyszukiwać za pomocą:

grep "IPtables dropped packets:" /var/log/messages

14. Zablokuj dostęp do określonego adresu MAC na tabletach IP

Możesz zablokować dostęp do swojego systemu z określonego adresu MAC, korzystając z:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Oczywiście będziesz musiał zmienić "00:00:00:00:00:00" na rzeczywisty adres MAC, który chcesz zablokować.

15. Ogranicz liczbę jednoczesnych połączeń na adres IP

Jeśli nie chcesz, aby nawiązywano zbyt wiele jednoczesnych połączeń z jednego adresu IP na danym porcie, możesz użyć poniższego polecenia:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Powyższe polecenie pozwala na nie więcej niż 3 połączeń na klienta. Oczywiście możesz zmienić numer portu, aby dopasować go do innej usługi. Również --connlimit-above powinien zostać zmieniony, aby odpowiadał Twoim wymaganiom.

16. Szukaj w regule IPtables

Po zdefiniowaniu reguł iptables będziesz chciał od czasu do czasu wyszukiwać i być może będziesz musiał je zmienić. Łatwym sposobem wyszukiwania w ramach reguł jest użycie:

iptables -L $table -v -n | grep $string

W powyższym przykładzie będziesz musiał zamienić $table na rzeczywistą tabelę, w której chcesz przeszukiwać, i $string na rzeczywisty ciąg, którego szukasz.

Oto przykład:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Zdefiniuj nowy łańcuch IPTables

Dzięki iptables możesz zdefiniować własny łańcuch i przechowywać w nim niestandardowe reguły. Aby zdefiniować łańcuch, użyj:

iptables -N custom-filter

Teraz możesz sprawdzić, czy jest tam Twój nowy filtr:

iptables -L
Przykładowe wyjście
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. Opróżnij łańcuchy lub reguły zapory sieciowej IPtables

Jeśli chcesz opróżnić łańcuchy zapory ogniowej, możesz użyć:

iptables -F

Możesz opróżnić łańcuchy z określonej tabeli za pomocą:

iptables -t nat -F

Możesz zmienić "nat" na rzeczywistą tabelę, której łańcuchy chcesz opróżnić.

19. Zapisz reguły IPtables do pliku

Jeśli chcesz zapisać reguły zapory sieciowej, możesz użyć polecenia iptables-save. Do zapisywania i przechowywania reguł w pliku możesz użyć następujących poleceń:

iptables-save > ~/iptables.rules

To od Ciebie zależy, gdzie będziesz przechowywać plik i jak go nazwiesz.

20. Przywróć reguły IPtables z pliku

Jeśli chcesz przywrócić listę reguł iptables, możesz użyć iptables-restore. Polecenie wygląda następująco:

iptables-restore < ~/iptables.rules

Oczywiście ścieżka do pliku reguł może być inna.

21. Skonfiguruj reguły IPtables pod kątem zgodności z PCI

Niektórzy administratorzy systemów mogą być zobowiązani do skonfigurowania swoich serwerów tak, aby były zgodne ze standardem PCI. Różni dostawcy zgodności ze standardem PCI mają wiele wymagań, ale jest kilka z nich powszechnych.

W wielu przypadkach będziesz musiał mieć więcej niż jeden adres IP. Będziesz musiał zastosować poniższe zasady dotyczące adresu IP witryny. Zachowaj szczególną ostrożność podczas korzystania z poniższych zasad i używaj ich tylko wtedy, gdy jesteś pewien, co robisz:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Jeśli używasz cPanel lub podobnego panelu sterowania, może być konieczne zablokowanie jego portów. Oto przykład:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Uwaga: aby upewnić się, że spełniasz wymagania dostawcy PCI, dokładnie sprawdź jego raport i zastosuj wymagane zasady. W niektórych przypadkach może być konieczne zablokowanie ruchu UDP również na niektórych portach.

22. Zezwalaj na ustanowione i powiązane połączenia

Ponieważ ruch sieciowy jest oddzielony od ruchu przychodzącego i wychodzącego, należy zezwolić na ustalony i powiązany ruch przychodzący. W przypadku połączeń przychodzących zrób to za pomocą:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Do użytku wychodzącego:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. Upuść nieprawidłowe pakiety w IPtables

Możliwe jest oznaczenie niektórych pakietów sieciowych jako nieprawidłowych. Niektórzy ludzie wolą rejestrować te pakiety, ale inni wolą je porzucić. Aby odrzucić nieważne pakiety, możesz użyć:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. Zablokuj połączenie w interfejsie sieciowym

Niektóre systemy mogą mieć więcej niż jeden interfejs sieciowy. Możesz ograniczyć dostęp do tego interfejsu sieciowego lub zablokować połączenia z określonego adresu IP.

Na przykład:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Zmień „xxx.xxx.xxx.xxx ” na rzeczywisty adres IP (lub sieć), który chcesz zablokować.

25. Wyłącz pocztę wychodzącą poprzez IPTables

Jeśli Twój system nie powinien wysyłać żadnych wiadomości e-mail, możesz zablokować porty wychodzące na portach SMTP. Możesz na przykład użyć tego:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Wniosek

Iptables to potężna zapora ogniowa, z której możesz łatwo skorzystać. Dla każdego administratora systemu istotne jest poznanie przynajmniej podstaw iptables. Jeśli chcesz znaleźć bardziej szczegółowe informacje na temat iptables i jego opcji, zdecydowanie zalecamy przeczytanie jego instrukcji:

man iptables

Jeśli uważasz, że powinniśmy dodać więcej poleceń do tej listy, podziel się nimi z nami, przesyłając je w sekcji komentarzy poniżej.