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:80
está 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