第217篇:防火墙场景的 DNS 过滤与防域名劫持

关键词:DNS过滤、域名劫持、DNS欺骗、DNSSEC、防火墙DNS安全、URL过滤、DNS日志、恶意域名

一、引言

前面六篇文章系统介绍了 IPsec VPN 和 GRE 隧道的各种应用场景。从本篇开始,我们将视角转向网络安全攻击防护领域。DNS(Domain Name System)是互联网的基础设施,将人类可读的域名解析为 IP 地址。然而,DNS 协议本身设计于信任环境,缺乏内置的安全机制,使其成为网络攻击的重要入口。

域名劫持、DNS 欺骗、DNS 隧道、恶意域名解析等攻击手段,已成为企业网络中最常见的安全威胁之一。防火墙作为网络边界的关键设备,在 DNS 安全防护中承担着重要角色。

二、核心概念

2.1 DNS 协议基础回顾

DNS 使用 UDP 53 端口(默认)和 TCP 53 端口(zone transfer 和大数据响应)进行通信。DNS 报文结构简洁,包含查询(Query)和响应(Response)两种类型。

字段 说明
Transaction ID 用于匹配查询和响应的16位标识符
Flags 查询/响应、递归、权威等标志位
Question 查询的域名和记录类型
Answer 解析结果(A/AAAA/CNAME 等记录)
Authority 权威名称服务器信息
Additional 额外记录(如 NS 记录的 IP 地址)

2.2 DNS 攻击类型

攻击类型 说明 影响
DNS 欺骗(DNS Spoofing) 攻击者发送伪造的 DNS 响应,将域名解析到恶意 IP 用户被重定向到钓鱼网站
DNS 劫持 在 DNS 解析链路中篡改响应,常见于运营商 DNS 劫持 广告注入、恶意软件分发
DNS 缓存投毒 向 DNS 服务器的缓存中注入恶意记录 大面积用户受影响
DNS 隧道 利用 DNS 协议传输恶意数据,绕过防火墙检测 数据泄露、C&C 通信
DNS 放大攻击 利用开放的 DNS 服务器进行 DDoS 攻击 目标服务器被流量淹没
恶意域名解析 解析恶意域名(钓鱼、木马、挖矿等) 感染恶意软件

2.3 域名劫持原理

域名劫持原理 - 图示

2.4 DNS 安全防护层次

防护层次 防护能力 实现方式
网络层 限制 DNS 流量来源和去向 ACL、安全策略
协议层 检测 DNS 协议异常 DNS 协议分析
应用层 识别恶意域名和 URL URL 过滤、域名黑白名单
加密层 防止 DNS 被窃听和篡改 DNSSEC、DoH、DoT
行为层 检测 DNS 隧道等异常行为 DNS 日志分析、AI 检测

三、技术细节

3.1 防火墙 DNS 过滤机制

防火墙的 DNS 过滤功能基于以下机制实现:

  1. DNS 报文解码:防火墙深度解析 DNS 报文,提取查询的域名和返回的 IP 地址
  2. 域名匹配:将查询域名与内置/外部的恶意域名库进行匹配
  3. IP 地址验证:将 DNS 返回的 IP 地址与威胁情报库中的恶意 IP 进行比对
  4. 响应篡改检测:对比 DNS 查询和响应的一致性,检测劫持行为
  5. URL 过滤联动:DNS 过滤与 URL 过滤联动,实现更精准的控制

3.2 DNSSEC(DNS 安全扩展)

DNSSEC 通过数字签名验证 DNS 数据的完整性和来源真实性,防止 DNS 欺骗和劫持。

记录类型 说明
RRSIG 资源记录集的签名
DNSKEY 域名区域的公钥
DS(Delegation Signer) 父子区域之间的信任链
NSEC/NSEC3 证明某条记录不存在(否定响应签名)

3.3 DNS 隧道检测特征

检测特征 说明
超长子域名 正常 DNS 查询的子域名长度通常较短(<30 字符)
高熵域名 域名中包含大量随机字符,熵值异常高
TXT 记录查询 DNS 隧道常使用 TXT 记录传输数据
高频查询 短时间内对同一域名的子域名进行大量查询
大量唯一子域名 对同一父域名的不同子域名查询数量异常
DNS 流量占比 DNS 流量占总流量比例异常高

3.4 DNS 日志关键字段

字段 说明
源 IP 发起 DNS 查询的客户端地址
查询域名 用户请求解析的完整域名
查询类型 A、AAAA、CNAME、MX、TXT 等
响应 IP DNS 服务器返回的 IP 地址
响应代码 NOERROR、NXDOMAIN、SERVFAIL 等
响应时间 DNS 查询的延迟
拦截动作 允许、拦截、重定向

四、实战配置/案例分析

4.1 华为 USG 防火墙:DNS 过滤配置

# ========== DNS过滤与安全配置 ==========
system-view
sysname HQ-Firewall

# 1. 配置DNS过滤功能
dns-filter enable

# 2. 配置DNS服务器白名单
dns-filter dns-server whitelist
 server-address 10.100.1.53
 server-address 8.8.8.8
 server-address 114.114.114.114
quit

# 3. 配置域名黑名单(手动添加恶意域名)
dns-filter domain blacklist
 domain evil-site.com
 domain malware-cnc.net
 domain phishing-domain.org
