缓解 DNS DDoS 攻击

DNS 服务器是网络中最重要的组件之一,它们必须防御攻击。最基本的 DNS 攻击类型之一是 DDoS 攻击。这种攻击正在增加,可能具有极大的破坏性。要减轻 DDoS 攻击,您可以刷新负面记录、限制负面记录的生存时间 (TTL)、通过限制 DNS 缓存占用的内存来保留 Citrix ADC 内存、在缓存中保留 DNS 记录以及启用 DNS 缓存绕过。您还可以将 DNS 查询限制为单个数据包,从而防止 Slowloris 攻击。

刷新负面记录

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 设置为一个值,该值可以小于 TTL 值或 SOA 记录的“过期”值。

注意

  • 每个数据包引擎都会添加此限制。例如,如果 MaxCacheSize 设置为 5 MB,并且设备具有 3 个数据包引擎,则总缓存大小为 15 MB。
  • 负面记录的缓存大小必须小于或等于最大缓存大小。
  • 如果将 DNS 缓存内存限制减少到低于已缓存数据量的值,则高速缓存大小将保持高于限制,直到数据过时(超过其 TTL0 或刷新(刷新 DNS 代理记录命令或 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 缓存绕过

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

使用 CLI 启用 DNS 缓存绕过

在命令提示窗口中,键入:

set dns parameter -cacheHitBypass ( ENABLED | DISABLED )

示例:

set dns parameter -cacheHitBypass ENABLED

使用 GUI 启用 DNS 缓存绕过

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

防止慢洛里斯攻击

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

如果查询被拆分为多个数据包,则可以将 SplitpktQuyter 处理参数设置为“允许”或“删除 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 负载平衡虚拟服务器的带宽计算不准确,因为未报告缓存命中次数。

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

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

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