内网DNS解析日志转存SLS

更新时间:
复制 MD 格式
重要

您只能对已经开启了流量分析的Region、VPC做日志转存。如果关闭流量分析服务,会导致日志转存服务没有日志数据。具体请参考开启/关闭/设置流量分析。

应用场景

出于合规和安全性的考虑,公司通常要求对网络日志进行存储和分析。通过内网DNS日志,可以清晰了解企业内网域名的使用情况,帮助企业对内网用户行为进行审计,及时发现潜在的安全问题。

什么是内网域名解析日志

内网域名解析日志(Privatezone Resolution Log)记录了指定阿里云UID下所有VPC网络内终端产生的DNS域名解析请求和应答(包括请求的地域、请求的VPC ID、源IP地址、目的IP地址(DNS服务地址)、查询的域名、记录类型、应答的结果等),终端请求的这些域名既包含了配置在PrivateZone上的内网权威域名,也包含了外部公网域名。为了满足用户可以快速、简单实现多账号、多地域场景下内网DNS日志的采集、管理、中心化查询分析等需求,DNS与SLS联合开发,在SLS日志审计应用中发布一键开启内网DNS日志的功能。

内网DNS日志记录的是内网终端的域名解析请求和应答记录,请求的域名主要来自于以下四类:

1、内置权威域名

内网DNS解析是基于阿里云专有网络VPC(Virtual Private Cloud)环境的私有DNS服务。该服务允许您在一个或多个VPC中将自定义私有域名映射到IP地址。通过内网DNS解析,您可以方便地使用自定义私有域名来管理VPC中的ECS主机名、SLB、OSS等阿里云资源,而这些私有域名在VPC之外将无法访问。此外,您还可以通过专线或VPN等连接方式,将您的VPC与传统数据中心相连,实现传统数据中心与阿里云VPC之间通过私有域名进行资源互相访问。

2、配置在飞天云平台DNS(云底座DNS)上的云产品实例域名

云底座DNS,是内置于阿里云飞天平台的底层DNS,阿里云的所有云产品提供的实例域名,都是通过云底座DNS进行解析的。

3、转发到外部DNS上的外部域名

外部DNS,通常指的是您数据中心的内网DNS系统,通过转发管理的功能,将来自VPC的域名解析请求,转发到您数据中心的DNS系统进行解析,从而实现阿里云VPC的ECS主机可以访问您数据中心的应用域名。

4、递归到外部公网权威DNS上的公网域名

公网权威DNS,是特定公网域名(例如“example.com”)在域名注册局或者域名注册商处所设置的DNS服务器。公网权威DNS可以为根域名、顶级域名和其他各级域名提供域名权威数据的管理和解析服务。公网权威DNS服务器只对自己所拥有的域名进行域名解析,对于不是自己的域名则拒绝访问。

开通内网域名解析日志转存SLS

内网域名解析日志转存 SLS 仅对白名单账号开放。如需配置转存,请联系您的阿里云商务经理或通过提交工单申请加入白名单。

  1. 访问云解析DNS-内网域名解析。

  2. 开启右上角的 Private Zone 流量分析开关。若已开启,则点击开关右侧的设置按钮。

  3. 完成表单填写并提交。

    表单项

    说明

    区域Region列表

    选择需要开启流量分析的地域。

    专有网络VPC列表

    根据选择的地域,展示地域下可选择的VPC。若该选项为空,则代表默认分析选定地域的所有VPC的流量。

    部署地域

    日志分析服务器部署地区,无需用户选择。流量分析开启后,会在部署地分析解析日志数据。

    日志存储与分析

    开通内网域名解析日志转存 SLS 可选择:

    • 仅转存阿里云日志服务 SLS:云解析DNS不提供存储和分析服务,直接转存到SLS。

    • Private Zone 存储并统计分析,同时转存阿里云日志服务 SLS:云解析DNS的内网域名解析服务存储并提供报表分析服务同时转存一份日志到SLS。

    转存配置

    为每个需要转存的地域填写 SLS 相关信息:

    • 地域:选择日志存储地域。

    • 日志服务Project:创建Project或选择已有的Project。

    • 日志服务Logstore:创建Logstore或选择已有的Logstore。

  4. 单击确定保存配置。保存后流量分析保持开启状态。

查看内网域名解析日志转存明细

  1. 登录日志服务控制台。

  2. 在 Project 列表中选择 DNS 控制台转存配置中指定的 Project。

  3. 在左侧日志库列表,选择转存配置中指定的 Logstore,查看解析日志明细。

内网域名解析日志字段信息

1、请求日志示例

日志字段

说明

示例数据(仅做格式参考)

dns_msg_flags