quit

# 4. 配置DNS过滤策略
dns-filter policy DNS-Security
 domain blacklist action block
 url-filter profile Default
 application-filter enable
 tunnel-detection enable
quit

# 5. 配置安全策略关联DNS过滤
security-policy
 rule name DNS-Allow
  source-zone trust
  destination-zone untrust
  destination-address 10.100.1.53 32
  action permit
  service dns
  dns-filter policy DNS-Security
 rule name DNS-Outbound
  source-zone trust
  destination-zone untrust
  destination-address 8.8.8.8 32
  action permit
  service dns
  dns-filter policy DNS-Security
quit

# 6. 配置DNS隧道检测
application-filter
 profile AF-DNS-Security
  application dns
   tunnel-detection enable
   max-query-length 255
   high-entropy-detection enable
   txt-record-limit 10
  quit
 quit
quit

# 7. 配置DNS日志
info-center source dns-filter
  log level informational
  info enable
quit

4.2 配置 DNS 重定向(拦截恶意域名)

# ========== DNS重定向配置 ==========
# 当DNS查询命中黑名单时,将域名解析到本地拦截页面

# 配置本地HTTP服务器(拦截页面)
http server enable
http server ip 10.100.1.10

# 配置DNS重定向地址
dns-filter redirect-address 10.100.1.10

# 当检测到恶意域名时,返回重定向地址
dns-filter policy DNS-Security
 domain blacklist action redirect
 domain whitelist action pass
 action log
quit

4.3 故障排查案例:内部用户被运营商 DNS 劫持

故障现象:某企业多名用户反映访问百度、淘宝等常用网站时被跳转到博彩网站或广告页面。经排查发现,部分 DNS 响应返回了非正常的 IP 地址。

排查步骤:

  1. 检查 DNS 查询日志
display dns-filter log

发现多个正常域名(如 www.baidu.com)的 DNS 响应返回了异常 IP 地址(如 222.186.30.77,已知为劫持 IP)。

  1. 分析 DNS 流量走向
display security-policy rule-name DNS-Allow

发现企业防火墙配置了允许 DNS 流量到公网 DNS(8.8.8.8),但部分终端自行配置了运营商 DNS 作为首选 DNS,绕过企业 DNS 服务器。

  1. 抓包分析 DNS 响应
packet-capture capture-name dns-check interface GigabitEthernet 1/0/0
tcp-port 53 or udp-port 53
display packet-capture dns-check

发现 DNS 响应包的源 IP 不是配置的 DNS 服务器(8.8.8.8),而是运营商的网关地址,说明 DNS 响应在传输链路中被运营商注入。

  1. 根因分析 运营商在其 DNS 递归解析链路中进行了劫持,将部分域名的解析结果替换为广告或博彩网站的 IP。由于部分终端直连互联网 DNS,企业防火墙的 DNS 过滤无法覆盖这些流量。

  2. 解决方案

# 方案一:强制所有DNS流量经过企业DNS服务器
security-policy
 rule name Force-DNS
  source-zone trust
  destination-zone untrust
  service dns
  destination-address-except 10.100.1.53 32
  action deny
 rule name Allow-Internal-DNS
  source-zone trust
  destination-zone local
  service dns
  action permit
 rule name DNS-Out
  source-zone trust
  destination-zone untrust
  destination-address 8.8.8.8 32
  action permit
  service dns
  dns-filter policy DNS-Security
quit

# 方案二:部署DNS服务器白名单,仅允许企业DNS
dns-filter dns-server whitelist
 server-address 10.100.1.53
 server-address 8.8.8.8
quit

dns-filter policy DNS-Security
 unauthorized-dns-server action block
quit

# 方案三:启用DNSSEC验证(需要上游DNS支持)
dns-filter dnssec-validation enable

部署方案一和方案二后,所有 DNS 查询强制经过企业 DNS 服务器和防火墙的 DNS 过滤策略,DNS 劫持现象消除。

五、总结

知识点 要点
DNS 攻击类型 欺骗、劫持、缓存投毒、隧道、放大攻击
域名劫持原理 攻击者在 DNS 解析链路中注入伪造响应
防火墙 DNS 过滤 域名黑白名单、URL 过滤、隧道检测
DNSSEC 通过数字签名确保 DNS 数据完整性
DNS 隧道检测 超长子域名、高熵域名、TXT 记录滥用
防护策略 强制走企业 DNS、DNS 白名单、重定向拦截
日志审计 DNS 查询日志、拦截日志、异常行为告警
运营商劫持 强制所有 DNS 流量经过企业防火墙是最佳方案

思考

  1. DNS 协议基于 UDP 设计,为什么这种设计使 DNS 更容易受到欺骗攻击?改用 TCP 能否彻底解决 DNS 欺骗问题?
  2. DNS over HTTPS(DoH)和 DNS over TLS(DoT)可以加密 DNS 查询,但加密后的 DNS 流量使防火墙无法进行域名过滤。企业网络应如何平衡隐私保护和安全管理?
  3. DNS 隧道攻击利用合法 DNS 协议传输恶意数据。如果企业完全封锁外部 DNS 查询,是否就能杜绝 DNS 隧道?完全封锁会带来哪些业务影响?

下篇预告:第218篇:网络攻击基础:SYN Flood、ICMP Flood