portal Michała Hanćkowiaka
Begin main content
Search · Index
No registered users in community Materiały
in last 10 minutes

SIK - Temat F - filtrowanie pakietów - Zadania 2

Rozszerzenie routera(?) "Netfilter":
"Netfilter" to mechanizm wbudowany w linux-a (>=2.4 ?),
który umożliwia wykonywanie operacji na pakietach sieciowych;
te operacje to głównie:
+ odrzucanie (np. w celu stworzenia zapory)
+ modyfikowanie adresów ip i/lub nr. portów (czyli NAT = Network Address Translation)
strona główna projektu netfilter: http://www.netfilter.org/
+ wszystko robi się poleceniem "iptables" (wymaga uprawnień root-a !!!)

Zasada działania netfilter/iptables:
1. są tablice: filter, nat, raw, i inne
(opcja "-t" w iptables)
2. w każdej tablicy są łańcuchy, które dotyczą pewnego typu pakietów,
np. pakiet stworzony na lokalnym komp. jest związany z łańcuchem OUTPUT tablicy filter,
pakiet przeznaczony dla lokalnego komp. jest związany z łańcuchem INPUT tablicy filter,
łańcuchy PREROUTING i POSTROTING tablicy nat dotyczą operacji na pakiecie (NATowanie),
patrz też: "przystępny opis" iptables poniżej
(opcja "-A" w iptables)
3. łańuch zawiera reguły, które wybierają niektóre pakiety na podstawie:
adresów ip dst/src, nr. portów dst/src, protokołu, stanu w połączeniach tcp, itd ...
4. jeśli pakiet zostanie wybrany przez regułe to wykonywana jest akcja podana w opcji "-j" reguły, np.:
"-j DROP" - porzucenie pakietu,
"-j ACCEPT" - zaakceptowanie pakietu,
"-j DNAT" - zmiana adresu ip i/lub portu docelowego (trzeba go podać!!),
"-j SNAT" - to samo ale dla adresu i portu źródłowego
są też inne akcje ... (terminologia: akcja to "cel" w przystępnym opisie)
Algorytm: gdy pojawi się pakiet, to przegląda się wszystkie reguły danego łańcucha,
aż zostanie znaleziona reguła "pasująca", następnie "wykonuje się" akcję tej reguły;
akcja może zakończyć przetwarzanie pakietu (DROP, ACCEPT(?), ...),
może też spowodować przejście do innego łańcucha,
lub inne rzeczy (np. ?NAT) ...
przegląda się kilka łańcuchów dla tego samego pakietu (w zależności od jego pochodzenia);
patrz opis polecenia iptables, zwłaszcza początek "man iptables"

Filtrowanie pakietów czyli zapora:
używa sie głównie łańcucha INPUT tablicy filter i akcji DROP, ACCEPT
standardowa zapora (np. budowana skryptem rc.firewall) zezwala na:
1. nawiazywania połączeń TCP z komp. za zaporą do maszyny zewnętrznej,
ruch może się odbywać w OBIE strony w takim połączeniu
2. wysyłanie datagramów UDP do zewnętrznej maszyny,
odpowiedzi od tej maszyny (serwera UDP) docieraja do nadawcy (mimo zamkniętych portów!!)
patrz przykład zapory utworzonej skryptem rc.firewall

Zastosowania NAT:
1. przypuśćmy, że mamy 1 publiczny adr ip od dostawcy internetu,
oraz sieć zlożoną z kilku komputerów z prywatnymi adr ip,
i chcemy aby internet był też dostępny z tych komputerów;
wtedy należy użyć SNAT/MASQUARADE ...
powiedzmy, że klient Q (w sieci wewn. z prywatnymi adr ip) chce użyć zewn. serwera X,
Q wysyła pakiet ip do X, pakiet ten przechodzi przez router,
i NAT w routerze zmienia adres źródłowy i nr. portu tak aby odpowiedzi wracające od X
trafiły do routera (bo tylko on naprawdę posiada publiczny adr ip),
przy czym NAT przywraca pierwotny adres i kieruje pakiet do Q
(to nie jest jedyne zastosowanie NAT !!)

Polecenie do modyfikowania reguł w łańcuchach tablic - polecenie iptables:
iptables man, man2
http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.html
http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html (filtrowanie czyli zapory)

Przykłady użycia iptables:
Uwaga: polecenie iptables wymaga uprawnien root-a !!!

$ iptables -t nat -L -n --line-num
wyswietla łańcuchy i reguly w tablicy "nat" (a dodatkowo nr regul w lancuchach)

$ iptables -t nat -D PREROUTING 3
usuwa 3 regulę z łańcucha PREROUTING
$ iptables -D INPUT 4
usuwa 4 regułę z łańcucha INPUT domyślnej tablicy "filter"

$ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.100:8015
$ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8015
zadania http przychodzące z eth0 na port 80 są przekierowywane na port 8015

$ iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
$ iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to 1.2.3.4
pakiety wychodzące przez ppp0 będą miały zmieniony źródłowy adr ip
(MASQUERADE a nie SNAT należy stosować jeśli adr ip ppp0 jest przydzielany dynamicznie)

