Linux内核中提供了SYN Cookie的检验机制,用来防御SYN Flood攻击。因此,延伸出来的在SYN Cookie Firewall,用来验证SYN连接,并对通过验证报文进行转发。
具体的内容可以参考《 SYN Cookie原理及其在Linux内核中的实现》
http://www.ibm.com/developerworks/cn/linux/l-syncookie/index.html
使用syn cookie检验机制的Firewall,实际上相当于一个syn proxy。它会代替server对client三次握手,对syn报文进行cookie验证,然后再将client初始的syn报文发给server,并做三次握手。这个过程中,很明显client记录的server的seq实际上firewal初始的seq。
如下图所示:
因此,Firewall就要负责这个序列号在client和server交互的报文之间进行转换(维护一个差值),直到这个连接结束。
这里的问题如下:
通常情况下,Firewall对于多个syn连接处理的时候,FW是不是就得维护多个差值。 这样的话是不是需要记录连接的五元组,并且维护一个hash表。这个hash表应该包含那些内容呢?