Agent网络访问控制,白名单域名
如果 178.Agent 需要限制网络出站,只允许访问指定域名,同时禁止访问内网地址,核心思路有两条:一是从应用层面限制域名白名单,二是从系统层面拦截内网段流量。
本文给出可直接照做的配置步骤和验证方法,适合 Linux 环境下以 root 身份操作。
配置前先确认两件事
- 确认 178.Agent 的启动方式和配置文件路径(一般通过 systemd 或命令行启动)。
- 确认服务器当前网段,避免防火墙规则影响 SSH 连接。
第一步:在 Agent 配置里设置域名白名单
大多数 Agent 支持在配置文件中指定 allowed_domains 或 allow_domains 字段。
以 YAML 配置为例:
network:
allowed_domains:
- api.example.com
- download.example.com
如果 Agent 没有这个字段,可以通过环境变量注入:
export AGENT_ALLOWED_DOMAINS="api.example.com,download.example.com"
配置完成后重启 Agent:
sudo systemctl restart 178-agent
第二步:用 iptables 禁止访问内网地址
仅依赖应用层白名单并不安全,还需要在系统层把内网网段直接丢弃。
先查一下当前规则:
sudo iptables -L OUTPUT -n -v
然后追加规则,禁止访问常用内网段:
sudo iptables -A OUTPUT -d 10.0.0.0/8 -j DROP
sudo iptables -A OUTPUT -d 172.16.0.0/12 -j DROP
sudo iptables -A OUTPUT -d 192.168.0.0/16 -j DROP
sudo iptables -A OUTPUT -d 127.0.0.0/8 -j DROP
sudo iptables -A OUTPUT -d 169.254.0.0/16 -j DROP
注意,如果 Agent 依赖 DNS 解析域名,必须先放行 53 端口,否则白名单域名无法访问。
可以这样放行本机 DNS 查询:
sudo iptables -I OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -I OUTPUT -p tcp --dport 53 -j ACCEPT
保存规则(以 Debian/Ubuntu 为例):
sudo apt install iptables-persistent
sudo netfilter-persistent save
CentOS 7 等系统可以使用 service iptables save。
第三步:把白名单域名解析成固定 IP 并放行
由于 iptables 不理解域名,你需要先解析白名单域名,再放行对应 IP:
dig +short api.example.com
假设返回 1.2.3.4,则放行该 IP 出站:
sudo iptables -I OUTPUT -d 1.2.3.4 -j ACCEPT
要注意:如果目标域名有多个 IP 或动态变化,建议改用 HTTP 代理做白名单过滤,否则规则容易失效。
验证是否生效
用 curl 测一个内网地址,应该提示无法连接或超时:
curl -m 5 http://10.0.0.1
再测白名单域名,应能正常返回:
curl -m 5 https://api.example.com
同时查看 iptables 计数,确认 DROP 规则有命中记录:
sudo iptables -L OUTPUT -n -v | grep -E "DROP|ACCEPT"
常见疑问和避坑说明
- 为什么放行了白名单 IP,还是打不开域名?
很可能是 DNS 没放行,或者域名解析出的 IP 不属于白名单 IP,需要把全部解析结果都加进规则。
- 禁止内网后,Agent 连接数据库也断了?
这是正常现象,如果数据库也在内网,需要单独放行数据库 IP。
- 所有出口流量都被拦截,会不会影响系统更新?
会。
建议用独立脚本或按需临时放行,不要把整个系统的出站全部封死。
按上面步骤执行后,178.Agent 就只能访问你明确放行的域名,无法再向内网地址发起连接。
遇到规则不生效时,优先检查 iptables 规则顺序和 DNS 放行是否配置完整。