DNS信息Flags:

  • RD:表示期望进行递归查询;

  • AD:请求报文一般不会携带此字段,如果携带此标志位,没有实际意义。

  • CD:表示应答服务器需应答,不管DNSSEC验证是否通过;

RD

dns_msg_id

DNS信息ID,表示本次DNS查询的唯一识别码

30914

dst_addr

目的IP地址

100.100.2.136

dst_port

目的端口

53

ecs_hostname

ECS 主机名

iZbp1b1mx9fhe34k*****

ecs_id

ECS 实例ID

i-bp1b1mx9fhe34kh****

module_type

模块日志类型,请求日志只有全局日志:

  • GLOBAL:全局

GLOBAL

query_name

查询域名名称

www.example.com.

query_type

查询记录类型,例如A,AAAA,CNAME,TXT,MX等

A

region_id

地域

cn-shanghai

src_addr

源IP地址

192.168.0.1

src_port

源端口

42071

transport

传输协议

UDP

user_id

阿里云账号ID

139749398683****

vpc_id

VPC实例ID

vpc-bp1eyy43516itw78****

edns

DNS扩展协议,查询/应答日志可能包含

"flags: DO udp: 1408 CLIENT-SUBNET: 1.1.XX.XX/32/24"

2、全局应答日志示例

日志字段

说明

示例数据(仅做格式参考)

answer_rrset

回答资源记录集

Json array:

["www.example.com. 600 A 192.168.1.1", "www.example.com 600 A 192.168.1.2", ]

authority_rrset

权威资源记录集

Json array:

["example.com. 600 SOA ns1.example.com. hostmaster.example.com. 2023010101 3600 1200 3600 360" ]

additional_rrset

其他资源记录集

Json array:

["ns1.example.com. 600 A 100.100.2.136"]

dns_msg_flags

  • QR:表示服务端响应包;

  • RD:表示期望进行递归查询;

  • AA:表示是权威服务器应答;

  • TC:表示报文过长被截断;

  • AD:表示已验证DNSSEC数字签名;

  • CD:表示应答服务器需应答,不管DNSSEC验证是否通过;

QR

dns_msg_id

DNS信息ID,表示本次DNS查询的唯一识别码

30914

dst_addr

目的IP地址

192.168.0.1

dst_port

目的端口

42071

ecs_hostname

ECS 主机名

iZbp1b1mx9fhe34k*****

ecs_id

ECS 实例ID

i-bp1b1mx9fhe34kh****

module_type

模块日志类型:

  • GLOBAL:全局

GLOBAL

query_name

查询域名名称

www.example.com.

query_type

查询记录类型,例如A,AAAA,CNAME,TXT,MX等

A

rcode

响应状态码:

  • 0: NOERROR,没有错误查询域名成功

  • 1: FORMERR,格式错误,DNS 无法解析该请求

  • 2: SERVFAIL,DNS 服务器遇到内部错误或者超时引起的解析失败

  • 3: NXDOMAIN,域名未找到

  • 4: NOTIMP,服务器不支持指定的操作代码

  • 5: REFUSED,DNS服务器因为策略或者安全原因拒绝应答

0

region_id

地域

cn-shanghai

resolve_path

解析路径,仅全局应答日志包含。使用半角逗号“,”分割,分别表示权威加速区、权威普通区、缓存模块、转发模块、递归模块

1:表示经过该模块

0:表示跳过该模块

当涉及多级CNAME解析时,可能会出现多位为“1”的情况。

1,0,0,0,0

rt

响应时延:

  • 全局应答rt表示整个查询到应答的时延;

  • 模块日志rt表示在模块内部消耗的时延

10ms

src_addr

源IP地址

100.100.2.136

src_port

源端口

53

transport

传输协议

UDP

user_id

阿里云账号ID

139749398683****

vpc_id

VPC实例ID

vpc-bp1eyy43516itw78****

edns

DNS扩展协议,查询/应答日志可能包含

"flags: DO udp: 1408 CLIENT-SUBNET: 1.1.XX.XX/32/24"

3、模块应答日志示例

日志字段

说明

示例数据(仅做格式参考)

answer_rrset

回答资源记录集

Json array:

["www.example.com. 600 A 192.168.1.1", "www.example.com 600 A 192.168.1.2", ]

authority_rrset

权威资源记录集

Json array:

["example.com. 600 SOA ns1.example.com. hostmaster.example.com. 2023010101 3600 1200 3600 360" ]

additional_rrset

其他资源记录集

Json array:

["ns1.example.com. 600 A 100.100.2.136"]

dns_msg_id

DNS信息ID,表示本次DNS查询的唯一识别码

30914

dst_addr

目的IP地址

100.100.2.136

