ADC

配置 DNS 日志记录

您可以将 NetScaler 设备配置为记录其处理的 DNS 请求和响应。设备以 SYSLOG 格式记录 DNS 请求和响应。您可以选择记录 DNS 请求或 DNS 响应,或两者都记录,然后将 syslog 消息发送到远程日志服务器。日志消息可用于:

  • 审核对客户端的 DNS 响应
  • 审计 DNS 客户端
  • 检测并防止 DNS 攻击
  • 故障排除

根据您的配置,NetScaler 设备可以在 DNS 请求或响应中记录以下部分:

  • 标题部分
  • 问题部分
  • 答案部分
  • 权限部分
  • 附加 部分

DNS 配置文件

您可以使用 DNS 配置文件来配置希望 DNS 终端节点应用于 DNS 流量的各种 DNS 参数。在配置文件中,您可以启用日志记录、缓存和负缓存。

重要提示: 从 NetScaler 11.0 版本开始,已不建议使用全局 DNS 参数启用 DNS 缓存。您可以使用 DNS 配置文件启用或禁用 DNS 缓存。现在,您可以通过在 DNS 配置文件中启用 DNS 缓存并将 DNS 配置文件设置为单个虚拟服务器来为单个虚拟服务器启用 DNS 缓存。

DNS 配置文件支持以下类型的 DNS 日志记录:

  • DNS 查询日志记录
  • DNS 答案部分日志记录
  • DNS 扩展日志记录
  • DNS 错误记录

DNS 查询日志记录

您可以将 NetScaler 设备配置为仅记录设备上的 DNS 端点收到的 DNS 查询。

注意:如果在处理查询过程中发生错误,则会在 DNS 配置文件中设置此选项时记录错误。

以下是查询日志消息的示例:

DNS DNS_QUERY 143 0 :  U:10.102.27.70#61297:10.102.27.73#53/22142/Q/
(RD)/NO/1/0/0/0#test.com./1#
<!--NeedCopy-->

DNS 答案部分日志记录

您可以配置 NetScaler 设备以记录该设备发送给客户端的 DNS 响应中的所有 答案 部分。当 NetScaler 配置为 DNS 解析器或在 GLSB 用例中时,DNS 答案部分日志记录非常有用。

以下是 DNS 应答部分日志的示例:

DNS DNS_RESPONSE 6678 0 :  U:100.100.100.210#32776:100.100.100.10#
53/61373/Q/(RD,AA,RA,R)/NO/1/1/2/4#n1.citrix.com1./
28#ANS#AAAA/120/1111:2345:6789:ffab:abcd:effa:1234:3212##
<!--NeedCopy-->

DNS 扩展日志记录

要将 NetScaler 设备配置为记录 DNS 响应中的授权和 其他 部分,请启用带有答案部分日志记录的扩展日志记录。

注意:如果在处理查询或响应过程中出现错误,则如果在 DNS 配置文件中设置了此选项,则会记录错误。

以下是缓存查找完成且响应嵌入到数据包中时记录的消息示例:

DNS DNS_RESPONSE 2252 0 :  T:100.100.100.118#21411:100.100.100.10
#53/48537/Q/(RD,AA,CD,RA,R)/NO/1/1/2/6#a1.citrix.com1./1#ANS#A/
120/1.1.1.1##AUTH#citrix.com1/NS/120/n2.citrix.com1#n1.citrix.com1##ADD#n1.citrix.com1
/A/120/1.1.1.1#1.1.1.2##n1.citrix.com1/AAAA/120/
1111:2345:6789:ffab:abcd:effa:1234:3212##n2.citrix.com1/A/120/2.1.1.2
##n2.citrix.com1/AAAA/120/2222:faff:3212:8976:123:1241:64:ff9b##OPT/0/1280/DO##
<!--NeedCopy-->

DNS 错误记录

您可以配置 NetScaler 设备以记录其处理 DNS 查询或响应时发生的错误或故障。对于这些错误,设备会记录 DNS 标头、 问题 部分和 OPT 记录。

以下是在处理 DNS 请求或响应过程中发生错误时记录的消息示例:

