版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
http://windtear.net/2009/10/iptables_drop_reset.html 一个真实的例子 由于可能触发了什么东西 A到B的数据交互会被一个抢先的RST回应干扰
简单解决是忽略这种类型的全部 RST 包
iptables -I INPUT -p tcp –tcp-flags SYN,FIN,RST,URG,PSH RST -j DROP
pkts bytes target prot opt in out source destination
0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x2F/0x04
顺便复习备忘下
1 SYN
14+20+20+20(options)
eth 6+6+2 dstmac+srcmac+0800
ip 45+ds+2ip.len(60)+2ip.id+flags(DF 0x04).2frag_offset+ttl+proto tcp 06+2checksum+src+dst
tcp 2srcport+dstport+4seq+4+1hdr_len+1flags(0x02syn 04rst 10ack)+2window+2checksum+2+options
options 4mss+2sack(04 02)+10timestamp+1nop+7window_scale
seq=0 mss=1460 04c751df
2 SYN+ACK
tcp
seq=0 ack=1 len=0 0540780e 04c751e0
1flags(0x12 syn+ack)
3 ACK
tcp 20+12(1nop+1nop+10timestamp)
1flags(0x10 ack)
seq=1 ack=1 04c751e0 0540780f
4 PSH+ACK
ip ip.len=169
tcp len=117
seq=1(next118 169-20-32=117) 04c751e0 0540780f
1flags(0x18 psh+ack) tcp segment data=117
5 RST
ip 2ip.len(52) flags(DF 0x00)
tcp
seq=1 0540780f ack(04c75255)
flags(0x04 RST ack not set)
6 ACK
tcp
seq=1 ack=118
1flags(0x10 ack)
7 RST
ip 2ip.len(40) flags(DF 0x04)
tcp seq=118 04c75255 ack(00000000)
flags(0x04 RST)
1 2 3 syn syn+ack ack
4 PSH+ACK (GET …)
6 ACK
由于5 抢先 RESET 只好 7 RESET
解决:
忽略异常RESET包 (不包括端口未开放的RST+ACK)
iptables -I INPUT -p tcp –tcp-flags SYN,FIN,RST,URG,PSH RST -j DROP
pkts bytes target prot opt in out source destination
0 0 DROP tcp — * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x2F/0x04