Teletransmisja i sieci komputerowe 2

20
ZAKŁAD SYSTEMÓW KOMPUTEROWYCH Teletransmisja i sieci komputerowe 2 LABORATORIUM Tomasz Orczyk Bielsko-Biała 2012

Transcript of Teletransmisja i sieci komputerowe 2

Page 1: Teletransmisja i sieci komputerowe 2

ZAKŁAD SYSTEMÓW KOMPUTEROWYCH

Teletransmisja i sieci komputerowe 2

LABORATORIUM

Tomasz Orczyk

Bielsko-Biała 2012

Page 2: Teletransmisja i sieci komputerowe 2
Page 3: Teletransmisja i sieci komputerowe 2

1

Zajęcia 1

Konfiguracja wirtualnej maszyny z systemem Debian GNU Linux Lorem ipsum

Page 4: Teletransmisja i sieci komputerowe 2

2

Zajęcia 2

Wprowadzenie do IPTables

Wprowadzenie

Narzędzie IPTables stanowi interfejs użytkownika służący do konfigurowania filtra pakietów IPV4

wbudowanego w jądro systemu GNU/Linux. Moduł ten nosi nazwę netfilter.

Konfiguracja

Konfigurowanie filtracji polega na definiowaniu reguł, które tworzą łańcuchy, które z kolei

zamknięte są w tabelach. Reguły przechowywane są w pamięci jądra, a do ich zapamiętywania i

odtwarzania można wykorzystać skrypty iptables-save oraz iptables-restore. Każda reguła składa się z

wzorca i akcji. Gdy pakiet poddawany jest analizie, najpierw dopasowywany jest do wzorca – jeśli do

niego pasuje, o dalszym losie wiadomości decyduje akcja reguły. Jeśli zaś dane w wiadomości nie

pasują do wzorca danej reguły, pod uwagę brana jest kolejna reguła. Dla danego pakietu

przeszukiwanie reguł trwa do momentu pierwszego dopasowania do wzorca lub (w przypadku braku

dopasowania) do wyczerpania reguł. Reguły dzielą się na:

reguły filtrujące,

reguły translacji,

reguły manipulacji.

Wszystkie reguły tego samego typu zapamiętywane są w tablicach, istnieją trzy tablice

wbudowane:

filter

nat

mangle

Analizowane pakiety IP dzielą się na następujące kategorie:

pakiety dla których nasz host jest celem,

pakiety których nasz host jest źródłem,

pakiety dla których nasz host jest zarówno celem jak i źródłem,

pakiety routowane.

W zależności od rodzaju pakietu, jego przetwarzanie przebiega w kilku etapach. Na przykład dla

pakietów routowanych etapy te w uproszczeniu wyglądają następująco:

1. pakiet dociera do interfejsu wejściowego,

2. zostaje wybrany dla niego właściwy interfejs wyjściowy,

3. pakiet opuszcza stację przez interfejs wyjściowy.

Page 5: Teletransmisja i sieci komputerowe 2

3

Na każdym etapie można stosować do pakietu różne typy reguł. Dlatego wewnątrz każdej tablicy

reguły są dodatkowo grupowane ze względu na etap przetwarzania pakietu. Wobec tego różne

tablice mogą zawierać grupy reguł związanych z tym samym etapem. Sekwencja reguł powstała przez

połączenie tych grup nazywa się łańcuchem (ang. chain). Pakiet iptables zawiera pięć wbudowanych

łańcuchów:

INPUT (dla pakietów pierwszego rodzaju),

OUTPUT (dla pakietów drugiego rodzaju),

FORWARD (dla pakietów routowanych),

PREROUTING,

POSTROUTING.

Dwa ostatnie łańcuchy zawarte są jedynie w tablicach nat i mangle.

Składnia

Ogólna postać reguły:

iptables [ -t tablica ] komenda [wzorzec] [akcja]

Komendy:

-P łańcuch polityka - ustawienie domyślnej polityki dla łańcucha. Domyślna polityka

stosowana jest dopiero wówczas, gdy pakiet nie pasuje do żadnej reguły łańcucha,

-A łańcuch - dodanie reguły do określonego łańcucha,

-I łańcuch [nr reguły] - wstawienie reguły do określonego łańcucha, jeśli zostanie podany nr

reguły wtedy reguła zostanie wpisane w to miejsce zmieniając kolejność pozostałych,

-L [łańcuch] - wyświetlenie wszystkich reguł łańcucha (lub wszystkich łańcuchów w danej

tablicy); często używane z opcjami -n i -v,

-F [łańcuch] - usunięcie wszystkich reguł łańcucha (lub ze wszystkich łańcuchów danej

tablicy),

-D łańcuch [nr reguły] - usunięcie konkretnej reguły w określonym łańcuchu, jeśli zostanie

podany nr reguły wtedy zostanie usunięta reguła o tym numerze,

-R łańcuch nr_reguły - zastąpienie reguły numer w określonym łańcuchu.

