白皮书

F5 DDoS防护:推荐实践(卷 1)

Updated December 29, 2013
  • Share via AddThis

1 概念

分布式拒绝服务 (DDoS) 是当今许多企业最为关切的问题,从知名的金融行业品牌到服务提供商,无一不是如此。资历丰富的管理员都了解,F5 的设备不仅是缓解 DDoS 攻击的最佳帮手,在某些情况下,还是唯一能够缓解某类 DDoS 的设备。而很多管理员却并不知道,借由配备更多的 F5 产品,可以打造完备的本地 DDoS 解决方案。

DDoS 攻击有可能成为很棘手的问题,其中会牵扯部分网络会变得无法响应,很多设备可能会出现故障。然而,规划防御并非此种情况的解决之道,而是要在“和平年代”,“武装好”网络应用,才会对缓解日后的攻击发挥显著作用。

本指南假设您已经具备 F5 网络解决方案和选用的 F5 安全解决方案。

除非另有说明,否则所有配置、命令和平台均认定为 TMOS 11.3.0。

尽管大部分技术信息特指 F5 设备,但其中一些策略(如使用 SNAT 池避免端口耗尽)也可能适用于其他供应商设备。

2 防御 DDoS 的架构

建立防御 DDoS 的应用交付网络并非毫无可能。本节会探讨在攻击发生之前可以做好哪些预防工作,从而使网络和应用可以实现迅速恢复。

2.1 F5 推荐的架构

图 1:F5 建议两级 DDoS 方式

许多企业正在重新设计用于防御 DDoS 的架构。F5 建议多数客户可采用两级 DDoS 解决方案,其中第一级(外围)由部署第 3 层和第 4 层网络防火墙和简单的负载均衡设置所组成,第二级会涉及比较复杂(同时会更占用更多 CPU)的服务,包括 SSL 终止和部署 Web 应用防火墙。

双层方法的几点好处如下:

  • 隔离缓解措施,使第 3 层和第 4 层在第 1 级得到缓解,而应用保护则在第 2 级。
  • 各级之间可以独立进行扩展。例如,如果 WAF 使用量增加,可以在不影响第一级的情况下,将其他设备(或刀片)添加到第二级。
  • 层级可以有不同的平台类型,甚至是不同的软件版本。
  • 当新策略应用于第二级时,第一级可以只将一部分流量引导至新策略,直到新策略得到完全验证。
  第 1 级 第 2 级 DMZ
F5 组件 AFM + LTM LTM + ASM GTM DNS Express
OSI 模型 第 3 层 + 第 4 层 第 7 层 + DNS
功能 网络防火墙 SSL 终止  
第一级负载均衡设置 Web 应用防火墙 DNS 解析
IP 信誉阻断列表 均衡设置  
缓解攻击 SYN 洪水 Slowloris 攻击  
ICMP 洪水 Slow-post UDP 洪水
格式错误的数据包 Apache Killer DNS 洪水
TCP 洪水 RUDY/Keep Dead NXDOMAIN 洪水
已知恶意攻击者 SSL 重协商 DNSSEC

2.2 第 1 级:网络防御

第一级是围绕网络防火墙而建。大概率来说,企业应该已经具备防火墙(不一定是 F5 品牌)和网络防火墙团队(或至少一个管理员)。在这一级,将围绕第 3 层和第 4 层(IP 和 TCP)准备防御措施。在 DDoS 攻击期间,这是缓解 SYN 洪水、TCP 洪水和阻止源地址的位置。

以下部分适用于第 1 级的设备,无论是 F5 AFM 防火墙模块还是 F5 LTM 负载均衡器(位于其他供应商网络防火墙前)。

2.2.1 选择虚拟服务器类型

在第 1 级使用 F5 防火墙 (AFM) 或 F5 负载平衡器 (LTM) 的企业可以选择如何构建自己的配置。有四种选项可以定义“侦听”对象。虽然所有选项均可以有效地部署配置,但在应对 DDoS 时,某些配置会具有独特的优势。

  • 全代理虚拟服务器是 F5 配置中的标准虚拟服务器。这些侦听器在启动到服务器的辅助连接之前,会与各传入的客户端建立真实的连接。在第二级被调用之前,终止和验证客户端连接的行为本身就可提供广泛保护。
  • 转发虚拟服务器具备更快的速度,而且防御 SYN 洪水的作用不会受到影响,但不能像全代理虚拟服务器,提供更广泛的保护级别。
  • 通配符虚拟服务器支持将防火墙规则与应用虚拟服务器分离。这就可以创建一个规则,表明“对于提供 FTP 服务的任何地址,应用此规则集、此镜像策略和此源 NAT 策略。”
  • 路由域会将重复的 IP 子网隔离到逻辑的独立路由表中,这是服务提供商环境中的常见做法。虽然路由域本身对防御 DDoS 的好处可以忽略不计,但可以起到保障第 4 层安全策略正常运行的作用。
图 2:通配符服务器可用于第 1 级

ltm virtual ws_ftp { destination 0.0.0.0:ftp ip-protocol tcp profiles { ftp { } tcp { } } translate-address disabled }

一般来说,如果 DDoS 重点关注的问题,则 F5 建议在第 1 级使用全代理或转发虚拟服务器

2.2.2 在第 1 级缓解 SYN 洪水

F5 可以百分百缓解 TCP SYN 洪水。在版本 11.5 中,F5 甚至可以缓解针对直接服务器返回 (DSR) 虚拟服务器的 SYN 洪水。如要核实 BIG-IP 是否有在管理 SYN 洪水防御,可以使用简单的 show 命令查看每个虚拟服务器的 SYN 洪水统计信息。

% tmsh show ltm virtual vip1
…

SYN Cookies

 Status full-software

 Hardware SYN Cookie Instances 0

 Software SYN Cookie Instances 2

 Current SYN Cache 0

 SYN Cache Overflow 0

 Total Software 432.2K

 Total Software Accepted 0

 Total Software Rejected 0

 Total Hardware 0

 Total Hardware Accepted 0

许多 F5 平台可以在硬件中缓解 SYN 洪水,从而支持主要流量转向 CPU 以执行其他任务。

 

平台 硬件 SYN/秒 版本
B4300 刀片 80M 11.3
B2100 刀片 40M 11.3
10200V 80M 11.3
10000S 40M 11.4
7200V 40M 11.4
7000S 20M 11.4
5200V 40M 11.4
5000S 20M 11.4
*旧版平台包括 8800、8400、6800 和 6400,也包括硬件 SYN Cookie 支持;但是,这些型号不受版本 11.3(具备该版本是本篇文章的论证基础)的支持。

表 1:SYN 洪水硬件支持平台列表

