« pac 代理脚本与 IE Firefox Chrome 浏览器 | Main | 2009年最新版个人所得税计算器1 (7月前有效 基数9966 失业0.2%) »
October 11, 2009
用 iptables 解决某些时候抢先应答的 RST 造成的异常中断: 忽略RESET 保证数据畅通
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。 https://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 |
Posted by windtear at October 11, 2009 10:36 PM