应监控/etc/resolv.conf文件:用auditd设置-w /etc/resolv.conf -p wa规则捕获写入与属性变更,排除root及netadmin组操作,持久化规则并验证生效,联动脚本阻断异常行为,再叠加chattr +i、哈希校验和出口DNS白名单实现纵深防御。

监控 /etc/resolv.conf 是防御 DNS 劫持和旁路渗透的关键一环。该文件一旦被恶意篡改,系统所有域名解析都会被导向攻击者控制的 DNS 服务器,后续通信(包括 HTTPS 请求、软件更新、内部服务调用)都可能被中间人劫持。auditd 能在内核级捕获每一次写入或属性变更,不依赖进程行为判断,真正实现“谁改的、何时改的、怎么改的”可追溯。
配置精准审计规则,避免误报干扰
直接监控整个文件路径,但需过滤合法修改来源,防止正常运维触发告警:
-
基础写入与属性监控:执行
sudo auditctl -w /etc/resolv.conf -p wa -k dns_resolv_change,捕获所有写(w)和属性变更(a),如 chmod、chown; -
排除可信用户操作:添加条件限制,只记录非 root 且非网络管理组用户的修改尝试:
sudo auditctl -a always,exit -F path=/etc/resolv.conf -F perm=w -F auid!=0 -F auid!=102 -k unauthorized_resolv_write(假设 netadmin 组 GID=102); -
持久化保存规则:将上述规则写入
/etc/audit/rules.d/10-resolv.rules,再运行sudo augenrules --load并重启服务:sudo systemctl restart auditd。
验证规则是否真实生效
加完规则不验证等于没配。三步确认:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 运行
sudo auditctl -l | grep resolv,确认输出中包含带-k标签的规则行; - 检查审计状态:
sudo auditctl -s | grep enabled应显示enabled 1; - 模拟测试:切换为普通用户后执行
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf >/dev/null,再用sudo ausearch -k unauthorized_resolv_write -i | tail -2查看日志,重点核对auid(原始登录用户)、comm(命令名)、exe(执行路径)是否匹配预期。
从记录到响应:轻量联动阻断异常行为
auditd 不拦截,但可作为高置信度事件源触发响应动作:
- 用
audispd插件将含unauthorized_resolv_write的事件转发至自定义脚本; - 脚本提取
auid和源 IP(addr字段),执行pkill -u $AUID终止可疑会话,并调用iptables -I INPUT -s $ADDR -j DROP封禁来源; - 更稳妥做法是检测到异常写入后,自动运行
systemctl restart systemd-resolved恢复默认解析器,并向管理员发送邮件告警(附上完整 ausearch 输出)。
配合其他手段形成纵深防御
单一审计不够,需叠加防护:
- 设置文件不可变位:
sudo chattr +i /etc/resolv.conf(仅限静态环境;若使用 NetworkManager 或 systemd-networkd,应改为+a允许追加,再配合 auditd 监控追加内容); - 定期比对 DNS 配置哈希值,例如用
sha256sum /etc/resolv.conf >> /var/log/dns-conf-hash.log,结合 cron 每小时校验; - 在出口防火墙层限制 DNS 查询仅允许发往白名单服务器(如 114.114.114.114、1.1.1.1),从网络层堵住非法解析回流。

















