Cisco防火墙DoS防护
Last updated
Last updated
针对TCP SYN洪水攻击的一个处理方法是部署Cisco IOS TCP拦截功能。TCP拦截是处理针对 TCP连接建立绘画的三段握手协议落点引发的攻击。
TCP SYN洪水攻击是非常容易实现的黑客攻击,针对每个连接的三段握手发出大量准备完成的TCP SYN请求,典型是采用IP欺骗,即伪造每个数据包的源地址(无效地址或实际是其他人使用的地址),这样服务器需要承担巨量的半开放连接,直到连接TCP超市才能够释放。这将导致服务器拒绝正常的TCP连接。
TCP Intercept是Cisco IOS功能,用于防止TCP SYN flood attack。支持两种模式保护:intercept 和 watch。
拦截模式采用主动处理TCP SYN洪水攻击
在拦截模式
(Intercept Mode)下,路由器会拦截所有的TCP连接请求。当外部用户尝试使用TCP连接访问一个内部服务器是,路由器会拦截请求并假装自己就是内部服务器,以便能够完成和外部用户的完整TCP连接。(步骤1~3)
当路由器和外部用户间完整的三段握手成功结束,路由器就会发起第二个TCP连接到后端真实服务器(步骤4~6)。然后路由器捆绑这两个连接,创建一个单一连接。(步骤7)
大多数情况,这个处理过程对最终TCP连接的两端设备是完全透明的。通过这种主动方式,如果发生了TCP SYN洪水攻击,路由器提供一个到内部服务器的缓存,这样内部服务器就不会受到攻击:路由器会处理半开放连接,在time out时从路由器TCP连接表中移除连接。基本上,路由器发送一个RST给请求源设备。这意味着,正常请求将持续被路由器允许,这样正常的外部用户就可以完成三段握手。
注意
在拦截模式下有一个限制,就是任何TCP参数协商都是在外部用户和路由器之间完成的,例如 RFC 1323 window scaling,是不会从路由器传递给内部TCP服务器。这是因为路由器是不知道这些TCP选项的,直到第一次和外部用户的三段握手完成并且路由器开始和内部TCP服务器发起第二次三段握手。通常,这个限制并不会导致问题,因为TCP允许在会话的常规操作中动态协商这些参数。
和拦截模式采用了一种主动处理TCP SYN洪水攻击的方式不同,查看模式
(Watch Mode)采用一种被动处理(reactive approach)方式。在拦截模式下的主要优点是去除了内部服务器受到TCP SYN洪水攻击导致的负载增大,但是,这种方式也是双刃剑。当TCP SYN flood不再发生的时候,路由器仍然在执行拦截处理,导致在路由器上沉重的负担。
为避免这个问题,另外一种Watch模式采用了被动处理TCP SYN flood攻击的方式。路由器被动地观察用户到服务器的TCP连接的建立。此时路由器会监控这些连接,跟踪这些处于待定状态的初始连接。然后路由器比较一个预先配置的timeout值(默认是30秒)。如果一个TCP连接在这个时间范围内没有完成TCP三段握手,Cisco IOS就发送一个TCP reset给服务器来移除这个连接。对于一个针对内部服务器的TCP攻击,这就移除了半开放连接,降低了服务器负载以便服务器能够处理正常的连接。
激活TCP Intercept
第一步是指定TCP会话设置TCP Intercept:
注意这个命令是全局配置模式,不是子啊接口配置
使用一个扩展ACL来指定哪种流量采用TCP Intercept。例如,如果要监控所有TCP创建连接,则使用如下命令:
通常这个配置是一个非常糟糕的,因为路由器变成了所有进出连接的代理
正确的设置是针对应用服务设置TCP Intercept,例如邮件服务器或者WEB服务器,设置只监控端口25流量和80端口流量的TCP Intercept。这样可以大大降低路由器监控的TCP连接数量。
定义模式
更改计时器
对于萌芽计时器,连接重置计时器和连接idle计时器,有3个配置命令
修改阀值
在拦截和观察模式,TCP Intercept使用阀值来处理TCP SYN洪流攻击的超出的TCP连接:一个基于初始连接的总数量,一个基于在最近一分钟内连接请求数。
当阀值达到时,路由器将丢弃最老的初始连接。在拦截模式时,路由器通过减半
方式降低初始SYN字段的超时重传时间。在Watch模式,路由器则按照配置值的一半自动降低watch时间(例如你配置30秒,则变成15秒)。
修改丢弃模式:
检查拦截的连接统计:
Cisco ASA TCP SYN Checks - 提供通过ACL方式构建针对某段IP地址不检测TCP SYN,如果发现ASA影响了正常业务(如随机SYN丢包)可以尝试通过排除方法,暂时关闭特定业务IP段的TCP SYN检查来对比排查。