要为特定虚拟服务器启用 SYN 洪水缓解的硬件卸载,请创建具有更严格安全状态的 tcp 配置文件。此处示例设置了两个 DDoS 相关变量,可以启用硬件 SYN Cookie;还设置了 deferred-accept 变量,以减少“零窗口”TCP 攻击对虚拟服务器的影响。

% tmsh create ltm profile tcp tcp_ddos { hardware-syn-cookie deferred-accept 
enabled zero-window-timeout 10000 }

然后通过替换现有的“tcp”配置文件,将新的 tcp 配置文件与虚拟服务器关联。

% tmsh list ltm virtual vip1 profiles

% tmsh modify ltm virtual vip1 profiles replace-all-with { tcp_ddos my_ddos1 
http }

2.2.3 在第 1 级阻止 UDP 和 UDP 洪水

UDP 洪水是常见的 DDoS 途径,原因在于生成简单且难以防御。一般来说,除非虚拟服务器后方的应用主动接受 UDP 流量,否则会禁止虚拟服务器的 UDP 流量。

即使对于接受 UDP 的应用,UDP 洪水也会使系统不堪重负,因此可能会发生有必要暂时阻止应用虚拟服务器的 UDP 流量。

% tmsh create security firewall rule-list drop_udp { rules add { drop_udp_rule 
{ action drop ip-protocol udp place-after first } } }

% tmsh modify ltm virtual vip1 fw-rules { drop_udp_vip1 { rule-list drop_udp } 
} }

当攻击停止后,可以从虚拟服务器中删除规则。

利用对特例的精细化处理,11.5 版本可以监控和缓解 UDP 洪水。这使得 UDP 流量的基线可以通过第 1 级的虚拟服务器。如果 UDP 流量超过阈值,就会被丢弃,除非其符合八个用户定义的端口特例之一(如 RTSP 或 DNS)。

2.2.4 阻止 ICMP 洪水

ICMP 是另一种常见的 DDoS 途径。ICMP 碎片很容易生成,也易于遭到欺骗,可以占用许多不同类型网络设备的资源。

AFM 可以根据流量模式分析来区分正常量的 ICMP 和过量的 ICMP。当 AFM 的网络防火墙在虚拟服务器上启用时,将监控几种类型的流量是否有增加;将允许正常量的流量并禁止剩余过量流量。

2.2.5 使用 AFM 的 DDoS 设备配置文件

攻击者消耗防火墙资源的一种方式是发送大量特制的无效数据包。防火墙将需要查看(并记录)每个数据包。F5 发现,可疑的标记组合(如带空有效负载的 PSH+ACK)可能只有一个月的活跃期,随后便会遭到弃用而改用其他组合。

这种不断变化的形势使预测 L3/L4 攻击的难度加大。安全管理员(对于其他供应商的防火墙)应该留意此类攻击,并做好插入规则来阻止此类攻击的准备,同时防范使用多于正常需求的 CPU。

F5 的解决之道是将大部分的 L3/L4 协议验证转移到支持此协议的 TMOS 平台的自定义硬件逻辑中。默认情况下,AFM 模块会监测几十个第 3 层和第 4 层 DDoS 攻击途径(如泛滥的圣诞树数据包或 LAND 攻击数据包)。无论 BIG-IP 如何设置,几乎会丢弃所有上述数据包。当检测到上述数据包泛滥时,AFM 会发送一条特殊的日志消息。

表 1 展示了哪些 TMOS 平台支持硬件辅助的 L3/L4 协议验证。这些平台都是有 SYN 洪水硬件支持的平台。

所有平台(包括虚拟版)都允许管理追踪这些 L3/L4 可疑数据包泛滥的参数。在用户界面的“安全”选项卡中可以看到管理界面。然后选择 DoS Protection(DoS 防御)和 Device Configuration(设备配置)。

图 3:网络 DDoS 配置设置

这些设置也可以通过带有 security dos device-configcommand 的命令行来实现。另请注意:这些设置的依据是流量管理微内核 (tmm),而非平台。在表中,各列与这些值一一对应。

  • 检测阈值 PPS。这是 BIG-IP 系统用来判断是否发生攻击的每秒数据包数量(该攻击类型)。当每秒的数据包量超过阈值时,BIG-IP 系统就会记录并报告攻击,随后会继续每秒检查一次,只要超过阈值,就会将其标记为攻击。
  • 检测阈值百分比。这是指定攻击发生的百分比增加值。BIG-IP 系统会将当前速率与上一小时的平均速率进行比较。例如,如果上一个小时的平均速率是每秒 1000 个数据包,而您将百分比增加阈值设置为 100,则会检测到比平均速率高 100 百分比的攻击,即每秒 2000 个数据包。当超过阈值时,就会记录和报告攻击。然后,BIG-IP 系统会自动设置一个等于上一小时平均水平的速率限制,所有超过该限制的数据包都会被丢弃。BIG-IP 系统会继续每秒钟检查一次,直到传入的数据包速率降到百分比增加阈值以下。速率限制继续进行,直到速率再次降到指定的限制以下。
  • 默认内部速率限制。这是此类数据包不能超过的值,以每秒数据包为单位。所有超过阈值的此类数据包都会予以丢弃。速率限制会一直持续到速率再次降到指定限制以下。

2.2.6 缓解 TCP 连接洪水

TCP 连接洪水是第 4 层异常,可以影响网络上任何有状态的设备,尤其是防火墙。通常这些洪水是清空的实际内容。第一级的 LTM 或 AFM 可以通过将连接融合到高容量连接表中来进行缓解。

 

平台 TCP 连接表大小 SSL 连接表大小
VIPRION 4480 (4 X B4300) 1.44 亿 3200 万
VIPRION 4480 (1 X B4300) 3600 万 800 万
VIPRION 4400 (4 X B4200) 4800 万 500 万
VIPRION 4400 (1 x B4200) 1200 万 100 万
VIPRION 2400 (4 x B2100) 4800 万 1000 万
VIPRION 2400 (1 x B2100) 1200 万 250 万
11000 系列 2400-3000 万 264-390 万
10200 系列 3600 万 700 万
8900 系列 1200 万 264 万

 

平台 TCP 连接表大小 SSL 连接表大小
7000 系列 2400 万 400 万
6900 系列 600 万 66 万
5000 系列 2400 万 400 万
4200V 系列 1000 万 240 万
3900 系列 600 万 66 万
虚拟版本 300 万 66 万

2.2.7 配置自适应获取程序

即使是高容量的连接表,仍然可以通过调整设置来进一步加强针对洪水攻击的防御框架。

