¿La regla DNAT de IPTables para el servidor web local no funciona con localhost?

¿La regla DNAT de IPTables para el servidor web local no funciona con localhost?

Tengo una caja Linux que funciona como punto de acceso inalámbrico. Los clientes inalámbricos se conectan y luego navegan por la web. Sólo permito el puerto 80.

Hay ciertos sitios que me gustaría bloquear, pero no descartando el paquete, sino redirigiéndolos a una página.html bloqueada servida por un servidor web local.

Tengo dos nics. El del lado de Internet está vinculado a 10.0.2.15. Si hago una regla DNAT para redirigir el tráfico a mi servidor web usando la NIC de Internet, se devuelve la página. Si redirijo a 127.0.0.1, no lo es.

¿Porqué es eso?

Aquí está mi configuración de IPTables:

# iptables -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT DROP
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m tcp --sport 80 -j ACCEPT 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT 
# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N block-chain
-A PREROUTING -j block-chain 
-A POSTROUTING -o eth1 -j MASQUERADE 
# THIS WILL NOT RETURN THE PAGE TO THE CLIENT
-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 127.0.0.1:80 
# THIS WILL
-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 10.0.2.15:80 
-A block-chain -j RETURN 

Respuesta1

Para localhost necesitas usar REDIRECT en lugar de DNAT. En tu ejemplo:

-A block-chain -d 206.190.36.45/32 -p tcp -j REDIRECT --to-ports 80

Respuesta2

-j DNAT --to-destination 127.0.0.1:80está redirigiendo a los clientes para que busquen su propia dirección de bucle invertido en una página web.

Seguir con-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 10.0.2.15:80

información relacionada