-X [łańcuch] - usunięcie wszystkich pustych i niewbudowanych łańcuchów.

Opcje wzorca:

-s [!] ip[/netmask] - adres IP źródłowy (może być uogólniony do adresu sieci),

-d [!] ip[/netmask] - adres IP docelowy (może być uogólniony do adresu sieci),

-p [!] protokół - wybór protokołu: tcp, udp, icmp lub all (wszystkie protokoły stosu TCP/IP),

-i [!] interfejs wejściowy

-o [!] interfejs wyjściowy

--sport [!] port:[port] - port źródłowy,

--dport [!] port:[port] - port docelowy,

-m moduł - załadowanie modułu rozszerzającego, dzięki temu można wykorzystać kolejne

opcje danego modułu.

Page 6: Teletransmisja i sieci komputerowe 2

4

Najważniejsze akcje:

-j ACCEPT - przepuszczenie dopasowanych pakietów,

-j DROP - usunięcie dopasowanych pakietów,

-j REJECT - odrzucenie dopasowanych pakietów,

-j LOG - logowanie dopasowanych pakietów, bez usunięcia ich z łańcucha,

-j RETURN - usunięcie pakietu z łańcucha, pozwalając jednocześnie, aby dalej był pakiet

sprawdzany w kolejnych łańcuchach,

-j SNAT - translacja adresów źródłowych,

-j DNAT - translacja adresów docelowych,

-j SAME - translacja adresów źródłowych i docelowych,

-j REDIRECT - przekierowanie pakietów do lokalnego systemu,

-j MASQUERADE - translacja adresów źródłowych na adres dynamicznie przyznawany na

interfejsie.

Opis modułów

Poniższy spis nie wyczerpuje listy dostępnych modułów ani nie opisuje ich użycia, w zależności od

wersji i dystrybucji systemu zestaw dostępnych modułów może być różny. Aby zapoznać się ze

szczegółami dotyczącymi stosowania poszczególnych modułów można skorzystać z wbudowanej

pomocy:

iptables -m <moduł> -h

Dotyczące IPSec:

ah - dopasowują się do pola "spi" w nagłówku AH pakietu, esp - dopasowują się do pola "spi" w nagłówku ESP pakietu, policy - dopasowują się do "policy" pakietu.

Dopasowujące się do nagłówka pakietu IP:

dscp - dopasowuje się do 6 bitów DSCP znajdujących się w polu ToS, ecn - sprawdza bit ECN w nagłówku pakietu, ipv4options - sprawdza różne opcje nagłówka pakietu, np. source routing, record route, tcpmss - sprawdza pole MSS (Maximum Segment Size), tos - pole ToS (Type of Service), ttl - pole TTL (Time To Live).

Nadzorujące połączenia (stanowość):

state - umożliwia zidentyfikowanie istniejących połączeń oraz nowych, conntrack - rozszerza możliwości modułu state, helper - pozwala określić "pomocnika" do przekazywania połączenia, np. standardowym

pomocnikiem jest moduł pozwalający przekazywać połączenia ftp-data w trybie aktywnym.

Określające typ pakietu:

icmp - dopasowuje się do pakietów typu ICMP, tcp - dotyczy pakietów typu TCP,

Page 7: Teletransmisja i sieci komputerowe 2

5

udp - dotyczy pakietów typu UDP, unclean - dotyczy pakietów zniszczonych i niepoprawnych.

Określające limity:

connlimit - umożliwia określenie maksymalnej liczby połączeń do konkretnego adresu IP z jednego adresu IP klienta,

connrate - umożliwia określenie maksymalnego/minimalnego transferu, hashlimit - umożliwia określenie maksymalnego transferu do danej usługi/serwera.

Znakowanie pakietów:

mark - umożliwia znalezienie oznakowanego pakietu, connmark - umożliwia znalezienie każdego pakietu związanego z oznakowanym połączeniem.

Ułatwiające tworzenie reguł:

iprange - umożliwia wpisanie zakresu adresów IP, mac - umożliwia sprawdzenie adresu sprzętowego karty sieciowej MAC, multiport - umożliwia wpisanie zakresu portów, owner - dla lokalnych połączeń umożliwia określenie który użytkownik wysłał dany pakiet, pkttype - określa typ pakietu (unicast, multicast, broadcast) set - wykorzystanie stworzonych zbiorów adresów (polecenie ipset), time - określenie daty i/lub czasu, comment - umożliwia dopisanie komentarza do każdej reguły.

Rozszerzone sprawdzanie pakietów:

length - sprawdzające wielkość pakietu, string - dopasowujące się do zawartości pakietu w polu DATA, ipp2p - dopasowujące się do ruchu generowanego przez aplikacje typu P2P.

Określające częstość:

limit - określa jak często reguła będzie dopasowana, np. 3 razy na sekundę - 3/s, nth - określa co jaką liczbę pakietów będzie dopasowana reguła, np. co 5 pakiet, random - określa dopasowanie reguły do pakietu z zadanym prawdopodobieństwem, np.

