![로컬 웹 서버에 대한 IPTables DNAT 규칙이 localhost에서 작동하지 않습니까?](https://linux55.com/image/38268/%EB%A1%9C%EC%BB%AC%20%EC%9B%B9%20%EC%84%9C%EB%B2%84%EC%97%90%20%EB%8C%80%ED%95%9C%20IPTables%20DNAT%20%EA%B7%9C%EC%B9%99%EC%9D%B4%20localhost%EC%97%90%EC%84%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
무선 액세스 포인트 역할을 하는 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