如果 BIG-IP 连接表确实已满,将根据自适应获取低峰和高峰设置来“截断”连接。这些设置可以从 85 和 95 的默认值向下调整,以便更快地开始缓解“高峰”DDoS,从而减少初始攻击加载服务器的窗口。

% tmsh modify ltm global-settings connection adaptive-reaper-lowater 75

2.2.8 修改空闲超时,应对空连接洪水

虽然第 4 层连接洪水通常不会对 F5 设备构成高风险,但这类洪水肯定会影响其他有状态的设备(如其他防火墙)。这些设备几乎总是会崩溃,而时间远远早于 F5 状态表达到饱和的时间(见章节 2.2.6 中的表 2)。如果连接洪水主要由空连接组成,则可以指示 BIG-IP 执行更严格的关闭空连接规则。

在 BIG-IP 上,有三个主要的配置文件与第 4 层相关:

  • fastL4:硬件辅助的高性能 TCP 配置文件
  • tcp:大多数虚拟服务器使用的标准 TCP 配置文件
  • udp:标准 UDP 配置文件

注意:也许还会有基于 tcp 或 udp 配置文件的其他文件(如与 WAN 优化相关)。

使用这些配置文件的以下属性来控制连接在由 BIG-IP 关闭之前的空闲时间。在攻击高峰期,使用的值会越来越小。

对于 fastL4 配置文件,会覆盖 reset-on-timeoutidle-timeout 值。默认的超时时间是 300 秒,这一数值应该会在攻击过程中得到大幅缩减。

 % tmsh create ltm profile fastl4 fastl4_ddos { reset-on-timeout disabled idle- timeout 15 }

对于每个受到攻击的 fastL4 虚拟服务器,请使用新配置文件替换 fastL4 配置文件。

对于 tcp 配置文件,出于同样的原因,会覆盖同样的两个值。如果遇到这种情况,可能还要调整 hardware-syn-cookie zero-window-timeout 值。请参见章节 2.2.2。

对于 udp 配置文件,只需减少 idle-timeout 值(默认为 60 秒)。

2.2.9 控制速率整形

另一种可以快速部署的防御技术是速率整形。速率整形可以限制 BIG-IP 的入口流量速率,也是抵御容量耗尽攻击的最简单方法。速率整形虽然功能强大,但对于防御 DDoS 来说,却是一种不太理想的技术,原因在于其不会区分合法请求和恶意请求,还会丢弃合法流量,这可能与您的需求背道而驰。

您可以手动配置速率整形配置文件,然后将其分配给虚拟服务器。

此示例中,名为“protect_apache”的速率整形类可以保证至少有 1mbs 的流量会到达目标,但限值不能超过 10mbs。

net rate-shaping class protect_apache { rate 1mbps ceiling 10mbps }


再将此速率整形类应用于每个目标虚拟服务器。

2.2.10 设置最大 ICMP 拒绝率

TM.MaxRejectRate 系统变量可以通过允许限制 BIG-IP 系统针对无法与虚拟服务器连接匹配的传入连接所发送的 TCP RST 或 ICMP 不可达数据包的数量,从而降低拒绝服务攻击的影响。TM.MaxRejectRate 系统变量的默认值是每秒 250 个 TCP RST 或 250 个 ICMP 不可达数据包。

在不会影响网络性能的情况下,可以将该值降为 100 可以利于减少出站拥塞。

% tmsh modify sys db tm.maxrejectrate value 100

2.3 第 2 级 - 应用防御

第二级是部署应用感知、CPU 密集型防御机制(如登录页、Web 应用防火墙策略和 LTM iRules)的位置。SSL 终止通常也发生于第 2 层。虽然有些企业会在第 1 层终止 SSL,但由于 SSL 密钥的敏感性和要求将密钥保留在安全外围的策略,这种做法鲜有。

2.3.1 了解 GET 洪水

递归 GET 和 POST 是当今最为恶性的攻击之一,这些攻击难以与合法流量进行区分。

GET 洪水会使数据库和服务器不堪重负,还会导致“反向满管”。F5 记录了一个攻击者向受害者发送 100Mb 的 GET 查询,并得到了 20Gb 的数据。

如果有基于签名的 DDoS 防御解决方案(来自 F5 或其他供应商),请充分利用这些解决方案来保护您的应用。通过 LTM 和 ASM,F5 可以提供许多不同的方法,应对难以缓解的应用层攻击。

缓解 GET 洪水的策略包括:

  • 登录页防御
  • DDoS 保护配置文件
  • 真实浏览器执行
  • CAPTCHA
  • Request-Throttling iRules
  • 自定义 iRule

2.3.2 通过配置登录页减少威胁面

阻止应用级攻击的最有力手段是只允许经过身份验证的用户访问应用的数据库部分。创建登录页这项工作较为微妙,在平稳运转期部署会比在 DDoS 爆发期得到更好的效果。需要注意的是,并非所有应用都要依赖注册用户且必须要处理匿名流量,但对于确实有此需要的应用,登录页便可成为防御措施。

2.3.2.1 使用 ASM 指定登录页

ASM 通过使用登录页面和登录执行,在 ASM 策略中提供了这类工具。该功能将强制要求用户先在登录页面成功进行身份验证,才可与一组 URL 进行交互。

首先在“安全 → 应用安全 → 会话和登录”界面定义登录页面。

然后使用登录执行选项卡来指定需要保护的页面。理想情况下,这些将是大型对象(如 .MP4 和 .PDF),以及任何可以用于非对称攻击的数据库查询。

有关登录执行功能的完整说明,请参见 ASM 配置指南中的“创建登录页面”章节。

注意:如果您不确定要保护的资源对象,则可以前往“自检应用 > 调查自己的应用”。请参阅章节 3.2.2。

2.3.2.2 编写登录墙脚本

只需 LTM iRule 便可由登录页面设置特定 Cookie 来部署登录墙,然后可以在每个其他页面检查此 Cookie。创建 iRule,对其进行附加、测试再分离操作,然后将其保存到资源库中,以备不时之需。

此处为 DevCentral 中的登录墙 iRule 链接。

2.3.2.3 使用 DoS 防御配置文件保护应用

F5 Web 应用防火墙 ASM 包括特定应用的“DoS 配置文件”。这些强大的配置文件通过监控服务器延迟或 http 请求率来检测 DoS 条件。然后,ASM 可以在攻击得到缓解时触发可选 iRule 事件。

缓解方选项有:

使用以下命令创建 DoS 配置文件并将其附加到应用中:

% tmsh create security dos profile my_dos_prof { application add { Lrule1 { 
latency-based { url-rate-limiting enabled mode blocking } } } }

% tmsh modify ltm virtual my_vip1 profiles add { my_dos_prof }

