Linux防火墙不支持直接基于域名配置规则,因其工作在L3/L4层,仅识别IP、端口等字段;域名解析在L7层且IP可能动态变化。可行方案包括:①静态IP白名单+定期更新;②反向代理(如Squid)做应用层过滤;③hosts绑定+IP规则。

Linux 防火墙本身不支持直接基于域名(如 example.com)配置访问策略,因为 iptables 和 firewalld 这类工具工作在 网络层(L3)和传输层(L4),只能识别 IP 地址、端口、协议等字段;而域名解析发生在 应用层(L7),需经 DNS 查询后才转为 IP,且同一域名可能对应多个动态变化的 IP(如 CDN、负载均衡场景),防火墙规则无法实时感知或跟踪。
但这不意味着“让某台 Linux 服务器只允许访问特定域名”不可行——只是实现方式需要分层设计,不能靠防火墙单点完成。以下是真正可行、生产环境常用的方法:
域名访问控制必须结合 DNS + 应用层代理或白名单 IP
防火墙规则只能作用于 IP,所以实际落地时,需先将域名解析为稳定、可控的 IP 列表,再基于这些 IP 设置规则。常见路径有:
-
✅ 方案一:静态白名单 IP(适合自有服务或固定出口)
若目标域名(如api.internal.company.com)始终解析到一组已知、不变的 IP(例如云厂商私有服务地址),可:- 用
dig +short api.internal.company.com或nslookup获取当前 A/AAAA 记录; - 将结果写入脚本定期更新,并自动同步到防火墙规则;
- 示例(firewalld rich rule):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" port protocol="tcp" port="443" accept' firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.11" port protocol="tcp" port="443" accept' firewall-cmd --reload
⚠️ 注意:该 IP 列表必须人工或通过监控脚本维护,否则域名 IP 变更后规则即失效。
- 用
✅ 方案二:使用反向代理做应用层过滤(推荐用于出站控制)
若你的 Linux 主机是客户端,需要限制“本机只能访问github.com的 HTTPS”,可在本机部署轻量代理(如squid或nginx),配置其 ACL 仅允许github.com域名,并让所有出站流量走该代理;再用防火墙只放行本机到代理的本地连接(127.0.0.1:3128),屏蔽其他直接外连。
这样就把“域名控制”转移到了代理层,防火墙只需守住代理入口。✅ 方案三:配合 hosts 文件 + 固定 IP 规则(开发/测试环境适用)
在/etc/hosts中强制绑定域名到指定 IP(如192.0.2.50 api.example.com),再基于该 IP 写防火墙规则。适用于内部测试环境,但不适用于公网多变域名。
❌ 不可行的操作(常见误区)
-
iptables -A OUTPUT -d example.com -p tcp --dport 443 -j ACCEPT→ 语法错误,iptables 不解析域名,此处example.com会被当作字符串忽略或导致规则加载失败; -
firewall-cmd --add-rich-rule='rule family="ipv4" destination address="example.com"...'→ 同样无效,firewalld 不做 DNS 解析; - 依赖
--dport或--sport匹配 HTTP Host 头 → 这是应用层内容,iptables/firewalld 无法匹配(需用xt_owner或nf_tables+ 用户态工具,复杂且不通用)。
实用建议:把域名控制交给上层工具
- 出站控制(本机访问哪些域名)→ 用
squid、privoxy或dnsmasq+iptables重定向 + ACL; - 入站控制(别人通过域名访问你)→ 真正起作用的是 Web 服务器(Nginx/Apache)的
server_name或Host头判断,防火墙只负责开放 80/443 端口并限制源 IP; - 自动化更新 IP 白名单 → 可写一个简单脚本,每天
dig +short拉取域名 IP,对比变更后调用firewall-cmd --remove-source/--add-source更新。
本质上,域名不是网络层实体,防火墙也不该承担解析职责。合理分工:DNS 负责映射,代理或应用服务负责域名逻辑,防火墙专注 IP+端口粒度的通道管控。


















