Nastny Poprzedni Spis Trei

5. Kontrolowanie tego, co poddawaæ NAT

Musisz stworzyæ takie reguły NAT, by kernel wiedział które połączenia poddawaæ modyfikacjom i jak to robiæ. By tego dokonaæ, używamy bardzo szczegółowego narzêdzia iptables i wskazujemy kernelowi jak zmieniæ tabelê NAT przez podanie opcji '-t nat'.

Tabela NAT zawiera dwie listy zwane 'łañcuchami' (ang. chains): każda reguła w takiej liście jest sprawdzana dopóki któraś nie pasuje. Te dwa łañcuchy nazywają siê: PREROUTING (dla DNAT, ponieważ pakiety najpierw do nas docierają), POSTROUTING (dla SNAT, po którym pakiety opuszczają nasz system) i OUTPUT (dla DNAT, dla pakietów generowanych lokalnie).

Poniższy rysunek ilustrowałby to dosyæ dobrze gdybym miał choæ trochê talentu artystycznego:

      _____                                     _____
     /     \                                   /     \
   PREROUTING -->[Decyzja ]----------------->POSTROUTING----->
     \D-NAT/     [Rutingu ]                    \S-NAT/
                     |                            ^
                     |                            |
                     |                            |
                     |                            |
                     |                            |
                     |                            |
                     |                            |
                     --------> Local Process ------

W każdym z wêzłów powyżej, gdy dociera do niego pakiet, sprawdzane jest z jakim połączeniem jest skojarzony. Jeśli jest to nowe połączenie, sprawdzamy odpowiedni łañcuch w tabeli NAT by sprawdziæ co mamy z nim zrobiæ. Odpowiedź której udziela tabela dotyczyæ bêdzie wszystkich przyszłych pakietów dla tego połączenia.

5.1 Proste przykłady z użyciem iptables

iptables pobiera pewną liczbê standardowych opcji tak jak podano to niżej. Wszystkie opcje z podwójnym znakiem minus mogą byæ skrócone, tak długo jak iptables może je rozróżniæ od innych możliwych znaczeñ. Jeśli twój kernel ma wkompilowaną obsługê iptables jako moduł, musisz go najpierw załadowaæ: 'insmod ip_tables'.

Najważniejszą opcją jest wybierająca tabelê, '-t'. Dla wszystkich operacji które dotyczą NAT, używaæ bêdziesz opcji '-t nat'. Drugą ważną opcją jest '-A', która służy do dodawania nowej reguły na koniec łañcucha (np. '-A POSTROUTING'), oraz '-I', która służy do dodawania jej na początku (np. '-I PREROUTING').

Możesz podawaæ adresy źródłowe ('-s' lub '--source') i docelowe ( '-d' lub '--destination' ) pakietów których ma dotyczyæ NAT. Opcjom tym może towarzyszyæ pojedyñczy adres IP (np. 192.168.1.1), nazwa (np. www.gnumonks.org) lub adres sieci (np. 192.168.1.0/24 albo 192.168.1.0/255.255.255.0).

Możesz również wskazaæ interfejs wejściowy ( '-i' lub `--in-interface' ) lub wyjściowy ( '-o' lub `--out-interface'), ale który konkretnie zależy również od tego który łañcuch wskażesz: w łañcuchu PREROUTING możesz wskazaæ tylko interfejs wejściowy, a w łañcuchu POSTROUTING możesz wskazaæ tylko interfejs wyjściowy. Jeśli użyjesz niewłaściwego, iptables zwrócą błąd.

5.2 Dokładniejsze informacje o wyborze pakietów do modyfikowania

Powiedziałem wyżej, że możesz wskazaæ adresy źródłowe i docelowe. Jeśli ominiesz adres źródłowy, pasowaæ bêdzie każdy adres źródłowy. Jeśli pominiesz adres docelowy, pasowaæ bêdzie każdy adres docelowy.

Możesz również wskazaæ konkretny protokół ( '-p' lub `--protocol' ), taki jak TCP czy UDP; pasowaæ bêdą pakiety tylko z tego protokołu. Głównym powodem dla którego chciałbyś wskazaæ konkretny protokół jest to, że z każdym z nich skojarzone są dodatkowe opcje: w szczególności '--source-port' i '--destination-port' (które można skróciæ do `--sport' i '--dport').

Opcje te pozwalają ci określiæ o jakie pakiety chodzi z dokładnością do portu źródłowego i docelowego. Jest to użyteczne w przekazywaniu na przykład wywołañ do serwerów WWW (port TCP 80 lub 8080) i jednocześnie pomijaniu innych pakietów.

Opcjom tym musi towarzyszyæ opcja '-p' (która ma ten skutek uboczny, że doładowywuje współdzielone rozszerzenie biblioteczne dla konkretnego protokołu). Do wskazania numeru portu możesz używaæ numerów, lub nazw z pliku /etc/services.

Wszystkie sposoby na które możesz wskazaæ określony typ pakietów wyszczególnione zostały w podrêczniku (man iptables).


Nastny Poprzedni Spis Trei