大家先回顾一下我之前发的“ACL中的established选项”中关于TCP的内容。
之前说过,TCP建立连接的三次握手过程中,一方向另一方发送的第一个报文设置了SYN位,当某台设备接收到一个请求服务的初始报文时,该设备响应这个报文,发回一个设置了SYN和ACK位的报文,并等待源端来的ACK应答。那么,如果发送方并不回复ACK,主机就会因为超时而结束连接。当主机在等待这个连接超时的过程中,连接处于半开(Half-open)状态,半开连接消耗了主机的资源。在等待三次握手过程中耗尽主机资源就形成了SYN攻击,尤其是将成千上万的SYN发往某台主机,则该主机将很快崩溃掉。
这时我就需要在路由器上配置TCP拦截(TCP intercept)来防止这种攻击了。
在TCP连接请求到达目标主机之前,TCP拦截通过对其进行拦截和验证来阻止这种攻击,也就是说,路由器会代替主机进行连接。
TCP拦截(TCP intercept)可以在两种模式上工作:拦截和监视。在拦截模式下(intercept mode),路由器拦截所有到达的T C P同步请求,并代表服务器建立与客户机的连接,并代表客户机建立与服务器的连接。如果两个连接都成功地实现,路由器就会将两个连接进行透明的合并。路由器有更为严格的超时限制,以防止其自身的资源被S Y N攻击耗尽。在监视模式下(watch mode),路由器被动地观察half-open连接的数目。如果超过了所配置的时间,路由器也会关闭连接。ACL则用来定义要进行TCP拦截的源和目的地址。www.glzy8.com
基本配置命令:
ip tcp intercept mode {intercept/watch} '设置TCP拦截的工作模式,默认是intercept。
ip tcp intercept list ACL编号 '调用ACL(扩展的)用来定义要进行TCP拦截的源和目的地址。
其他命令:
当一个路由器因为其所定义的门限值被超出而确认服务器正遭受攻击时,路由器就主动删除连接,直到half-open的连接值降到小于门限值。默认关闭的是最早的连接,除非使用了“ip tcp intercept drop-mode random”命令(随机关闭半开连接)。当所设置的门限值被超时时,路由器进行下面的动作:
1) 每一个新的连接导致一个最早的(或随机的)连接被删除。
2) 初始的重传超时时间被减少一半,直到0.5秒。
3) 如果处于监视模式,则超时时间减半,直到15秒。
有两个因素用来判断路由器是否正在遭受攻击。如果超过了两个高门限值中的一个,则表明路由器正遭受攻击,直到门限值已经降至两个低门限值以下。下面显示了有关的参数及其默认值,并对其加以简单描述。
1) ip tcp intercept max-incomplete high number 1100
在路由器开始删除连接之前,能够存在的half-open连接的最大数目。
2) ip tcp inercept max-incomplete low number 900
在路由器停止删除half-open连接之前,能够存在的最大half-open连接数目。
3) ip tcp intercept one-minute high number 1100
在路由器开始删除连接之前,每分钟内能存在的最大half-open连接数目。
4) ip tcp intercept one-minute low number 900
在路由器停止删除连接之前,每分钟内能存在的最小half-open连接数目。
[Ok3w_NextPage]half-open连接总数与每分钟half-open连接的数量比率是相联系的。任何一个最大值到达,T C P拦截就被激活并且开始删除half-open连接。一旦TCP拦截被激活,这两个值都必须下降到TCP拦截的低设置值,以便停止删除连接。
注意:
拦截模式下,路由器响应到达的SYN请求,并代替服务器发送一个响应初始源IP地址的SYN、ACK报文,然后等待客户机的ACK。如果收到 ACK,再将原来的SYN报文发往服务器,路由器代替原来的客户机与服务器一起完成三次握手过程。这种模式会增加路由器的内存和CPU的额外开销,并且增加了一些初始会话的延时。
在监视模式下,路由器允许SYN请求直接到达服务器。
如果这个会话在30秒钟内(默认值)没有建立起来,路由器就给服务器发送一个RST,以清除这个连接。