IPtables가 예상대로 작동하지 않음: PREROUTING에서 DNAT를 사용하여 응답 패킷이 예상대로 DNAT 처리되지 않습니다.

IPtables가 예상대로 작동하지 않음: PREROUTING에서 DNAT를 사용하여 응답 패킷이 예상대로 DNAT 처리되지 않습니다.

내 서버(다음 iptables규칙이 로드됨)에는 IP가 있습니다 192.168.3.110. 내 LAN에 IP가 있는 다른 컴퓨터가 있습니다 192.168.3.106. 포트 80의 서버 요청을 192.168.3.106.

iptablesCentOS 7 서버에 다음 파일이 로드되어 있습니다.


*nat
:PREROUTING DROP
:INPUT DROP
:OUTPUT DROP
:POSTROUTING DROP

-A PREROUTING -m state --state RELATED,ESTABLISHED -j ACCEPT
-A PREROUTING -p tcp -m state --state NEW --dport 22 -j ACCEPT
-A PREROUTING --dst 192.168.3.110 -p tcp --dport 80 -j DNAT --to-destination 192.168.3.106
-A PREROUTING -i lo -j ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
-A INPUT -i lo -j ACCEPT

-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
-A OUTPUT --dst 192.168.3.110 -p tcp -m state --state NEW --dport 80 -j DNAT --to-destination 192.168.3.106
-A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

-A POSTROUTING -m state --state RELATED,ESTABLISHED -j ACCEPT
-A POSTROUTING -p tcp -m state --state NEW --dport 22 -j ACCEPT
-A POSTROUTING --src 192.168.3.0/24 --dst 192.168.3.106 -p tcp --dport 80 -j SNAT --to-source 192.168.3.110
-A POSTROUTING -o lo -j ACCEPT

COMMIT

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
-A INPUT -i lo -j ACCEPT

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m state --state NEW --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

-A OUTPUT -p tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -j ACCEPT
-A OUTPUT -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

COMMIT

기본적으로 나는 다음을 수행하고 있습니다(적어도 나는 그렇게 이해합니다).

  • SSH 활성화

  • 포트 80에서 TCP 활성화

  • DNAT 및 SNAT 패킷을 통해 원하는 동작을 달성할 수 있었습니다.

질문:서버에서 자체 호출을 할 때 왜 192.168.3.110응답을 받는지 이해할 수 없습니다.

이것이 이 경우에 작동해야 한다는 것을 이해하는 방법입니다.

  1. curl http://192.168.3.110- IP를 사용하여 내 서버에서 이 작업을 수행하고 있다는 점을 잊지 마세요.192.168.3.110
  2. 패킷은 nat 테이블에서 OUTPUT 체인으로 이동하며, 여기서 DNAT로 표시됩니다.
  3. 패킷은 nat 테이블에서 POSTROUTING 체인으로 이동하여 SNAT가 됩니다.
  4. 내 Apache는 에서 왔고 192.168.3.106내 요청에 응답하고 있습니다.
  5. 패킷이 DNATed되어야 하는 nat 테이블의 PREROUTING 체인에 도달하고 있습니다.
  6. 패킷은 전달되어 어딘가에 던져집니다.

5, 6을 제외하면 모든 것이 예상대로 작동하는 것 같습니다. 즉, 서버로부터 응답을 받습니다.내 논리가 어디에서 깨졌는지 설명할 수 있는 사람이 있나요?

답변1

iptables nat 테이블은 (의사) 연결의 첫 번째 패킷에 대해서만 통과됩니다. 후속 패킷은 첫 번째 패킷에 의해 설정된 매핑에 따라 매핑(또는 유지)됩니다.

관련 정보