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