50% pakietów.

Monitorujące:

recent - tworzy listy adresów wykorzystających łącze (przechodzących przez tą regułę), wyniki zapisywane są w katalogu /proc/net/ipt_recent/NAZWA,

account - zlicza ruch do określonych adresów, wyniki w katalogu /proc/net/ipt_account/NAZWA,

quota - określa quota'ę dla określonych pakietów.

Inne:

Page 8: Teletransmisja i sieci komputerowe 2

6

condition - pozwala warunkować stosowanie reguły, poprzez plik w katalogu /proc/net/ipt_condition/NAZWA

osf - odczytuje pasywnie "odcisk palca" (fingerprint) konkretnego adresu IP i zapisuje w pliku /proc/sys/net/ipv4/osf

psd - pozwala wykryć skanowanie portów TCP i UDP.

Opis celów

Cele określają co zostanie zrobione z danym pakietem, domyślnymi celami są akceptacja (ACCEPT)

i odrzucenie (DROP) pakietu. Jednak twórcy zapory postanowili rozszerzyć listę dopuszczalnych

celów, które również mogą być tworzone przez nas samych dla naszych potrzeb. Aby uzyskać bardziej

szczegółowe informacje na temat konkretnego celu należy skorzystać z wbudowanej pomocy:

iptables -j <cel> -h

Zmiana adresów IP:

BALANCE - podobne do DNAT, ale równomiernie rozkłada obciążenie na wiele adresów IP, DNAT - Destination NAT, MASQUERADE - ukrywanie źródłowych adresów IP, NETMAP - statyczna zamiana adresów całych podsieci, REDIRECT - przekierowanie ruchu na lokalny komputer, SAME - podobne do DNAT/SNAT, ale zawsze przydziela te same adresy IP konkretnym

klientom, SNAT - Source NAT.

Znakowanie pakietów:

CONNMARK - znakuje połączenia, IPMARK - znakowanie pakietów na podstawie adresu IP, MARK - znakuje pakiety.

Zmieniające nagłówek pakietu:

DSCP - umożliwia zmianę 6 bitów DSCP pola ToS, ECN - umożliwia usunięcie bitu ECN, IPV4OPTSSTRIP - usunięcie wszystkich opcji IP z nagłówka pakietu, TCPMSS - ustawienie pola MSS, TOS - ustawienie pola ToS, TTL - ustawienie pola TTL.

Śledzenie pakietów:

NOTRACK - wyłącza śledzenie połączenia, TARPIT - przechwytuje połączenia i zawiesza je, w celu zabezpieczenie się przez

skanowaniem typu Code Red i Nimda, TRACE - włącza śledzenie połączenia.

Logowanie:

LOG - logowanie pakietów,

Page 9: Teletransmisja i sieci komputerowe 2

7

ULOG - logowanie w przestrzeni użytkownika,

Inne:

REJECT - odrzuca pakiety wysyłając określony kod błędu do nadawcy, ROUTE - pozwala nadpisać wpisy tablicy tras, SET - dodaje/usuwa adresy z zakresów (polecenie ipset), XOR - pozwala zastosować proste zabezpieczenie danych pakietu, poprzez wykonanie funkcji

XOR na danych i określonym haśle.

Translacja adresów

Technologia translacji adresów sieciowych (ang. Network Address Translation, w skrócie NAT)

została po raz pierwszy zaproponowana przez firmę Cisco i w roku 1993 opisana w dokumencie

RFC1631. Od końca lat 80-tych liczba komputerów dołączanych do sieci Internet wzrasta

wykładniczo. To spowodowało, że przestrzeń adresów IP już w latach 90-tych się wyczerpywała.

Zaobserwowano wówczas, że jeśli tempo zużycia przestrzeni IP się utrzyma, to w niedalekiej

przyszłości (przewidywanej na lata 1994-95) zupełnie zabraknie publicznych adresów IP dla

nowobudowanych sieci. Technologia NAT i leżące u jej podstaw nowe podejście do projektowania

sieci IP, pozwoliły przedłużyć tę „niedaleką przyszłość" co najmniej do dziś. Poniżej opisana została

idea technologii NAT.

Wiele dzisiejszych sieci IP nie opiera się już na publicznych adresach sieci, bo takich już brakuje.

Zamiast tego stosowane są dla tych sieci adresy prywatne. Ponieważ adresy te nie są rejestrowane,

może istnieć wiele sieci wykorzystujących tę samą pulę adresów prywatnych, a to czyni sieć Internet

skalowalną. Ale z drugiej strony fakt, że adresy prywatne nie są unikalne, stwarza pewne

ograniczenie. Otóż pakiety z takimi adresami nie mogą być przesyłane w Internecie, gdyż nie można

określić dla nich trasy. I właśnie ten problem rozwiązuje technologia NAT. Dzięki niej do uzyskania

łączności sieci prywatnej z Internetem wystarcza jeden adres publiczny IP - adres zewnętrznego