您可以从“安全”选项卡访问此 DoS 配置文件。然后选择“DoS 防护”。从该界面中勾选“应用安全”,然后配置 L7DOS 保护参数。

图 4.ASM 模块的全面 L7DOS 保护配置

2.3.2.4 执行真实浏览器

除了身份验证和基于 tps 的检测(章节 2.3.2.3),F5 的设备还有其他可以区分真实 Web 浏览器与疑似 Bot 的方法。

最简单的方法是使用 ASM 创建一个 DoS 保护配置文件,并打开“基于源 IP 的客户端完整性防御”选项。这将在客户端流中注入 JavaScript 重定向,并在首次发现该源 IP 地址时验证各连接。

图 5:插入 Javascript 重定向来验证真实浏览器

命令行:

% modify security dos profile my_ddos1 application modify { Lrule1 { tps-based { ip-client-side-defense enabled } } } 

2.3.2.5 通过脚本来阻止 GET 请求洪水

F5 DevCentral 社区已经开发了几个强大的 iRules,可以自动阻止 GET 请求。客户正在对其持续完善,从而应对现有的攻击技术。

这是其中一个可以在本文中展现的简单版 iRules。DevCentral 页面 HTTP-Request-Throttle
可以提供实时版本。

when RULE_INIT {

 # Life timer of the subtable object. Defines how long this object exist in the 
subtable

 set static::maxRate 10

 # This defines how long is the sliding window to count the requests.

 # This example allows 10 requests in 3 seconds

 set static::windowSecs 3

 set static::timeout 30

}

when HTTP_REQUEST {

 if { [HTTP::method] eq "GET" } {

 set getCount [table key -count -subtable [IP::client_addr]]

 if { $getCount < $static::maxRate } {

 incr getCount 1

 table set -subtable [IP::client_addr] $getCount "ignore" 
$static::timeout $static::windowSecs

 } else {

 HTTP::respond 501 content "Request blockedExceeded requests/sec 
limit."

 return

 }

 }

}

其他 iRule 其实与上述内容大同小异,区别在于是包含管理自 iRule 本身禁用 IP 地址方法的高级版本:

  • 丢弃可疑连接。
  • 返回客户端的 JavaScript 重定向,执行正在使用的浏览器。
  • 按客户地址或 URI 进行速率限制。
  • URI-Request Limiter iRule:丢弃特定 URI 或来自 IP 的过多 HTTP 请求

2.3.2.6 使用 CAPTCHA,让 Bot 不复存在

缓解 GET 洪水的另一个方法是通过使用 CAPTCHA 机制来验证操作对象是否为人类。CAPTCHA 机制会向用户展示一些杂乱排序的文字图片,用户通过在 Web 窗体中输入这些字来证明自己是人类。尽管十多年来黑客和研究人员一直在试图“破解”CAPTCHA,但 CAPTCHA 仍然是区分人类和计算机的最佳方法之一。模式识别算法的进步似乎让攻击者与 CAPTCHA 系统自动化之间的距离越来越近。但根据 F5 的经验,“破解”CAPTCHA 所需的计算工作大大降低了现代 DDoS 攻击的非对称优势,这使得这些攻击目前还停留在理论层面。因此,这也表示 CAPTCHA 仍然是抵御僵尸网络的有效手段。

Google 所提供的 reCAPTCHA 服务,在执行这个功能的同时还能对古代文字进行解码。DevCentral 上有 Google 的 ReCAPTCHA iRule 页面,可用于验证连接的另一端是否为人类。下载 iRule(大约 150 行)并对其进行编辑,从而获取一些基本信息(如 Google reCAPTCHA 密钥和 DNS 服务器)。之后在 BIG-IP 上进行使用,并将其附件到虚拟服务器并进行测试,然后做好部署准备。

2.3.3 编写自定义缓解脚本

如果必须排除所有其他技术,则有必要编写自定义 iRule 来保护应用免受应用层攻击。这些自定义的 iRules 通常属于两类中的一类:过滤和无差别拦截。

虽然这可能是本文中所有技术中最“手动”的技术,但作用却不容小觑,在 F5 敏捷客户中有着广泛应用。F5 iRules 有着极强的可编程性,只要管理员能够编写出足够有用的脚本,就可以阻止几乎所有类型的攻击。与安全相关的 iRules 为当今很多企业提供了保护,是 F5 在应用层 DDoS 攻击方面有别于其他品牌的明星产品。

如果发生攻击后,您还是可以访问外部 Internet,请搜索 devcentral.f5.com,寻找一些可能与攻击相匹配的关键词,也许会发现已经编写好的 iRule。

要编写自己的 iRule,首先要对攻击流量进行剖析,找到关于传入攻击流量的特征,以此用来区分恶意流量和合法流量。然后编写可以检测并丢弃流量的 iRule。如果您不是 iRule 编写者,您可以将本文所提及的 iRules(以及 DevCentral 的所有)当作参考示例。将新 iRule 附加到应用的虚拟服务器。

一个简单的安全 iRule 示例便是早期的 Dirt Jumper iRule,它的关键在于恶意软件没有在其 referrer 字段包含 //。

when HTTP_REQUEST {

 if { [HTTP::header exists "Referer"] } {

 if { not ([HTTP::header "Referer"] contains "\x2F\x2F") } {

 drop

 }

 }

}

如果无法轻易区分合法和恶意流量,则可以编写 iRule,根据请求的对象丢弃流量。例如,如果攻击者正在请求个别大的 PDF 或 MP4 文件,则可以使用 iRule 来丢弃所有该对象的请求。

 ltm data-group internal block_uris { records { /faqs/faq.mp4 { } /locator/locations.pdf { } /cgi-bin { } } type string } 

您也可以使用托管在 BIG-IP 之外的外部数据组

然后使用简单的清理器 iRule 来丢弃请求(请求与数据类匹配的 URI)。

ltm data-group internal block_uris {

 records {

 /faqs/faq.mp4 { }

 /locator/locations.pdf { }

 /cgi-bin { }

 }

 type string

}

这绝非最好的解决方案,因为它会把合法和恶意流量均拒之门外。虽然这不会影响服务器的正常运转,但如果时间和能力允许的情况下,可以编写类似于上面的规则,通常可以找到区分合法和恶意流量的方法。

2.3.4 在第 2 级缓解 SSL DDoS

虽然有可能在任何一级终止 SSL,有时也会有首选选择,但 F5 建议使用物理(非虚拟)设备在第二级终止 SSL。许多 SSL DDoS 攻击会因 F5 物理设备中使用的 SSL 加速硬件而得到缓解,其中包括:

  • SSL 协议攻击
  • SSL 重放攻击
  • SSL 连接洪水

