TCP建立连接的三次握手过程中,客户机向
服务器发送的第一个报文设置了SYN位,当
服务器接收到一个请求服务的初始报文时,
服务器响应这个报文,发回一个设置了SYN和ACK位的报文,并等待客户机来的ACK应答。那么,如果客户机并不回复ACK,
服务器就会因为超时而结束连接。当
服务器在等待这个连接超时的过程中,连接处于半开(Half-open)状态,半开连接消耗了
服务器的资源。在等待三次握手过程中耗尽
服务器资源就形成了SYN攻击,尤其是将成千上万的SYN发往某台
服务器,则该
服务器将很快崩溃掉。
如果路由器上配置TCP拦截(TCP
intercept),在TCP连接请求到达
服务器之前,TCP拦截通过对TCP连接请求进行拦截和验证来阻止这种攻击,也就是说,路由器会代替
服务器进行连接。
TCP拦截(TCP intercept)可以在两种模式上工作:拦截和监视。在拦截模式下(intercept mode),路由器拦截所有到达的TCP同步请求,并代表
服务器建立与客户机的连接,并代表客户机建立与
服务器的连接。如果两个连接都成功地实现,路由器就会将两个连接进行透明的合并。路由器有更为严格的超时限制,以防止其自身的资源被SYN攻击耗尽。拦截模式会增加路由器的
内存和
cpu的额外开销,并且增加了一些初始会话的延时。在监视模式下(watch mode),路由器允许SYN请求直接到达
服务器。路由器被动地观察half-open连接的数目,如果超过了所配置的时间,路由器也会关闭连接。ACL则用来定义要进行TCP拦截的源和目的地址。