关键在于控制DNS配置文件写入权限:/etc/resolv.conf需停用动态服务后设chattr +i锁定;dnsmasq和BIND配置及区域文件应设644/640权限、限定属主属组;服务以专用用户运行并审计变更。

要防止DNS解析记录被意外或恶意篡改,关键不在于“解析文件”本身(如/etc/hosts或区域数据文件),而在于**控制对DNS配置文件和系统解析行为的写入权限**。Linux中真正影响域名解析结果的,是解析器读取的配置源(如/etc/resolv.conf)以及DNS服务(如dnsmasq、named)加载的配置与区域文件。这些文件一旦被非授权修改,就会导致解析错误、劫持或服务中断。
锁定核心解析配置文件:/etc/resolv.conf
这是客户端解析器默认读取的DNS服务器列表文件,极易被NetworkManager、systemd-resolved等服务覆盖或用户误改。
- 先停用动态管理服务(如systemd-resolved),避免它反复重写该文件
- 手动设置为只读:执行
sudo chattr +i /etc/resolv.conf—— 这会启用不可变属性(immutable),连root也无法直接编辑或删除,除非先执行chattr -i - 若需更新,先解除锁定 → 修改 → 再加锁,形成明确的操作闭环
保护DNS服务配置与区域文件
以主流方案为例:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
-
dnsmasq:主配置在
/etc/dnsmasq.conf,自定义解析常通过address=/example.com/192.168.1.10写入。应设权限为644(所有者可写,组和其他只读),并确保只有管理员拥有写权限:sudo chmod 644 /etc/dnsmasq.conf && sudo chown root:root /etc/dnsmasq.conf -
BIND(named):区域文件(如
/var/named/example.com.zone)必须由named进程读取,但不应开放写权限给普通用户。建议:sudo chown root:named /var/named/*.zone,权限设为640;同时确认named.conf中启用了allow-update { none; };防止动态更新被滥用
限制服务运行账户与文件访问范围
DNS服务本身不应以root身份持续操作敏感文件。
- dnsmasq默认以
dnsmasq用户运行,确保其无法写入配置目录:sudo chown -R root:root /etc/dnsmasq*,再sudo chmod -R 755 /etc/dnsmasq.d/(子配置目录可保留可读) - BIND推荐使用
named专用用户,并通过named.conf中的directory指令限定工作路径,配合SELinux或AppArmor进一步约束文件访问边界 - 检查关键文件是否被软链接劫持:
ls -l /etc/resolv.conf /etc/dnsmasq.conf /var/named/,避免指向不受控位置
辅助防护:日志与变更审计
仅靠权限不能替代监控。
- 启用auditd规则跟踪关键文件变更:
sudo auditctl -w /etc/resolv.conf -p wa -k dns_config - 定期校验配置文件哈希:
sha256sum /etc/resolv.conf /etc/dnsmasq.conf > /etc/dns-checksums.txt,配合cron定时比对 - 将配置文件纳入版本控制(如git),每次修改留痕,便于回溯与审批

















