ローカル Web サーバーへの IPTables DNAT ルールが localhost では機能しないのはなぜですか?

ローカル Web サーバーへの IPTables DNAT ルールが localhost では機能しないのはなぜですか?

ワイヤレス アクセス ポイントとして機能する Linux ボックスがあります。ワイヤレス クライアントは接続して Web を閲覧します。ポート 80 のみを許可しています。

ブロックしたいサイトがいくつかありますが、パケットをドロップするのではなく、ローカル Web サーバーによって提供される blocked.html ページにリダイレクトします。

NIC が 2 つあります。インターネット側の NIC は 10.0.2.15 にバインドされています。インターネット NIC を使用してトラフィックを Web サーバーにリダイレクトする DNAT ルールを実行すると、ページが返されます。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

localhost の場合は、DNAT の代わりに REDIRECT を使用する必要があります。例:

-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クライアントをリダイレクトして、Web ページの独自のループバック アドレスを参照します。

続ける-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 10.0.2.15:80

関連情報