iptables: come "sovrascrivere" un reindirizzamento della porta?


1

La mia configurazione è la seguente:

Ho un server Linux con due interfacce, eth0 e eth1. eth1 ha una connessione Internet attraverso la mia normale LAN. eth0 sta servendo DHCP e l'interfaccia stessa ha un indirizzo IP di 10.0.0.1.

Voglio realizzare quanto segue:

Voglio avere pacchetti sulla porta 80 provenienti da macchine connesse eth0 da reindirizzare alla porta 80 sul router stesso, e naturalmente i pacchetti di risposta vengono reindirizzati. Di per sé è abbastanza semplice, ma ho ancora un requisito. Vorrei dei clienti eth0 con determinati indirizzi IP per essere in grado di essere esenti da questo, e avere i pacchetti 80 della porta indirizzati come sarebbero normalmente. Come posso fare questo? Finora, ho fatto quanto segue per reindirizzare tutti i pacchetti della porta 80 da eth0 alla macchina locale. Funziona, ma non so come fare il mio secondo requisito.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80 -i eth0

iptables -t nat -A POSTROUTING -p tcp -d 127.0.0.1 --dport 80 -j SNAT --to-source 10.0.0.1

Risposte:


0

Devi solo uscire dal PREROUTING tavolo prima che arrivi al DNAT linea:

iptables -t nat -I PREROUTING -p tcp -s <exempt ip> -j RETURN

Questo dovrebbe inserire ( -I ) una nuova regola per uscire ( -j RETURN ) la tabella di routing per qualsiasi pacchetto dall'IP esente ( -s <exempt ip> ) come prima regola, quindi viene colpito prima che arrivi al DNAT regola.

(Potrebbe anche essere necessario fare qualcosa di simile su POSTROUTING, non sono sicuro.)


L'altra opzione è creare un set IP ( man ipset ) per gli IP che si desidera esentare e quindi aggiungere una corrispondenza invertita al proprio DNAT e SNAT regole:

ipset create exempt hash:ip
ipset add exempt <exempt ip 1>
ipset add exempt <exempt ip 2>
ipset add exempt <exempt ip 3>
iptables -t nat -A PREROUTING -p tcp --dport 80 -m set ! --match-set exempt src -j DNAT --to-destination 10.0.0.1:80 -i eth0

È più facile da gestire perché puoi facilmente aggiungere o rimuovere IP esenti dall'ipset senza modificare iptables.


Questo sembra aver funzionato, ma un'altra cosa ... Come posso rimuovere questa regola?
AppleDash

Puoi rimuovere la regola con iptables -t nat -D POSTROUTING 1 (dove 1 è l'indice nel POSTROUTING catena della regola che si desidera rimuovere. Uso iptables -t nat -L POSTROUTING elencare tutte le regole in POSTROUTING catena.
Darth Android
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.