GNU/Linux >> Linux Esercitazione >  >> Linux

iptables reindirizza le connessioni locali al sistema/porta remoto

Non sono del tutto sicuro di aver capito, ma penso che tu sia solo nella catena sbagliata. :-) Anch'io ero confuso quando ho usato iptables la prima volta. Ma il modo per inoltrare il locale port ${LOCAL UNPRIV PORT} è l'istruzione seguente:

$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT} 
     -j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}

È un misto tra un problema semantico e il modo in cui funziona netfilter:ai vecchi tempi l'inoltro di una porta locale implicava una connessione alla casella che sta effettuando l'inoltro, più una seconda connessione alla destinazione. Iptables lo fa in un solo passaggio. Quindi, invece di due connessioni, stai inoltrando il traffico a quella porta direttamente alla destinazione. Netfilter esegue tutti i controlli di integrità e la contabilità:solo i pacchetti che appartengono a una connessione valida sono NAT e possono quindi essere inoltrati.

L'abilitazione di DNAT non consente l'inoltro di alcun pacchetto. Devi anche aggiungere una regola:

$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP

$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT

$IPT -A INET-PRIV -j DROP

E devi abilitare l'inoltro ovviamente.

echo "1" > /proc/sys/net/ipv4/ip_forward

Pro iptables :più sicuro, più flessibile, meno memoria e CPU utilizzate per connessione

Contra iptables :l'inoltro di una connessione da una macchina interna a una macchina interna (restituiscila a eth0) non ha senso con iptables (ovviamente puoi sempre connetterti direttamente), l'inoltro del traffico generato localmente non funziona (una porta il demone di inoltro potrebbe aiutare, ma di solito non ha senso)

Proprio questo potrebbe essere il problema :provi a utilizzare NAT su un non router, quindi dovresti utilizzare un demone di inoltro o saltare completamente questo port forwarding aggiuntivo e fare:

ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box

Su special-vpn-box puoi solo consentire connessioni in entrata dal router e connessioni in uscita a ${ANOTHER SYSTEM}:${REMOTE PORT} utilizzando iptables. In questo modo gli utenti della special-vpn-box possono accedere solo a ${ANOTHER SYSTEM}:${REMOTE PORT} e non potranno fare nient'altro se non sono fidati.


Ecco cosa faccio specificamente per l'inoltro localhost:

iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 3306 -j DNAT --to-destination ip.ip.ip.ip
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE

sysctl -w net.ipv4.conf.all.route_localnet=1

Assicurati di sostituire ip.ip.ip.ip per il tuo vero IP pubblico e anche il --dport 3306 per la porta che desideri inoltrare.

Infine esegui il comando sysctl e aggiorna anche il tuo /etc/sysctl.conf

Puoi aggiornare sysctl.ctl per consentire il routing di localhost con il seguente comando:

echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf

Ora tutto sembra semplice e buono, ma ci sono volute alcune ricerche e ricerche. Tieni presente che l'inoltro localhost/127.0.0.1 richiede questo metodo e gli altri esempi tipici non funzionano. Alcuni esempi di soluzioni che non funzionano con localhost:

iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to ip.ip.ip.ip:3306
iptables -t nat -A POSTROUTING -d ip.ip.ip.ip -j MASQUERADE

http://realtechtalk.com/iptables_how_to_forward_localhost_port_to_remote_public_IP-1788-articles


# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING  -p tcp \
--dport ${LOCAL UNPRIV PORT} -j DNAT --to-destination ${ANOTHER SYSTEM}:${REMOTE PORT}

iptables -t nat -A POSTROUTING -p tcp \
--dst ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j SNAT --to-source ${LOCAL SYSTEM}

Linux
  1. Ssh:copia un file sul sistema locale con Ssh?

  2. Reindirizzamento IP/porta con csf

  3. Come controllare la porta aperta su un sistema Linux remoto

  4. Come rinominare Git Branch locale e remoto

  5. Ottenere MongoDB su Linux per ascoltare le connessioni remote

SSHFS:montaggio di un file system remoto su SSH

Come verificare che una porta sia aperta su un sistema Linux remoto

Lsyncd:sincronizza le directory locali con Linux remoto

Come aprire la porta in Linux

Reindirizza la console a una porta seriale

REJECT vs DROP quando si utilizza iptables