如何忽略RESET报文
答案:1 悬赏:30 手机版
解决时间 2021-04-19 13:08
- 提问者网友:愿为果
- 2021-04-18 15:16
如何忽略RESET报文
最佳答案
- 五星知识达人网友:第幾種人
- 2021-04-18 16:32
我们知道,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报文,那么两边的通讯就会正常了。
这时,客户端浏览器看到的现象通常是,打开某一个网页,浏览器提示“连接被重置”而无法查看页面。
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报文,那么两边的通讯就会正常了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