$ iptables -A OUTPUT -d 212.77.100.101 -j DROP
zabraniamy wysylania pakietów z naszej maszyny na adres 212.77.100.101

$ iptables -F; # czyszczenie reguł w łańcuchach
$ iptables -A INPUT -p tcp --dport 8080 -j ACCEPT; # wpuszczamy pakiety tcp, dport 8080
$ iptables -A INPUT -j DROP; # odrzucamy wszystkie pakiety
$ iptables -P OUTPUT ACCEPT; # reguła default dla łańcucha OUTPUT
$ iptables -P FORWARD DROP
powodujemy, że akceptowane będą wyłącznie połączenia tcp, na port 8080, do naszego komputera

Wskazówki ogólne do zadań o konfiguracji sieci:
1. maszyny w naszej inter-sieci (F.9a/b/c) używają adresów prywatnych,
tzn, że jeśli wysyłamy pakiet do Internetu to jego adr. src musi być zmieniony (SNAT)
2. musi działać pingowanie każdy z każdym w naszej inter-sieci,
jest to potrzebne z oczywistych względów,
ale także po to aby "odpowiedź" z Internetu mogła trafić do maszyny "zadającej pytanie"
3. aby osiągnąć "2." dodajemy reguły do tabl. routingowej poleceniem "route add ...",
używamy także "default gw", który powinien przekazywać pakiety z nieznanym adr dst
w kierunku routera łączącego z Internetem (pyppy 1)
4. UWAGA: w zadaniach z dwoma VBox/puppy i siecią PPP, jest ryzyko
że modyfikując tabl. routingową puppy popsujemy poł. tcp, nad którym działa sieć PPP !?!?
5. aby uzyskać połączenie między puppy 1 i puppy 2
można albo użyć forwardowania portów albo przekaznik.tcl


.............................................
dla przypomnienia: instalacji maszyn wirtualnych VirtualBox + puppy linux, dosemu


Zadanie F.9a - VBox, puppy + 2x dosemu, dostęp do Internetu
sik_rys1a
Skonfiguruj sieć w taki sposób, aby wszystkie 3 maszyny miały dostęp do Internetu.
Do sprawozdania dołącz wydruki z ifconfig i route -n na puppy,
oraz wydruk "ping wp.pl" z wszystkich 3 maszyn.

Uwaga 1: pingując z dos-u do wp.pl musisz podać adr IP, a nie nazwę domenową
Uwaga 2: zamiast ping można użyc htget (bo dos-owy ping się czasami zawiesza...)

Zadanie F.9b - VBox, 2x puppy + 2x dosemu, dostęp do Internetu
sik_rys2a
Wszystkie 4 maszyny mają mieć dostęp do Internetu.
Sprawozdanie: analogicznie jak w F.9a

Zadanie F.9c - VBox, 2x puppy + 2x dosemu, dostęp do Internetu inaczej
Osiągnij ten sam efekt co w zadaniu F.9b, ale bez modyfikowania
tablicy routingowej puppy 1.
Sprawozdanie: analogicznie jak w F.9a
Wskazówka: użyj podwójnego SNAT-owania.

Zadanie F.9d - serwer netcat w sieci wewn.
Sytuacja jak w zadaniu F.9b.
Udostepnij światu zewnętrznemu serwer netcat (nc.exe) na maszynie "dos 1".
Wskazówka do F.9d, F.9e i następnych: użyj DNAT;
dodatkowo trzeba uwzględnić specyfikę maszyny wirt. z puppy 1,
która nie jest dostępna z internetu chociaż ma adres "niby publiczny" 10.0.2.15,
(w rzeczywistości jest to adr prywatny!)
zatem trzeba włączyć forwardowanie portów w puppy 1,
aby przetestować dostęp do usługi z Internetu ...

Zadanie F.9e - serwer sshd w sieci wewn.
Sytuacja jak w zadaniu F.9b.
Zainstaluj na maszynie puppy 2 serwer ssh (sshd), który
powinien być dostępny ze świata zewnętrznego.
Wskazówka co do instalacji sshd na puppy 5.0.0:
# + trzeba dodac użytkownikow do puppy oraz zmienić im hasła
mkdir /home; # tego katalogu brakuje w puppy 5.0.0 !
adduser jkowalski1
passwd jkowalski1
# + następnie zainstalowac pkg z folderu "sshd - ssh serwer", a potem:
mkdir /etc/ssh
echo 'Subsystem sftp internal-sftp' > /etc/ssh/sshd_config; # to na użytek sftp !
mv /etc/ssh_config /etc/ssh; # ??
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
mkdir /var/run/sshd
# + do pliku /etc/hosts.allow dodac linię: sshd: ALL
# + włączyć sshd (TRZEBA podać bezwzgl. ścieżkę!):
/usr/sbin/sshd &
# + teraz klient ssh powinien dzialać...

Zadanie F.9f - serwer ftp w sieci wewn.
Sytuacja jak w zadaniu F.9b.
Uruchom na maszynie puppy 2 serwer ftp (pure-ftpd), który
udostępnia pliki z katalogu /root/ftpd.
Serwer powinien być dostępny ze świata zewnętrznego.
Uwaga: pure-ftpd NIE(!) działa, jeśli usługa DNS nie działa.