无论是否使用硬件,F5 均会通过自适应获取(见章节 2.2.7)和高容量连接表(章节 2.2.6)来缓解 SSL 连接洪水。

可以通过两种方式之一来缓解 SSL 重新协商攻击。在大多数情况下,您可以简单地在虚拟服务器的 SSL clientssl 配置文件处暂时禁用 SSL 重新协商功能。然而,生命周期非常长的连接(如自动取款机或数据库连接)仍然能够重新协商。

2.3.5 了解连接复用和端口耗尽

一般来说,不要在第 1 级执行如连接复用和 SNAT 等功能。这些功能和相关的额外功能(如插入 X-Forwarded-For 标头),应在第 2 级处理。

2.3.5.1 连接复用

第 7 层 DDoS 会耗尽后端资源(如连接表)。抑制这种影响的一种方法是通过负载均衡器复用连接。在 LTM 上,这个功能被称为 OneConnect,可以将使用的 TCP 连接数量减少一个数量级,同时仍然保持(甚至改善)每秒的整体请求。

在用作 DDoS 防御之前,应该对每个应用进行 OneConnect 功能测试。有些应用可能会依赖于每个用户的独立连接。

2.3.5.2 端口耗尽

SNAT 支持每个目标 IP 大约 64,000 个并发连接。大量的请求可能会超过 64,000 个连接的限制,导致 TCP 端口耗尽。您可以使用 SNAT 池来越过此限制。在 SNAT 池中配置并设置适当的 IP 地址,实现对耗尽情况的缓解。

例如,如果虚拟服务器 vip1 使用的是简单的 automap 源地址转换,则可以通过以下命令将其改为使用 IP 地址池。本示例只使用三个地址,将可用端口从 64,000 增加到 192,000。

% tmsh create ltm snatpool ddos_snatpool members add { 10.1.20.161 10.1.20.162 10.1.20.163 } % tmsh modify ltm virtual vip1 source-address-translation { pool ddos_snatpool }

对于添加到 SNAT 池的每个地址,您可能希望分配一个离散的超时值(默认值是无限期)。通过空闲超时,BIG-IP 可以关闭空闲连接,并利于保护上游有状态防火墙。

% tmsh modify ltm snat-translation 10.128.20.161 { ip-idle-timeout 60 }

另外 3 种 DDoS 推荐实践

3.1 缓解 DNS DDoS

DNS 是仅次于 HTTP 的第二大目标服务。当 DNS 遭到破坏时,所有外部数据中心服务(而不仅仅是单个应用)都会受到影响。这种单点完全失效叠加上 DNS 基础架构历来预配不足的情况,使得 DNS 成为攻击者眼中非常诱人的目标。即使攻击者不是专门针对 DNS,他们也经常会在无意中达成攻击:如果攻击客户端在发动洪水攻击之前均在查询目标主机 IP,就会导致间接 DNS 攻击。

由于基于 UDP 的 DNS 协议相对简单,DNS 攻击有两个主要特点:

  • DNS 攻击很容易生成。
  • DNS 攻击难以防御。
图 6:缓解 DNS DDoS

有四种本地策略可以缓解 DNS DDoS 攻击:

  • 使用协议验证。
  • 检测并防御 DNS 洪水。
  • 针对 NXDOMAIN 查询洪水,过度提供 DNS 服务。
  • 将黑名单作为最后手段。

3.1.1 考虑 DNS 服务布局

