1.
问题概述与目标
- 目标:准确识别访问者是否为原生香港 IP,尽量排除代理/转发干扰。
- 背景:香港电商与金融服务对地理位置要求高,误判会影响风控与合规。
- 难点:透明代理、运营商 NAT、CDN 与反向代理会隐藏客户端真实 IP。
- 方法论:结合 GeoIP 库、HTTP 头、TCP 路径与被动指纹多维度判断。
- 输出:提供检测流程、服务器配置与真实案例,便于在生产环境部署。
2.
多维度检测方法
- GeoIP 数据库:使用 MaxMind GeoIP2/GeoLite2,本地查询响应示例:country.iso_code = "HK";accuracy > 90%。
- 头部检查:检查 X-Forwarded-For、CF-Connecting-IP、True-Client-IP 等,优先取最左侧非私网地址。
- 主机层探测:通过 TCP Traceroute/TTL 与 SYN 响应时间判断是否存在中间代理跳数异常。
- 反向验证:对疑似 HK IP 发起到香港节点的反向请求(如 TLS 握手速率、地理近似延迟)。
- 行为特征:结合用户代理、请求频率、端口探测,判定是否为匿名代理或数据中心 IP。
3.
服务器与 VPS 配置示例
- 常见 VPS 配置(示例):2 vCPU / 4 GB RAM / 80 GB SSD / 带宽 1 Gbps,延迟至香港节点 < 20 ms。
- 操作系统:Ubuntu 20.04 LTS,安装 geoip2 和 libmaxminddb 工具包做本地查询。
- nginx 配置示例(保留真实 IP):
set_real_ip_from 103.21.244.0/22; # Cloudflare 范围示例
real_ip_header X-Forwarded-For;
real_ip_recursive on;
- MaxMind 查询代码(伪示例): geo.country.iso_code == "HK" && !isp.is_anonymous_proxy。
- 日志:记录原始头部与解析后 IP,保存为 JSON 格式便于后续审计。
4.
CDN/反向代理注意事项与真实案例
- 问题场景:某香港电商出现大量用户被判定非香港,业务拒登导致流失。
- 排查结果:位于 ISP 侧的透明 HTTP 代理将客户端 IP 替换为运营商出口 IP,且缺少 X-Forwarded-For。
- 解决办法:与 CDN/ISP 协商开启真实 IP 回传,配置 nginx set_real_ip_from 对应出口网段。
- nginx 实例:在 server 段加入 real_ip_header CF-Connecting-IP 并把运营商出口网段加入白名单。
- 复测:通过 curl -H "X-Forwarded-For: 203.98.*.*" 请求验证,确认后端日志记录原生 IP。
5.
DDoS 防护与日志策略
- 防护层级:边缘 CDN 过滤大规模层面,服务器启用 connlimit、limit_req 减缓小规模攻击。
- 规则示例:iptables 限制每 IP 每秒新连接数 <= 5;fail2ban 针对异常 header 模式拉黑。
- 监控:结合 Prometheus + Grafana 监测来自香港网段的请求延迟与异常指标。
- 日志保留:保留原始请求头 30 天,解析后结构化日志备份 90 天用于取证和回溯。
- 自动化:定期用 MaxMind DB 做批量比对,标注疑似代理的 IP 列表并同步防火墙。
6.
检测结果示例表与总结
- 下表为实际检测输出示例,列出若干 IP、地理判断与头部信息,供参考与调试。
| IP |
GeoIP 归属 |
头部 |
判定 |
备注 |
| 203.98.12.34 |
HK |
X-Forwarded-For: 203.98.12.34 |
原生 HK |
延迟 12 ms |
| 45.76.23.11 |
US |
无 X-FF |
疑似代理 |
Traceroute 显示多跳 |
| 203.98.50.66 |
HK |
CF-Connecting-IP: 203.98.50.66 |
原生或可信 CDN |
需验证 set_real_ip_from |
- 总结:结合 GeoIP、头部、网络层探测与行为分析可大幅减少误判,配合正确的服务器/nginx 配置与 CDN 协调能恢复真实 IP 并提升风控准确性。
来源:如何进行原生香港ip查询避免被代理或转发误判