redirigir todo menos un puerto a otro servidor con iptables

redirigir todo menos un puerto a otro servidor con iptables

Me mudé a un nuevo servidor web y ahora redirijo todo el tráfico al nuevo servidor con

echo "1" > /proc/sys/net/ipv4/ip_forward
#clear old rules:
iptables -F
iptables -t nat -F
#masquerade and redirect everything:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2

lo cual funciona bien, hasta que todas las entradas DNS estén generalizadas. Pero ahora ya no puedo iniciar sesión en la máquina anterior.

¿Cómo puedo mantener abierto un puerto SSH en el servidor anterior 1.1.1.1?

Respuesta1

En iptables, gana la primera regla coincidente. Por eso es importante el orden correcto de las reglas.

En este caso, la norma que dice qué hacer con el tráfico del puerto 22 debe venirantesla regla que dice qué hacer con "todo lo demás". Y si bien RETURN funcionaría si la política de la cadena no cambia con respecto a la predeterminada, podría ser más claro ser explícito y simplemente usar ACCEPT como sinónimo de "simplemente procesar esto normalmente":

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -m tcp -p tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2

información relacionada