interfejsu routera. Od strony Internetu cała sieć prywatna widziana jest pod tym jednym (lub

kilkoma) adresem. Dalej opisano dwie główne odmiany NAT: translację adresów źródłowych SNAT

(ang. Source NAT) i adresów docelowych DNAT (ang. Destination NAT).

SNAT

Translacja SNAT umożliwia komputerom w sieci prywatnej dostęp do Internetu, a dokładniej - do

usług oferowanych przez różne serwery. Oznacza to, że pakiety, których źródłem są komputery sieci

prywatnej, powinny docierać do tych serwerów, a odpowiedzi - wracać z powrotem. Proces translacji

SNAT przebiega w dwóch krokach:

gdy pakiet opuszcza sieć źródłową, router zamienia prywatny adres IP źródła na adres

swojego publicznego interfejsu oraz numer portu źródłowego na inny, nie zajęty numer

portu. Zapamiętuje tę zmianę w tablicy translacji w postaci odwzorowania

oryginalny_adres_IP:oryginalny_port→nowy_adres_IP:nowy_port. Dzięki zamianie adresu

źródłowego na publiczny można dla pakietu z odpowiedzią jednoznacznie określić trasę.

Nowy numer portu zaś pozwala dodatkowo rozróżniać poszczególne adresy prywatne, dzięki

czemu z usług Internetu może jednocześnie korzystać wiele komputerów w sieci prywatnej.

Page 10: Teletransmisja i sieci komputerowe 2

8

gdy router otrzymuje pakiet-odpowiedź, publiczny adres docelowy (będący adresem

źródłowym w poprzednim pakiecie) wraz z numerem portu docelowego są zamieniane z

powrotem na oryginalne wartości zgodnie z zapamiętanym wcześniej odwzorowaniem.

Dzięki temu odpowiedź dociera do właściwego procesu na właściwym komputerze.

DNAT

Translacja DNAT umożliwia komputerom z sieci publicznej dostęp do usług oferowanych przez

serwery znajdujące się w sieci prywatnej. Oznacza to, że pakiety, których źródłem są komputery sieci

publicznej, powinny docierać do tych serwerów, a odpowiedzi - wracać z powrotem. Usługi sieci

prywatnej dostępne są dla sieci zewnętrznej pod publicznym adresem interfejsu routera. Translacja

DNAT przebiega w dwóch krokach:

gdy pakiet dociera do sieci prywatnej, jego adres IP docelowy jest ustawiony na publiczny

adres zewnętrznego interfejsu routera; pod tym adresem bowiem usługa jest dostępna.

Router zamienia ten adres na właściwy adres serwera w sieci lokalnej; w najprostszym

przypadku numer portu docelowego nie ulega zmianie.

gdy pakiet-odpowiedź wysłany z serwera w sieci lokalnej dociera do routera, z powrotem

zamienia on prywatny adres źródłowy na adres publiczny swojego zewnętrznego interfejsu.

Zbiory adresów – IPSet Jest to narzędzie pozwalające użyć tablic (umiejscowionych w obszarze jądra) wypełnionych

danymi z których można korzystać w regułach iptables. Narzędzie to nie jest standardowo dostępne

w dystrybucji Debian/GNU Linux, a do działania, na chwilę obecną, wymaga zastosowania patcha na

jądrze systemu i jego rekompilacji.

Składnia

ipset [ OPCJE ] POLECENIA [ OPCJE-POLECENIA ]

POLECENIA := { create | add | del | test | destroy | list | save | restore

| flush | rename | swap | help | version | - }

OPCJE := { -exist | -output { plain | save | xml } | -quiet | -resolve | -

sorted }

ipset create NAZWAZBIORU NAZWATYPU [ STWÓRZ-OPCJE ]

ipset add NAZWAZBIORU DODAJ-WPIS [DODAJ-OPCJE ]

ipset del NAZWAZBIORU USUŃ-WPIS [USUŃ-OPCJE ]

ipset test NAZWAZBIORU SPRAWDŹ-WPIS [SPRAWDŹ-OPCJE ]

ipset destroy [ NAZWAZBIORU ]

ipset list [ NAZWAZBIORU ]

ipset save [ NAZWAZBIORU ]

ipset restore

ipset flush [ NAZWAZBIORU ]

ipset rename NAZWAZBIORU-Z NAZWAZBIORU-NA

ipset swap NAZWAZBIORU-Z NAZWAZBIORU-NA

ipset help [ NAZWATYPU ]

Page 11: Teletransmisja i sieci komputerowe 2

9

ipset version

Typy struktur i tablic w IPSet.

ipmap – przechowuje adresy IP (max 65535), tworząc podajemy klasę lub przedział adresów

macimap – przechowuje adresy IP + adresy MAC – tworzymy tak jak ipmap

portmap – przechowujemy w niej porty bądź zestawy portów

iphash – przechowuje adresy IP, ale w odróżnieniu od ipmap jest to dynamiczna tablica

hashowana

nethash – „hash” zawierający maski sieci (CIDR)

