关键在于真实路径验证:用未授权内网IP访问应返回403且无敏感信息;授权IP直连需返回200或登录页;伪造X-Forwarded-For头测试须确认real_ip配置是否生效;日志需按internal/external分离并符合预期分布。

测试 Nginx IP 访问控制规则对内网与外网的隔离性,关键不是“配对了没”,而是“真能拦住谁、放行谁”。必须跳出配置文件本身,在真实网络路径中模拟不同来源请求,验证策略是否按预期生效。
从真实内网设备发起请求
用一台明确属于内网网段(如 192.168.5.0/24 或 10.10.0.0/16)但未在 allow 列表中的机器访问目标路径(如 /admin/):
- 应返回 403 Forbidden,且响应体不包含登录页、错误堆栈或任何敏感信息
- 检查 Nginx access 日志,确认该请求被记录为
403,且$remote_addr是其真实内网 IP - 若前端有反向代理或 CDN,需确保已配置
set_real_ip_from和real_ip_header X-Forwarded-For,否则日志里可能只看到代理 IP
从授权内网 IP 直连验证放行逻辑
换一台配置中明确 allow 的设备(如运维跳板机 10.10.0.5),同样访问 /admin/:
- 应正常返回 200 或登录页面,无重定向或认证拦截(除非叠加了 Basic Auth)
- 注意:不要在本机(
127.0.0.1)测试——本地回环不经过网络层,无法验证 CIDR 匹配逻辑 - 若使用笔记本连公司 Wi-Fi,确认其实际分配的是内网 IP,而非 NAT 后的地址
模拟公网请求绕过行为
公网流量常经 Cloudflare、SLB 或自建 Nginx 反代,此时客户端真实 IP 被藏在 X-Forwarded-For 头中:
- 先确认
$realip_remote_addr是否已正确还原(可通过日志打印该变量验证) - 用 curl 构造伪造头:
curl -H "X-Forwarded-For: 10.10.0.5" https://yoursite.com/admin/ - 若未启用 real_ip 配置,该请求应被拒绝;若已启用且配置正确,则应被允许——这说明规则作用于真实 IP,而非代理头
- 再试一个公网 IP 伪装:
curl -H "X-Forwarded-For: 203.208.60.1" ...,必须返回 403
检查日志分离是否反映隔离效果
如果已用 map 指令将 IP 归类为 internal/external,并配置了条件日志:
- 查看
/var/log/nginx/internal_audit.log是否只记录内网 IP 请求,且状态码符合预期(如 200/403 分布合理) - 对比
external_audit.log中是否出现本不该存在的内网地址,或本该拦截的扫描器 IP 出现在其中 - 可临时加响应头辅助验证:
add_header X-Client-Zone $client_zone;,用浏览器开发者工具直接看返回头


















