首页主机资讯Linux防火墙如何防止DNS劫持

Linux防火墙如何防止DNS劫持

时间2025-10-27 15:55:04发布访客分类主机资讯浏览639
导读:Linux防火墙防止DNS劫持的关键措施 1. 配置防火墙规则限制DNS流量访问 通过iptables/nftables设置严格规则,仅允许受信任的DNS服务器或本地服务访问DNS端口(UDP 53/TCP 53),阻断非法DNS查询或响应...

Linux防火墙防止DNS劫持的关键措施

1. 配置防火墙规则限制DNS流量访问

通过iptables/nftables设置严格规则,仅允许受信任的DNS服务器或本地服务访问DNS端口(UDP 53/TCP 53),阻断非法DNS查询或响应。

  • 拒绝外部DNS回复,仅允许本地解析服务:若使用本地DNS缓存(如unbound/dnsmasq),可禁止外部对53端口的回复,防止劫持者伪造响应。
    iptables -A OUTPUT -p udp --dport 53 -j DROP  # 阻止外部UDP DNS回复
    iptables -A OUTPUT -p tcp --dport 53 -j DROP  # 阻止外部TCP DNS回复
    
  • 限制DNS查询来源:仅允许内部网络或特定IP访问DNS服务器,减少暴露面。
    iptables -A INPUT -p udp --dport 53 -s 192.168.1.0/24 -j ACCEPT  # 允许内网UDP查询
    iptables -A INPUT -p tcp --dport 53 -s 192.168.1.0/24 -j ACCEPT  # 允许内网TCP查询
    iptables -A INPUT -p udp --dport 53 -j DROP  # 拒绝其他UDP查询
    iptables -A INPUT -p tcp --dport 53 -j DROP  # 拒绝其他TCP查询
    
  • 保存规则持久化:使用iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu)或service iptables save(CentOS/RHEL)保存规则,避免重启失效。

2. 强制使用加密DNS协议(DoT/DoH)

通过加密DNS流量(如DNS over TLS/HTTPS),防止中间人攻击篡改DNS响应。

  • DNS over TLS(DoT):使用stubby或systemd-resolved配置加密上游DNS。例如,stubby配置文件/etc/stubby/stubby.yml中指定可信DNS服务器:
    upstream_recursive_servers:
      - address_data: 1.1.1.1  # Cloudflare DoT
        tls_auth_name: "cloudflare-dns.com"
      - address_data: 9.9.9.9  # Quad9 DoT
        tls_auth_name: "dns.quad9.net"
    
    启动stubby:systemctl enable --now stubby
  • DNS over HTTPS(DoH):使用cloudflared或dnscrypt-proxy将DNS请求隧道化。例如,cloudflared代理DNS:
    cloudflared proxy-dns --port 5053 --upstream https://1.1.1.1/dns-query
    
    修改/etc/resolv.conf指向本地代理:nameserver 127.0.0.1#5053

3. 启用DNSSEC验证

DNSSEC通过数字签名验证DNS数据的完整性和来源真实性,防止伪造解析结果。

  • 配置本地DNS解析器支持DNSSEC:以unbound为例,在/etc/unbound/unbound.conf中启用验证:
    server:
      val-permissive-mode: no  # 严格验证模式
      auto-trust-anchor-file: "/var/lib/unbound/root.key"  # 自动信任根锚点
    
    重启unbound:systemctl restart unbound
  • 验证DNSSEC生效:使用dig命令查询已知存在DNSSEC签名的域名(如sigfail.verteiltesysteme.net),若返回SERVFAIL则表示验证成功(未通过验证的域名会返回正常结果)。

4. 监控与审计DNS流量

通过日志分析及时发现异常DNS查询(如大量失败查询、异常IP解析),快速响应劫持行为。

  • 查看DNS查询日志:若使用bind9,可开启查询日志(logging { channel query_log { file "/var/log/named/query.log"; severity debug 3; } ; category queries { query_log; } ; } ; ),或使用unbound的verbosity: 2记录详细日志。
  • 实时监控DNS流量:使用tcpdump捕获DNS流量,检测异常请求:
    tcpdump -i eth0 -n port 53 -vv  # 监控eth0接口的DNS流量
    
    结合工具(如ELK Stack、Splunk)分析日志,识别高频查询、陌生域名解析等异常。

5. 配置严格的访问控制列表(ACL)

通过防火墙ACL限制DNS服务的访问范围,仅允许可信客户端或网络使用DNS服务。

  • 基于IP的ACL:仅允许内部网段访问DNS服务器,拒绝外部IP:
    iptables -A INPUT -p udp --dport 53 -s 10.0.0.0/8 -j ACCEPT  # 允许内网10.0.0.0/8
    iptables -A INPUT -p tcp --dport 53 -s 10.0.0.0/8 -j ACCEPT
    iptables -A INPUT -p udp --dport 53 -j DROP
    iptables -A INPUT -p tcp --dport 53 -j DROP
    
  • 基于服务的ACL:若DNS服务器仅需响应特定域名(如公司内部域名),可配置条件转发(如BIND的allow-query指令),限制查询范围。

通过以上措施,Linux防火墙可有效防止DNS劫持,提升DNS解析的安全性。需结合实际情况调整规则(如信任的DNS服务器、内网网段),并定期更新防火墙规则和DNS软件以应对新威胁。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux防火墙如何防止DNS劫持
本文地址: https://pptw.com/jishu/735799.html
Debian Nginx日志文件存储位置在哪 Linux下cximage怎么使用

游客 回复需填写必要信息