IPtables IPtables jest poleceniem użytkownika w systemach linuksowych. Polecenia tego używać może jedynie superużytkownik (Root). Pozwala ono na ustalanie reguł filtrowania i zmieniania pakietów za pomocą tworzenia odpowiednich reguł. Reguły te zapisane są w odpowiednich łańcuchach, a te z kolei – są przydzielone do odpowiednich tablic. Funkcje poszczególnych łańcuchów: INPUT – wywoływany dla pakietów przybywających z sieci, przeznaczonych dla lokalnej maszyny. OUTPUT – wywoływany dla pakietów tworzonych lokalnie i wychodzących poza maszynę. FORWARD – wywoływany dla pakietów trasowanych przez lokalną maszynę, lecz nie przeznaczonych dla niej. PREROUTING – wywoływany dla pakietów z zewnątrz jeszcze przed ich trasowaniem. POSTROUTING – wywoływany dla pakietów, które właśnie opuszczają maszynę po trasowaniu. W iptables wyróżniamy cztery rodzaje tablic wraz z ich łańcuchami: filter (służy do właściwego filtrowania pakietów, definiowane są w niej podstawowe reguły firewalla, według których decyduje on, czy dany pakiet zaakceptować czy odrzucić) input; forward; output mangle (służy do zmiany nagłówków w pakietach tj. pól takich jak TOS (Type Of Service, TTL (Time To Live), jak i do filtrowania stanowego. prerouting; input; forward; output; postrouting nat (służy do translacji adresów sieciowych, w przypadku, gdy sieć używa NAT (Network Addres Translation) ustalamy w niej maskaradę pakietów i przekierowujemy pakiety) prerouting; output; postrouting raw (używana do udostępniania pakietów przed ich przetworzeniem przez część kernela (np. w trybie conntrack) prerouting; output Podstawowe opcje IPtables: A – append (dodaje jedną lub więcej reguł do wybranego łańcucha) C – check (sprawdza regułę w wybranym łańcuchu) D – delete (usuwa jedną lub więcej reguł z wybranego łańcucha; z podanej pozycji) F – flush (usuwa wszystkie reguły) I – insert (wstawianie jednej lub więcej reguł do wybranego łańcucha, na daną pozycję) L – list (wyświetla reguły w danych łańcuchu) n – numeric (wyświetla adress ip i nazwę hosta w formacie numerycznym) N – new-chain <name> (tworzenie nowego łańcucha z wybraną <nazwą> V – verbose (udostępnia szczegółowe informację, gdy użyjemy z opcją „list” X – delete-chain <name> (usuwa wybrany łańcuch) Z – zero (resetowanie liczników łańcucha) Opis stanów połączeń: NEW (nowy) – Jeśli pakiet przychodzi ze zdalnej maszyny lub też zostanie do niej wysłany z naszej maszyny w celu nawiązania nowego połączenia to zostanie on potraktowany jako NEW, czyli nowy. Każdy następny pakiet skojarzony z tym połączeniem już tak potraktowany nie zostanie. ESTABLISHED (połączony) – Pakiety zostaną potraktowane jako ESTABLISHED, jeśli nawiązane zostanie połączenie w dwie strony ze zdalną maszyną. RELATED (powiązany) – Pakiety tak oznaczone służą do obsługi innego obecnie istniejącego połączenia, np. takiego, które jest częścią multipołączenia w protokołach typu FTP, albo jako błędne pakiety związane z istniejącymi połączeniami (np. pakiet błędu ICMP związany z obecnie występującymi połączeniami). INVALID (niepoprawny) – Pakiety, które nie mogą być zaklasyfikowane jako jedna z powyższych trzech kategorii traktowane są jako INVALID. Pakiety te nie są jednak automatycznie odrzucane, ale pozostaną ciągle aktywne. Można je wykorzystać używając innych zasad, np. dynamicznie ustawić taktykę łańcuchową. Podstawowy schemat budowy komendy iptables wygląda następująco: iptables [-t table] -action chain rule_specification gdzie: table – umożliwia wybór tablicy, dla której obowiązywać będzie dana reguła, brak tej informacji w regule powoduje zapisanie jej do tabeli filter. action – rodzaj akcji, jaka ma zostać wykonana na podanej tabeli oraz łańcuchu. Do najprostszych należą dodawanie, usuwanie itp. chain – rodzaj łańcucha, wobec którego mamy zamiar wykonać akcję we wskazanej tabeli. rule_specification – dalszy opis reguły (aby dowiedzieć się więcej w terminalu proszę wpisać iptables –help). Przykładowe akcje: iptables -t TABELA -A ŁAŃCUCH OPIS_REGUŁY Dodaje regułę na koniec wskazanego łańcucha we wskazanej tabeli. iptables -t TABELA -D ŁAŃCUCH OPIS_REGUŁY Usuwa zadaną regułę z łańcucha (trzeba podać całą regułę, którą chcemy usunąć). iptables -t TABELA -D ŁAŃCUCH NUMER_REGUŁY Usuwa regułę o podanym numerze (reguły numerowane są w zbiorach pod łańcuchami Komendy przy ustalaniu reguł w iptables: ACCEPT – przyjmij pakiet. DROP – odrzuć pakiet (tutaj pakiet zostanie odrzucony bez żadnego komunikatu) RETURN – powoduje powrót z łańcucha zdefiniowanego przez administratora do łańcucha, z którego został on wykonany. REJECT – odrzuca pakiet z odesłaniem komunikatu o błędzie, domyślnie ICMP port unreachable. MARK – pozwala na oznaczenie pakietu za pomocą wartości numerycznej podanej w parametrze –set-mark. Użyteczne w tabeli mangle, oraz zwykle używane do przekazywania informacji do iproute2. MASQUERADE – maskuje adres nadawcy pakietu, użyteczne wyłącznie w łańcuchu POSTROUTING tabeli NAT. Na ogół używane i zalecane do użycia w przypadku korzystania z dynamicznie przydzielanego adresu IP. SNAT – zmienia adres źródłowy pakietów i zapamiętuje zmianę dla danego połączenia. Najczęściej używane w przypadku połączenia LAN do Internetu przez łącze ze stałym adresem IP. Użyteczne wyłącznie w łańcuchu POSTROUTING tabeli NAT. Akceptuje parametr –to-source, który wskazuje adres IP do wstawienia jako adres źródłowy – zazwyczaj IP interfejsu internetowego. REDIRECT – przekierowuje pakiet do lokalnej maszyny, użyteczne w łańcuchach PREROUTING i OUTPUT tabeli nat. Posiada argument opcjonalny –to-ports pozwala naprzekierowanie połączenia na dowolnie wybrany port lokalnej maszyny. DNAT – zmienia adres docelowy pakietów i zapamiętuje zmianę dla danego połączenia. Używane na ogół w celu przekazywania połączeń z interfejsu internetowego do maszyn w sieci LAN. Użyteczne w łańcuchach PREROUTING i OUTPUT tabeli NAT. Posiada także opcjonalny parametr –to-destination, określający adres z opcjonalnym portem docelowym (format zapisu to adres:port). Przykłady użycia: iptables -P INPUT DROP Blokujemy wszystko, co przychodzi do naszej maszyny. iptables -A INPUT -s 8.8.8.8 –dport 22 -j ACCEPT iptables -A OUTPUT -s 8.8.8.8 –dport 22 -j ACCEPT zezwalamy na połączenia przychodzące ssh z maszyny o podanym adresie (8.8.8.8). iptables -I INPUT 1 – p icmp d 8.8.8.8 -j DROP zablokowanie pakietów ICMP dla adresu (8.8.8.8) Źródła: https://wiki.archlinux.org/index.php/iptables http://rjachowicz.kis.p.lodz.pl/IPTables.pdf