Iptable이 예상대로 작동하지 않음: PREROUTING의 DNAT를 사용하여 응답 패키지가 예상대로 DNATed되지 않음

Iptable이 예상대로 작동하지 않음: PREROUTING의 DNAT를 사용하여 응답 패키지가 예상대로 DNATed되지 않음

내 서버(아래 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 체인으로 이동하며, 여기서 DNATed됩니다.
  3. 패킷은 NAT 테이블에서 POSTROUTING 체인으로 이동하며, 여기서 SNAT가 발생합니다.
  4. 내 Apache가 192.168.3.106내 요청에 응답하고 있습니다.
  5. 패킷이 DNATed되어야 하는 nat 테이블의 PREROUTING 체인에 도달하고 있습니다.
  6. 패킷이 전달되어 어딘가에 던져집니다.

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

답변1

iptables nat 테이블은 (유사) 연결의 첫 번째 패킷에 대해서만 통과됩니다. 이후 패킷은 첫 번째 패킷에 의해 설정된 매핑에 따라 매핑되거나 단독으로 유지됩니다.

관련 정보