从图 1 您可能会注意到,DNS 服务作为独立的一组设备存在于安全外围之后。通常,DNS 是在位于安全层级之间,称作 DMZ 的位置提供服务。这样做法的目的是为了让 DNS 独立于它所服务的应用(例如,如果数据中心有一部分出现问题,DNS 可以将请求重定向到二级数据中心(或云端)。F5 推荐维持 DNS 独立于安全层和应用层的策略,从而获得最大的灵活性和可用性。

一些拥有多个数据中心的大型企业会部署进一步措施,联合使用 F5 的 GTM DNS Express 和 AFM 防火墙模块,在主要安全外围之外提供 DNS 服务。这种方法的主要好处在于,即使遇到 1 级防火墙因遭受 DDoS 而离线的情况,仍然可以使用 DNS 服务。

图 7:备用外部 DNS 架构

3.1.2 使用协议验证保护 DNS 服务

无论是在 DMZ 内部亦或外部提供 DNS 服务,均可以在 DNS 请求到达 DNS 服务器之前使用 GTM 或 AFM 对其进行验证。

如果是由 GTM 执行全局服务器负载均衡,则很有可能已经阻挡了许多 DNS DDoS 攻击。您可以从 GTM GUI的主仪表板上查看 DNS 查询/响应性能。由于 GTM 是针对 DNS 的全代理,所以它会自动验证每一个请求,并丢弃无效的请求。

然而,您可能还会发现寻求验证的请求让服务器不堪重负的情况。如果具备 F5 防火墙模块 AFM,您可以使用协议安全配置文件进行优化,只过滤特定类型的 DNS 请求。

安全选项卡,选择协议安全,然后选择安全配置文件。选择 DNS 并按创建按钮。您可以在此界面上建立协议安全配置文件来过滤或拦截不同类型的请求。

图 8:DNS 协议验证

3.1.3 检测 DNS 洪水

F5 防火墙模块 AFM 具有强大的 DNS DDoS 功能,可以通过记录类型检测 DNS 洪水。从“安全”选项卡中,选择“DoS 防御”,然后选择“DoS 配置文件”,最后选择“创建”。在创建界面中,单击“DNS”复选框,设置并接受阈值参数。

图 9:DNS 洪水检测

“协议错误”复选框表示系统检测到恶意或格式错误的 DNS 查询,并以百分比的形式显示 DNS 查询流量的合法增加值,之后系统才会追踪格式错误和恶意的 DNS 查询。

注意:此时,该防火墙功能虽然会检测洪水,但不会丢弃数据包来进行缓解。

3.1.4 针对查询洪水,过度提供 DNS 服务

DNS 服务历来预配不足。有一部分原因是,对于许多企业而言,并没有任何特定团队来负责积极开发 DNS。不论真实原因如何,相当比例的 DNS 部署都存在预配不足的情况,以至于其根本无法阻止中小型 DDoS 攻击。

DNS 缓存已呈现出常态化趋势,原因在于可以提升 DNS 缓存的感知性能,并且可对标准 DNS 查询攻击提供一定程度的弹性。攻击者已经转向所谓的“域名不存在”(或 NXDOMAIN)攻击,这种攻击会迅速消耗缓存提供的性能优势。

F5 推荐的补救方法是用特殊的高性能 DNS 代理模块 DNS Express 来前置 DNS 服务。DNS Express 在现有的 DNS 服务器前完全充当解析器。从服务器加载区域信息,然后解析每一个请求或返回 NXDOMAIN。由于它并非缓存,所以不能通过 NXDOMAIN 查询洪水进行耗尽。

在 GTM 或 DNS 服务中,DNS Express 可以为根据 CPU,每秒服务 25 万个请求,因此除了最严重的 DNS 攻击之外,它可以防御其他所有攻击。DNS 服务器管理区域数据的位置并不会产生变化。

3.1.5 将黑名单作为最后手段

DNS 流量是传统意义上的 UDP,容易生成,也易于遭到欺骗。常见的第 3 层和第 4 层防御措施(如按源 IP 设置黑名单)通常对 DNS 洪水无效。事实上,按源 IP 拦截 DNS 请求算是百害无一利。例如,如果在无意中拦截了来自主要 ISP 的请求,可能会在毫不知情的情况下,让许多合法用户无法使用服务。

参见“BIG-IP 系统:DOS 保护和协议防火墙实施”(第 3 章:检测和预防 DNS DDoS 攻击)。

3.1.6 谨防 DDoS 攻击参与

3.1.6.1 未使用的查询类型

攻击者可以通过发送未使用的服务的查询来欺骗 DNS 服务,对第三方目标发动攻击。请使用 AFM 界面(参见上方的图 9)禁用不使用的查询类型。然后,在系统传入这些类型的查询时就会将其丢弃。由于系统不会作出任何响应,所以可以利于避免参与 DDoS 攻击。

这种做法对于 MX(邮件服务)和区域传输尤为有效。如果企业在已知特定的时间进行了一次传输,则会在所有其他时间保持 IXFR、AXFR 和 ZXFR 类型无效。

3.1.6.2 DNSSEC

DNSSEC 是全球域名服务的重要演变。网络钓鱼等欺诈行为最终会由此减少。对于 DNS DDoS 来说,局面会较为复杂。DNSSEC 响应有时会比传统 DNS UDP 响应大 10 到 20 倍。这意味着 DNSSEC 服务器实际上遭到了欺骗,正对其他计算机展开攻击,而方式就是在无意中使用无效响应发动攻势。

借助 GTM,F5 已经研发出市场上拥有最佳性能的 DNSSEC 解决方案。如果 GTM 的能力被用作攻击途径,就有可能成为有力的攻击武器。因此,GTM 可以让您对响应数量实施速率限制,防止其参与攻击。

 % tmsh modify sys db dnssec.maxnsec3persec value 10 

dnssec.maxnsec3persec 变量控制 GTM 每秒发送的 NSEC3 authoritative NXDOMAIN 消息上限。0 是无限制,属于默认值。具有更加严格限制的值,比如每秒 10 到 100 间,可以防止 GTM 本身在攻击中遭到使用。

% tmsh modify sys db dnssec. signaturecachensec3 value true 

dnssec.signaturecachensec3 变量设置为 false,可以彻底防止 NXDOMAIN 消息使用 GTM 缓存,从而阻止攻击者利用“no such domain(域名不存在)”响应来填充 GTM 缓存。

3.2 其他 DDoS 最佳实践准备程序

精心做好 DDoS 攻击准备将提高防御效果。以下是企业可以为 DDoS 攻击做好准备的一些方法。

3.2.1 配置和验证日志记录

在攻击期间,很有可能会发送诊断和记录异常和流量峰值。在处理大型 DDoS 攻击时,高性能至关重要。检测也很重要,这意味着您将希望使用 BIG-IP 的高速日志设备将此类信息发送到第三方日志设备(如 Splunk)或 SIEM(如 ArcSight)。

注意:在缓解 DDoS 攻击时,务必使用 BIG-IP 第 1 级的高速日志记录设备而不要使用本地日志记录;密集型 DDoS 攻击可能会淹没基于磁盘的本地日志记录。

3.2.1.1 设置高速记录

  1. 创建一个池来映射外部日志服务器(此次示例是 syslog)。根据需要,重新编写 ArcSight、TrustWave 或环境所支持的任何 SIEM 解决方案。然后创建日志配置对象,以正确格式化和转发字符串。

% tmsh create ltm pool hsl_pool members add { 10.128.10.250:514 }

% tmsh create sys log-config destination remote-high-speed-log log_dest_HSL { pool-name hsl_pool }

% tmsh create sys log-config destination remote-syslog log_dest_format { format rfc5424 remote-high-speed-log log_dest_HSL }

% tmsh create sys log-config publisher log_pub_ddos { destinations { log_dest_HSL log_dest_format } }

2. 使用 GUI 创建日志配置文件对象

访问 Security > Event Logs > Logging Profiles(安全 > 事件日志 > 记录配置文件)页面。使用以下方法创建日志配置文件:

配置文件名称

 

ddos_log_profile

网络防火墙

启动

网络防火墙:Publisher

log_pub_ddos

日志规则匹配

接受、丢弃和拒绝

日志 IP 错误

启动

日志 TCP 错误

启动

日志 TCP 事件

启动

存储格式

field-list 选择所有“可用项”并将其移动到“所选项目”列表

3. 将该日志配置文件对象与保护应用的虚拟服务器相关联。

 % tmsh modify /ltm virtual vip1 { security-log-profiles add { ddos_ log_profile } } 

3.2.2 自检应用

现代 DDoS 攻击者会在发起 DDoS 攻击前数天或数周对应用展开调查。他们扫描网站的各个部分,并检索每个有效 URI 的加载时间和数据大小。通过对得到的数据集进行分类,他们会迅速隔离出最耗费 CPU 或数据库的查询和最大的对象(如 PDF 和 MP4)。在 DDoS 攻击期间,他们会反复查询这些对象,使基础架构不堪重负。

尽管章节 3.8 将为您在发生攻击时提供缓解帮助,但通过自检应用,您可以预先做好防御。这种做法可以为您提供先进的可见性,使您明确哪些 URI 和子系统有可能会成为攻击目标,从而在以后做出更明智的分类决策。

具备像 LoadRunner 类似的工具或其他性能监控工具为您提供所需指标是较为理想的情况。如果您缺乏这种功能,也许最简单的方法是运行 wget 实用程序,它在大多数 Linux 发行版上都可以使用,可以检索 URL、加载时间和数据大小的基本表格。使用以下语法运行该程序:

% wget -r --spider http://10.128.10.150 2>&1 | grep saved 2013-08-25 15:44:29 (2.48 MB/s) - `10.128.1.150/index.html' saved [22304] 2013-08-25 15:44:29 (5.53 MB/s) - `10.128.1.150/index.php' saved [22304] 2013-08-25 15:44:29 (7.06 MB/s) - `10.128.1.150/sell.php' saved [41695]

最后一个数字(方括号内)是请求的数据大小。您必须通过相互减去次数(第二个字段)来获得加载时间。

3.2.3 利用 iHealth 验证现有 BIG-IP 设备的健康状况

F5 可以提供名为 iHealth 的基于云的诊断和启发式服务,iHealth 将检查 F5 设备的配置,并提出建议,保持 BIG-IP 的快速、安全性和可用性。虽然大多数设置可能更适用于前两者,但其中一些设置可以适用于可用性,并扩展到 DDoS 弹性。

在此次示例中,iHealth 显示 SNAT 池已经被配置为没有超时值。这可以提醒有资源意识的管理员,确保用于其加固虚拟服务器的 SNAT 池应该包括空闲超时,以保持连接数,防止上游防火墙倾斜。

有关 iHealth 的更多信息,请参见 iHealth 网站。

3.2.4 准备 DDoS 应对策略

DDoS Playbook 或 Runbook 是协助 IT 员工防御 DDoS 攻击的程序手册。完善的 playbook 将帮助新的(和现有的)管理员防御 DDoS 攻击。Playbook 应该保持最新的白名单和联系信息。

一些企业会定期自行组织 DDoS 演习(甚至测试),以保持最新状态并测试 playbook。试着让员工在主要负责人不在场时练习相关程序,毕竟攻击总是发生在出其不意之时。

如果没有 playbook,则可以从 F5 获取一版。

3.2.5 回顾两级架构中的防御策略

前几章介绍的一些防御策略很值得回顾,尤其是使用非 F5 网络防火墙的管理员。

请谨记:

  • SNAT 池可以缓解第 1 级的端口耗尽。
  • 流量整形发生于第 1 级。
  • 大幅获取 TCP 连接。
  • 将 DNS 黑名单作为最后手段。
  • 在第 2 级实施登录墙和 CAPTCHA。
  • 在第 2 级禁用可选的 CPU 密集型功能。
  • 始终使用高速远程日志记录。

通过实施本最佳实践指南中提出的建议,可以应用部署诸多防御措施,从而应对 DDoS 攻击。

4 结论

了解现代拒绝服务攻击的威胁范围至关重要。了解如何充分利用已经具备的防护设备更加重要。

根据资源和需求,您可能已经为 DDoS 弹性重新设计了网络。如果这正是您考虑要部署的事情,则请多加留意章节 2.1 中介绍的建议多级架构。即便 F5 的技术并没有遍及您的整个网络安全结构,出于 DDoS 目的,将第 4 层和第 7 层进行独立部署依旧有一定的意义。

通过遵循推荐实践,您的网络、应用和员工都将做好防御攻击的准备。

F5 针对 DDoS 缓解的推荐实践的最后一步便是准备 DDoS playbook。此类 playbook 是缓解攻击(包括工作表和日志)的实时程序指南。F5 可以为您提供入门模板。

据专家预测,在日后很长的一段时间里,DDoS 都会是互联网行业要亟待解决的问题。而不久的将来,做好万全的应对准备将成为必行之事。

附录

应用攻击分类法及对策

下一章节会就具体的第 7 层攻击途径提出缓解建议。其中许多是会带来严重后果的“慢速和低速”攻击类型。

目录

  • Slowloris 攻击
  • Keep Dead
  • 低轨道离子炮 (LOIC)
  • Slow-POST
  • 零窗口攻击
  • Slow-Read 攻击
  • RUDY
  • Apache Killer
  • SSL 重协商
  • Dirt Jumper iRule

Slowloris 攻击

Slowloris 是常见的 HTTP 向量,攻击者会(非常缓慢的)发送小的 HTTP 标头文件来保持 HTTP 会话(例如“X-a: b”每 299 秒一次)。如果虚拟服务器目前在第 4 层进行负载均衡,请考虑将其切换到第 7 层。这将在添加 HTTP 配置文件时增加一定程度的本地保护。

% tmsh list ltm virtual vip1
ltm virtual vip1 { 
destination 10.128.10.141:http 
profiles { 
fastL4 { } 
}
}

% tmsh modify ltm virtual vip1 profiles replace-all-with { tcp http }

这将导致 BIG-IP 吸收 Slowloris 连接。如果担心建立的连接数量过多,并给其他设备(如防火墙)带来问题,请使用下面的 Slowloris iRule 来丢弃任何在 10 秒(请随意调整此数字)后仍未完成的连接。

# Slowloris iRule

when CLIENT_ACCEPTED {

 set hsl [HSL::open -proto UDP -pool hsl_pool]

 set rtimer 0

 after 10000 {

 if { not $rtimer } {

 drop

 HSL::send $hsl "Dropped [IP::client_addr] – connection too 
slow"

 }

 }

}

when HTTP_REQUEST {

 set rtimer 1

}

Keep Dead

这种攻击以消耗 CPU 和 RAM 为基础。通过使用 Keep-Alive 和 HTTP HEAD 方法,它可以在不触发防火墙防御的情况下产生大量的请求,而防火墙防御的依据是服务器打开的连接数。

ASM 模块可以禁用 HEAD 请求(浏览器通常不使用)。您可以通过配置相关应用安全策略中的“允许方法”来拒绝 HEAD 请求。

有关更多信息,请参见解决方案 12312。

低轨道离子炮 (LOIC)

低轨道离子炮是自发的僵尸网络工具,与黑客组织 Anonymous 密切相关。虽然该工具使用 SYN 洪水和 UDP 洪水,但它最著名的是其第 7 层 HTTP 洪水。假设 SYN 和 UDP 洪水已经得到缓解(参见章节 2.2.2 和 2.2.3),最后一步便是缓解 LOIC GET 洪水。

通常最快速的方法是对每个 LOIC HTTP 请求中包含的攻击“违规消息”进行过滤。使用 Wireshark 或 tcpdump,或是其他工具来隔离该消息,然后将该消息添加到数据组中。使用 %20 来代表空格。该消息可能会随着时间的推移而改变,所以有可能需要在攻击期间对其进行监控。

 ltm data-group anonmsgs { records { Somos%20legi { } U%20dun%20goofed { } } type string } 

请注意:您可以使用托管在 BIG-IP 之外的外部数据类。请参见 tmsh 命令外壳中的“search data-group”。

然后使用简单的清理器 iRule 来丢弃包含该数据类中任何有效负载的请求。

ltm rule loic_defense_rule {

 when CLIENT_ACCEPTED {

 set hsl [HSL::open -proto UDP -pool hsl_pool]

 }

 when HTTP_REQUEST {

 if { [class match [HTTP::uri] contains anonmsgs] } {

 drop 

 HSL::send $hsl "Dropped [IP::client_addr] – suspected Low Orbit Ion Cannon"

 } 

 }

}

Slow-POST

Slow-POST 攻击的核心是依靠发送一个给定“内容长度”的 POST 请求,这个长度通常是一个很大的数字,然后非常缓慢地将消息体发送给服务器,同时保持较长的空闲时间。服务器在继续接收数据的同时,会让连接保持开放状态。如果针对服务器执行了大量此类请求,就有可能耗尽连接表,从而使服务器无法响应进一步的请求。

如果有 ASM 模块,您可以使用 ASM 系统变量界面(导航至安全:选项:应用安全:高级配置:系统变量)所找到的两个变量来缓解 slow post 攻击,并修改以下变量。

slow_transaction_timeout(默认值为 10 秒)。根据需要降低此值。

max_slow_transactions(默认为 25 个交易)。根据需要将此值降低到 5 或更少。

如果没有 ASM,则请参见此 LTM iRule 来缓解 Slow-POST。它可以和下一节的 Slow-read iRule 一起使用(只需将其附加为两个独立的 iRules),因为 Slow-read iRule 是基于服务器,而 Slow-POST iRule 则基于客户端。

零窗口攻击

零窗口攻击是一种难以检测的第 4 层攻击。它的工作原理是建立与目标的 TCP 连接,请求一些数据,然后将 TCP 窗口大小设置为零。这将使连接在服务器、缓存或中间件处停止。

如果攻击者针对 BIG-IP 设置 TCP 零窗口长度,可以使用章节 2.2.2 中提到的零窗口超时 tcp 配置文件值来缓解。

Slow-Read 攻击

Slow-read 攻击的工作原理是发送合法的 HTTP 请求,然后从缓冲区中非常缓慢地读取 HTTP 响应,目的是让受害设备中尽可能多的连接处于活跃状态。

在 11.3.0 版本中,ASM 模块的低速和慢速预防措施会作用于入站请求(如 Slow POST)。对于 Slow-read,请使用以下 LTM iRule 进行缓解:

when SERVER_CONNECTED {

 TCP::collect

}

when SERVER_DATA {

 set rtimer 0

# Time in milliseconds before HTTP response read is considered slow:

 after 5000 {

 if { not $rtimer} {

 set hsl [HSL::open -proto UDP -pool hsl_pool]

# Slow read detected for this server response. Increment the count by adding a 
table entry:

# Add the client source IP::port to the subtable with a timeout

 table set -subtable "MyApp" "[IP::client_addr]:[TCP::client_port]" 
"ignored" 180

# If we are over the concurrency limit then reject

 if { [table keys -subtable "MyApp" -count] > 5} {

 clientside {reject}

 table delete -subtable "MyApp" "[IP::client_addr]:[TCP::client_
port]"

 HSL::send $hsl "Dropped [IP::client_addr] – reading too slow"

 } 

 }

 }

 TCP::notify response 

 TCP::release

 TCP::collect

}

