Transcript Wykład 7
Usługi sieciowe
Wykład 7
Zapora sieciowa, NAT
iptables- debian
Jarosław Kurek
WZIM SGGW
1
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
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ę
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
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
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.
Ć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ą
Ć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)
Ć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
Ć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
interfejsów
internetowych poleceniem
/etc/init.d/networking restart
wpisów
restartujemy
ustawienia
Ć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
Ć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
Ć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
Ć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
Maska Sieci 255.255.255.0
Brama 192.168.1.1
DNS'y 194.204.159.1 194.204.152.34
Ć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
Ćwiczenie 2
Instalowanie skanera portów nmap
Apt-get install nmap
Użycie:
nmap 127.0.0.1
Ć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
Ćwiczenie 4
Przepuszczenie WWW:
Ćwiczenie 5
Forwarding SSH do innego hosta w sieci lokalnej:
Ć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
Ć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
Ć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