iptables: ¿Cómo "anular" una redirección de puerto?

iptables: ¿Cómo "anular" una redirección de puerto?

Mi configuración es la siguiente:

Tengo un servidor Linux con dos interfaces eth0y eth1. eth1Tiene una conexión a Internet a través de mi LAN normal. eth0sirve DHCP y la interfaz en sí tiene una dirección IP de 10.0.0.1.

Quiero lograr lo siguiente:

Quiero que los paquetes en el puerto 80 que se originan en las máquinas conectadas eth0sean redirigidos al puerto 80 en la propia máquina de enrutamiento y, por supuesto, los paquetes de respuesta sean redirigidos de regreso. Eso en sí mismo es bastante simple, pero tengo un requisito más. Me gustaría que los clientes eth0con ciertas direcciones IP pudieran estar exentos de esto y que los paquetes del puerto 80 se enrutaran como lo harían normalmente. ¿Cómo puedo hacer esto? Hasta ahora, he hecho lo siguiente para redirigir todos los paquetes del puerto 80 eth0a la máquina local. Está funcionando, pero no sé cómo cumplir con mi segundo 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

Respuesta1

Solo necesitas salir de la PREROUTINGtabla antes de llegar a la DNATlínea:

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

Esto debería insertar ( -I) una nueva regla para salir ( -j RETURN) de la tabla de enrutamiento para cualquier paquete de la IP exenta ( -s <exempt ip>) como primera regla, de modo que se acceda antes de llegar a la DNATregla.

(Es posible que también necesites hacer algo similar en POSTROUTING, no estoy seguro).


La otra opción es crear un conjunto de IP ( man ipset) para las IP que desea eximir y luego agregar una coincidencia invertida a sus reglas DNATy :SNAT

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

Esto es más fácil de administrar porque puede agregar o eliminar fácilmente IP exentas del ipset sin modificar iptables.

información relacionada