Qual è la differenza tra PREROUTING e FORWARD in iptables?


16

Sto cercando di capire come funziona questo sistema e ho problemi a capire la differenza tra l'utilizzo di NAT PREROUTING o il filtro FORWARD. Da quanto ho capito, PREROUTE può inviare il pacchetto a un altro server, evitando il filtro. Se NAT è in grado di gestirlo tramite PREROUTE, qual è lo scopo di avere una regola FORWARD nel filtro?

Risposte:


25

Tavolo NAT :

Questa tabella deve essere utilizzata solo per NAT (Network Address Translation) su pacchetti diversi. In altre parole, dovrebbe essere usato solo per tradurre il campo sorgente o il campo destinazione del pacchetto.

Tabella dei filtri :

La tabella dei filtri viene utilizzata principalmente per filtrare i pacchetti. Possiamo abbinare i pacchetti e filtrarli come preferiamo. Questo è il luogo in cui prendiamo provvedimenti contro i pacchetti e osserviamo cosa contengono e DROP o / ACCETTANO, a seconda del loro contenuto. Naturalmente possiamo anche fare un filtro preventivo; tuttavia, questa tabella particolare è il luogo per cui è stato progettato il filtro.

In Traversing di tabelle e catene possiamo vedere che la catena FORWARD del filtro è attraversata solo da pacchetti inoltrati (pacchetti che provengono dalla rete e vanno alla rete), cioè il tuo computer si comporta come un router, mentre la catena PREROUTING di nat è attraversata da entrambi pacchetti e pacchetti la cui destinazione è l'host locale.

È necessario utilizzare PREROUTING di nat solo per modificare l'indirizzo di destinazione dei pacchetti e FORWARD del filtro solo per il filtraggio (eliminazione / accettazione dei pacchetti).

Se prendiamo un pacchetto nella prima decisione di routing che non è destinato alla macchina locale stessa, verrà instradato attraverso la catena FORWARD. Se il pacchetto è invece destinato a un indirizzo IP che il computer locale sta ascoltando, invieremo il pacchetto attraverso la catena INPUT e al computer locale. inserisci qui la descrizione dell'immagine I pacchetti possono essere destinati al computer locale, ma l'indirizzo di destinazione può essere modificato all'interno della catena PREROUTING eseguendo NAT. Poiché ciò avviene prima della prima decisione di instradamento, il pacchetto verrà considerato dopo questa modifica. Per questo motivo, il routing può essere modificato prima che venga presa la decisione di routing. Si noti che tutti i pacchetti attraverseranno l'uno o l'altro percorso in questa immagine. Se si reimposta DNAT un pacchetto sulla stessa rete da cui proviene, viaggerà comunque attraverso il resto delle catene fino a quando non verrà ripristinato sulla rete.


5

PREROUTING : questa catena viene utilizzata per prendere qualsiasi decisione relativa al routing prima di ( PRE ) inviare eventuali pacchetti. Ricorda sempre che nella tabella PREROUTING/POSTROUTINGie NATgli ACCEPT/DROP/REJECTobiettivi etc della FILTERtabella predefinita non funzioneranno. La NATtabella viene utilizzata solo per prendere decisioni di routing. È necessario utilizzare PREROUTINGquando si prendono decisioni di routing, ad esempio le decisioni che devono essere prese prima che il pacchetto inizi a attraversare la rete. Ecco un esempio, stiamo reindirizzando tutto il traffico che ha appena raggiunto il server sulla porta 80 alla porta 8080:

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

AVANTI : come suggerisce il nome, la FORWARDcatena di FILTERtabelle viene utilizzata per inoltrare i pacchetti da un'origine a una destinazione, qui l'origine e la destinazione sono due host diversi. Quindi, come puoi immaginare, le FORWARDregole sono sostanzialmente utilizzate sui server in cui un host sta inviando / ricevendo traffico da un altro host tramite il server. Quando il pacchetto viene generato dal server, la catena è OUTPUTcioè il traffico che esce da se stesso mentre la INPUTcatena indica che i pacchetti sono pensati solo per il server stesso. Ecco un esempio di FORWARDcatena in cui qualsiasi TCPtraffico ricevuto sulla porta 80 sull'interfaccia eth0destinata all'host 192.168.0.4verrà accettato e inoltrato a 192.168.0.4:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT

Il tuo uso di "host" sembra strano. Quale tabella viene utilizzata quando dipende principalmente dalle interfacce locali in cui un pacchetto è arrivato e che intende uscire.
Guntbert,

quale parte sembra strana? ho usato il concetto di host per indicare le parti di invio e ricezione ..
heemayl

Sto parlando del paragrafo AVANTI: quella tabella viene utilizzata quando un pacchetto che arriva attraverso un'interfaccia è destinato a un'altra interfaccia (al contrario dell'host locale)
guntbert,

oh..ok..ho capito .... sì dovrei usare l'interfaccia .... basta usare gli host per rendere più semplice l'immagine..cambierò questo quando sarò davanti al mio computer.
heemayl

@guntbert: ho la testa dritta. non hai letto il tuo ultimo commento abbastanza attentamente. Penso che ti sbagli nel contesto di due diverse interfacce per la FORWARDcatena. Quando i pacchetti vengono trasferiti da un host di una LAN a un altro host di una LAN, i pacchetti passeranno attraverso una sola interfaccia e la catena utilizzata sarà FORWARDsebbene qui il server (medio) non fungerà da router in senso stretto piuttosto può essere pensato come un interruttore.
heemayl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.