2015年6月12日星期五

iptables高级应用——防止异常的RST打断VPN连接

由于异常的RST进入了VPN服务器和VPN客户端,VPN连接可能因此中断。该异常的RST经常在受到网络审查的地区出现,通常紧跟在SYN之后极短的时间之内出现,如果无SYN发出则不会出现,说明该RST来自BRAS或者骨干网,并不是服务器所发送的。网络审查系统通常设计得很差,由于担心消耗过多的计算资源,无法实现RST紧跟着ACK之前到来,所以一般人很容易分析出该RST必然是假的。不过由于收到了ACK,我们知道VPN连接是有可能建立起来的,只是由于RST的干扰导致的中断。前面提到的Internet协议(TCP/IP)增强技术在Windows下难以实现,我们一般选择使用OpenWrt路由器实现。在防火墙自定义规则中,我们添加了如下规则:
iptables -t mangle -A PREROUTING -p tcp --tcp-flags RST RST -j DROP
经过测试,我们发现VPN客户端收不到RST数据包了,但是VPN仍然断了。仔细排查之后发现服务器竟然收到了RST,看来网络审查系统是双向发伪RST包的,后来我们又在服务器端也配置了同样的规则。双方都受到保护之后VPN连接很容易就建立了起来,在此过程中防火墙一直在报警说收到了RST包,数量非常多,比正常数据包都要多几倍,可见网络审查系统非常愚钝,发了这么多没用的RST数据包还在发,徒然浪费资源还不如去审查别人去。

没有评论:

发表评论