로컬 웹 서버에 대한 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

관련 정보