FILTROWANIE IP mechanizm decydujący, które typy datagramów IP mają być odebrane, które odrzucone. Odrzucenie oznacza usunięcie, zignorowanie datagramów, tak jakby nie zostały w ogóle odebrane. funkcja warstwy sieciowej. Kryteria wybierania datagramów: - typ protokołu, np. TCP, UDP, ICMP, - numer gniazda (dla TCP i UDP), - typ datagramu, np. SYN / ACK, dane, ICMP Echo Request, - adres źródłowy datagramu, - adres docelowy datagramu. Reguły filtrowania IP składają się z kombinacji powyższych kryteriów. Firewall pod Linuksem Wersja jądra Narzędzie do 2.0 ipfwadm (IP Firewall Administration) 2.2.x ipchains (IP Chains) 2.3.15 i kolejne iptables netfilter (uniwersalne) 1
Etapy przetwarzania datagramu IP pozostałe części jądra 2 gniazda sieciowe protokoły TCP / UDP 4 inne protokoły oprogramowanie routujące IP? 3? 1 5 sterownik Ethernet sterownik PPP inny sterownik? decyzje dotyczące rutingu Odbieranie: - pobranie datagramu (1), - analiza adresu przeznaczenia datagramu, - przetwarzanie datagramu przez lokalną maszynę (2), - poszukiwanie trasy w tablicy routingu, przekazanie datagramu do odpowiedniego interfejsu (3). Wysyłanie: - przesłanie z lokalnych procesów do oprogramowania routującego, przekazanie do odpowiednich interfejsów (4), - analiza adresu przeznaczenia, ustalenie trasy dla datagramu, - wysłanie datagramu (5). Analiza przepływów: 2
1 3 5 maszyna routująca między hostem w sieci Ethernet a hostem osiągalnym przez łącze PPP. 1 2 i 4 5 dane przychodzące i wychodzące z/do programu działającego na danym hoście lokalnym. 4 3 2 przepływ danych przez połączenie pętli zwrotnej. REGUŁY pod netfilter wejściowa INPUT dotyczy przepływu 2 na powyższym diagramie, przekazywania FORWARD dotyczy przepływu 3, wyjściowa OUTPUT dotyczy przepływu 4, Polityka domyślna pierwsza reguła, która określa co zrobić z datagramami, które nie będą obsługiwane w żaden specjalny sposób. Reguły firewalla są dopasowywane kolejno. Polecenie iptables służy do konfigurowania firewalla oraz translacji adresów sieciowych (protokół Network Address Translation). Składnia iptables: iptables polecenie określenie_reguły rozszerzenia Polecenia: -A łańcuch dodanie jednej lub kilku reguł na koniec danego łańcucha -I łańcuch num_reguły wstawienie jednej lub kilku reguł na początku danego łańcucha -D łańcuch usunięcie jednej lub kilku reguł z danego łańcucha zawierającego takie reguły -D łańcuch num_reguły usunięcie reguły znajdującej się na pozycji num_reguły w danym łańcuchu -R łańcuch num_reguły 3
zastąpienie reguły na pozycji num_reguły w danym łańcuchu regułą o podanej charakterystyce -C łańcuch sprawdzenie danym łańcuchem datagramu opisywanego przez regułę. Zwraca komunikat opisujący, w jaki sposób łańcuch przetworzył datagram przydatne w testowaniu konfiguracji firewalla. -L [łańcuch] wylistowanie reguł z zdanego łańcucha lub ze wszystkich łańcuchów -F [łańcuch] usunięcie reguł z danego łańcucha lub ze wszystkich łańcuchów -Z [łańcuch] wyzerowanie liczników bajtów i datagramów w danym łańcuchu lub we wszystkich łańcuchach -N łańcuch utworzenie nowego łańcucha o danej nazwie nie mogą istnieć łańcuchy o tej samej nazwie -X [łańcuch] usunięcie danego łańcucha zdefiniowanego przez użytkownika lub wszystkich takich łańcuchów -P łańcuch polityka ustawienie domyślnej polityki dla danego łańcucha. Dopuszczalne polityki to: ACCEPT pozwala na przepuszczenie datagramu, DROP datagram jest odrzucany, QUEUE datagram jest przekazywany do przestrzeni użytkownika w celu dalszego przetwarzania, 4
RETURN kod firewalla IP wraca do łańcucha, który go wywołał i kontynuuje działanie od następnej reguły. Parametry definicji reguł: -p [!] protokół określa protokół datagramu, który ma pasować do tej reguły, np. tcp, udp, icmp (nazwy lub numery zgodnie z plikiem /etc/protocols);! oznacza negację reguły, tzn. datagram będzie pasował do wszystkich protokołów poza wymienionymi -s [!] adres [/maska] adres źródłowy datagramu (w postaci nazwy hosta, adresu sieci lub adresu IP); maska może być podana tradycyjnie, np. 255.255.255.0 lub współcześnie, np. 24 maska sieci bity 255.0.0.0 8 255.255.0.0 16 255.255.255.0 24 255.255.255.128 25 255.255.255.192 26 255.255.255.224 27 255.255.255.240 28 255.255.255.248 29 255.255.255.252 30 -d [!] adres [/maska] adres docelowy datagramu (opis jak wyżej) -j cel jakie działania mają być podjęte, gdy reguła zostanie dopasowana. Dopuszczalny cel to ACCEPT, DROP, QUEUE, RETURN 5
-i [!] nazwa_interfejsu określa interfejs przyjmujący datagram (! negacja); nazwa interfejsu zakończona znakiem + oznacza każdy interfejs, którego nazwa rozpoczyna się od podanego ciągu. -o [!] nazwa_interfejsu określa interfejs, pod który datagram będzie przesłany [!]-f mówi, że dana reguła dotyczy tylko drugiego i dalszych fragmentów datagramu, nie dotyczy fragmentu pierwszego. Opcje: -v wyświetla bogate wyniki (więcej informacji) -n wyświetla adresy IP i numery portów jako liczby i inne. Rozszerzenia: Iptables jest narzędziem rozszerzalnym poprzez opcjonalne moduły bibliotek dzielonych. Aby z nich skorzystać ich nazwy muszą być poprzedzone argumentem m nazwa. Przykład rozszerzenia dla TCP: -sport [!] [port[:port]] określa port, z którego musi pochodzić datagram, aby pasował do reguły; np. 20:25 oznacza porty od numeru 20 do25 włącznie. 6
MASKOWANIE IP translacja adresów sieciowych (Network Address Translation NAT): proces modyfikacji adresów sieciowych zawartych w nagłówkach datagramu, który zachodzi w czasie przesyłania, maskowanie IP (ang. IP masquerading), jedna z odmian translacji adresów, pozwala hostom z adresem sieci prywatnej przedstawić sie w Internecie pod jednym publicznym adresem IP. 192.168.1.0 / 255.255.255.0 i n t e r n e t eth1 150.254.173.3 eth0 router z maskowaniem 192.168.1.1 L A N 192.168.1.2 192.168.1.3 7
przykład reguł filtrowania IP z pliku /etc/init.d/firewall #!/bin/bash # WYBRANE reguły firewalla # - różne dla każdej karty sieciowej # karta eth1 - Internet # karta eth0 - sieć wewnętrzna # Zmienne środowiskowe SCIEZKA=/sbin MOJ_IP=150.254.173.3 # Reguły startowe firewalla start () { echo "FIREWALL START... " # reset ustawień # INPUT $SCIEZKA/iptables -F INPUT $SCIEZKA/iptables -P INPUT ACCEPT # FORWARD $SCIEZKA/iptables -F FORWARD $SCIEZKA/iptables -P FORWARD ACCEPT # OUTPUT $SCIEZKA/iptables -F OUTPUT $SCIEZKA/iptables -P OUTPUT ACCEPT # Domyślna zasada postępowania (polityka) firewalla: odrzuć wszystko $SCIEZKA/iptables -P INPUT DROP # Akceptuj tylko wywołania z pętli zwrotnej # (loopback; lo; 127.0.0.1), resztę odrzucaj $SCIEZKA/iptables -A INPUT -i lo -j ACCEPT # Odrzucaj połączenia na kartę eth1 (Internet) # z adresów nierutowalnych i adresu # wewnętrznego(lo) $SCIEZKA/iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP # clasa A $SCIEZKA/iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP # clasa B 8
$SCIEZKA/iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP # clasa C $SCIEZKA/iptables -A INPUT -i eth1 -s 224.0.0.0/4 -j DROP # multicast $SCIEZKA/iptables -A INPUT -i eth1 -s 240.0.0.0/5 -j DROP # reserved # Na eth0 nie może pojawić się żaden adres spoza puli 10.0.0.0/24 (oznaczający sieć lokalną) $SCIEZKA/iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP # clasa B $SCIEZKA/iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP # clasa C $SCIEZKA/iptables -A INPUT -i eth0 -s 224.0.0.0/4 -j DROP # multicast $SCIEZKA/iptables -A INPUT -i eth0 -s 240.0.0.0/5 -j DROP # reserved # Zezwalaj na wejście do wybranych serwisów dla # sieci wewnętrznej (eth0) # Strony www $SCIEZKA/iptables -A INPUT -i eth0 -s 10.0.0.0/0 -p tcp -- dport http -m state --state NEW -j ACCEPT # Strony www + ssl $SCIEZKA/iptables -A INPUT -i eth0 -s 10.0.0.0/0 -p tcp -- dport https -m state --state NEW -j ACCEPT # SSH $SCIEZKA/iptables -A INPUT -i eth0 -s 10.0.0.0/24 -p tcp -- dport ssh -m state --state NEW -j ACCEPT # FTP $SCIEZKA/iptables -A INPUT -i eth0 -s 10.0.0.0/0 -p tcp -- dport ftp -m state --state NEW -j ACCEPT $SCIEZKA/iptables -A INPUT -i eth0 -s 10.0.0.0/0 -p tcp -- dport ftp-data -m state --state NEW -j ACCEPT # Proxy 9
$SCIEZKA/iptables -A INPUT -i eth0 -s 10.0.0.0/0 -p tcp -- dport 8080 -m state --state NEW -j ACCEPT $SCIEZKA/iptables -A INPUT -i eth0 -s 10.0.0.0/0 -p udp -- dport 8080 -m state --state NEW -j ACCEPT # Poczta $SCIEZKA/iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 25 -m state --state NEW -j ACCEPT $SCIEZKA/iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 110 - m state --state NEW -j ACCEPT (...) przykład reguł maskowania IP z pliku /etc/init.d/masquarada #!/bin/sh # WYBRANE reguły firewalla MASKOWANIE ADRESÓW SCIEZKA=/sbin start () { echo "MASKOWANIE ADRESÓW START..." (...) # Włącz maskowanie adresów # SMTP $SCIEZKA/iptables -t nat -s 10.0.0.0/16 -A POSTROUTING -o eth1 -p tcp --dport 25 -j MASQUERADE # POP3 $SCIEZKA/iptables -t nat -s 10.0.0.0/16 -A POSTROUTING -o eth1 -p tcp --dport 110 -j MASQUERADE 10