月光博客 » 互联网络 » 防火墙技巧——忽略RESET报文

防火墙技巧——忽略RESET报文

  我们知道,IDS(入侵检测系统)的主动响应系统“阻止会话”的机制是:IDS将会向通信的两端(服务器端和客户端)各发送三个TCP RESET包,此时通信双方的堆栈将会把这个RESET包解释为另一端的回应,然后停止整个通信过程,释放缓冲区并撤销所有TCP状态信息,从而实现主动切断连接的目的。

  这时,客户端浏览器看到的现象通常是,打开某一个网页,浏览器提示“连接被重置”而无法查看页面。

  IDS在逻辑上是与路由器分离的,很难从路由传输队列中去除或者延迟“有害”报文,通过RESET关闭连接相对较为简单而易于实现,那么,如何绕过IDS“会话阻止”机制呢?

  标准的TCP协议,客户端收到RESET包后会中断连接,但是,如果终端两边的节点同时忽略TCP RESET,那样,即使触发了IDS,防火墙也对HTTP传输没有任何影响,这就通过忽略RESET包实现了突破IDS的“会话阻止”功能。

  在Linux可以用iptables的此命令实现:

  iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP

  来丢弃传入的RST置位报文。如果是FreeBSD的ipfw那么命令是这样的:

  ipfw add 1000 drop tcp from any to me tcpflags rst in

  因此,在网页传输过程中,可以将中间夹杂的一些防火墙的TCP复位报文完全忽略,因为它们对客户端的TCP/IP栈没有任何影响,客户端仍然继续接收网页。

  以上思路翻译自Ignoring the Great Firewall of China,点这里可以下载其PDF文件,原文很长,内容较多。我自己在Ubuntu系统上,在终端中使用iptables测试,的确可以实现忽略客户端RESET报文的功能,Firefox浏览器再也没有出现“连接被重置”的信息,可惜由于服务器端RESET信号没有被忽略,导致客户端不能与服务端同步握手,浏览还是有问题,不过,如果服务器段都可以识别并忽略这些伪造的RESET报文,那么两边的通讯就会正常了。

防火墙技巧——忽略RESET报文

顶一下 ▲()   踩一下 ▼()

相关文章

  1. 1
    skymountain   说道:
    正在寻找这样的方法呢,谢谢!
    处于安全性考虑,大型的商用服务器使用这样的方法不太可能,但网友自行架设的服务器,完全可以采取这种方法。
    支持(18反对(5回复
  1. 2
    blambin   说道:
    现在好像改了,变成"连接超时"了,不是原来那个"重置"了
    支持(16反对(8回复
  1. 3
    呵呵   说道:
    另外好像google搜索 ”Ignoring the Great Firewall of China“ 这个关键词会被 墙
    支持(15反对(8回复
  1. 4
    Tydus   说道:
    这是2006年还是多早以前《如何忽略xxxx》中的简易做法吧?之后还有很多新技术比如说西x厢这样的其实效果很好
    支持(12反对(5回复
  1. 5
    音乐天堂   说道:
    没意思,被Gfwed的服务器又不可能去设置忽略REST
    支持(18反对(12回复
  1. 6
    d   说道:
    google会忽略来自GF-W-的reset吗?
    支持(13反对(8回复
  1. 7
    ooxx   说道:
    最好的办法不是技术上的。
    而是改造人的思想观念。

    支持(14反对(9回复
  1. 8
    Lony   说道:
    有点意思,占个位置慢慢看。
    支持(15反对(11回复
  1. 9
    两个博客   说道:
    这篇有点难度了。看不懂,支持一下
    支持(13反对(10回复
  1. 10
    olobby   说道:
    很不错,学习了哦
    支持(9反对(6回复

发表留言