ipporthash – „hash” dla pary : adres IP + port

ipportiphash – „hash” dla tripletu: adres IP + port + adres IP

ipportnethash – „hash” dla tripletu: adres IP + port + maska sieci (CIDR)

iptree – drzewo adresów IP (opcjonalnie możemy podać czas przechowywania wpisu w

drzewie)

iptreemap – podobnie do iptree używa drzew do przechowywania jednak ostatni oktet

adresu zapisany jest za pomocą mapy bitowej

setlist – lista w której trzymamy inne zestawy

Zbiory IPSet mogą być używane w IPTables do opisu wzorców (set) oraz celów (SET), w pierwszym

przypadku możliwe jest ich użycie zarówno jako źródła jak i celu, w zależności od przełącznika (src,

dst) np.:

iptables -A INPUT -m set --set blacklist src -j DROP

Page 12: Teletransmisja i sieci komputerowe 2

10

Zajęcia 3

Konfiguracja zapory sieciowej w oparciu o IPTables

Wprowadzenie

Programowe zapory sieciowe (ang. firewall) wykorzystywane mogą być do różnych celów w

zależności od ich złożoności. Zapora sieciowa ma za zadanie filtrować ruch przychodzący, wychodzący

oraz przechodzący przez dane urządzenie sieciowe (na przykład komputera). Dzięki filtrowaniu ruchu

możemy poprawić bezpieczeństwo sieciowe urządzenia, należy jednak pamiętać, iż nigdy nie

zapewnimy całkowitego bezpieczeństwa sieciowego, chyba że odłączymy komputer od sieci.

Implementacja

Jako, że konfiguracja IPTables nie jest trwale zapamiętywana, należy stworzyć skrypt

uruchamiający firewall. Jako root tworzymy plik firewall w katalogu /etc/init.d:

touch /etc/init.d/firewall chmod +x /etc/init.d/firewall nano -w /etc/init.d/firewall

Następnie wypełniamy go niżej przedstawioną treścią, stanowiącą szkielet skryptu (UWAGA –

wywołanie skryptu w takiej postaci odetnie komputer od dostępu do Internetu):

#!/bin/bash if [ "$1" = "start" ]; then echo "Uruchamiam firewall..." # czyszczenie reguł i łańcuchów iptables -F iptables –X # ustalanie polityki domyślnej iptables -P INPUT DROP iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT # reguły filtrowania ruchu # ... elif [ "$1" = "stop" ]; then echo "Zatrzymuję firewall..." # czyszczenie reguł i łańcuchów iptables -F iptables –X # przywrócenie standardowej polityki domyślnej iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT fi

Od tego momentu możliwe jest „uruchamianie” i „zatrzymywanie” firewalla poleceniem

/etc/init.d/firewall z parametrem start lub stop. Aby reguły filtrowania były stosowane

automatycznie po uruchomieniu systemu konieczne jest dopisanie w/w skryptu do skryptu

startowego systemu, możemy tego dokonać wydając polecenie:

update-rc.d firewall defaults 90

Page 13: Teletransmisja i sieci komputerowe 2

11

Reguły zapory sieciowej, czyli inaczej filtra pakietów, umieszczane są w tablicy filter, jest to tablica

domyślna i nie trzeba jej jawnie wskazywać przy definiowaniu reguł. Jak wcześniej wspomniano

reguły mogą dotyczyć pakietów przychodzących, wychodzących oraz przechodzących przez hosta na

którym są zdefiniowane. Ważne jest aby konfigurując filtr pakietów w zdalnej sesji, zmieniając

politykę domyślną na odrzucanie pakietów, pamiętać o wprowadzeniu reguł umożliwiających dostęp

do konfigurowanego hosta przez SSH lub telnet przed zmianą polityki domyślnej.

Z uwagi na fakt iż pakiety są dopasowywane do reguł z zachowaniem ich kolejności, zamiast

polityki domyślnej, na końcu łańcucha, można dodać regułę bez wzorca, pełniącą funkcję polityki

domyślnej. Zaporę można projektować według zasady „przepuszczaj wszystko co nie jest zabronione”

lub „odrzucaj wszystko co nie jest dozwolone”. Bezpieczniejszym wariantem jest ten drugi i aby go

osiągnąć należy zmodyfikować politykę domyślną łańcucha INPUT (oraz FORWARD), dla pakietów

wychodzących zazwyczaj wystarczające jest wybiórcze blokowanie:

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

Najprostszym wariantem zapory jest zapora bezstanowa – jej reguły zawierają wzorce oparte

jedynie o adresy, protokoły i usługi (porty), np. aby zaakceptować odpowiedzi z serwera DNS oraz

WWW należy dodać następujące reguły:

iptables -A INPUT -p udp –sport 53 –j ACCEPT

iptables -A INPUT -p tcp –sport 80 –j ACCEPT

Nieco bardziej rozbudowanym wariantem jest zapora stanowa – uwzględniająca dodatkowo stan

