ADC

缓解 DNS DDoS 攻击

DNS 服务器是网络中最关键的组件之一,必须防御攻击。DNS 攻击的最基本类型之一是 DDoS 攻击。此类攻击呈上升趋势,可能具有破坏性。您可以采取以下措施来缓解 DDoS 攻击:

  • 刷新负面记录。
  • 限制负面记录的生存时间 (TTL)。
  • 通过限制 DNS 缓存消耗的内存来保留 NetScaler 内存。
  • 在缓存中保留 DNS 记录。
  • 启用 DNS 缓存绕过。

刷新负面记录

DNS 攻击在缓存中填充负面记录(NXDOMAIN 和 NODATA)。因此,对合法请求的响应不会被缓存,因此新请求会被发送到后端服务器进行 DNS 解析。因此,答复会延迟。

您现在可以从 NetScaler 设备的 DNS 缓存中清空负的 DNS 记录。

使用 CLI 刷新负缓存记录

在命令提示符下,键入:

flush dns proxyrecords -type (dnsRecordType | negRecType) NXDOMAIN | NODATA

示例:

flush dns proxyrecords –negRecType NODATA

使用 GUI 刷新负缓存记录

  1. 导航到 配置 > 流量管理 > DNS > 记录
  2. 在详细信息窗格中,单击“刷新代理记录”。
  3. 在“刷新类型”框中,选择“负面记录”。
  4. 在“负面记录类型”框中,选择 NXDOM AIN 或 NODATA。

防范随机子域和 NXDOMAIN 攻击

为了防止随机子域和 NXDOMAIN 攻击,您可以限制 DNS 缓存内存,也可以调整负记录的 TTL 值。

要限制 DNS 缓存消耗的内存量,请指定最大缓存大小(以 MB 为单位),以及用于存储负面响应的缓存大小(以 MB 为单位)。当达到任一限制时,不会再向缓存中添加任何条目。此外,还会记录系统日志消息,如果您配置了 SNMP 陷阱,则会生成 SNMP 陷阱。如果未设置这些限制,则缓存将继续,直到系统内存耗尽。

负记录的 TTL 值越高,可能会导致存储长时间没有价值的记录。较低的 TTL 值会导致向后端服务器发送更多请求。

负记录的 TTL 设置为一个值,该值可以是 SOA 记录的 TTL 值或“过期”值中的较小值。

注意

  • 每个数据包引擎都会添加此限制。例如,如果 maxCacheSize 设置为 5 MB 且设备有 3 个数据包引擎,则总缓存大小为 15 MB。
  • 负记录的缓存大小必须小于或等于最大缓存大小。
  • 如果您将 DNS 缓存内存限制降低到低于已缓存的数据量的值,则在数据过时之前,缓存大小将保持在限制之上。也就是说,超过其 TTL0 或被刷新(flush dns proxyrecords 命令或 NetScaler GUI 中的 Flush Proxy Records)。
  • 要配置 SNMP 陷阱,请参阅 配置 NetScaler 以生成 SNMP 陷阱

使用 CLI 限制 DNS 缓存占用的内存

在命令提示符下,键入:

set dns parameter -maxCacheSize <MBytes> -maxNegativeCacheSize <MBytes>

示例:

set dns parameter - maxCacheSize 100 -maxNegativeCacheSize 25

使用 GUI 限制 DNS 缓存消耗的内存

导航到“配置”>“流量管理”>“DNS”,单击“更改 DNS 设置”,然后设置以下参数:

  • 以 MB 为单位的最大缓存大小
  • 最大负缓存大小(以 MB 为单位)

使用 CLI 限制负面记录的 TTL

在命令提示符下,键入:

set dns parameter -maxnegcacheTTL <secs>

示例:

set dns parameter -maxnegcacheTTL 360

使用 GUI 限制负面记录的 TTL

  1. 导航到 配置 > 流量管理 > DNS
  2. 单击“更改 DNS 设置”并设置“以 秒为单位的最大负缓存 TTL”参数。

在缓存中保留 DNS 记录

