我有一个 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