when USER_RESPONSE {

 set rtimer 1

}

when CLIENT_CLOSED {

 table delete -subtable "MyApp" "[IP::client_addr]:[TCP::client_port]" 

}

RUDY

R-U-Dead-Yet(简称 RUDY)使用 Slow-POST 和通用 HTTP DoS 攻击,通过长表单字段提交。

Apache Killer

Apache Killer 也被称为范围攻击。当客户端浏览器(如手机浏览器)只需要文档的一部分时,它可以用 HTTP 范围标头来请求数据的“范围”。如果客户端只想要前 100 个字节,可以表示为:

 Range:bytes=0-100 

Apache Killer 攻击的工作原理是请求多个重叠的范围,混淆 Apache 等 Web 服务器:

 Range:bytes=0-,5-1,5-2,5-3,… 

有三种方法可以减轻 Apache Killer 的影响。您可以修改 HTTP 配置文件,简单地删除范围标头。例如,如果 http 配置文件被命名为“http_ddos2”,则运行此命令:

 % tmsh modify ltm profile http http_ddos2 { header-erase range } 

一个更精密的缓解 Apache Killer 的方法是使用下面的 iRule,它只在请求超过五个范围时才会删除范围请求。

when CLIENT_ACCEPTED {

 set hsl [HSL::open -proto UDP -pool hsl_pool]

}

