Dydaktyka:
FeedbackNetfilter to część jądra systemu operacyjnego Linux zbierająca funkcje kontroli ruchu sieciowego.
Do konfiguracji mechanizmów kernela składających się na netfilter służą programy:
iptables, ip6tables, ebtables, arptables (starsze)nft (nowszy)Netfilter project jest zbiorem projektów związanych z frameworkiem do filtrowania pakietów, w tym
iptables i nftables.
Po stronie jądra istnieją (przynajmniej) dwa mechanizmy do
filtrowania pakietów – starszy xtables i nowszy
(i lepszy)
nftables.
"Stare" iptables, często dostępne teraz jako iptables-legacy
umie wykorzystać tylko pierwszy z tych mechanizmów.
Do użycia nowego mechanizmu zachowując bez zmiany składnię i działania poleceń
przygotowano nową implementację komendy ipables, wcześniej dostępną jako
ipables-nft, teraz często już jako iptables.
Narzędzie nft konfiguruje nowszy z mechanizmów jądra.
Nie zaleca się mieszania konfiguracji programów iptables-legacy,
ipables-nft i nft.
iptables… konfiguruje tylko protokół IPv4, IPv6 jest konfigurowane przez
bliźniacze ip6tables….
nft pozwala na jednoczesną konfigurację obu tych protokołów (tabele
inet).
Na razie polecenie nft ma pozostawiającą wiele do życzenia dokumentację,
nieprzyjazne komunikaty o błędach składni polecenia i brak wbudowanej w komendę
pomocy i brak bądź wysoce niekompletne autouzupełnianie.
Z tego powodu na zajęciach jest wciąż pokazywane narzędzie iptables.
Podczas przejścia pakietu przez jądro Linuksa wykonywane są w ściśle określonej kolejności hooki decydujące co zrobić z pakietem.
Każdemu hookowi odpowiada jeden łańcuch reguł (chain).
Łańcuch reguły to wiele reguł które przetwarzane są w kolejności – jeśli któraś reguła zdecyduje o losie pakietu, późniejsze nie są brane pod uwagę.
Łańcuchy są pogrupowane w tabele (table) pod względem funkcjonalności.
W iptables / ip6tables dostępne są następujące tabele:
Łańcuchy mają nazwy odpowiadające momentowi ich wywołania:
Można też tworzyć własne łańcuchy, ale mogą one być uruchomione tylko przez dołączenie ich do już istniejących.
Droga pakietu przez mechanizmy filtrujące w systemie Linux podsumowana jest tutaj: [PL] [EN].
Jądro Linuksa jest zaopatrzone w mechanizm śledzenia połączeń (conntrack).
Pozwala on dla rozpatrywanego pakietu określić czy wcześniej przez ten komputer
był przepuszczony inny pakiet z tego samego połączenia, a nawet czy któryś z
wcześniejszych pakietów jest powiązany z rozpatrywanym.
Taka wiedza nie tylko ułatwia konfigurację filtracji pakietów, ale też jest
konieczna do obsługi niektórych często występujących scenariuszy.
iptables nie dostarcza mechanizmu automatycznego zapisywania ustawień – po
ponownym uruchomieniu lista reguł jest pusta, a polityki domyślne.
Dla odtworzenia reguł przy starcie dystrybucje Linuksa dostarczają odpowiedni
skrypt startowy. Zwykle zapisanie reguł odbywa się ręcznie (tj. trzeba wydać
odpowiednią komendę).
Komenda iptables / ip6tables wszędzie rozróżnia wielkie i małe litery,
ponadto kolejność argumentów decyduje o zrozumieniu polecenia.
Składnia iptables i ip6tables jest identyczna, w materiałach dla uproszczenia
wszędzie użyte są przykłady dla iptables i IPv4.
Wyświetlanie listy reguł:
iptables [-t filter] -L [-n] – wypisanie (--list) tablicy filtracji iptables -t <tablica> -L [-n] – wypisanie innych tablic iptables [-t <tablica>] --line-numbers -L – dodaje numery regułWzorce poleceń modyfikujących działanie filtracji i dodających reguły filtaracji:
iptables [-t filter] -P <łańcuch> <polityka> – zmiana domyślnego zachowania (tj. jeśli żadna z reguł nie podejmie decyzji). Zwykle stosowane polityki to ACCEPT lub DROP. Przykład: iptables -P INPUT DROP – ignoruje pakiety przychodząceiptables -A <łańcuch> <reguła> – dodaje regułę do łańcucha (--append), np: iptables -A INPUT -s 1.2.3.4 -j ACCEPTiptables -I <łańcuch> [pozycja] <reguła> – wstawia (--insert) regułę na podane miejsce do łańcucha (lub na początek jeśli numeru nie podano), np: iptables -I INPUT 1 -s 1.2.3.4 -j ACCEPTiptables -D <łańcuch> <nr> – usuwa (--delete) regułę na podanej pozycji z łańcucha, np: iptables -D INPUT 2iptables -D <łańcuch> <reguła> – usuwa (--delete) regułę z łańcucha, np: iptables -D INPUT -s 1.2.3.4 -j ACCEPTiptables -F [łańcuch] – usuwa wszystkie reguły [z łańcucha] (--flush); wysoce niebezpieczne
Zwykle reguły w iptables są zakończone akcją:
-j ACCEPT – przepuszcza pakiet-j DROP – ignoruje (wyrzuca do śmieci) pakiet-j REJECT – dodatkowa akcja, symuluje zamknięte gniazdo (np. odsyła ICMP destination unreachable czy odpowiada segmentem TCP z flagą RST)Są też dostępne inne akcje, np.
LOG, MARK i SET. Więcej szczegółow w man iptables-extensions
Rdzeń iptables zawiera niewiele filtrów:
-s i -d,-i i -o,-pFiltry można negować przez użycie '!' (wykrzyknika)
Netfilter jest modularny – większość funkcji mieści się w rozszerzeniach,
ładowanych przez -m <nazwa>
To pozwala na bardzo szczegółową filtrację.
Komendy iptables i ip6tables opisane są w podręczniku systemowym na
stronie iptables (man iptables),
a rozszerzenia do tych komend są opisane na stronie iptables-extensions
(man iptables-extensions).
Przykładowe rozszerzenia:
-m tcp/udp jest automatycznie ładowany razem z -p udp/tcp; --sport / --dport,-m conntrack wybiera stan połączenia --ctstate, m. inn.: INVALID,NEW,ESTABLISHED,RELATED,-m comment pozwala na dowolny komentarz --comment <tekst>,-m limit dzięki --limit ogranicza ilość pakietów na jednostkę czasu,-m hashlimit pozwala m. inn. ustawić limit pakietów/czas dla każdego IP z osobna,-m time pozwala włączyć regułę o --datestart i wyłączyć o --datestop,-m u32 udostępnia --u32 wykonujący dowolny test na danych pakietu,-m connlimit używając --connlimit-above pozwala ograniczyć ilość połączeń z jednego adresu.
iptables ma rozbudowaną pomoc wewnętrzną – po napotkaniu --help przerwie
dodawanie reguły i pokaże listę opcji, np.:
iptables -I INPUT -p tcp --help
iptables -m hashlimit -m limit -m connlimit --help
iptables-save oraz iptables-restore są używane do zapisu/odczytu tablic
do pliku.
Najczęściej stosowana do wpuszczania tylko pożądanego ruchu.
Typowe podejście to zabronienie wszystkiego, co nie jest wprost dozwolone.
Przykładowe polecenia:
iptables -P INPUT DROP – ustawienie domyślnej akcji wybieranej jeśli żadna z reguł nie zadziała
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT – pozwala na ruch lokalny
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT – pozwala przychodzić pakietom nawiązanych wcześniej połączeń
iptables -A INPUT -p tcp --dport 22 -j ACCEPT – pozwala na dostęp do ssh
Uwaga: konfigurując zdalnie firewall trzeba najpierw dodać regułę która wpuszcza połączenie użyte do konfiguracji, przetestować że działa, a dopiero potem dodawać reguły ograniczające ruch.
Decyduje jaki ruch może przechodzić przez komputer. Podejście do reguł zależy od zastosowania.
Przykładowe polecenia:
iptables -A FORWARD -m connlimit --connlimit-above 5 -j DROP – pozwala na nie wi