IPTables DNAT 规则到本地 Web 服务器不适用于本地主机?

IPTables DNAT 规则到本地 Web 服务器不适用于本地主机?

我有一个 Linux 盒子作为无线接入点。无线客户端连接然后浏览网页。我只允许80端口。

我想阻止某些网站,但不是通过丢弃数据包,而是将它们重定向到由本地 Web 服务器提供服务的 blocked.html 页面。

我有两个网卡。 internet端绑定的是10.0.2.15。如果我执行 DNAT 规则以使用互联网 NIC 将流量重定向到我的 Web 服务器,则会返回该页面。如果我重定向到 127.0.0.1,则不是。

这是为什么?

这是我的 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 

答案1

对于本地主机,您需要使用 REDIRECT 而不是 DNAT。在你的例子中:

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

答案2

-j DNAT --to-destination 127.0.0.1:80正在重定向客户端以查看自己的网页环回地址。

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

相关内容