Iptables jest główną zaporą sieciową, która jest domyślnie dostarczana z większością dystrybucji Linuksa. Odpowiada za obsługę bezpieczeństwa sieciowego. Działa poprzez porównywanie pakietów danych z zestawem reguł, instruując system, czy ma zaakceptować, odrzucić, czy przekazać połączenie zgodnie z regułami. W tym poradniku pokażemy Ci, jak wyświetlać i usuwać reguły, sprawdzać i czyścić liczniki pakietów i bajtów oraz czyścić łańcuchy. Gotowy? Zaczynajmy!
Wymagania wstępne
Zanim przejdziemy do poradnika, wyjaśnijmy sobie jedną rzecz. Wszystkie wskazówki i triki przedstawione w tym przewodniku są wykonywane na osobnej maszynie wirtualnej. Dobrze, abyś Ty również tak zrobił, ponieważ eliminuje to ryzyko doprowadzenia systemu do całkowitego chaosu. Dopiero po opanowaniu tych procesów należy próbować wdrażać je w rzeczywistych sytuacjach.
W tym poradniku do zademonstrowania wszystkich kroków użyjemy systemu Ubuntu. Powinny one jednak działać w podobny sposób niezależnie od dystrybucji.
Wyświetlanie reguł
Wyświetlanie reguł według specyfikacji
Najpierw sprawdźmy wszystkie aktywne reguły według specyfikacji. Uruchom następujące polecenie:
|
1 |
sudo iptables -S |

Jeśli wcześniej pracowałeś z tworzeniem reguł iptables, mogłeś zauważyć podobieństwo. Dane wyjściowe przypominają polecenia, które zostały użyte do ich utworzenia, z wyjątkiem części „iptables”. Mają one również podobną strukturę do plików konfiguracyjnych reguł iptables.
Wyświetlanie konkretnego łańcucha
Spróbujmy czegoś bardziej precyzyjnego. Zamiast wyświetlać wszystkie reguły iptables, nakaż iptables wyświetlenie reguł konkretnego łańcucha. Na przykład TCP, INPUT, OUTPUT itp. Aby to zrobić, określ nazwę łańcucha po fladze „-S”:
|
1 |
sudo iptables -S <łańcuch> |

Wyświetlanie reguł w postaci tabeli
Widok tabeli jest przydatny przy porównywaniu różnych reguł. Użyj flagi „-L”, aby nakazać iptables wyświetlenie wszystkich aktywnych reguł w formacie tabeli:
|
1 |
sudo iptables -L |

Dane wyjściowe zawierają wszystkie bieżące reguły posortowane według łańcucha. Podobnie jak w poprzedniej sekcji, możliwe jest również filtrowanie listy wyjściowej według określonego łańcucha, takiego jak INPUT, TCP, OUTPUT itp. Aby to zrobić, określ łańcuch po fladze „-L”:
|
1 |
sudo iptables -L <łańcuch> |

Przeanalizujmy krótko dane wyjściowe. W naszym przypadku, ze względu na reguły, dane wyjściowe mogą wydawać się nieco nieuporządkowane. Pierwsza linia danych wyjściowych deklaruje nazwę łańcucha (INPUT) wraz z jego domyślną polityką (DROP). Następna linia określa nagłówki kolumn tabeli. Reszta to reguły łańcucha. Przyjrzyjmy się, co oznaczają nagłówki:
- target: Jeśli pakiet pasuje do reguły, ta sekcja definiuje, jakie działanie powinno zostać podjęte. Może to być zaakceptowanie pakietu, odrzucenie, rejestrowanie lub przesłanie go do innego łańcucha.
- prot: Definiuje protokół, na przykład udp, tcp, icmp lub all.
- opt: Ta kolumna wskazuje opcje IP. Jest rzadko używana.
- source: Pochodzenie pakietu (adres IP lub podsieć). Wartość może być konkretna lub określona jako „anywhere”.
- destination: Miejsce docelowe pakietu (adres IP lub podsieć). Wartość może być konkretna lub określona jako „anywhere”.
Jak zapewne zauważyłeś, ostatnia kolumna nie jest podpisana. Dzieje się tak, ponieważ służy ona do wskazywania opcji reguły. Będzie zawierać wszystkie części reguły, które nie zmieściły się w poprzednich polach. Może zawierać wszystko, od portów źródłowych/docelowych po stan połączenia pakietu itp.
Liczba pakietów i łączny rozmiar
Czyszczenie liczników pakietów i bajtów
Podczas wyświetlania reguł iptables możemy również sprawdzić liczbę pakietów oraz łączny rozmiar pakietów w bajtach, które zostały dopasowane do każdej konkretnej reguły. Jest to przydatna metryka, gdy chcesz mieć ogólny obraz tego, które reguły są dopasowywane do pakietów.
W tym przykładzie użyjemy łańcucha INPUT. Tym razem dodaj flagę „-v”, która oznacza tryb szczegółowy (verbose):
|
1 |
sudo iptables -L INPUT -v |

Zauważysz, że dane wyjściowe tabeli zawierają teraz dwa dodatkowe pola: pkts i bytes.
Resetowanie liczników pakietów i łącznego rozmiaru
W niektórych sytuacjach możesz chcieć zresetować liczniki, które zademonstrowaliśmy wcześniej. Jeśli system zostanie zrestartowany, liczniki zostaną automatycznie wyczyszczone. Możesz również ręcznie wymusić reset. Użyjemy flagi „-Z”, aby zresetować liczbę pakietów i łączny rozmiar:
|
1 |
sudo iptables -v -Z |

