月光博客 » 互联网络 » 防火墙技巧——忽略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报文,那么两边的通讯就会正常了。

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

相关文章

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

    支持(12反对(9回复
  1. 12
    呵呵   说道:
    这种策略把正常的RST也忽略了,因为服务器端也有可能发出rst的。逃避 墙 的方法恐怕不会太简单
    支持(11反对(9回复
  1. 13
    死的蚊   说道:
    魔高一尺,道什么来着?
    哈哈~
    支持(11反对(9回复
  1. 14
    xieguozhong博客   说道:
    学习了.............
    支持(10反对(8回复
  1. 15
    WordPress啦   说道:
    安装卡巴,防火墙到很少注意过
    支持(7反对(6回复
  1. 16
    子豆   说道:
    忽略收到的RST是没有的,G*F*W没那么弱智
    G*F*W是状态检测的(虽然不是严格的),这是它的优点也使它的弱点
    以其人之道还治其人之身,它用RST欺骗你的时候,你也可以利用他的弱点欺骗它
    你搜"f*a*l*u*n",就欺骗它你在搜"falv",但服务知道你真正需要搜什么
    支持(11反对(10回复
  1. 17
    卢松松博客   说道:
    我也来占个位置 O(∩_∩)O哈哈~
    支持(8反对(8回复
  1. 18
    仲和   说道:
    技术文章是不会有人气的。。。

    不过有效期比较长。。。
    支持(12反对(12回复
  1. 19
    护肤养颜   说道:
    不是这个专业的,确实没看懂。。
    支持(9反对(9回复
  1. 20
    我心疯狂   说道:
    学习ing...
    支持(9反对(9回复
  1. 21
    mimzyx   说道:
    看不懂。太专业了
    支持(8反对(9回复
  1. 22
    unixhater   说道:
    普及G*F*W,人人有责
    支持(9反对(10回复
  1. 23
    bytea   说道:
    是否讨论一下忽略reset对服务器的潜在威胁?
    支持(7反对(9回复
  1. 24
    园子   说道:
    不错的学习资料

    呵呵。
    支持(8反对(10回复
  1. 25
    sh89   说道:
    一个思路:有没有可能自动分辨出reset报文 如果可行的话 可以写一个自动代理的软件 检测到reset报文 就自动调用代理
    支持(4反对(6回复
  1. 26
    y2m3   说道:
    本方忽略rst报文貌似没用,因为是rst报文的传递是双方的。。。
    但若双方都忽略,又会产生其他的后果。服务端势必不会这样做。。
    所以说这个技巧只是理论上的。
    支持(12反对(15回复
  1. 27
    星光居士   说道:
    教学相长,呵呵。
    支持(7反对(12回复
  1. 28
    电信员工   说道:
    有一段时间电信封路由上网就是类似这种办法,向客户端发一个假的http response,比真正的response快就,可以用iptables的string过滤……
    支持(8反对(14回复
  1. 29
    Hobo   说道:
    没研究过网络协议之类的东西
    支持(9反对(17回复
  1. 30
    show   说道:
    忽略RESET的意思就是该释放的资源被你占着不放;必须释放的连接你又抓着不放;
    支持(10反对(22回复

发表留言