DNS DNS_ERROR 149 0 :  U:10.102.27.70#27832:10.102.27.73#53/61153/Q/
(RD)/NO/1/0/0/0#test.com./1140#Packet Dropped
<!--NeedCopy-->

基于策略的日志

您可以通过配置 DNS 策略、重写或响应程序策略上的 LogAction 来配置基于 DNS 表达式的自定义日志记录。您可以指定只有在特定 DNS 策略的计算结果为 true 时才会发生日志记录。有关更多信息,请参阅为 DNS 配置基于策略的日志记录

了解 NetScaler 系统日志日志消息格式

NetScaler 设备使用以下 Syslog 格式记录 DNS 请求和响应:

<transport> :<client IP>#<client ephemeral port>:<DNS endpoint IP>#<port>
 : <query id> /opcode/header flags/rcode/question section count/answer section count
/ auth section count / additional section count #<queried domain name>
/<queried type>#...
<!--NeedCopy-->
  • <transport>:
    • T = TCP
    • U = UDP
  • <client IP>#< client ephemeral port >: 客户端 IP 地址和端口号

  • <DNS endpoint IP>#<port>:: NetScaler DNS 端点 IP 地址和端口号

  • <query id>: 查询 ID

  • <opcode>: 操作代码。支持的值:

    • 问:查询
    • I:反向查询
    • S:状态
    • X0:未分配
    • N:通知
    • U:更新
    • X1-10:未分配的值
  • <header flags>: 标志。支持的值:

    • RD:需要递归
    • TC:已截断
    • AA:权威回应
    • CD:检查已禁用
    • AD:经过验证的数据
    • Z:未分配
    • RA:递归可用
    • R:响应
  • <rcode>: 响应代码。支持的值:

    • NO:没有错误
    • F 格式错误
    • S:服务器故障
    • NX:不存在的域
    • NI:尚未实施
    • R:查询被拒绝
    • YX:名称在不能存在时存在
    • YXR:RR Set 在不能存在时存在
    • NXR:必须存在的 RR 集不存在
    • NAS:服务器不是区域的授权
    • NA:未授权
    • NZ:区域中未包含名称
    • X1-5:未分配
  • /问题部分计数/答案部分数/auth 章节计数/其他章节数: 问题部分、授权部分计数和 DNS 请求中的 其他 章节计数

  • <queried domain name>/<queried type>: DNS 请求中的查询的域和查询的类型

  • #ANS#<record type>/<ttl>/.. #AUTH#<domain name>/<record type>/<ttl>.. #ADD#<domain name>/<record type>/<ttl>…:

    在 DNS 响应中:

    如果在 DNS 配置文件中启用了答案部分日志记录,则会记录答案部分。如果在 DNS 配置文件中启用了扩展日志记录,则会记录授权和 他部分。根据记录类型的不同,日志格式会有所不同。有关详细信息,请参阅了解记录日志记录格式

    • ANS:答案部分
    • AUTH:权限
    • 添加: 加部分
  • OPT/<edns version>/UDP max payload size/DO:DNS 日志中的 OPT 记录格式

  • OPT/<EDNS version>/<UDP payload size>/<“DO”or empty based on whether DNSSEC OK bit is set or not>/<value of RDLEN>/ECS/<Q/R>/<option length>/<Family>/<Source Prefix-Length>/<Scope Prefix-Length>/<ECS Address>:

    如果 DNS 查询或响应包含 EDNS 客户端子网 (ECS) 选项,则该选项也会以 OPT 记录格式记录在 DNS 日志文件中。

    当发送带有包含 IPv4 或 IPv6 地址的 ECS 选项的 DNS 查询时,将使用以下任一选项记录 ECS 选项;

    • “ES/Q”表示日志中的值来自查询
    • “ES/R”表示日志中的值来自响应。

    Scope Prefix-Length 的值也进行了适当的设置。在 DNS 查询中,它被设置为零,对于响应,它被设置为计算出的值。

    下表介绍了各种情况下记录的详细信息:

