Come posso reindirizzare il traffico in uscita sulla porta 80 usando iptables localmente?


19

Sto cercando di reindirizzare localmente le porte sul mio computer Ubuntu utilizzando iptables. Simile al proxy trasparente. Voglio catturare qualsiasi cosa tenti di lasciare il mio sistema sulla porta 80 e reindirizzarlo a un host e una porta remoti.

Posso ottenere ciò utilizzando le funzioni NAT e pre-routing di iptables?

Risposte:


30

Prova questa iptablesregola:

$ sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination IP:80

Quanto sopra dice a:

  • Aggiungi la seguente regola alla tabella NAT ( -t nat).
  • Questa regola verrà aggiunta ( -A) al traffico in uscita ( OUTPUT).
  • Siamo interessati solo al traffico TCP ( -p tcp).
  • Siamo interessati solo al traffico la cui porta di destinazione è 80 ( --dport 80).
  • Quando abbiamo una corrispondenza, passa a DNAT ( -j DNAT).
  • Instradare questo traffico alla porta 80 @ (altro --to-destination IP:80) di un altro server .

Cos'è DNAT?

DNAT
    This target is only valid in the nat table, in the PREROUTING and OUTPUT 
    chains, and user-defined chains which are only called from those chains.
    It specifies that the destination address of the packet should be modified 
    (and all future packets in  this  connection will also be mangled), and
     rules should cease being examined.

Riferimenti


grazie per quello ma non sembra funzionare. Da allora ho trovato questo che funziona.
pjf

sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destinazione xx.xx.xx.xx: 3128
pjf

È perché questo è localmente e non attraverso un gateway? il tuo SNAT funzionerebbe attraverso un gateway?
pjf

@pjf - Credo di si. Ho aggiornato la mia risposta.
slm

@pjf - Ho trovato entrambe le regole ed ero in procinto di aggiornare la mia risposta con entrambe. Non ero sicuro in quale situazione ti trovassi, però.
slm

6

Questo può essere reso più specifico per operare solo sul traffico verso un determinato host di destinazione. Ad esempio, quando Postfix ha commesso un errore e le e-mail in coda vogliono essere inviate a un vecchio indirizzo IP.

iptables -t nat -A OUTPUT -p tcp -d {ONLY_TO_THIS_DESTINATION} --dport 25 -j DNAT --to-destination {NEW_IP}:25

4

Ciò può consentire di tradurre le porte in tutti gli indirizzi IP. La differenza principale qui è l'assenza di un indirizzo IP nel --to-destinationcampo.

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination :80

Suggerimento molto utile; esattamente quello di cui avevo bisogno. C'è un modo per aumentare il numero di porta? Supponiamo di avere un intervallo di 100 porte e voglio aumentarle tutte di un importo specifico.
Zdenek,

Non sono sicuro cosa intendi. Potresti scrivere un for-loop in Bash?
Felipe Alvarez,

Un ciclo con l'aggiunta di 100 regole iptables funzionerebbe, ma lo rallenterebbe. Preferirei poterlo dire per incrementare molte porte successive in una sola regola.
Zdenek,

@Zdenek Non so se ciò sia possibile con iptables. Hai visto firewalld?
Felipe Alvarez,
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.