when HTTP_REQUEST {

 # remove Range requests for CVE-2011-3192 if more than five ranges are 
requested

 if { [HTTP::header "Range"] matches_regex {bytes=(([0-9\- ])+,){5,}} } {

 HTTP::header remove Range

 HSL::send $hsl "Client [IP::client_addr] sent more than 5 ranges. Erasing 
range header."

 }

}

使用 BIG-IP 解决方案进行缓解的第三个方法是使用以下 ASM 攻击签名来检测使用该技术的攻击并采取措施。

 pcre:"/Range:[\t ]*bytes=(([0-9\- ])+,){5,}/Hi"; 

SSL 重协商

如果发现有很多来自特定 SSL 客户端的重新协商,则有可能是遭受了 SSL 重协商攻击。最简单的缓解方法是在虚拟服务器的相关 clientssl 配置文件中禁用 SSL 重新协商。然而,如果需要支持合法客户端的重新协商(比如老式的“升级”或服务器门控加密浏览器),同时还要缓解攻击,则可以使用此 iRule,或者其他类似的规则。这一规则会关闭任何在一分钟内尝试超过五次重新协商的连接。

when RULE_INIT { 

 set static::maxquery 5 

 set static::mseconds 60000 

} 

when CLIENT_ACCEPTED { 

 set ssl_hs_reqs 0 

 set hsl [HSL::open –proto UDP –pool hsl_pool]

} 

when CLIENTSSL_HANDSHAKE { 

 incr ssl_hs_reqs 

 after $static::mseconds { if {$ssl_hs_reqs > 0} {incr ssl_hs_reqs -1} } 

 if { $ssl_hs_reqs > $static::maxquery } { 

 after 5000 

 drop

 HSL::send $hsl "Dropped [IP::client_addr] – too many SSL renegotiations"

 } 

}

Dirt Jumper iRule

某些版本的 Dirt Jumper 工具在其 referrer 字段中不包含 //。以下为您提供一个简单的 iRule 来检测和丢弃 Dirt Jumper 连接。

when CLIENT_ACCEPTED {

 set hsl [HSL::open –proto UDP –pool hsl_pool]

} 

when HTTP_REQUEST {

 if { [HTTP::header exists "Referer"] } {

 if { not ([HTTP::header "Referer"] contains "\x2F\x2F") } {

 HSL::send $hsl "DDoS Dirt-Jumper HTTP Header Structure missing x2f x2f 
Referer protocol identifier from [IP::client_addr]"

 drop

 }

 }

}