攻击可以向 DNS 缓存中充斥不重要的条目,但可能导致刷新已缓存的合法记录,为新条目腾出空间。为防止攻击在缓存中填充无效数据,即使合法记录超过了 TTL 值,您也可以保留这些记录。

如果启用 cachenoExpire 参数,则在禁用该参数之前,当前在缓存中的记录将保留。

注意

  • 只有在指定了最大缓存大小(maxcacheSize 参数)时,才能使用此选项。
  • 如果配置了 maxnegCachettl 并启用了 cachenoExpive,则优先考虑 cachenoExpive。

使用 CLI 在缓存中保留 DNS 记录

在命令提示符下,键入:

set dns parameter -cacheNoExpire ( ENABLED | DISABLED)

示例:

set dns parameter -cacheNoExpire ENABLED

使用 GUI 在缓存中保留 DNS 记录

  1. 导航到“配置”>“流量管理”>“DNS”,然后单击“更改 DNS 设置”
  2. 选择“缓存无过期”。

启用 DNS 缓存绕过

为了提高对 DNS 请求的可见性和控制,请设置 cacheHitBypass 参数以将所有请求转发到后端服务器,并允许构建但不使用缓存。构建缓存后,您可以禁用该参数,以便从缓存中处理请求。

使用 CLI 启用 DNS 缓存绕过

在命令提示符下,键入:

set dns parameter -cacheHitBypass ( ENABLED | DISABLED )

示例:

set dns parameter -cacheHitBypass ENABLED

使用 GUI 启用 DNS 缓存绕过

  1. 导航到“配置”>“流量管理”>“DNS”,然后单击“更改 DNS 设置”
  2. 选择“绕过缓存命中”。

防止 Slowloris 攻击

跨多个数据包的 DNS 查询存在潜在的 Slowloris 攻击威胁。NetScaler 设备可以静默丢弃分成多个数据包的 DNS 查询。

如果将查询拆分为多个数据包,则可以将 splitPktQueryProcessing 参数设置为 ALLOW 或 DROP 查询。

注意:此设置仅适用于 DNS TCP。

使用 CLI 将 DNS 查询限制为单个数据包

在命令提示符下,键入:

set dns parameter -splitPktQueryProcessing ( ALLOW | DROP )

示例:

set dns parameter -splitPktQueryProcessing DROP

使用 GUI 将 DNS 查询限制为单个数据包

  1. 导航到“配置”>“流量管理”>“DNS”,然后单击“更改 DNS 设置”
  2. 在“拆分包查询处理”框中,选择“允许”或“删除”。

收集从缓存提供的 DNS 响应的统计信息

您可以收集从缓存提供的 DNS 响应的统计信息。然后使用这些统计数据创建一个阈值,超过该阈值会丢弃更多 DNS 流量,并使用基于带宽的策略强制执行该阈值。以前,DNS 负载平衡虚拟服务器的带宽计算不准确,因为未报告来自缓存的请求数。

在代理模式下,请求字节、响应字节、接收的数据包总数和发送的数据包总数的统计信息会持续更新。以前,这些统计信息并不总是更新的,特别是对于 DNS 负载平衡虚拟服务器。

代理模式现在还使您能够确定从缓存中提供的 DNS 响应的数量。为了收集这些统计数据,已在 stat lb vserver <DNSvirtualServerName> 命令中添加了以下选项:

  • 请求 — DNS 或 DNS_TCP 虚拟服务器收到的请求总数。包括转发到后端的请求和从缓存中应答的请求。
  • 虚拟服务器命中 数 —转发到后端的请求总数。从缓存中处理的请求数是请求总数与虚拟服务器提供的请求数之间的差值。
  • 响应 -此虚拟服务器发送的响应总数。例如,如果 DNS LB 虚拟服务器收到了 5 个 DNS 请求,将其中 3 个请求转发到后端,并从缓存中为其中 2 个请求提供服务,则每个统计数据的相应值将如下所示:
    • 虚拟服务器单击数:3
    • 请求数:5
    • 回应数:5
缓解 DNS DDoS 攻击