dnsmasq生产环境网络白名单需通过interface/listen-address绑定可信网卡与IP,并配合iptables限制仅允许可信子网(如192.168.10.0/24)的UDP/TCP 53端口访问,再辅以DHCP静态分配和hosts预解析实现双重校验。

生产环境中配置 dnsmasq 的网络访问白名单,核心目标是:只允许指定的内网客户端发起 DNS 查询,防止服务被未授权设备滥用或探测。dnsmasq 本身不提供传统意义上的“IP 白名单访问控制列表(ACL)”,但可通过 接口绑定 + 防火墙协同 实现等效、可靠且轻量的白名单效果。
明确监听范围:用 interface 和 listen-address 限定入口
这是第一道防线,也是最基础、最关键的配置。不要依赖通配符或默认行为。
-
禁用全局监听:确保配置中没有
bind-interfaces以外的模糊绑定,删除或注释掉类似listen-address=0.0.0.0或interface=*的行 -
显式指定可信网卡:例如内网使用
eth1,则添加:interface=eth1 -
精确绑定内网 IP:配合
listen-address指向该网卡的内网地址,如:listen-address=192.168.10.5
这样 dnsmasq 仅在该 IP 上监听 53 端口,物理上隔绝其他网络平面
用防火墙实施 IP 层白名单(推荐 iptables/nftables)
即使绑定了接口,若服务器有多个路由路径或容器环境,仍需防火墙兜底。以下以 iptables 为例(nftables 逻辑一致):
- 清空或跳过 INPUT 链中可能放行 53 端口的旧规则
- 插入严格白名单规则(放在通用 ACCEPT 规则之前):
iptables -I INPUT -i eth1 -p udp --dport 53 -s 192.168.10.0/24 -j ACCEPTiptables -I INPUT -i eth1 -p tcp --dport 53 -s 192.168.10.0/24 -j ACCEPT - 拒绝所有其他来源的 53 端口请求:
iptables -A INPUT -p udp --dport 53 -j DROPiptables -A INPUT -p tcp --dport 53 -j DROP - 保存规则并设置开机生效(如 Ubuntu 使用
iptables-persistent,CentOS 使用service iptables save)
可选增强:结合 DHCP 分配固定 IP + hosts 绑定(适用于小规模高控场景)
若内网客户端由 dnsmasq 自身提供 DHCP 服务,可进一步收紧:
- 为关键业务主机分配静态 IP(
dhcp-host=xx:xx:xx:xx:xx:xx,192.168.10.100,host1) - 在
/etc/hosts或/etc/dnsmasq.hosts中预置这些主机的域名解析,减少对外部查询依赖 - 配合前述防火墙规则,实际只允许这些已知 IP 发起查询,形成双重校验
验证与监控要点
上线前必须验证白名单是否真正生效:
- 从白名单内 IP 执行:
dig @192.168.10.5 example.local→ 应返回结果 - 从白名单外 IP(如办公网段)执行相同命令 → 应超时或收到 “connection refused”
- 检查日志:
tail -f /var/log/dnsmasq.log,确认无非预期来源的 query 记录 - 用
ss -tuln | grep :53确认监听仅出现在预期 IP 上











