A regra IPTables DNAT para o servidor web local não funciona com localhost?

A regra IPTables DNAT para o servidor web local não funciona com localhost?

Tenho uma caixa Linux funcionando como ponto de acesso sem fio. Os clientes sem fio se conectam e navegam na web. Estou permitindo apenas a porta 80.

Existem certos sites que eu gostaria de bloquear, mas não descartando o pacote, mas redirecionando-os para uma página bloqueada.html servida por um servidor web local.

Eu tenho duas nics. O do lado da Internet está vinculado a 10.0.2.15. Se eu fizer uma regra DNAT para redirecionar o tráfego para meu servidor web usando a NIC da Internet, a página será retornada. Se eu redirecionar para 127.0.0.1, não é.

Por que é que?

Aqui está minha configuração do 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 

Responder1

Para localhost você precisa usar REDIRECT em vez de DNAT. No seu exemplo:

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

Responder2

-j DNAT --to-destination 127.0.0.1:80está redirecionando os clientes para procurarem seu próprio endereço de loopback de uma página da web.

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

informação relacionada