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. 负面记录类型框,选择其中之一NXDOMAINNODATA后

防止随机子域和NXDOMAIN攻击

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

若要限制DNS缓存消耗的内存量,请指定最大缓存大小(以MB为单位),以及用于存储否定响应的缓存大小(以MB为单位)。当达到任何一个限制时,不再向缓存中添加更多的条目。此外,还会记录syslog消息,如果配置了SNMP trap,则会生成SNMP trap。如果没有设置这些限制,缓存将继续进行,直到耗尽系统内存为止。

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

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

请注意

  • 这个限制是为每个包引擎添加的。例如,如果maxCacheSize设置为5 MB,而设备有3个包引擎,则总缓存大小为15 MB。
  • 负记录的缓存大小必须小于或等于最大缓存大小。
  • 如果将DNS缓存内存限制降低到低于已经缓存的数据量的值,缓存大小将保持在限制之上,直到数据老化。即,超过TTL0或被刷新(刷新DNS代理记录命令,或在Citrix ADC GUI中刷新代理记录)。
  • 配置SNMP trap,请参见配置NetScaler生成SNMP trap

该任务指导系统管理员通过CLI限制DNS Cache占用的内存

在命令提示符下,输入:

设置dns参数-maxCacheSize -maxNegativeCacheSize

例子:

设置dns参数- maxnegativecachesize 100 - maxnegativecachesize 25

通过图形化界面限制DNS Cache占用的内存

导航到配置>交通管理>DNS,点击修改DNS设置,并设置以下参数:

  • 最大缓存大小(MB)
  • 最大负缓存大小(MB)

该任务指导管理员通过命令行限制反向记录的生存时间

在命令提示符下,输入:

设置dns参数-maxnegcacheTTL

例子:

设置dns参数-maxnegcacheTTL 360

使用GUI限制负记录的生存时间

  1. 导航到配置>交通管理>DNS
  2. 点击修改DNS设置并设置最大负缓存生存时间(秒)参数。

在缓存中保留DNS记录

攻击可以用不重要的条目淹没DNS缓存,但可以导致刷新已经缓存的合法记录,为新条目腾出空间。为了防止攻击用无效数据填充缓存,您可以保留合法记录,即使它们超过了它们的TTL值。

如果启用cacheNoExpire参数,缓存中当前的记录将被保留,直到禁用该参数。

请注意

  • 该选项仅在指定最大缓存大小(maxCacheSize参数)时使用。
  • 如果配置了maxnegcacheTTL,并且启用了cacheNoExpire,则cacheNoExpire优先。

通过命令行保留缓存中的DNS记录

在命令提示符下,输入:

设置dns参数-cacheNoExpire (ENABLED | DISABLED)

例子:

设置dns参数-cacheNoExpire ENABLED

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

  1. 导航到配置>交通管理>DNS并点击修改DNS设置
  2. 选择缓存不过期

开启DNS缓存旁路

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

该任务指导管理员通过CLI开启DNS缓存绕过功能

在命令提示符下,输入:

设置dns参数cachehitbypass (ENABLED | DISABLED)

例子:

设置dns参数-cacheHitBypass ENABLED

通过图形化方式开启DNS缓存旁路

  1. 导航到配置>交通管理>DNS并点击修改DNS设置
  2. 选择缓存命中旁路

防止Slowloris攻击

一个DNS查询跨越多个数据包,提出了一个潜在的威胁Slowloris攻击。Citrix ADC设备可以无声地丢弃被分割成多个数据包的DNS查询。

您可以设置splitPktQueryProcessing参数允许或丢弃一个DNS查询,如果查询被分割成多个数据包。

请注意:仅对DNS TCP生效。

通过CLI将DNS查询限制为单个报文

在命令提示符下,输入:

设置dns参数splitpktqueryprocessing(允许| DROP)

例子:

设置dns参数-splitPktQueryProcessing DROP

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

  1. 导航到配置>交通管理>DNS并点击修改DNS设置
  2. 拆分报文查询处理框中,选择允许下降

收集从缓存中服务的DNS响应的统计信息

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

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

代理模式现在还允许您确定从缓存服务的DNS响应的数量。属性中添加了以下选项以收集这些统计信息stat lb vserver 命令:

  • 请求—DNS或DNS_TCP虚拟服务器接收到的请求总数。包括转发到后端的请求和从缓存应答的请求。
  • Vserver支安打-转发到后端的请求总数。缓存处理的请求数是请求总数与虚拟服务器处理的请求数之差。
  • 反应-该虚拟服务器发送的响应总数。例如,如果一个DNS LB虚拟服务器接收了5个DNS请求,其中3个转发到后端,2个从缓存中处理,这些统计数据对应的值如下:
    • Vserver支安打: 3
    • 请求: 5
    • 反应: 5