GNU/Linux >> Tutoriales Linux >  >> Linux

iptables redirigen las conexiones locales al sistema/puerto remoto

No estoy completamente seguro de haber entendido, pero creo que estás en la cadena equivocada. :-) Yo también estaba confundido cuando usé iptables por primera vez. Pero la forma de adelante el local port ${LOCAL UNPRIV PORT} es la siguiente declaración:

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

Es una mezcla entre un problema semántico y la forma en que funciona netfilter:en los viejos tiempos, reenviar un puerto local implicaba una conexión con la caja que está reenviando, más una segunda conexión con el destino. Iptables hace esto en un solo paso. Entonces, en lugar de dos conexiones, está reenviando el tráfico a ese puerto directamente al destino. Netfilter realiza todos los controles de cordura y la contabilidad:solo los paquetes que pertenecen a una conexión válida reciben NAT y, por lo tanto, pueden reenviarse.

Habilitar DNAT no permite que se reenvíe ningún paquete. También tienes que añadir una regla:

$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

Y tienes que habilitar el reenvío, por supuesto.

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

Pro iptables :más seguro, más flexible, menos memoria y CPU utilizada por conexión

Contraiptables :reenviar una conexión desde una máquina interna a una máquina interna (realimentarla al eth0) no tiene sentido con iptables (por supuesto, siempre puede conectarse directamente), reenviar el tráfico que se genera localmente no funciona (un puerto el demonio de reenvío podría ayudar, pero generalmente no tiene sentido)

Exactamente este podría ser el problema :intenta usar NAT en un enrutador, por lo que debe usar un demonio de reenvío u omitir este reenvío de puerto adicional y hacer:

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

En special-vpn-box, solo puede permitir conexiones entrantes desde el enrutador y conexiones salientes a ${OTRO SISTEMA}:${PUERTO REMOTO} usando iptables. De esa manera, los usuarios de special-vpn-box solo pueden acceder a ${OTRO SISTEMA}:${PUERTO REMOTO} y no podrán hacer nada más si no son de confianza.


Esto es lo que hago específicamente para el reenvío 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

Asegúrate de sustituir ip.ip.ip.ip para su IP pública real y también el --dport 3306 para el puerto que desea reenviar.

Finalmente ejecute el comando sysctl y también actualice su /etc/sysctl.conf

Puedes actualizar sysctl.ctl para permitir el enrutamiento de localhost con el siguiente comando:

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

Ahora, todo esto parece simple y bueno, pero requirió algo de investigación y búsqueda. Tenga cuidado y comprenda que reenviar localhost/127.0.0.1 requiere este método y los otros ejemplos típicos no funcionan. Algunos ejemplos de soluciones que no funcionan 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. Incluya en la lista blanca una IP en CSF para conexiones MySQL remotas

  2. Cómo verificar el puerto abierto en un sistema Linux remoto

  3. Hacer que MongoDB en Linux escuche conexiones remotas

  4. Cómo abrir puerto en Linux

  5. ¿Negar todas las conexiones entrantes con iptables?

SSHFS:Montaje de un sistema de archivos remoto a través de SSH

Cómo comprobar que un puerto está abierto en un sistema Linux remoto

Lsyncd:sincroniza directorios locales con Linux remoto

Permitir FTP con IPTables

Iptables:-p udp --estado ESTABLECIDO

¿Reenvío de puertos en Linux sin iptables?