场景 DNS 查询中设置的 ECS 选项 DNS 响应中设置的 ECS 选项 记录的详情
启用查询日志记录和扩展日志记录 ECS 选项使用字符串“ECS/R/”记录,范围前缀长度设置为计算值。
启用查询日志记录和扩展日志记录 ECS 选项使用字符串“ECS/Q”记录,范围前缀长度设置为零。
查询日志记录已启用,但未启用扩展日志记录 ECS 选项使用字符串“ECS/Q/”记录,范围前缀长度设置为零。
未启用查询日志记录和扩展日志记录 ECS 选项未记录。
查询日志记录已启用,但未启用扩展日志记录 ECS 选项使用字符串“ECS/Q/”记录,范围前缀长度设置为零。
查询日志记录未启用,但启用了扩展日志记录 ECS 选项使用字符串“ECS/R/”记录,范围前缀长度设置为计算值。
查询日志记录未启用,但启用了扩展日志记录 ECS 选项未记录。

了解记录日志记录格式

以下是 Syslog 消息中记录日志记录格式的示例:

<domainname>/<record type>/ <record ttl> / <resource record data>#<resource record data>#......##
<!--NeedCopy-->

其中,

记录类型 样本格式 资源记录数据/格式
地址 (A) 记录 A/5/1.1.1.1#1.1.1.2#1.1.1.3## IPv4 地址
AAAA 记录 AAAA/5/1::1#1::2#1::3## IPv6 地址
SOA 记录 SOA/3600/ns1.dnslogging.test./root.dnslogging.test./100/3600/3/3600/5## Origin 服务器、联系人和其他详细信息。Resource record format is: //////##
NS 记录 NS/5/ns1.dnslogging.test 名称服务器的主机名。
MX 记录 #MX/5/10/host1.dnslogging.test.#11/host2.dnslogging.test.## 首选项后跟邮件交换服务器主机名
CNAME 记录日志记录 CNAME/5/host1.dnslogging.test.## 典范名称
SRV 记录 SRV/5/1/2/3/host1.dnslogging.test.#4/5/6/host2.dnslogging.test.## Resource record format: ///#
TXT 记录 TXT/5/dns+logging## 数据包含所有文本。
NAPTR 记录 NAPTR/5/10/11////dnslogging#20/21/R/SIP//sip.dnslogging.test## Resource record format: /////#
DNSKEY 记录 DNSKEY/5/1/3/5/AwEAAanP0K+i5bfv5SU478L760EjDjnPqI2Ccx6JZgiDBZhSONP29GfO2bkP056xp7+9Wz8X2oo5sANaDwSzUVR0YtZdPw23gAaktH6pFvnwcIHa/PTFw5VcXyiUaDc+AnaOhNNYOPp7iQ6uTdT9cyuGWJ1OfZ0JRt+8EyX6iwRsLk7WSpz8KidvKs2ij9IXZ3OzaVEEMGY4SMfHIlLhqIho1fyADlbAoSsLEbr/7eqKv1/PLXSuVV9elwkH0pqWALUaSEBbmp49/jbCbc8cZKxzaON9p2jp2j4iodfC8cnEHAS2/4W1FEPpRTyYtcdBq6Uc2orBaaxjhsZELvRcWMr+pDc=#1/3/5/AwEAAbJhKdI21LP0pPxv0k1pFBNClZW97TB4FlCW4e4Fuyq7rY7+aiYdDVxV8N9ZXt4RT3MdNznMVMl/R1ldWLjbCf5bFu9khaM1ME8I25HPTS3J2wK5rjj4HMFRMycUKZCK0UOgyUzd6Fm5b3G04wMIAoqkDHeqlwe7yWGaw94NbZuL## Resource record format: ///#
PTR 记录 PTR/3600/test.com.#test4.com.## 域名

DNS 日志记录的局限性

