Citrix ADC

缓解 DNS DDoS 攻击

DNS 服务器是网络中最重要的组件之一,它们必须防御攻击。最基本的 DNS 攻击类型之一是 DDoS 攻击。这种类型的攻击正在增加,可能具有破坏性。您可以执行以下操作来缓解 DDoS 攻击:

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

刷新负面记录

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

现在,您可以刷新 Citrix ADC 设备的 DNS 缓存中的负 DNS 记录。

使用 CLI 刷新负缓存记录

在命令提示符下,键入:

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

示例:

flush dns proxyrecords –negRecType NODATA

使用 GUI 刷新负缓存记录

  1. 导航到 配置 > 流量管理 > DNS > 记录
  2. 在详细信息窗格中,单击 “ 刷新代理记录”。
  3. 在“刷新类型”框中,选择“负记录”。
  4. 在“否定记录类型”框中,选择“NXDomain”或“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 命令或 Citrix ADC GUI 中的 “刷新代理记录”)。
  • 要配置 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 值。

如果启用 CachenoLate 参数,则会保留当前在缓存中的记录,直到禁用该参数为止。

注意

  • 此选项只能在指定最大缓存大小(MaxCacheSize 参数)时使用。
  • 如果配置了最大缓存器,并启用了缓存器过期,则优先级缓存器过期。

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

在命令提示符下,键入:

set dns parameter -cacheNoExpire ( ENABLED | DISABLED)

示例:

set dns parameter -cacheNoExpire ENABLED

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

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

启用 DNS 缓存绕过

为了更好地了解和控制 DNS 请求,请将 cacheHitByte 参数设置为将所有请求转发到后端服务器,并允许构建但不使用缓存。构建缓存后,您可以禁用参数,以便从缓存中提供请求。

使用 CLI 启用 DNS 缓存绕过

在命令提示符下,键入:

set dns parameter -cacheHitBypass ( ENABLED | DISABLED )

示例:

set dns parameter -cacheHitBypass ENABLED

使用 GUI 启用 DNS 缓存绕过

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

防止 Slowloris 攻击

跨越多个数据包的 DNS 查询提供了 Slowloris 攻击的潜在威胁。Citrix ADC 设备可以静默删除分割成多个数据包的 DNS 查询。

如果查询被拆分为多个 splitPktQueryProcessing 数据包,则可以将参数设置为 “允许” 或 “删除 DNS 查询”。

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

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

在命令提示符下,键入:

set dns parameter -splitPktQueryProcessing ( ALLOW | DROP )

示例:

set dns parameter -splitPktQueryProcessing DROP

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

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

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

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

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

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

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