dst_port

目的端口

53

ecs_hostname

ECS 主机名

iZbp1b1mx9fhe34k*****

ecs_id

ECS 实例ID

i-bp1b1mx9fhe34kh****

module_type

模块日志类型:

  • AUTH_FAST:权威加速区

  • AUTH_SLOW:权威普通区

  • FORWARD:转发模块

  • CACHE:缓存模块

  • RECURSION:递归模块

AUTH_FAST

query_name

查询域名名称

www.example.com.

query_type

查询记录类型,例如A,AAAA,CNAME,TXT,MX等

A

rcode

响应状态码:

  • 0: NOERROR,没有错误查询域名成功

  • 1: FORMERR,格式错误,DNS 无法解析该请求

  • 2: SERVFAIL,DNS 服务器遇到内部错误或者超时引起的解析失败

  • 3: NXDOMAIN,域名未找到

  • 4: NOTIMP,服务器不支持指定的操作代码

  • 5: REFUSED,DNS服务器因为策略或者安全原因拒绝应答

0

region_id

地域

cn-shanghai

rt

响应时延:

  • 全局应答rt表示整个查询到应答的时延;

  • 模块日志rt表示在模块内部消耗的时延

1ms

src_addr

源IP地址

192.168.0.1

src_port

源端口

42071

transport

传输协议

UDP

user_id

阿里云账号ID

139749398683****

vpc_id

VPC实例ID

vpc-bp1eyy43516itw78****

edns

DNS扩展协议,查询/应答日志可能包含

"flags: DO udp: 1408 CLIENT-SUBNET: 1.1.XX.XX/32/24"

日志分析最佳实践

下面列举几类常见的内网DNS日志的查询分析场景,用户也可以根据实际需求自定义查询分析语句。此外,用户还可以将SQL语句查询结果添加到仪表盘、或者另存为快速查询、另存为告警等进行后续分析处理。

1、DNS解析结果类

某时间段内,指定VPC下,不同查询域名的DNS请求量分布。

* and vpc_id: vpc-2ze9dducyc3t6p8aeksb3 |select count(*) as total_req, query_name group by query_name

执行上述查询语句后,在统计图表页签下以饼图形式展示各查询域名的请求量占比分布。

2、DNS解析RT类

某时间段内,指定VPC,指定域名,指定queryType的DNS解析RT统计分析。

* and vpc_id: vpc-2ze9dducyc3t6p8aeksb3 and query_name: "metrichub-cn-beijing.aliyun.com." and query_type: A | select stddev(__time__) as RT, dns_msg_id GROUP by dns_msg_id

查询结果为两列数据表格,列名分别为 RT 和 dns_msg_id,其中所有记录的 RT 值均为 0.0,表示按 dns_msg_id 分组后各组时间标准差为 0,共返回 100 条记录。

3、解析异常分析

客户的阿里云ECS服务器查询域名时存在解析异常情况,客户开启了内网域名解析日志并将相关日志转存至SLS,进一步分析解析异常原因。在SLS日志记录内可能会同时存在如下三种日志内容:请求日志、全局应答日志、模块应答日志。

分析过程如下:

  1. 可以通过src_port和dns_msg_id参数,识别过滤一次解析请求的全部日志内容。

  2. 可以通过如下字段区分3种日志的区别:

    1. rt字段为空的是请求日志

    2. resolve_path为空的是模块应答日志

    3. 不为空的是全局应答日志

  3. 异常结果示例

    根据前面的区分规则,第一条为请求日志,第二条为模块应答日志,第三条为全局应答日志。

    三条日志的 dns_msg_id 均为 59241,其中第一条 module_type 为 GLOBAL、dns_msg_flags 为 RD;第二条 module_type 为 RECURSION、dns_msg_flags 为空;第三条 module_type 为 GLOBAL、dns_msg_flags 为 QR RD,dst_addr 为 100.100.2.136。

    1. 客户端发起DNS解析请求,表示期望进行递归查询;

    2. 向递归模块发起请求,递归模块解析失败;

    3. 100.100.2.136 返回客户端结果,解析失败。

  4. 正常结果示例

    DNS 内网日志查询结果表格中,关键字段及其正常值包括:_source_ 为 log_dispatch,_topic_ 为 dns_intranet_log,module_type 为 GLOBAL 或 CACHE,query_type 为 A,dst_addr 为 100.100.2.136,dst_port 为 53,transport 为 UDP,answer_rset 包含 CNAME 解析记录,node_id 为 cn-shanghai。

    1. 客户端发起DNS解析请求,表示期望进行递归查询;

    2. 向递归模块发起请求,递归模块解析成功;

    3. 100.100.2.136返回客户端解析结果。