DNS 日志记录有以下限制:

  • 如果启用了响应日志记录,则仅记录以下记录类型:

    • 地址 (A) 记录
    • AAAA 记录
    • SOA 记录
    • NS 记录
    • MX 记录
    • 别名记录
    • SRV 记录
    • TXT 记录
    • NAPTR 记录
    • DNSKEY 记录
    • PTR 记录

    对于所有其他记录类型,仅记录 L3/L4 参数、DNS 标头和问题部分。

  • 即使启用了响应日志记录,也不会记录 RRSIG 记录。

  • 不支持 DNS64。

  • 系统会根据默认配置文件中的设置记录 DNS 主动更新请求或响应。

  • 在虚拟服务器上,如果启用了无会话选项和响应日志记录,则会记录 L3/L4 参数、DNS 标头和 DNS 问题部分,而不是响应。

  • syslog 消息的最大大小为 1024 字节。

  • 如果您为操作类型为“重写响应”的 DNS 策略设置了 DNS 配置文件,NetScaler 设备不会记录查询或操纵的响应。要记录所需信息,必须在 DNS 策略中使用审核消息操作。

  • 由于 DNS 监视流量而导致的 DNS 事务不会被记录。

配置 DNS 日志记录

以下是配置 DNS 日志记录的概述:

  1. 创建 Syslog 操作并在操作中启用 DNS。
  2. 创建 Syslog 策略并在策略中指定 Syslog 操作。
  3. 全局绑定 Syslog 策略以启用所有 NetScaler 系统事件的日志记录。或者,将 Syslog 策略绑定到特定的负载平衡虚拟服务器。
  4. 创建 DNS 配置文件并定义要启用的以下任何类型的日志记录:
    • DNS 查询日志记录
    • DNS 答案部分日志记录
    • DNS 扩展日志记录
    • DNS 错误记录
  5. 根据您的要求配置以下任一项:
    • DNS 服务和 DNS 的虚拟服务器
    • ADNS 服务
    • 作为货运代理的 NetScaler
    • NetScaler 作为解析器
  6. 将创建的 DNS 配置文件设置为其中一个 DNS 实体。

使用 CLI 为配置为 DNS 代理的 NetScaler 配置 DNS 日志记录

  1. 添加 syslog 操作并在操作中启用 DNS。在命令提示符下,键入:

    add audit syslogAction <name> (<serverIP> | -lbVserverName <string>) [-serverPort <port>] -logLevel <logLevel> ... [-dateFormat <dateFormat>] [-logFacility <logFacility>] [-tcp ( NONE | ALL )] [-acl ( ENABLED | DISABLED )] [-timeZone ( GMT_TIME | LOCAL_TIME )] [-userDefinedAuditlog ( YES | NO )] [-appflowExport ( ENABLED |DISABLED )] [-lsn ( ENABLED | DISABLED )] [-alg ( ENABLED | DISABLED )] [-transport ( TCP | UDP )] [-tcpProfileName <string>] [-maxLogDataSizeToHold <positive_integer>] [-dns ( ENABLED | DISABLED)]
    <!--NeedCopy-->
    

    示例

    add audit syslogAction nssyslogact1 10.102.151.136 -logLevel CRITICAL ERROR WARNING NOTICE INFORMATIONAL DEBUG -logFacility LOCAL4 -timeZone LOCAL_TIME -dns ENABLED

  2. 创建系统日志策略并在策略中指定创建的系统日志操作。在命令提示符下,键入:

    add audit syslogPolicy <name> <rule> <action>

    示例

    add audit syslogPolicy syslogpol1 ns_true nssyslogact1

  3. 全局绑定 syslog 策略。在命令提示符下,键入:

    bind system global [<policyName> [-priority <positive_integer>]]

    示例

    bind system global syslogpol1

  4. 创建 DNS 配置文件并启用要配置的以下任何类型的日志:

    • DNS 查询日志记录
    • DNS 答案部分日志记录
    • DNS 扩展日志记录
    • DNS 错误记录

    在命令提示符下,键入:

    add dns profile <dnsProfileName> [-dnsQueryLogging ( ENABLED | DISABLED )] [-dnsAnswerSecLogging ( ENABLED | DISABLED )] [-dnsExtendedLogging (ENABLED | DISABLED )] [-dnsErrorLogging ( ENABLED | DISABLED )] [-cacheRecords ( ENABLED | DISABLED )] [-cacheNegativeResponses ( ENABLED | DISABLED )]

    示例

    add dns profile dnsprofile1 -dnsQueryLogging ENABLED

  5. 配置 DNS 类型的服务。在命令提示符下,键入:

    add service <name> <serverName> <serviceType> <port>

    示例

    add service svc1 10.102.84.140 dns 53

  6. 配置服务类型为 DNS 的负载平衡虚拟服务器。

    add lb vserver <name> <serviceType> <ip> <port>

    示例

    add lb vserver lb1 dns 100.100.100.10 53

  7. 将服务绑定到虚拟服务器。在命令提示符下,键入:

    bind lb vserver <name> <serviceName>

    示例

    bind lb vserver lb1 svc1

  8. 将创建的 DNS 配置文件设置为虚拟服务器。在命令提示符下,键入:

    set lb vserver <name> [ - dnsProfileName <string>]

    示例

    set lb vserver lb1 –dnsProfileName dnsprofile1

