第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 过滤功能基于以下机制实现:
- DNS 报文解码:防火墙深度解析 DNS 报文,提取查询的域名和返回的 IP 地址
- 域名匹配:将查询域名与内置/外部的恶意域名库进行匹配
- IP 地址验证:将 DNS 返回的 IP 地址与威胁情报库中的恶意 IP 进行比对
- 响应篡改检测:对比 DNS 查询和响应的一致性,检测劫持行为
- 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 地址。
排查步骤:
- 检查 DNS 查询日志
display dns-filter log
发现多个正常域名(如 www.baidu.com)的 DNS 响应返回了异常 IP 地址(如 222.186.30.77,已知为劫持 IP)。
- 分析 DNS 流量走向
display security-policy rule-name DNS-Allow
发现企业防火墙配置了允许 DNS 流量到公网 DNS(8.8.8.8),但部分终端自行配置了运营商 DNS 作为首选 DNS,绕过企业 DNS 服务器。
- 抓包分析 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 响应在传输链路中被运营商注入。
-
根因分析 运营商在其 DNS 递归解析链路中进行了劫持,将部分域名的解析结果替换为广告或博彩网站的 IP。由于部分终端直连互联网 DNS,企业防火墙的 DNS 过滤无法覆盖这些流量。
-
解决方案
# 方案一:强制所有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 流量经过企业防火墙是最佳方案 |
思考
- DNS 协议基于 UDP 设计,为什么这种设计使 DNS 更容易受到欺骗攻击?改用 TCP 能否彻底解决 DNS 欺骗问题?
- DNS over HTTPS(DoH)和 DNS over TLS(DoT)可以加密 DNS 查询,但加密后的 DNS 流量使防火墙无法进行域名过滤。企业网络应如何平衡隐私保护和安全管理?
- DNS 隧道攻击利用合法 DNS 协议传输恶意数据。如果企业完全封锁外部 DNS 查询,是否就能杜绝 DNS 隧道?完全封锁会带来哪些业务影响?
下篇预告:第218篇:网络攻击基础:SYN Flood、ICMP Flood