Iptables jest wyjątkowo elastycznym narzędziem firewall zbudowanym dla systemów operacyjnych Linux. Niezależnie od tego, czy jesteś początkującym maniakiem Linuxa, czy administratorem systemu, prawdopodobnie istnieje sposób, że iptables może być dla ciebie bardzo przydatny. Czytaj dalej, ponieważ pokazujemy, jak skonfigurować najbardziej uniwersalną zaporę Linux.
zdjęcie zrobione przez ezioman.
iptables to narzędzie zapory w wierszu poleceń, które używa łańcuchów zasad, aby zezwalać na lub blokować ruch. Gdy połączenie próbuje ustanowić się w systemie, iptables szuka reguły na liście, aby ją dopasować. Jeśli go nie znajdzie, odwołuje się do domyślnej akcji.
iptables prawie zawsze jest preinstalowany na dowolnej dystrybucji Linuksa. Aby go zaktualizować / zainstalować, po prostu pobierz pakiet iptables:
sudo apt-get install iptables
Istnieją alternatywy dla GUI do iptables, takich jak Firestarter, ale iptables nie jest tak trudny, gdy masz kilka komend w dół. Chcesz zachować szczególną ostrożność podczas konfigurowania reguł iptables, szczególnie jeśli jesteś SSH na serwerze, ponieważ jedno błędne polecenie może na stałe zablokować cię, dopóki nie zostanie ręcznie naprawione na fizycznym komputerze.
iptables używa trzech różnych łańcuchów: input, forward i output.
Wkład - Ten łańcuch służy do kontrolowania zachowania dla połączeń przychodzących. Na przykład, jeśli użytkownik spróbuje użyć SSH do komputera / serwera, iptables spróbuje dopasować adres IP i port do reguły w łańcuchu wejściowym.
Naprzód - Ten łańcuch jest używany dla połączeń przychodzących, które nie są faktycznie dostarczane lokalnie. Pomyśl o routerze - dane są zawsze wysyłane do niego, ale rzadko są przeznaczone do samego routera; dane są właśnie przekazywane do celu. Jeśli nie wykonujesz jakiegoś routingu, NAT-a lub czegoś innego w systemie, który 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 jest serwerem działającym od kilku tygodni i nie ma ograniczeń dotyczących połączeń przychodzących i wychodzących. Jak widać, łańcuch wejściowy przetworzył 11 GB pakietów, a łańcuch wyjściowy przetworzył 17 GB. Z drugiej strony, łańcuch forward nie musi przetwarzać pojedynczego pakietu. Wynika to z faktu, że serwer nie wykonuje żadnego przekazywania ani nie jest używany jako urządzenie tranzytowe.
Wydajność - 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 odmowie próby połączenia.
Zastrzeżenie
Mimo że pingowanie zewnętrznego hosta wydaje się czymś, co wystarczy tylko przejść przez łańcuch wyjściowy, należy pamiętać, że aby zwrócić dane, użyty zostanie również łańcuch wejściowy. Używając iptables do zablokowania systemu, pamiętaj, że wiele protokołów będzie wymagało dwukierunkowej komunikacji, więc zarówno łańcuch wejściowy, jak i wyjściowy będą musiały zostać poprawnie skonfigurowane. SSH jest powszechnym protokołem, o którym ludzie zapominają zezwolić na oba łańcuchy.
Zanim przejdziesz do konfiguracji określonych reguł, będziesz chciał zdecydować, jakie będzie domyślne zachowanie tych trzech łańcuchów. Innymi słowy, co chcesz zrobić iptables, jeśli połączenie nie pasuje do żadnych istniejących reguł?
Aby zobaczyć, jakie łańcuchy zasad są obecnie skonfigurowane do obsługi niedopasowanego ruchu, uruchom iptables -L
dowództwo.
Jak widać, użyliśmy także polecenia grep, aby zapewnić nam czystsze wyniki. Na tym zrzucie ekranu nasze sieci są obecnie postrzegane jako akceptujące ruch.
Więcej razy, będziesz chciał, aby twój system domyślnie akceptował połączenia. Jeśli wcześniej nie zmieniłeś reguł łańcucha reguł, to ustawienie powinno już być skonfigurowane. Tak czy inaczej, oto polecenie, aby domyślnie akceptować połączenia:
iptables --policy INPUT ACCEPT
iptables --policy AKCEPTUJ OUTPUT
iptables - policy FORWARD ACCEPT
Domyślnie przyjmujesz regułę akceptacji, możesz wtedy używać iptables do odmawiania określonych adresów IP lub numerów portów, przy jednoczesnym dalszym akceptowaniu wszystkich innych połączeń. Za chwilę dojdziemy do tych poleceń.
Jeśli wolisz odmówić wszystkich połączeń i ręcznie określić, które z nich chcesz zezwolić na połączenie, powinieneś zmienić domyślną politykę swoich sieci, aby je upuścić. Może to być użyteczne tylko w przypadku serwerów, które zawierają poufne informacje i mają do nich dostęp tylko te same adresy IP.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Po skonfigurowaniu domyślnych zasad łańcucha można rozpocząć dodawanie reguł do programu iptables, aby wiedział, co zrobić, gdy napotka połączenie z 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, zachowaj się, jakby nigdy się nie wydarzyło. Najlepiej, jeśli nie chcesz, aby źródło zdało sobie sprawę, że twój system istnieje.
Odrzucać - Nie zezwalaj na połączenie, ale odeślij błąd. Jest to najlepsze, jeśli nie chcesz, aby określone źródło łączyło się z twoim systemem, ale chcesz, aby wiedział, że zapora ich blokuje.
Najlepszym sposobem na pokazanie różnicy między tymi trzema regułami jest pokazanie, jak to wygląda, gdy komputer próbuje pingować komputer z systemem Linux z iptables skonfigurowanym dla każdego z tych ustawień.
Umożliwienie połączenia:
Upuszczenie połączenia:
Odrzucenie połączenia:
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 UPUSZCZAĆ
, ale możesz je przełączyć ZAAKCEPTOWAĆ
lub ODRZUCAĆ
, w zależności od Twoich potrzeb i sposobu, w jaki skonfigurowałeś swoje łańcuchy zasad.
Uwaga: w tych przykładach użyjemy iptables -A
dołączać reguły do istniejącego łańcucha. iptables zaczyna się na początku listy i przechodzi przez każdą regułę, aż znajdzie taką, która pasuje. Jeśli chcesz wstawić regułę powyżej innej, możesz użyć iptables -I [łańcuch] [numer]
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. Możesz użyć maski sieci lub standardowej notacji ukośnej, aby określić zakres adresów IP.
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 INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Możesz zastąpić "ssh" dowolnym protokołem lub numerem portu. The -p tcp
część kodu informuje iptables, jakiego rodzaju połączenia używa protokół. Jeśli blokowałeś protokół używający 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
Jak wspomnieliśmy wcześniej, wiele protokołów będzie wymagać dwukierunkowej komunikacji. Na przykład, jeśli chcesz zezwolić na połączenia SSH z systemem, łańcuchy wejściowe i wyjściowe będą wymagać dodania do nich reguły. Ale co jeśli chcesz, aby SSH wchodził do twojego systemu, aby było dozwolone? Czy dodanie reguły do łańcucha wyjściowego również nie zezwoli na wychodzące próby SSH?
Stamtąd wchodzą stany połączeń, które dają ci możliwość, aby umożliwić dwukierunkową komunikację, ale pozwalają tylko na ustalenie połączeń w jedną stronę. Spójrz na ten przykład, gdzie połączenia SSH z 10.10.10.10 są dozwolone, ale połączenia SSH TO 10.10.10.10 nie są. Jednakże system może wysyłać informacje przez SSH, dopóki sesja została już ustanowiona, co umożliwia komunikację SSH pomiędzy tymi dwoma hostami.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m stan --stan NOWOŚĆ, USTAWIONA -j AKCEPTUJĘ
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m stan - stan USTAWIONE -j AKCEPTUJĘ
Zmiany wprowadzone w regułach iptables zostaną zneutralizowane następnym razem, gdy usługa iptables zostanie zrestartowana, chyba że wykonasz polecenie, aby zapisać zmiany. To polecenie może się różnić w zależności od dystrybucji:
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service zapisz iptables
Lub
/etc/init.d/iptables zapisz
Wyświetl aktualnie skonfigurowane reguły iptables:
iptables -L
Dodawanie -v
opcja daje informacje o pakietach i bajtach oraz dodawanie -n
wyświetli wszystko liczbowo. 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 płukania.
iptables -F