połączenia, w tym przypadku, nie jest konieczne definiowanie usług od których odpowiedzi mają być

przepuszczane przez zaporę, istnieje możliwość dopuszczenia całego ruchu zwrotnego (odpowiedzi ze

zdalnych serwerów na żądania zainicjowane przez hosty w sieci lokalnej):

iptables -A INPUT -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j

ACCEPT

Page 14: Teletransmisja i sieci komputerowe 2

12

Zajęcia 4

Konfiguracja udostępniania dostępu do Internetu w oparciu o IPTables

Wprowadzenie

Mechanizm NAT, zwany również maskaradą stworzono aby umożliwić dostęp do Internetu

komputerom w sieciach lokalnych. Pierwotnie, kiedy problem ograniczonej liczby adresów IP v4

jeszcze nie istniał, mechanizm ten służył głównie jako zabezpieczenie sieci przed dostępem z

zewnątrz i do ukrywania struktury wewnętrznej sieci (stąd nazwa maskarada). Obecnie pełni nie tylko

funkcję podnoszącą bezpieczeństwo ale również pozwala oszczędzać publiczne adresy IP.

Mechanizm ten polega na translacji adresów (źródłowych bądź docelowych), tak aby cały ruch

pomiędzy siecią lokalną, a Internetem mógł się odbywać z wykorzystaniem pojedynczego (lub kilku)

publicznego adresu IP. Translacja adresów źródłowych (Source NAT) służy zapewnieniu dostępu do

zasobów Internetu komputerom w sieci lokalnej, natomiast translacja adresów docelowych

(Destination NAT) służy udostępnieniu usług działających na komputerach w sieci lokalnej do

Internetu.

Implementacja

Konfigurację NATu można dopisać do skryptu firewalla bądź stworzyć osobny skrypt, gdyż

podobnie jak w przypadku zapory sieciowej wszelkie ustawienia IPTables zostaną utracone po

restarcie komputera.

Przed przystąpieniem do konfiguracji maskarady konieczne jest ustawienie flagi zezwalającej na

przekazywanie pakietów (pomiędzy interfejsami sieciowymi), wpis ten należy umieścić na początku

skryptu:

echo 1 > /proc/sys/net/ipv4/ip_forward

