Główna » jak » Przewodnik dla początkujących na iptables, Linux Firewall

    Przewodnik dla początkujących na iptables, Linux Firewall

    Iptables jest niezwykle elastycznym narzędziem firewall stworzonym dla systemów operacyjnych Linux. Niezależnie od tego, czy jesteś początkującym maniakiem Linuksa, czy administratorem systemu, prawdopodobnie istnieje możliwość, że iptables będzie dla ciebie bardzo przydatny. Czytaj dalej, ponieważ pokazujemy, jak skonfigurować najbardziej uniwersalną zaporę Linuksa.

    zdjęcie zrobione przez ezioman.

    Informacje o iptables

    iptables to narzędzie zapory w wierszu poleceń, które używa łańcuchów zasad do zezwalania lub blokowania ruchu. 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 dla 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.

    Rodzaje łańcuchów

    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 połączenia.

    Zastrzeżenie

    Mimo że pingowanie zewnętrznego hosta wydaje się czymś, co wystarczy tylko przejść przez łańcuch wyjściowy, pamiętaj, że aby zwrócić dane, użyty zostanie łańcuch wejściowy. Używając iptables do blokowania 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.

    Domyślne zachowanie łańcucha łańcucha

    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 uważane za 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 domyślnie akceptujące połączenia:

    iptables --policy INPUT ACCEPT
    iptables --policy AKCEPTUJ OUTPUT
    iptables - policy FORWARD ACCEPT

    Domyślnie przyjmujesz regułę akceptowania, 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 odmawiać wszystkich połączeń i ręcznie określać, które z nich chcesz zezwolić na połączenie, powinieneś zmienić domyślną politykę swoich sieci, aby spadły. 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

    Konkretne odpowiedzi dotyczące połączenia

    Po skonfigurowaniu domyślnych zasad łańcucha można rozpocząć dodawanie reguł do iptables, aby wiedział, co zrobić, gdy napotka połączenie z określonego adresu IP lub portu. W tym przewodniku przejrzymy trzy najbardziej podstawowe i najczęściej używane "odpowiedzi".

    Zaakceptować - Zezwól na połączenie.

    Upuszczać - Przerwij 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 rozwiązanie, jeśli nie chcesz, aby określone źródło łączyło się z twoim systemem, ale chcesz, aby wiedział, że twój firewall je zablokował.

    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 konfiguracją iptables skonfigurowaną dla każdego z tych ustawień.

    Umożliwienie połączenia:

    Upuszczenie połączenia:

    Odrzucenie 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 UPUSZCZAĆ, ale możesz je zmienić ZAAKCEPTOWAĆ lub ODRZUCAĆ, w zależności od Twoich potrzeb i sposobu konfiguracji łańcuchów 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łby zamiast tego konieczny.

    Ten przykład pokazuje, jak blokować połączenia SSH z dowolnego adresu IP.

    iptables -A INPUT -p tcp --dport ssh -j DROP

    Stany połączenia

    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 tylko SSH wchodził do twojego systemu, aby było dozwolone? Dodanie reguły do ​​łańcucha wyjściowego również pozwoli 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 mię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 ESTABLISHED -j AKCEPTUJE

    Zapisywania zmian

    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

    Inne polecenia

    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