配置为 DNS 代理的 NetScaler 设备的示例 DNS 日志记录配置

> add audit syslogAction nssyslogact1 10.102.151.136 -logLevel
CRITICAL ERROR WARNING NOTICE INFORMATIONAL DEBUG -logFacility LOCAL4 -timeZone
LOCAL_TIME -dns ENABLED
Done
> add audit syslogPolicy syslogpol1 ns_true nssyslogact1
Done
> bind system global syslogpol1
Done
> add dns profile dnsprofile1 -dnsqueryLogging ENABLED
Done
> add lb vserver lb1 dns 100.100.100.10 53 –dnsProfileName dnsprofile1
Done
> add service svc1 10.102.84.140 dns 53
Done
> bind lb vserver lb1 svc1
Done
<!--NeedCopy-->

配置为 ADNS 的 NetScaler 设备的 DNS 日志配置示例

> add audit syslogAction nssyslogact1 10.102.151.136 -logLevel CRITICAL
ERROR WARNING NOTICE INFORMATIONAL DEBUG -logFacility LOCAL4 -timeZone LOCAL_TIME
-dns ENABLED
Done
> add audit syslogPolicy syslogpol1 ns_true nssyslogact1
Done
> bind system global syslogpol1
Done
> add dns profile dnsprofile1 -dnsqueryLogging ENABLED
Done
> add lb vserver lb1 dns 100.100.100.10 53 –dnsProfileName dnsprofile1
Done
> add service svc1 10.102.84.140 dns 53
Done
> bind lb vserver lb1 svc1
Done
<!--NeedCopy-->

配置为转发器的 NetScaler 设备的示例 DNS 日志记录配置

> add audit syslogAction nssyslogact1 10.102.151.136 -logLevel CRITICAL
ERROR WARNING NOTICE INFORMATIONAL DEBUG -logFacility LOCAL4 -timeZone LOCAL_TIME
-dns ENABLED
Done
> add audit syslogPolicy syslogpol1 ns_true nssyslogact1
Done
> bind system global syslogpol1
Done
> add dns profile dnsprofile1 -dnsqueryLogging ENABLED
Done
> add dns nameserver 8.8.8.8 –dnsProfileName dnsprofile1
Done
<!--NeedCopy-->

配置为解析器的 NetScaler 设备的 DNS 日志配置示例

> add audit syslogAction nssyslogact1 10.102.151.136
-logLevel CRITICAL ERROR WARNING NOTICE INFORMATIONAL DEBUG -logFacility LOCAL4
-timeZone LOCAL_TIME -dns ENABLED
Done
> add audit syslogPolicy syslogpol1 ns_true nssyslogact1
Done
> bind system global syslogpol1
Done
> add dns profile dnsprofile1 -dnsqueryLogging ENABLED
Done
> set dns parameter -recursion enABLED
Done
> add nameserver 1.1.1.100 -local dnsProfileName dnsprofile1
Done
<!--NeedCopy-->

为 DNS 配置基于策略的日志记录

基于策略的日志记录允许您为日志消息指定格式。日志消息的内容是使用“高级”策略表达式定义的。执行策略中指定的消息操作时,NetScaler 设备会根据表达式构造日志消息并将该消息写入日志文件。您可以将设备配置为仅在特定 DNS 策略评估为 True 时进行记录。