… oraz statycznego adresu IP dla interfejsu pełniącego funkcję bramy dla sieci lokalnej (zwyczajowo

przyjmuje się, że jest to pierwszy, rzadziej ostatni, adres w tej sieci:

ifconfig eth0 192.168.1.1/24 up

Następnie można przystąpić do konfiguracji maskarady. W IPTables istnieją dwa cele służące do

translacji adresów źródłowych – SNAT i MASQUERADE. Zasadnicza różnica pomiędzy nimi polega na

tym, że w przypadku SNAT należy określić adres na jaki ma być dokonywana translacja, konieczne jest

Linux Box 192.168.1.1

eth0

192.168.1.2

eth0

192.168.1.3

eth0

Host “A”

Host “B”

155.158.112.112

eth1 Internet

Page 15: Teletransmisja i sieci komputerowe 2

13

więc posiadanie statycznego adresu IP na interfejsie sieciowym „do Internetu”. W przypadku celu

MASQUERADE adres ten jest określany dynamicznie i może się zmieniać w trakcie działania.

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

lub

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT 155.158.112.112

To w zasadzie cała konfiguracja, w bardziej złożonych konfiguracjach można dodatkowo określić

interfejs sieciowy (lub jego adres) dla którego reguła ma działać.

Oczywiście w tym najprostszym przypadku konfiguracja komputerów w sieci lokalnej musi zostać

przeprowadzona ręcznie – konieczne jest nadanie adresów IP ich interfejsom sieciowym,

wprowadzenie adresu bramy oraz adresów serwerów DNS:

ifconfig eth0 192.168.1.100/24 up

route add default gw 192.168.1.1

vi /etc/resolv.conf

Ostatnie polecenie otwiera w edytorze plik resolv.conf, w którym istnieje możliwość dodania

maksymalnie trzech wpisów nameserver:

nameserver 8.8.8.8

nameserver 8.8.4.4

Konfiguracja translacji adresów docelowych, zwana też przekserowaniem portów, wygląda

analogicznie:

iptables -t nat -I PREROUTING -p tcp -dport 8080 -j DNAT --to-destination

192.168.1.100:80

Jeśli dodatkowo aktywna jest zapora sieciowa, konieczne jest dodanie reguły przepuszczającej

pakiety przychodzące na przekierowany port (tzw. odblokowanie lub otwarcie portu):

iptables -A FORWARD -p tcp -d 192.168.1.100 -dport 80 -j ACCEPT

jeśli korzystamy z zapory stanowej mającej wpis pozwalający na utrzymanie nawiązanych połączeń:

iptables -A FORWARD -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED

-j ACCEPT

możemy użyć następującej składni:

iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -m state --state NEW

-j ACCEPT

Page 16: Teletransmisja i sieci komputerowe 2

14

Zajęcia 5

Konfiguracja podziału pasma w oparciu o HTB

Wprowadzenie

HTB (Hierarchical Token Bucket) jest algorytmem pozwalającym na zarządzanie przepływem

pakietów przez interfejs sieciowy. W oparciu o ten mechanizm możliwa jest realizacja tzw.

zarządzania pasmem (Bandwidth Management). Ograniczeniem HTB jest możliwość sterownia

jedynie ruchem wychodzącym z interfejsu, co w praktyce oznacza, że w przypadku sieci

wykorzystującej maskaradę w prosty sposób można zarządzać jedynie ruchem przychodzącym

(downlink).

Implementacja

Podobnie jak w przypadku IPTABLES, również HTB nie posiada mechanizmu zapamiętywania

ustawień, konieczne jest więc stworzenie skryptu. Jako root tworzymy plik bandmgmt w katalogu

/etc/init.d:

touch /etc/init.d/bandmgmt chmod +x /etc/init.d/bandmgmt nano -w /etc/init.d/bandmgmt

Następnie wypełniamy go niżej przedstawioną treścią, stanowiącą szkielet:

#!/bin/bash if [ "$1" = "start" ]; then echo "Uruchamiam HTB..." # czyszczenie reguł tc qdisc del root dev eth0 # definicje reguł tc qdisc add dev eth0 root handle 1:0 htb # definicje klas tc class add dev eth0 parent 1:0 classid 1:1 htb rate 10000kbit ceil 10000kbit # … # definicje filtrów # … elif [ "$1" = "stop" ]; then echo "Zatrzymuję HTB..." # czyszczenie reguł tc qdisc del root dev eth0 fi

W zamieszczonych tu przykładach, przyjęto że łącze jakim dysponujemy ma przepustowość

10Mbps, a interfejs do którego jest podłączona sieć LAN to eth0. W poniższym przykładzie dokonamy

podziału pasma dla dwóch klientów – A i B, zapewniając im pasmo gwarantowane 2Mbps z

możliwością wykorzystania do 5Mbps. Należy też pamiętać aby do klasy głównej nie przypisywać

maksymalnej przepustowości łącza, tak aby mieć pewność, że kolejkowanie pakietów będzie się

odbywać na naszym hoście, a nie po stronie dostawcy usług internetowych (ISP) – stąd 10000kbps, a

nie 10Mbps (10240kbps).

Page 17: Teletransmisja i sieci komputerowe 2

15

Dla każdego z klientów definiujemy klasy pochodne od klasy głównej, gdyż pakiety przypisane do

danej klasy współdzielą jej limit:

tc class add dev eth0 parent 1:1 classid 1:2 htb rate 2mbit ceil 5mbit

tc class add dev eth0 parent 1:1 classid 1:3 htb rate 2mbit ceil 5mbit

Następnie tworzymy filtry przypisujące pakiety do wybranych klas na podstawie ich docelowych

adresów IP (możliwe jest przypisanie różnych pakietów do jednej klasy):

tc filter add dev eth0 protocol ip parent 1: u32 match ip dst

192.168.1.2/24 flowid 1:2

tc filter add dev eth0 protocol ip parent 1: u32 match ip dst

192.168.1.3/24 flowid 1:3

Możemy jeszcze określić inną niż domyślna (FIFO) metodę kolejkowania pakietów – tutaj użyjemy

SFQ który pomoże zapobiec „zatkaniu” łącza np. przez program typu p2p:

tc qdisc add dev eth0 parent 1:2 handle 2:0 sfq perturb 10 tc qdisc add dev eth0 parent 1:3 handle 3:0 sfq perturb 10

Jeśli potrzebny jest bardziej szczegółowy podział, z rozbiciem na usługi, zachodzi potrzeba

zdefiniowania odrębnej klasy dla każdej usługi na każdym z hostów:

tc class add dev eth0 parent 1:2 classid 1:21 htb rate 128kbit ceil 5mbit

tc class add dev eth0 parent 1:2 classid 1:22 htb rate 512kbit ceil 5mbit

tc class add dev eth0 parent 1:2 classid 1:23 htb rate 896kbit ceil 5mbit

tc class add dev eth0 parent 1:3 classid 1:31 htb rate 128kbit ceil 5mbit

tc class add dev eth0 parent 1:3 classid 1:32 htb rate 512kbit ceil 5mbit

tc class add dev eth0 parent 1:3 classid 1:33 htb rate 896kbit ceil 5mbit

Wtedy reguły filtra dotyczą klas pochodnych (128kbps na Telnet, 512kbps na WWW i pozostałe):

tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst

192.168.1.2/24 match ip sport 23 0xffff flowid 1:21

tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst

192.168.1.2/24 match ip sport 80 0xffff flowid 1:22

tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst

192.168.1.2/24 flowid 1:23

tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst

192.168.1.3/24 match ip sport 23 0xffff flowid 1:31

Linux Box Internet

eth1

192.168.1.1

eth0

192.168.1.2

host “A”

(2Mbps)

192.168.1.3

host “B”

(2Mbps)

telnet (128kbps)

www (512kbps)

reszta (896kbps)

telnet (128kbps)

www (512kbps)

reszta (896kbps)

Page 18: Teletransmisja i sieci komputerowe 2

16

tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst

192.168.1.3/24 match ip sport 80 0xffff flowid 1:32

tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst

192.168.1.3/24 flowid 1:33

W tym przypadku nie ma konieczności wykorzystania SFQ:

tc qdisc add dev eth0 parent 1:21 handle 210:0 pfifo limit 10 tc qdisc add dev eth0 parent 1:22 handle 220:0 pfifo limit 10 tc qdisc add dev eth0 parent 1:23 handle 230:0 pfifo limit 10 tc qdisc add dev eth0 parent 1:31 handle 310:0 pfifo limit 10 tc qdisc add dev eth0 parent 1:32 handle 320:0 pfifo limit 10 tc qdisc add dev eth0 parent 1:33 handle 330:0 pfifo limit 10

Z filtrów można korzystać wspólnie z IPTables poprzez markowaniem pakietów. Cel MARK jest tzw.

celem niekończącym, to znaczy, że po dopasowaniu do niego pakietu pozostaje on w łańcuchu:

iptables -t mangle -A POSTROUTING -s 192.168.1.2 -o eth0 -p tcp –sport 23

-j MARK –set-mark 0×21

iptables -t mangle -A POSTROUTING -s 192.168.1.2 -o eth0 -p tcp –sport 23

-j RETURN

iptables -t mangle -A POSTROUTING -s 192.168.1.2 -o eth0 -p tcp –sport 80

-j MARK –set-mark 0×22

iptables -t mangle -A POSTROUTING -s 192.168.1.2 -o eth0 -p tcp –sport 80

-j RETURN

tc filter add dev eth2 protocol ip parent 1:0 handle 21 fw flowid 1:21 tc filter add dev eth2 protocol ip parent 1:0 handle 22 fw flowid 1:22

… bądź całkowicie wyeliminować filtry przy pomocy celu CLASSIFY, który podobnie jak MARK jest

celem niekończącym:

iptables -t mangle -A POSTROUTING -s 192.168.1.2 -o eth0 -p tcp –sport 23

-j CLASIFY --set-class 1:21

iptables -t mangle -A POSTROUTING -s 192.168.1.2 -o eth0 -p tcp –sport 23

-j RETURN

iptables -t mangle -A POSTROUTING -s 192.168.1.2 -o eth0 -p tcp –sport 80

-j CLASSIFY --set-class 1:22

iptables -t mangle -A POSTROUTING -s 192.168.1.2 -o eth0 -p tcp –sport 80

-j RETURN

Page 19: Teletransmisja i sieci komputerowe 2

17

Źródła http://zsk.wsti.pl/publikacje/iptables_przystepnie.htm

http://www.netfilter.org/

http://www.physd.amu.edu.pl/~m_jurga/pld/firewall/

http://iptables.ovh.org/

http://wazniak.mimuw.edu.pl/index.php?title=Bezpiecze%C5%84stwo_system%C3%B3w_komputer

owych_-_laboratorium_12:Systemy_programowych_zap%C3%B3r_sieciowych

http://ipset.netfilter.org/

http://www.varlog.pl/2010/03/ipset-znany-i-nieznany/

http://opalsoft.net/qos/DS.htm

http://luxik.cdi.cz/~devik/qos/

http://robert.nowotniak.com/en/security/htb/

http://stary.dug.net.pl/texty/htb.pdf

Page 20: Teletransmisja i sieci komputerowe 2

18

Spis treści

Zajęcia 1 ................................................................................................................................................... 1

Konfiguracja wirtualnej maszyny z systemem Debian GNU Linux ...................................................... 1

Zajęcia 2 ................................................................................................................................................... 2

Wprowadzenie do IPTables ................................................................................................................. 2

Wprowadzenie ................................................................................................................................ 2

Konfiguracja ..................................................................................................................................... 2

Składnia ........................................................................................................................................... 3

Opis modułów ................................................................................................................................. 4

Opis celów ....................................................................................................................................... 6

Zbiory adresów – IPSet ........................................................................................................................ 8

Składnia ........................................................................................................................................... 8

Zajęcia 3 ................................................................................................................................................. 10

Konfiguracja zapory sieciowej w oparciu o IPTables ......................................................................... 10

Wprowadzenie .............................................................................................................................. 10

Implementacja ............................................................................................................................... 10

Zajęcia 4 ................................................................................................................................................. 12

Konfiguracja udostępniania dostępu do Internetu w oparciu o IPTables ......................................... 12

Zajęcia 5 ................................................................................................................................................. 14

Konfiguracja podziału pasma w oparciu o HTB ................................................................................ 14

Wprowadzenie .............................................................................................................................. 14

Implementacja ............................................................................................................................... 14

Źródła..................................................................................................................................................... 17