Zadanie F.9f2 - serwer ftp w sieci wewn.
Sytuacja jak w zadaniu F.9b.
Uruchom na maszynie dos 1 serwer ftp (dos-owy!).
Patrz opisy dos-owych programów sieciowych w folderze.
Podobnie jak poprzednio serwer powinien być dostępny ze świata zewnętrznego.

Zadanie F.9g - filtr
Sytuacja jak w zadaniu F.9b.
Uniemożliwić maszynom sieci wewn. (puppy 1 i 2, dos 1 i 2) pingowanie do wp.pl,
ale pingowanie do onet.pl ma działać!
Starać się zrobić to możliwie najmniejszym kosztem.
Przy okazji: w dos 1 i 2 dodać obsługę DNS
(wystarczy 1 linia w pliku config z adr. ip serwera DNS).




.............................................
Uwaga: w zadaniach F.10-13 odwołujemy się do sytuacji z zadania F.1;
są to zadania "na sucho" bez VBox-a,
i znów punktowane niżej...

Zadanie F.10 - maskarada
Proszę podać polecenie iptables, które spowoduje, że
komputer B będzie miał dostęp do internetu (np. użytkownik B będzie mógł zrobić "ping wp.pl");
porowszę podać jakie polecenie i na którym komputerze należy wkonać!
(to samo w pozostałych zadaniach)

Zadanie F.11 - zapora
Na komputerze A proszę ustawić zaporę, która spowoduje,
że spośród serwerów dostępnych na A, z zewnątrz (tj z internetu)
będzie dostępny tylko serwer http na porcie 80

Zadanie F.12 - udostępnianie serwerów
Na komputerze B dziala tclhttpd na porcie 8015;
proszę spowodować aby był on dostępny w internecie
poprzez adr. publiczny (adr ppp0 na A) i nr portu 10000

Zadanie F.13 - zmiana nr portu
Na komputerze B dziala tclhttpd na porcie 8015;
proszę spowodować aby był on dostępny z sieci prywatnej (czyli kompy A i B)
na std porcie http czyli 80.

Zadanie F.14 - internet w sieciach wewn.
Mamy sytuację jak w zadanieu F.2 (czyli 2 sieci wewnętrzne/fizyczne i 3 komputery A,B,C).
Komp. A jest głównym routerem łączącym sieci wewn. z internetem.
Prosze spowodować, aby internet był dostępny na WSZYSTKICH komputerach.
Proszę podać stosowne polecenia (+ ew. ich wydruki), które są niezbedne żeby to osiągnąć.
W zadaniu tym chodzi zarówno o routing jak i o NAT...
Niech X będzie hostem w internecie;
proszę prześledzić drogę pakietu C->X->C,
proszę sie upewnić, że pakiet ma szansę przebyć tę drogę...

Zadanie F.15 - internet w sieciach wewn. - inne podejście
Proszę osiągnąć to samo co w F.14, ale BEZ modyfikowania tablicy routingowej komp. A !
Czyli nie możemy w tabl. routingowej A dodać reguły dotyczącej drugiej sieci wewnętrznej...
Uzasadnienie zadania: Czasami A to router od dostawcy internetu (ISP),
przystosowany fabrycznie do JEDNEJ sieci wewnętrznej,
którego nie potrafimy konfigurować lub jest to zakazane.

Zadanie F.16 - zapora, skrypt rc.firewall
Dowiedz się, do czego służą słowa "RELATED" "ESTABLISHED" w zaporze pokazanej w przykładzie

Zadanie F.17 - "oszukiwanie" zapory, prot UDP
Wykonaj następujący eksperyment... Mamy 2 komputery A i B.
A ma włączoną zaporę (rc.firewall) ze wszystkimi portami "zamkniętymi".
A wysyła datagram udp do B, na port 10000 (port A to 10001).
Serwer z maszyny B wysyła odpowiedzi do A...
Okazuje się(!), że zapora przepuszcza te odpowiedzi (z B do A), mimo że port 10001 na A jest zamknięty.
Sprawdź czy można "oszukać" zaporę, tj wysyłać "niedozwolone" datagramy udp do A.
Uwaga: to zadanie wymaga manipulowania zaporą, a więc pod linux-em wymaga uprawnien root-a (??).
Przykład jak to zrobić z poziomu j. Tcl jest tutaj; pakiet tcludp znajdziesz w folderze.

Zadanie F.18 - rozmiar sieci wewn. z 1 pub. adr. IP
Ile maksymalnie może być komputerów w sieci wewnętrznej,
używającej adresów prywatnych,
tak aby ze wszystkich był dostęp do internetu ???
Zakładamy, podobnie jak w zadaniach F.1-4, że
router A łączy sieć wewn. z internetem oraz ma włączony SNAT,
(ISP przydzielił nam 1 publiczny adres);
przyjmij sensowne założenia co do sposobu używania internetu
z komputerów sieci wewn. (ile poł. TCP/nr portów itp).




uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...