我有一台服务器,其中 iptables 配置了过滤器表中的所有链 DROP
eth0 :- 10.0.0.2 [ Intranet assume as LAN ]
eth2 :- 172.16.0.2 [ External clients assume as WAN ]
现在我想要实现的是,当 client[172.16.0.1] HIT Port 80 On 172.16.0.2 时,它应该 nat 到内部 LAN IP 10.0.0.100。
我已经配置了实现相同的[INPUT,OUTPUT,FORWARD策略是Drop in Filter Chains]
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 离开系统以及哪些数据包返回。