Citrix ADC

缓解 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. 否定记录类型框中,选择NXDomainNODATA

防止随机子域和 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

缓解 DNS DDoS 攻击