필터 테이블의 모든 체인 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을 통해 시스템에서 나가는 패킷과 반환되는 패킷을 검사합니다.