Hunter的大杂烩 技术学习笔记

June 8, 2012

用 iptables 解决某些时候抢先应答的 RST 造成的异常中断: 忽略RESET 保证数据畅通

Filed under: 技术话题 — hunter @ 6:02 pm

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。
 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

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress