Iptables 정방향 가닥 및 DNAT를 이해하는 데 도움

Iptables 정방향 가닥 및 DNAT를 이해하는 데 도움

필터 테이블의 모든 체인 DROP으로 iptables가 구성된 서버가 있습니다.

eth0 :- 10.0.0.2 [ Intranet assume as LAN ]
eth2 :- 172.16.0.2 [ External clients assume as WAN ]

이제 제가 달성하고 싶은 것은 클라이언트[172.16.0.1]가 172.16.0.2에서 포트 80을 HIT할 때 내부 LAN IP 10.0.0.100으로 연결되어야 한다는 것입니다.

나는 동일한 [INPUT, OUTPUT, FORWARD 전략은 필터 체인에 드롭]을 구성했습니다.

iptables  -A INPUT -s 172.16.0.1/32 -d 172.16.0.2/32 -i eth2 -p tcp -m tcp --dport 80 -j ACCEPT
iptables  -A FORWARD -s 172.16.0.1/32 -j LOG --log-prefix "** TRACING FORWARD CHAIN **" 
iptables  -A FORWARD -s 172.16.0.1/32 -d 10.0.0.100/32 -i eth2 -o eth0 -j ACCEPT
iptables  -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables  -t nat -A PREROUTING -s 172.16.0.1/32 -d 172.16.0.2/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.100:80

net.ipv4.ip_forward = 1존재하다sysctl.conf

로그에서:

[17385.347409] ** TRACING FORWARD CHAIN **IN=eth2 OUT=eth0 MAC=xxxxxxxx SRC=172.16.0.1 DST=10.0.0.100 LEN=48 TOS=0x00 PREC=0x00 TTL=127 ID=9864 DF PROTO=TCP SPT=52874 DPT=80 WINDOW=8192 RES=0x00 SYN URGP=0

이제 전달 정책을 설정하면 작동하지만 전달 삭제 정책에서는 작동하지 않습니다.

따라서 누구든지 포워드 정책과 포워드 정책에 어떤 규칙을 추가해야 하는지 이해하도록 도와줄 수 있습니까?

답변1

이것은 실제로 의미가 없습니다.

iptables  -A OUTPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

~해야 한다

iptables  -A FORWARD -m state --state ESTABLISHED -j ACCEPT

그리고 첫 번째 FORWARD 규칙이어야 합니다. 로깅은 아마도 새로운 연결로 제한되어야 합니다.

iptables  -A FORWARD -s 172.16.0.1/32 -m conntrack --ctstate NEW -j LOG --log-prefix "** TRACING FORWARD CHAIN **"

편집 1

시스템이 10.0.0.100에 대한 게이트웨이(기본 게이트웨이 또는 최소한 172.16.0.0에 대한 게이트웨이)가 아닌 경우 SNAT도 필요합니다.

iptables -t nat -A POSTROUTING -s 172.16.0.1/32 -d 10.0.0.100 -j SNAT --to-source 10.0.0.x # the eth0 IP

tcpdump를 사용하여 eth0을 통해 시스템에서 나가는 패킷과 반환되는 패킷을 검사합니다.

관련 정보