您只能在SLS配置对已经开启了流量分析的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服务器只对自己所拥有的域名进行域名解析,对于不是自己的域名则拒绝访问。
内网域名解析日志字段信息
1、请求日志示例
|
日志字段 |
说明 |
示例数据(仅做格式参考) |
|
dns_msg_flags |
DNS信息Flags:
|
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 |
|
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 |
|
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 |
|
query_name |
查询域名名称 |
www.example.com. |
|
query_type |
查询记录类型,例如A,AAAA,CNAME,TXT,MX等 |
A |
|
rcode |
响应状态码:
|
0 |
|
region_id |
地域 |
cn-shanghai |
|
resolve_path |
解析路径,仅全局应答日志包含。使用半角逗号“,”分割,分别表示权威加速区、权威普通区、缓存模块、转发模块、递归模块 1:表示经过该模块 0:表示跳过该模块 当涉及多级CNAME解析时,可能会出现多位为“1”的情况。 |
1,0,0,0,0 |
|
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 |
|
query_name |
查询域名名称 |
www.example.com. |
|
query_type |
查询记录类型,例如A,AAAA,CNAME,TXT,MX等 |
A |
|
rcode |
响应状态码:
|
0 |
|
region_id |
地域 |
cn-shanghai |
|
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日志审计
1、什么是审计日志
日志审计服务是阿里云日志服务SLS平台下的一款应用,它在继承了日志服务SLS的全部功能以外,还有强大的多账号管理及跨地域采集阿里云各种云产品日志的功能,并且支持通过资源目录(Resource Directory)的方式有组织地统一管理和记录多账号下云产品实例的日志信息。
2、内网DNS审计日志开通
内网DNS日志审计功能目前在华东2(上海)、华北2(北京)、华南3(广州)、华南1(深圳)、华东1(杭州)、华北1(青岛)、华北3(张家口)和新加坡、中国香港、华南1 金融云等地域开放使用,如果您有其他地域日志审计需求,可通过工单反馈给产品侧,产品侧会综合评估后决定是否支持。
3、其他功能
多账号配置
日志审计强大的跨账号采集能力可以满足用户多账号场景下将成员账号的内网DNS日志统一采集到中心账号的需求。日志审计支持两种多账号管理配置:
-
资源目录管理模式
-
自定义鉴权管理模式
详细配置步骤请参见采集多账号云产品日志。
Terraform配置
Terraform是一种开源工具,其命令行接口(CLI)提供了一种简单机制,用于将配置文件部署到阿里云或其他任意支持的云上,并对其进行版本控制。通过Terraform配置日志审计下云产品日志采集的详细步骤可以参考使用Terraform配置日志审计服务。
下面是一个通过Terraform配置内网DNS日志采集的配置示例:
resource "alicloud_log_audit" "dns_example" {
display_name = "tf-audit-test-dns"
aliuid = "1480************" //中心账号
variable_map = {
"dns_intranet_enabled" = "true", //开启内网DNS日志的采集
"dns_sync_enabled" = "true", //开启区域化日志同步到中心project
"dns_intranet_ttl" = "3", //日志区域化存储天数3天
"dns_sync_ttl" = "185" //日志中心化存储天数185天
"dns_intranet_collection_policy" = "accept tag.env == \\\"test\\\"\\ndrop \\\"*\\\"" //仅开启标签健为env下标签值为prod的VPC实例下的内网DNS日志
}
multi_account = ["1039************"] //多账号配置
}
采集策略
内网DNS日志可以进行精细采集管理。内网DNS日志最小采集粒度为VPC实例,可以根据VPC实例的信息进行DNS日志的采集控制。
用户可以在日志审计控制台进行采集策略的管理配置。以下是一个“仅开启标签键为env、标签值为prod的所有VPC实例下的内网DNS日志”的策略配置示例。通过采集策略的配置,可以帮助用户实现精细化采集管理,减少不必要的日志采集。
在采集策略配置弹窗中,可开关高级编辑模式和默认采集策略。待添加策略可选择动作(保持/drop/accept),并基于账号、地域、实例ID、实例名或标签属性设置过滤条件。已添加的策略支持编辑和删除,例如 drop instance.id == "vpc-2zettfw..." 丢弃指定 VPC 实例的日志,accept "*" 为默认接受策略。
日志分析最佳实践
下面列举几类常见的内网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日志记录内可能会同时存在如下三种日志内容:请求日志、全局应答日志、模块应答日志。
分析过程如下:
-
可以通过
src_port和dns_msg_id参数,识别过滤一次解析请求的全部日志内容。 -
可以通过如下字段区分3种日志的区别:
-
rt字段为空的是请求日志 -
resolve_path为空的是模块应答日志 -
不为空的是全局应答日志
-
-
异常结果示例
根据前面的区分规则,第一条为请求日志,第二条为模块应答日志,第三条为全局应答日志。
三条日志的
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。-
客户端发起DNS解析请求,表示期望进行递归查询;
-
向递归模块发起请求,递归模块解析失败;
-
100.100.2.136 返回客户端结果,解析失败。
-
-
正常结果示例
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。-
客户端发起DNS解析请求,表示期望进行递归查询;
-
向递归模块发起请求,递归模块解析成功;
-
100.100.2.136返回客户端解析结果。
-