로컬 웹 서버에 대한 IPTables DNAT 규칙이 localhost에서 작동하지 않습니까?

로컬 웹 서버에 대한 IPTables DNAT 규칙이 localhost에서 작동하지 않습니까?

무선 액세스 포인트 역할을 하는 Linux 상자가 있습니다. 무선 클라이언트가 웹에 연결하고 탐색합니다. 포트 80만 허용합니다.

특정 웹사이트를 차단하고 싶지만 패킷을 삭제하는 것이 아니라 로컬 웹 서버에서 제공하는 Blocked.html 페이지로 리디렉션하여 차단하고 싶습니다.

네트워크 카드가 두 개 있습니다. 인터넷 끝은 10.0.2.15에 바인딩되어 있습니다. 인터넷 NIC를 사용하여 웹 서버로 트래픽을 리디렉션하는 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클라이언트를 리디렉션하여 자신의 웹 루프백 주소를 확인합니다.

~을 고집하다-A block-chain -d 206.190.36.45/32 -p tcp -j DNAT --to-destination 10.0.2.15:80

관련 정보