注意

如果您为请求端设置了带有 DNS 配置文件的 DNS 策略,NetScaler 设备将仅记录查询。

要为 DNS 策略配置基于策略的日志记录,您必须首先配置审核消息操作。有关配置审计消息操作的详细信息,请参阅 配置 NetScaler 设备以进行审核日志记录。配置审核消息操作后,在 DNS 策略中指定消息操作。

使用 CLI 为 DNS 策略配置基于策略的日志记录

在命令提示符下,键入以下命令为 DNS 策略配置基于策略的日志记录并验证配置:

-  add dns action <actionName> <actionType> [-IPAddress <ip_addr|ipv6_addr> ... | -viewName <string> | -preferredLocList <string> ...] [-TTL <secs>] [-dnsProfileName <string>]
-  set dns policy <name> [<rule>] [-actionName <string>] [-logAction <string>]
-  show dns policy [<name>]
<!--NeedCopy-->

示例 1:

在 GSLB 部署中,如果要使用不同的 IP 地址响应来自特定子网的客户端请求,而不是使用用于一般用途的 IP 地址(例如内部用户的 IP 地址)进行响应,则可以将操作类型配置为 DNS 视图的 DNS 策略。在这种情况下,您可以在指定的 DNS 操作上配置 DNS 日志记录,以便记录特定的响应。

> add dns profile dns_prof1 -dnsqueryLogging enABLED -dnsanswerSecLogging enABLED
 Done
> add dns view dns_view1
 Done
> add dns action dns_act1 viewName -view dns_view1 –dnsprofilename dns_prof1
 Done
> add dns policy dns_pol1 "CLIENT.IP.SRC.APPLY_MASK(255.255.255.0).EQ(100.100.100.0)”
dns_act1
 Done
> bind dns global dns_pol1 100 -gotoPriorityExpression END -type REQ_DEFAULT
 Done
> bind gslb service site_1_svc -viewName dns_view1 123.1.1.1
 Done
> bind gslb service site_5_svc -view dns_view1 132.1.1.1
 Done
<!--NeedCopy-->

注意: 在上述配置中,如果查询在 GSLB 虚拟服务器上配置的域,例如 sampletest.com,则子网 100.100.100.0/24 的所有内部用户都将使用 DNS 查看 IP 地址提供服务,并记录响应。不会记录客户端对其他子网的请求。

示例 2:

如果您只想记录域 example.com的查询,则可以创建启用查询日志记录的 DNS 配置文件,并将 DNS 配置文件设置为操作类型为 NOOP的 DNS 操作,然后创建 DNS 策略并设置 DNS 操作。例如:

>add dns profile query_logging -dnsqueryLogging ENABLED
Done
>add dns action dns_act1 NOOP -dnsprofileName query_logging
Done
>add dns policy dns_pol1 DNS.REQ.QUESTION.DOMAIN.EQ("example.com")  dns_act1
Done
<!--NeedCopy-->

为 DNS 策略配置日志操作以记录客户端 IP 地址

日志记录操作可用于使用以下表达式记录 DNS 查询的源 IP,并将其用作 DNS 策略中日志操作的一部分。

> add audit messageaction log_act_custom INFORMATIONAL ""ClientIP:"CLIENT.IP.SRC" ECS IP:"+((DNS.REQ.OPT.ECS.IP).typecast_text_t ALT "NONE")"
Done
<!--NeedCopy-->

前面的表达式捕获了IP标头中的源IP和来自DNS ECS选项的ECS IP,并且可以根据需要排除其中任何一个。

用于记录客户端 IP 地址的 NetScaler 设备的 DNS 日志记录配置示例

如果要对DNS查询的日志记录进行采样,可以使用以下表达式来完成。这将记录10个查询中的一个。

> add audit messageaction log_action_srcip_1of10 INFORMATIONAL ""OneOf10: Source IP : "+client.ip.src"
Done
> add responder policy logsrcip_1of10 "sys.random.mul(10).lt(1)" NOOP -logAction log_action_srcip_1of10
Done
<!--NeedCopy-->