Następna strona Poprzednia strona Spis treści

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).


Następna strona Poprzednia strona Spis treści