Usługi sieciowe Wykład 7 Zapora sieciowa, NAT iptables- debian Jarosław Kurek WZIM SGGW
Jak zmienić UUID dla dysków vdi Zmiana UUID pozwala na uruchomienie dwóch instancji VirtualBoxa (dwóch Dysków vdi) VBoxManage internalcommands setvdiuuid c:\...\disk2.vdi VBoxManage – domyślnie w katalogu c:\program files\sun\virtualbox 2
Iptables –podstawy Reguła, łańcuch, tabela W celu zbadania danego pakietu netfilter/iptables wykorzystuje tzw. reguły. Jest to najmniejsza jednostka filtra netfilter. Zawiera ona zbiór warunków, jakie musi spełniać pakiet oraz akcję, która zostanie wykonana gdy warunki zostaną spełnione. Pojedyncze reguły grupowane są w łańcuchy. Zbiór łańcuchów natomiast tworzy tabelę. Istnieją trzy tabele: 1. filter domyślna tabela; filtrowanie pakietów 2. nat tabela używana przez pakiety nawiązujące połączenie; translacja adresów 3. mangle tabela służąca do modyfikacji przepływających pakietów Każda z tabel zawiera kilka predefiniowanych łańcuchów oraz łańcuchy zdefiniowane przez administratora. Istnieją następujące predefiniowane łańcuchy: ✗ INPUT - wywoływany dla pakietów przybywających z sieci przeznaczonych dla lokalnej maszyny. ✗ FORWARD - wywoływany dla pakietów routowanych przez lokalną maszynę, lecz pochodzących spoza niej i nie przeznaczonych dla niej. ✗ OUTPUT - wywoływany dla pakietów tworzonych lokalnie i wychodzących poza maszynę. ✗ PREROUTING - wywoływany dla pakietów z zewnątrz jeszcze przed ich routowaniem. ✗ POSTROUTING - wywoływany dla pakietów, które właśnie opuszczają maszynę 3
Iptables – konfiguracja reguł Konfiguracja reguł Do zarządzania regułami służy polecenie iptables. Można je wywołać na następujące sposoby: • iptables -t tabela -A łańcuch opis_reguły Dodaje regułę na koniec wskazanego łańcucha we wskazanej tabeli. Parametr -t można pominąć, zostanie wtedy użyta tabela filter. • iptables -t tabela -D łańcuch opis_reguły Usuwa zadaną regułę z łańcucha. • iptables -t tabela -I łańcuch numer_reguły opis_reguły Dodaje regułę we wskazanym miejscu łańcucha. Jeśli pominie się numer_reguły, reguła zostanie wstawiona na początku łańcucha. • iptables -t tabela -R łańcuch numer_reguły opis_reguły Zamienia regułę wskazaną numerem na opisaną w poleceniu. • iptables -t tabela -D łańcuch numer_reguły Usuwa regułę o podanym numerze. • iptables -t tabela -L łańcuch Listuje reguły we wskazanym łańcuchu. Pominięcie nazwy łańcucha spowoduje wylistowanie całej zawartości tabeli. • iptables -t tabela -N łańcuch Tworzy łańcuch użytkownika o zadanej nazwie. • iptables -t tabela -X łańcuch Usuwa łańcuch użytkownika. Warunkiem jest brak odwołań do wskazanego łańcucha w innych łańcuchach. • iptables -t tabela -P łańcuch domyślny_cel Ustawia policy (domyślną akcję) zadanego łańcucha 4
Iptables – przykłady • iptables -P INPUT -j DROP blokujemy wszystko, co do nas dochodzi • iptables -A INPUT -s 0.0.0.0/0 --dport 80 -j ACCEPT zezwalamy na ruch przychodzący z dowonego miejsca na nasz port :80 • iptables -A INPUT -s 192.168.0.15 --dport 22 -j ACCEPT zezwalamy na połączenia ssh z maszyny o podanym adresie • iptables -A INPUT -s 158.75.2.7 -j ACCEPT zezwalamy na połączenia od waldemara (DNS) • iptables -A INPUT -p TCP -s ! 10.0.0.1 --syn -j DENY blokujemy dostęp do naszego komputera dla wszystkich adresów różnych od podanego, które mają ustawioną flagę SYN • iptables -A INPUT -p icmp -j ACCEPT zaczynamy odpowiadać na ping (dotąd blokowała to pierwsza reguła) • iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT przyjmujemy tylko odpowiedzi na nasze zapytania ping (usuń regułę powyżej, aby ta miała sens) • iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT umożliwiamy korzystanie z portów 20, 21 przez klientów ftp (tylko passive mode) • iptables -A INPUT -m state --state RELATED -j ACCEPT umożliwia korzystanie z klientów ftp w trybie aktywnym (potrzebne moduły: ip_conntrack i ip_conntrack_ftp) • iptables -t nat -A POSTROUTING -s 10.0.0.0/255.0.0.0 -o ppp0 -j MASQUERADE prosta “maskarada” czyli translacja adresów NAT umożliwiająca dostęp do ppp0 komputerom z sieci 10.0.0.0/8. UWAGA! Aby powyższe polecenie miało sens należy włączyć przekazywanie pakietów w jądrze linuxa: [root@localhost:~]# echo ”1” > /proc/sys/net/ipv4/ip_forward • iptables -A PREROUTING -t nat -p tcp -d 83.156.33.14 --dport 8080 -j DNAT --to 10.0.0.1:80 próba połączenia się z maszyną o wskazanym adresie i podanym porcie z maszyny w sieci lokalnej (w której działa NAT) spowoduje przekierowanie na 10.0.0.1:80 • iptables -A OUTPUT -t nat -p tcp -d 83.156.33.14 --dport 8080 -j DNAT --to 10.0.0.1:80 próba połączenia się z maszyną o wskazanym adresie i podanym porcie z komputera lokalnego spowoduje przekierowanie na 10.0.0.1:80 5
Iptables – warunki Najczęściej używane warunki to: • -p protokół - protokół, do którego należy pakiet. Może być to tcp, udp, icmp lub all (wszystkie). Może być również użyta wartość numeryczna. Wykrzyknik przed nazwą protokołu odwraca znaczenie warunku. • -s adres_źródłowy/maska - adres źródłowy pakietu. Maska może być zapisana tradycyjnie - w postaci czterech liczb oddzielonych kropkami, np. 255.255.255.0 - bądź jako liczbę oznaczającą ilość bitów ustawionych po lewej stronie maski. W przypadku nie podania maski, przyjmowana jest wartość domyślna /32 - akceptowany jest więc tylko zadany adres. Wykrzyknik przed adresem odwraca znaczenie warunku. • -d adres_źródłowy/maska - adres docelowy pakietu. Zasady zapisu adresu takie same, jak dla adresu źródłowego. • -i interfejs - interfejs, z którego pakiet został przyjęty. Można użyć wykrzyknika dla odwrócenia znaczenia warunku. • -o interfejs - interfejs, przez który pakiet zostanie wysłany. • --source-port port - port źródłowy lub zakres portów wg. schematu port_minimalny:port_maksymalny. Użyteczne jedynie z -p tcp lub udp. • --destination-port port - port docelowy lub zakres portów wg. schematu port_minimalny:port_maksymalny. Użyteczne jedynie z -p tcp lub udp. 6
Ćwiczenie 1 Udostępnianie połączenia internetowego Tworzymy sieć, którą można przedstawić następująco ----internet--------eth0-[serwer]--eth1------sieć lokalna----- eth0 - interfejs wychodzący/wchodzący internetowy eth1 - interfejs wychodzący/wchodzący na sieć lokalną 7
Ćwiczenie 1 Udostępnianie połączenia internetowego 1.) W przypadku gdy mamy adres IP przydzielany dynamicznie plik /etc/network/interfaces wygląda następująco: auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0 (Adres dla serwera w sieci lokalnej w powyższym przypadku to 192.168.1.1) 8
Ćwiczenie 1 Udostępnianie połączenia internetowego 2.) Posiadamy stały, zewnętrzny adres IP (posiadamy dane dotyczące zewnętrznego adresu ip, masce sieci, adres sieci, bramie) plik /etc/network/interfaces będzie wyglądal tak: auto lo iface lo inet loopback auto eth0 iface eth0 inet static address adres_ip_z_umowy netmask maska_sieci_z_imowy network adres_sieci_Z_umowy gateway brama_z_umowy auto eth1 iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0 9
Ćwiczenie 1 Udostępnianie połączenia internetowego nasz plik /etc/resolv.conf będzie wyglądał np. tak nameserver 194.204.152.34 nameserver 194.204.159.1 Po umieszczeniu prawidłowych wpisów restartujemy ustawienia interfejsów internetowych poleceniem /etc/init.d/networking restart 10
Ćwiczenie 1 Udostępnianie połączenia internetowego Teraz udostępnimy połączenie internetowe dla komputerów w sieci lokalnej – tworzymy plik /etc/init.d/firewall poleceniem: touch /etc/init.d/firewall i nadajemy mu uprawnienia do uruchamiania chmod +x /etc/init.d/firewall 11
Ćwiczenie 1 Udostępnianie połączenia internetowego edytujemy powyższy plik wpisując do niego poniższą zawartość (przykład) # uruchomienie przekazywania pakietów echo 1 > /proc/sys/net/ipv4/ip_forward #kasowanie starych reguł iptables -F iptables -X iptables -t nat -X iptables -t nat -F # polityka działania iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # polaczenia nawiazane iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A OUTPUT -j ACCEPT -m state --state ESTABLISHED,RELATED # udostepniaie internetu dla sieci lokalnej iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT 12
Ćwiczenie 1 Udostępnianie połączenia internetowego Zapisujemy plik. Sprawdzamy czy działa: /etc/init.d/firewall Wydajemy polecenie za pomocą którego skrypt będzie uruchamiał się przy starcie systemu update-rc.d firewall defaults 20 13
Ćwiczenie 1 Udostępnianie połączenia internetowego Konfiguracja stanowisk w sieci Stanowisko 1 IP 192.168.1.2 Maska Sieci 255.255.255.0 Brama 192.168.1.1 DNS'y 194.204.159.1 194.204.152.34 Stanowisko 2 IP 192.168.1.3 14
Ćwiczenie 1 Udostępnianie połączenia internetowego Jeżeli wszystko poprawnie wykonaliśmy sprawdzamy działanie ze stanowisk: Np. traceroute 194.29.146.3 I potem traceroute www.wp.pl 15
Ćwiczenie 2 Instalowanie skanera portów nmap Apt-get install nmap Użycie: nmap 127.0.0.1 16
Ćwiczenie 3 Włączenie ICMP na firewallu: SERVER_IP="202.54.10.20" iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d $SERVER_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 0 -s $SERVER_IP -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT Wyłączenie: iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP lub iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP 17
Ćwiczenie 4 Przepuszczenie WWW: 18
Ćwiczenie 5 Forwarding SSH do innego hosta w sieci lokalnej: 19
Ćwiczenie 6 Filtrowanie pakietów po MAC Aby dopuścić połączenia z internetem dla komputera z sieci lokalnej o adresie MAC: 4C:00:10:53:D5:47 należy wydać polecenie iptables -I FORWARD -m mac --mac-source 4C:00:10:53:D5:47 -j ACCEPT 20
Ćwiczenie 7 Filtrowanie pakietów po MAC Jeśli chcielibyśmy np dopuścić tylko połączenia na porcie 80 (protkół HTTP) to uczynimito poleceniem: # iptables -I FORWARD -p tcp --destination-port 80 -m mac --mac-source 4C:00:10:53:D5:47 -j ACCEPT 21
Ćwiczenie 8 Filtrowanie pakietów po MAC Jeśli chcielibyśmy np dopuścić tylko połączenia na porcie 80 (protkół HTTP) to uczynimito poleceniem: # iptables -I FORWARD -p tcp --destination-port 80 -m mac --mac-source 4C:00:10:53:D5:47 -j ACCEPT 22