Pamiętaj, że to polecenie zresetuje liczniki wszystkich łańcuchów. Podobnie jak w przypadku innych poleceń, możliwe jest zresetowanie licznika dla określonych łańcuchów. Na przykład kolejne polecenie zresetuje liczniki dla łańcucha INPUT:
|
1 |
sudo iptables -v -Z <łańcuch> |

Możliwe jest bardziej precyzyjne zresetowanie licznika. Możesz zresetować licznik dla konkretnej reguły w określonym łańcuchu. Aby to zrobić, dodaj numer reguły po nazwie łańcucha:
|
1 |
sudo iptables -v -Z <łańcuch> <numer_reguły> |
Usuwanie reguł
Usuwanie reguł według specyfikacji
Istnieje wiele sposobów na usuwanie reguł iptables. Pierwszą metodą usuwania reguł jest użycie specyfikacji reguły. Do usunięcia użyjemy flagi „-D”, po której następuje specyfikacja reguły:
|
1 |
sudo iptables -v -D INPUT -s 172.217.194.113 -j DROP |

Jeśli dodawałeś już wcześniej jakiekolwiek reguły iptables, zauważysz podobieństwo. Jedyną rzeczą, która się tutaj zmieniła, jest flaga „-D” zamiast flagi „-A”.
Usuwanie reguł według łańcucha i numeru
Usuwanie reguł według ich specyfikacji wymaga nieco więcej wysiłku, prawda? A co, gdybyśmy mogli je usunąć bez konieczności pamiętania specyfikacji reguły? Usuńmy reguły według ich łańcucha i numeru! W porównaniu z pierwszą metodą (usuwanie według specyfikacji), ta jest stosunkowo łatwiejsza, ponieważ nie musisz mieć pod ręką całej specyfikacji.
Ta metoda wymaga podania łańcucha i numeru linii docelowej reguły. Skąd wziąć numer linii? Uruchom następujące polecenie, aby to ustalić:
|
1 |
sudo iptables -L --line-numbers |

Otrzymasz obszerny wynik ze wszystkimi regułami i ich numerami linii. Aby zawęzić wynik, użyj nazwy łańcucha po fladze „-L”:
|
1 |
sudo iptables -L <łańcuch> --line-numbers |

W wyjściu zauważysz dodatkową kolumnę num. Wskazuje ona numer linii dla każdej reguły. Po ustaleniu docelowego numeru wykonaj usunięcie:
|
1 |
sudo iptables -v -D <łańcuch> <numer_linii> |
Czyszczenie łańcuchów
W przypadku iptables, czym jest czyszczenie (flushing) łańcucha? To proces usuwania wszystkich reguł w określonym łańcuchu. Jeśli potrzebujesz masowo usunąć reguły, możesz skorzystać z tej metody. Przed wykonaniem czyszczenia łańcucha zdecydowanie zalecamy wykonanie kopii zapasowej istniejących reguł za pomocą iptables-save. Jest to wbudowane narzędzie iptables, które wyświetli wszystkie bieżące łańcuchy i reguły. Wynik można wyeksportować do pliku tekstowego:
|
1 |
sudo iptables-save > ~/Desktop/iptables-backup.txt |
![]()
Czyszczenie pojedynczego łańcucha
Sprawdźmy, jak wyczyścić łańcuch. Użyj flagi „-F”, a następnie docelowego łańcucha:
|
1 |
sudo iptables -v -F <łańcuch> |

Czyszczenie wszystkich łańcuchów
Przed wyczyszczeniem wszystkich łańcuchów upewnij się, że rozumiesz, co robisz. Spowoduje to usunięcie wszystkich reguł zapory sieciowej iptables. Powinieneś wcześniej utworzyć kopię zapasową reguł iptables.
Gotowy? Wyczyść wszystkie łańcuchy iptables, uruchamiając następujące polecenie:
|
1 |
sudo iptables -v -F |

Czyszczenie reguł, usuwanie łańcuchów i akceptowanie wszystkiego
Wykonanie kroków opisanych w tej sekcji skutecznie wyłączy zaporę sieciową, umożliwiając nieograniczony ruch sieciowy. Podobnie jak w poprzedniej sekcji, przed przejściem dalej zalecamy posiadanie kopii zapasowej iptables. Najpierw zmienimy domyślną politykę każdego z wbudowanych łańcuchów na ACCEPT. Ma to na celu upewnienie się, że iptables nie zablokuje Ci dostępu do serwera przez SSH:
|
1 |
sudo iptables -v -P INPUT ACCEPT && sudo iptables -v -P FORWARD ACCEPT && sudo iptables -v -P OUTPUT ACCEPT |

Teraz wyczyść tabele nat i mangle:
|
1 2 |
sudo iptables -v -t nat -F sudo iptables -v -t mangle -F |


Wyczyść wszystkie łańcuchy i usuń wszystkie niestandardowe łańcuchy:
|
1 2 |
sudo iptables -v -F sudo iptables -v -X |


Następnie sprawdźmy wynik:
|
1 |
sudo iptables -L --line-numbers |
Podsumowanie
Iptables to potężna zapora sieciowa. Mamy nadzieję, że ten poradnik okazał się pomocny w nauce wyświetlania i usuwania reguł zapory iptables. I nie zapomnij poćwiczyć ich przed zastosowaniem w rzeczywistym środowisku.
Miłego korzystania z komputera!



Komentarze
Brak komentarzy. Bądź pierwszy.