Jaka jest różnica między PREROUTING a FORWARD w iptables?

16

Próbuję zrozumieć, jak działa ten system i mam problemy ze zrozumieniem różnicy między używaniem NAT PREROUTING lub filtrowaniem FORWARD. Z tego, co rozumiem, PREROUTE może wysłać pakiet na inny serwer, omijając filtr. Jeśli NAT może sobie z tym poradzić poprzez PREROUTE, jaki jest cel posiadania reguły FORWARD w filtrze?

GheorGhe
źródło

Odpowiedzi:

25

Tabela NAT :

Ta tabela powinna być używana tylko dla NAT (Network Address Translation) dla różnych pakietów. Innymi słowy, należy go używać tylko do tłumaczenia pola źródłowego lub docelowego pakietu.

Filtruj tabelę :

Tabela filtrów służy głównie do filtrowania pakietów. Możemy dopasowywać pakiety i filtrować je w dowolny sposób. To jest miejsce, w którym faktycznie podejmujemy działania przeciwko pakietom i sprawdzamy, co zawierają i DROP lub / AKCEPTUJĄ je, w zależności od ich zawartości. Oczywiście możemy również wykonać wcześniejsze filtrowanie; jednak ta konkretna tabela jest miejscem, dla którego zaprojektowano filtrowanie.

W przemierzaniu tabel i łańcuchów widzimy, że łańcuch FORWARD filtru jest przemierzany tylko przez pakiety przekazane (pakiety wychodzące z sieci ORAZ wychodzą do sieci), tzn. Twój komputer działa jak router, podczas gdy łańcuch nat PREROUTING jest przemierzany przez oba przekazane dalej pakiety i pakiety, których miejscem docelowym jest host lokalny.

Powinieneś używać nat PREROUTING tylko do zmiany adresu docelowego pakietów i filtr FORWARD tylko do filtrowania (upuszczanie / akceptowanie pakietów).

Jeśli otrzymamy pakiet do pierwszej decyzji o routingu, który nie jest przeznaczony dla samej maszyny lokalnej, zostanie on przekierowany przez łańcuch FORWARD. Z drugiej strony, jeśli pakiet jest przeznaczony na adres IP, którego nasłuchuje lokalny komputer, wyślemy go przez łańcuch INPUT i na lokalny komputer. wprowadź opis zdjęcia tutaj Pakiety mogą być przeznaczone dla komputera lokalnego, ale adres docelowy można zmienić w łańcuchu PREROUTING, wykonując NAT. Ponieważ odbywa się to przed pierwszą decyzją o routingu, pakiet zostanie sprawdzony po tej zmianie. Z tego powodu routing może zostać zmieniony przed podjęciem decyzji o routingu. Zauważ, że wszystkie pakiety będą przechodzić przez jedną lub drugą ścieżkę na tym obrazie. Jeśli DNAT wyśle ​​pakiet z powrotem do tej samej sieci, z której pochodzi, nadal będzie podróżował przez resztę łańcuchów, dopóki nie znajdzie się ponownie w sieci.

Eric Carvalho
źródło
5

PREROUTING : Ten łańcuch służy do podejmowania wszelkich decyzji związanych z routingiem przed ( PRE ) wysłaniem jakichkolwiek pakietów. Zawsze pamiętaj, że PREROUTING/POSTROUTINGnp. W NATtabeli ACCEPT/DROP/REJECTitp. Cele domyślnej FILTERtabeli nie będą działać. NATTabela jest używana tylko do podejmowania decyzji routingu. Powinieneś użyć tego PREROUTINGprzy podejmowaniu jakichkolwiek decyzji dotyczących routingu, tj. Decyzji, które należy podjąć, zanim pakiet zacznie podróżować przez sieć. Oto przykład, przekierowujemy wszelki ruch, który właśnie dotarł do serwera na porcie 80 do portu 8080:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

DO PRZODU : Jak sama nazwa wskazuje, FORWARDłańcuch FILTERtabeli służy do przekazywania pakietów ze źródła do miejsca docelowego, tutaj źródło i miejsce docelowe to dwa różne hosty. Jak można sobie wyobrazić, FORWARDzasady są zasadniczo stosowane na serwerach, na których jeden host wysyła / odbiera ruch z innego hosta za pośrednictwem serwera. Gdy pakiet jest generowany z serwera, łańcuch oznacza, OUTPUTże ruch wychodzi z siebie, podczas gdy INPUTłańcuch oznacza, że ​​pakiety są przeznaczone tylko dla samego serwera. Oto przykład FORWARDłańcucha, w którym każdy TCPruch odebrany przez port 80 na interfejsie eth0przeznaczonym dla hosta 192.168.0.4zostanie zaakceptowany i przekazany do 192.168.0.4:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT
heemayl
źródło
Twoje użycie „hostów” wydaje się dziwne. Która tabela jest używana, gdy zależy przede wszystkim od lokalnych interfejsów, do których pakiet wszedł i ma się zakończyć.
guntbert
która część wydaje się dziwna? Użyłem pojęcia gospodarzy, aby wskazać strony wysyłające i odbierające.
heemayl
Mówię o akapicie DO PRZODU: ta tabela jest używana, gdy pakiet przychodzący przez jeden interfejs jest przeznaczony dla innego interfejsu (w przeciwieństwie do lokalnego hosta)
guntbert
oh..ok..i mam go ... tak, powinienem użyć interfejsu .... po prostu użyj hostów, aby ułatwić sobie zdjęcie .. zmienię to, kiedy będę przed moim komputerem.
heemayl
@guntbert: Właśnie wyprostowałem głowę. nie przeczytałem dokładnie twojego ostatniego komentarza. Myślę, że mylisz się w kontekście dwóch różnych interfejsów FORWARDłańcucha. Gdy pakiety są przenoszone z jednego hosta sieci LAN do innego hosta sieci LAN, pakiety przechodzą tylko przez jeden interfejs, a używany łańcuch będzie, FORWARDchociaż tutaj serwer (medium) nie będzie działał jako router w ścisłym znaczeniu raczej może być uważany za przełącznik.
heemayl