Iptables to niezwykle elastyczne narzędzie firewall stworzone dla systemów operacyjnych Linux. Niezależnie od tego, czy jesteś początkującym maniakiem Linuksa, czy administratorem systemu, prawdopodobnie istnieje sposób, w jaki iptables może być dla Ciebie świetnym pożytkiem. Czytaj dalej, ponieważ pokazujemy, jak skonfigurować najbardziej wszechstronną zaporę ogniową Linuksa.
O iptables
iptables to narzędzie zapory ogniowej wiersza poleceń, które wykorzystuje łańcuchy zasad do zezwalania lub blokowania ruchu. Kiedy połączenie próbuje się ustanowić w twoim systemie, iptables szuka reguły na swojej liście, aby ją dopasować. Jeśli go nie znajdzie, odwołuje się do domyślnej akcji.
iptables prawie zawsze jest preinstalowany w każdej dystrybucji Linuksa. Aby go zaktualizować / zainstalować, po prostu pobierz pakiet iptables:
sudo apt-get install iptables
Istnieją alternatywy GUI dla iptables, takie jak Firestarter , ale iptables nie jest tak naprawdę trudne, gdy masz kilka poleceń wyłączonych. Chcesz zachować szczególną ostrożność podczas konfigurowania reguł iptables, zwłaszcza jeśli łączysz się przez SSH z serwerem, ponieważ jedno błędne polecenie może Cię trwale zablokować, dopóki nie zostanie ręcznie naprawione na komputerze fizycznym.
Rodzaje łańcuchów
iptables używa trzech różnych łańcuchów: wejścia, przekazania i wyjścia.
Wejście - Ten łańcuch służy do kontrolowania zachowania połączeń przychodzących. Na przykład, jeśli użytkownik spróbuje połączyć się przez SSH z twoim komputerem / serwerem, iptables spróbuje dopasować adres IP i port do reguły w łańcuchu wejściowym.
Naprzód - Ten łańcuch jest używany do połączeń przychodzących, które w rzeczywistości nie są dostarczane lokalnie. Pomyśl o routerze - dane są zawsze do niego wysyłane, ale rzadko są faktycznie przeznaczone dla samego routera; dane są właśnie przekazywane do celu. Jeśli nie wykonujesz jakiegoś routingu, NATowania lub czegoś innego w swoim systemie, co wymaga przekazywania, nie będziesz nawet używać tego łańcucha.
Jest jeden pewny sposób sprawdzenia, czy Twój system używa / potrzebuje łańcucha przekazywania.
iptables -L -v
Powyższy zrzut ekranu przedstawia serwer, który działa od kilku tygodni i nie ma żadnych ograniczeń dotyczących połączeń przychodzących ani wychodzących. Jak widać, łańcuch wejściowy przetworzył 11 GB pakietów, a łańcuch wyjściowy 17 GB. Z drugiej strony, łańcuch przekazywania nie musiał przetwarzać pojedynczego pakietu. Dzieje się tak, ponieważ serwer nie przekazuje żadnego przekazywania ani nie jest używany jako urządzenie tranzytowe.
Wynik - Ten łańcuch jest używany do połączeń wychodzących. Na przykład, jeśli spróbujesz pingować howtogeek.com, iptables sprawdzi swój łańcuch wyjściowy, aby zobaczyć, jakie reguły dotyczą pingów i howtogeek.com, zanim podejmie decyzję o zezwoleniu lub odrzuceniu próby połączenia.
Zastrzeżenie
Mimo że pingowanie zewnętrznego hosta wydaje się czymś, co wystarczyłoby tylko do przejścia przez łańcuch wyjściowy, pamiętaj, że aby zwrócić dane, zostanie również użyty łańcuch wejściowy. Używając iptables do blokowania systemu, pamiętaj, że wiele protokołów będzie wymagało komunikacji dwukierunkowej, więc zarówno łańcuch wejściowy, jak i wyjściowy będą musiały zostać poprawnie skonfigurowane. SSH to powszechny protokół, którego ludzie zapominają o dopuszczeniu w obu łańcuchach.
Domyślne zachowanie łańcucha zasad
Przed przystąpieniem do konfigurowania określonych reguł będziesz chciał zdecydować, jakie ma być domyślne zachowanie trzech łańcuchów. Innymi słowy, co chcesz zrobić iptables, jeśli połączenie nie jest zgodne z żadnymi istniejącymi regułami?
Aby zobaczyć, jakie łańcuchy zasad są obecnie skonfigurowane pod kątem niedopasowanego ruchu, uruchom plik
iptables -L
Komenda.
Jak widać, użyliśmy również polecenia grep, aby uzyskać bardziej przejrzysty wynik. Na tym zrzucie ekranu widać, że nasze sieci akceptują ruch.
W większości przypadków system będzie domyślnie akceptował połączenia. To ustawienie powinno być już skonfigurowane, chyba że wcześniej zmieniłeś reguły łańcucha zasad. Tak czy inaczej, oto polecenie domyślnej akceptacji połączeń:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Domyślnie akceptujesz regułę akceptacji, możesz następnie użyć iptables do odmowy określonych adresów IP lub numerów portów, kontynuując akceptowanie wszystkich innych połączeń. Za chwilę przejdziemy do tych poleceń.
Jeśli wolisz odrzucić wszystkie połączenia i ręcznie określić, które z nich chcesz zezwolić na połączenie, powinieneś zmienić domyślną politykę swoich łańcuchów na odrzucanie. Takie rozwiązanie byłoby prawdopodobnie przydatne tylko w przypadku serwerów, które zawierają poufne informacje i łączą się z nimi tylko z tymi samymi adresami IP.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Odpowiedzi specyficzne dla połączenia
Po skonfigurowaniu domyślnych zasad łańcucha możesz rozpocząć dodawanie reguł do iptables, aby wiedział, co zrobić, gdy napotka połączenie z lub do określonego adresu IP lub portu. W tym przewodniku omówimy trzy najbardziej podstawowe i najczęściej używane „odpowiedzi”.
Zaakceptować - Zezwól na połączenie.
Upuszczać - Porzuć połączenie, zachowuj się, jakby to się nigdy nie wydarzyło. Jest to najlepsze rozwiązanie, jeśli nie chcesz, aby źródło zdawało sobie sprawę, że Twój system istnieje.
Odrzucać - Nie zezwalaj na połączenie, ale odeślij błąd. Jest to najlepsze rozwiązanie, jeśli nie chcesz, aby określone źródło łączyło się z Twoim systemem, ale chcesz, aby wiedziało, że zapora je blokuje.
Najlepszym sposobem pokazania różnicy między tymi trzema regułami jest pokazanie, jak to wygląda, gdy komputer próbuje pingować maszynę z systemem Linux z iptables skonfigurowanymi dla każdego z tych ustawień.
Umożliwienie połączenia:
Porzucenie połączenia:
Odrzucanie połączenia:
Zezwalanie lub blokowanie określonych połączeń
Po skonfigurowaniu łańcuchów zasad możesz teraz skonfigurować iptables, aby zezwalać lub blokować określone adresy, zakresy adresów i porty. W tych przykładach ustawimy połączenia na
UPUSZCZAĆ
, ale możesz je przełączyć na
ZAAKCEPTOWAĆ
lub
ODRZUCAĆ
, w zależności od potrzeb i sposobu skonfigurowania łańcuchów polis.
Uwaga: w tych przykładach będziemy używać
iptables -A
aby dołączyć reguły do istniejącego łańcucha. iptables zaczyna się na początku swojej listy i przechodzi przez każdą regułę, aż znajdzie taką, która pasuje. Jeśli chcesz wstawić regułę nad inną, możesz użyć
iptables -I [chain] [number]
aby określić numer, który powinien znajdować się na liście.
Połączenia z jednego adresu IP
Ten przykład pokazuje, jak zablokować wszystkie połączenia z adresu IP 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Połączenia z zakresu adresów IP
Ten przykład pokazuje, jak zablokować wszystkie adresy IP w zakresie sieci 10.10.10.0/24. Do określenia zakresu adresów IP można użyć maski sieci lub standardowego ukośnika.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
lub
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Połączenia z określonym portem
Ten przykład pokazuje, jak blokować połączenia SSH od 10.10.10.10.
iptables -A WEJŚCIE -p tcp --dport ssh -s 10.10.10.10 -j DROP
Możesz zastąpić „ssh” dowolnym protokołem lub numerem portu. Plik
-p tcp
część kodu mówi iptables, jakiego rodzaju połączenia używa protokół. Jeśli blokujesz protokół, który używa UDP zamiast TCP, to
-p udp
byłoby konieczne zamiast tego.
Ten przykład pokazuje, jak blokować połączenia SSH z dowolnego adresu IP.
iptables -A INPUT -p tcp --dport ssh -j DROP
Stany połączeń
Jak wspomnieliśmy wcześniej, wiele protokołów będzie wymagało dwukierunkowej komunikacji. Na przykład, jeśli chcesz zezwolić na połączenia SSH z systemem, łańcuchy wejściowy i wyjściowy będą wymagały dodania do nich reguły. Ale co, jeśli chcesz, aby tylko SSH wchodziło do twojego systemu? Czy dodanie reguły do łańcucha wyjściowego nie pozwoli również na wychodzące próby SSH?
W tym miejscu pojawiają się stany połączeń, które umożliwiają dwukierunkową komunikację, ale pozwalają nawiązywać tylko połączenia jednokierunkowe. Spójrz na ten przykład, w którym połączenia SSH OD 10.10.10.10 są dozwolone, ale połączenia SSH DO 10.10.10.10 nie. Jednak system może odsyłać informacje przez SSH, o ile sesja została już ustanowiona, co umożliwia komunikację SSH między tymi dwoma hostami.
iptables -A WEJŚCIE -p tcp --dport ssh -s 10.10.10.10 -m stan - stan NOWY, USTANOWIONY -j AKCEPTUJ
iptables -A WYJŚCIE -p tcp --sport 22 -d 10.10.10.10 -m stan - stan USTANOWIONO -j AKCEPTUJ
Zapisywania zmian
Zmiany wprowadzone w regułach iptables zostaną odrzucone przy następnym uruchomieniu usługi iptables, chyba że wykonasz polecenie zapisania zmian. To polecenie może się różnić w zależności od dystrybucji:
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service iptables zapisz
Lub
/etc/init.d/iptables zapisz
Inne polecenia
Lista aktualnie skonfigurowanych reguł iptables:
iptables -L
Dodawanie
-w
opcja da ci informacje o pakietach i bajtach oraz dodanie
-n
wypisze wszystko numerycznie. Innymi słowy - nazwy hostów, protokoły i sieci są wymienione jako liczby.
Aby wyczyścić wszystkie aktualnie skonfigurowane reguły, możesz wydać polecenie opróżnienia.
iptables -F