iptables/netfilter co to takiego? Jądro Linuksa iptables netfilter Netfilter ogólny szkielet operacji na pakietach zaimplementowany w jądrze Linuksa (od 2.4.x) Iptables narzędzie do manipulacji regułami w mechanizmie filtracji pakietów (netfiltrze) w jądrze.
Iptables jak to działa? Netfilter na podstawie wczytanych kryteriów sprawdza nagłówki (i ew. zawartość) pakietów decydując o ich dalszym losie (akceptacja, odrzucenie, modyfikacja). Iptables dodaje reguły do netfiltra w oparciu o poprawną składnię przekazaną z linii poleceń.
Iptables/firewalling po co? Kontrola i bezpieczeństwo Modyfikacja danych na poziomie IP i TCP/UDP Optymalizacja ruchu
Iptables podstawowe pojęcia Reguła zestaw warunków determinujący dalszy los pakietu. Łańcuch zbiór reguł pod kątem których sprawdzany jest pakiet. Tablica zestaw łańcuchów zapewniający konkretną funkcjonalność systemu (filter, nat, mangle)
Reguły, łańcuchy, tablice - przykład Chain INPUT (policy DROP 301K packets, 24M bytes) pkts bytes target prot opt in out source destination 7951 607K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 4 196 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 reguła Chain FORWARD (policy DROP 143K packets, 9024K bytes) pkts bytes target prot opt in out source destination 3850K 727M DROP all -- eth0 * 192.168.0.0/24 0.0.0.0/0 4389K 3334M ACCEPT all -- ppp0 * 0.0.0.0/0 0.0.0.0/0 łańcuch Chain OUTPUT (policy ACCEPT 45M packets, 43G bytes) pkts bytes target prot opt in out source destination 221K 31M DROP all -- * ppp0 0.0.0.0/0 0.0.0.0/0 2825K 3655M DROP all -- * * 0.0.0.0/0 10.0.0.0/8 tablica
Trawersacja pakietu przez mechanizm netfiltra PREROUTING mangle nat (DNAT) POSTROUTING mangle nat (SNAT) FORWARD DECYZJA RUTINGU filter mangle INPUT filter mangle PROCES LOKALNY OUTPUT filter mangle nat
iptables ogólna składnia iptables komenda łańcuch kryteria -j cel,decyzja Przykłady: iptables -A INPUT -i eth0 -j DROP iptables -I FORWARD -s 192.168.0.1 -p tcp -j ACCEPT
iptables - Operacje na łańcuchach, spis komend (fragment) Komenda Opis Przykład -A, --append -D, --delete -I, --instert -L, --list -F, --flush Dodanie reguły do łańcucha (na końcu) Usunięcie podanej reguły z łańcucha Wstawienie reguły do łańcucha (na początek) Wypisanie wszystkich reguł w łańcuchu Opróżnienie łańcucha ze wszystkich reguł -A INPUT -i eth0 -j DROP -D INPUT -i eth0 -j DROP -D INPUT 1 -I INPUT -i eth0 -j DROP -L INPUT -F INPUT -P INPUT DROP -P, --policy Ustawienie polityki dla łańcucha -P OUTPUT ACCEPT -Z, --zero Zerowanie licznika łańcucha -Z FORWARD -N, --new Tworzenie nowego łańcucha -N test
iptables - Kryteria dopasowania pakietu (fragment) Kryterium Opis Przykład -p protokół -p tcp -p! icmp -s Adres źródłowy -s 192.168.0.5 -s! 10.0.0.0/8 -d Adres docelowy -d 192.168.14.1 -i Interfejs przychodzący -i eth0 -i! ppp0 -o Interfejsc wychodzący -o wlan0 --dport Port docelowy --dport 80 --dport! 22 --sport Port źródłowy --sport 5555 --syn Pakiet rozpoczynający sesje TCP --tcp-flags Rodzaj flag tcp --tcp-flags SYN,ACK --icmp-type Rodzaj komunikatu ICMP --icmp-type echo-reply --fragment Pakiet fragmentu
iptables - Kryteria rozszerzone (-m moduł) Kryterium Opis Przykład --mac-source Adres sprzetowy MAC --mac-source 00:60:08:91:cc:b7 --limit Limit predkości przesyłania --limit 1/s pakietów --limit 30/m --ttl-eq Wartość pola TTL --ttl-eq 64 --uid-owner UID procesu do którego należy gniazdo --uid-owner 1001 --days Dzień tygodnia --days mon,tue --src-cc Kraj z którego pochodzi pakiet (baza GEOIP) --src-cc pl,uk --average Średnie prawdopodobieństwo --average 33
iptables - Decyzja (cel, 'target') Cel Opis -j ACCEPT Akceptacja pakietu -j DROP Odrzucenie pakietu -j LOG Logowanie pakietu (bez podjęcia decyzji) -j REJECT Odrzucenie pakietu z wysłaniem informacji do nadawcy(icmp) -j RETURN Brak podjęcia decyzji (przydatne jako funkcja licznika pakietów) -j MASQUARADE Dokonanie operacji SNAT -j MIRROR Zamiana adresu źródłowego z docelowym -j QUEUE Kolejkowanie pakietu dla programu zewnętrznego
iptables Inne tablice (-t nat) Tablica NAT Używana gdy istnieje potrzeba skorzystania z mechanizmu sieciowej translacji adresów iptables t nat A POSTROUTING o ppp0 j SNAT to source 1.2.3.4 iptables t nat A POSTROUTING o ppp0 j MASQUERADE iptables t nat A PREROUTING i ppp0 p tcp dport 46629 j DNAT \ to 192.168.0.9:46629 iptables t nat A PREROUTING i eth0 p tcp dport 80 j REDIRECT\ to port 8192 Tablica Mangle Używana gdy istnieje potrzeba zaawansowanej modyfikacji pakietów (np. pola TTL, TOS, mark,flag TCP, itp.) iptables t mangle A POSTROUTING p icmp j ROUTE oif eth1 iptables t mangle A POSTROUTING p icmp j TTL ttl inc 1 iptables t mangle A POSTROUTING p icmp j TOS set tos 0x10
Trawersacja pakietu przez mechanizm netfiltra iptables N test iptables A INPUT <kryteria> j test iptables nl <-- tworzenie nowego łańcucha <-- skok do nowego łańcucha <-- wyświetlenie reguł we wszystkich łańcuchach Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT icmp 0.0.0.0/0 0.0.0.0/0 test tcp 0.0.0.0/0 0.0.0.0/0 ACCEPT udp 0.0.0.0/0 0.0.0.0/0 Chain test (1 references) target prot opt source destination DROP all 192.168.0.1 0.0.0.0/0 ACCEPT all 0.0.0.0/0 10.0.0.4 Koniec trawersacji! [1] [2] [3] Pakiet TCP SRC=192.168.0.1 DST=123.45.67.89
Trawersacja pakietu przez mechanizm netfiltra - c.d. iptables N test iptables A INPUT <kryteria> j test iptables nl <-- tworzenie nowego łańcucha <-- skok do nowego łańcucha <-- wyświetlenie reguł we wszystkich łańcuchach Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT icmp 0.0.0.0/0 0.0.0.0/0 test tcp 0.0.0.0/0 0.0.0.0/0 ACCEPT udp 0.0.0.0/0 0.0.0.0/0 Chain test (1 references) target prot opt source destination DROP all 192.168.0.1 0.0.0.0/0 ACCEPT all 0.0.0.0/0 10.0.0.4 Koniec trawersacji! [1] [2] [3] Pakiet UDP SRC=192.168.1.100 DST=10.1.13.4
Trawersacja pakietu przez mechanizm netfiltra - c.d. iptables N test iptables A INPUT <kryteria> j test iptables nl <-- tworzenie nowego łańcucha <-- skok do nowego łańcucha <-- wyświetlenie reguł we wszystkich łańcuchach Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT icmp 0.0.0.0/0 0.0.0.0/0 test tcp 0.0.0.0/0 0.0.0.0/0 ACCEPT udp 0.0.0.0/0 0.0.0.0/0 Chain test (1 references) target prot opt source destination DROP all 192.168.0.1 0.0.0.0/0 ACCEPT all 0.0.0.0/0 10.0.0.4 Koniec trawersacji! [6] [1] [2] [3] [4] Pakiet TCP SRC=192.168.1.100 DST=10.1.13.4
Firewalling dobre praktyki Utrzymuj możliwie jak najmniejszą liczbę reguł Nie dubluj kryteriów w kolejnych regułach Nastawiaj reguły na odp. komputerach Reguły o największym prawdopodobieństwie trafienia ustawiaj najwcześniej Używaj własnych łańcuchów dla przejrzystości zapisu