Skip to content

开发文档

版本号修改修改时间备注
v1.0.0王小琱2024.12.20初次修订

1. 项目简介

  • 服务名称exchange-ip-location-backend
  • 服务描述:本项目为交易所、金融等业务提供IP归属地查询、IP风控与合规能力,支持IP黑名单、国家黑名单、匿名代理识别等功能。
  • 所属模块:基础服务组件。
  • 负责人:王小琱(wang746277441@gmail.com

2. 功能描述

  • 查询任意IP的地理归属信息(国家、洲、注册地等)。
  • 检查IP是否在黑名单、是否为匿名代理、VPN、Tor节点等。
  • 检查IP所属国家是否在黑名单。
  • 支持IP风控合规场景的快速接入。

3. 系统架构

3.1 主要技术栈

备注:具体依赖版本详见go.mod文件。

3.2 架构图

3.3 架构概括

  • 业务层(Business Layer)

    包含 Risk Service,负责业务风控逻辑,向内部服务提供风控能力。

  • 基础服务层(Infrastructure Layer)

    包含 IP Location Service,专注于提供IP归属地、IP风控、合规等底层能力,供业务层调用。

3.4 业务流程

3.4.1 查询IP信息流程

3.4.2 检查IP风控流程

3.4.3 获取IP风控详情流程(GetIPInsights)

4. 依赖组件

组件版本说明
MySQL8.x关系型数据库
MaxMind-IP地理信息与风控服务

5. 接口设计

接口文档

使用make doc可以重新生成接口文档。

6. 数据库设计

数据库设计文档

7. 项目部署

部署文档

8. 错误码定义

错误码错误信息说明
ErrCallMaxmind请求失败调用MaxMind失败
ErrSystem内部错误内部服务调用失败

9. FAQ

1. IP黑名单和国家黑名单的区别?

  • IP黑名单针对单个IP或网段,国家黑名单针对整个IP所在的国家。

2. MaxMind账号和License如何获取?

3. 查询返回空数据?

  • 检查请求参数(IP地址)是否正确;
  • 检查MaxMind服务配置和网络连通性。

4. 如何判定IP是代理、TOR、VPN呢?

系统会优先判断IP是否为内网地址,若不是,则通过 MaxMind Insights 接口获取IP的详细属性,根据上述字段综合判定该IP是否为代理、TOR、VPN或其他匿名访问类型。

  • 代理(Proxy) 通过调用 MaxMind 的 Insights 接口,判断返回结果中的 IsAnonymousProxy、IsPublicProxy、IsResidentialProxy 字段。如果这些字段为 true,则说明该IP属于代理类型。

  • TOR 节点(Tor Exit Node) 通过 MaxMind 返回的 IsTorExitNode 字段进行判断。如果该字段为 true,则该IP为Tor出口节点。

  • VPN 通过 MaxMind 返回的 IsAnonymousVpn 字段进行判断。如果该字段为 true,则该IP为VPN节点。

  • 用户类型(UserType) 还可以结合 UserType 字段(如 hosting),进一步辅助判断IP是否为数据中心、云主机等高风险类型。

5. 如何添加国家黑名单或IP黑/白名单呢?

  • 添加国家列表黑名单

country_blacklist 表插入对应的国家 ISO 码及原因。例如:

sql
INSERT INTO country_blacklist (iso_code, reason, created_at, updated_at)
VALUES ('US', '合规要求禁止美国访问', NOW(), NOW());
  • 添加IP黑名单

    ip_limit 表插入需要限制的 IP 地址或网段,并将 is_active 设置为 DISABLE。例如:

sql
INSERT INTO ip_limit (ip_address, reason, is_active, created_at, updated_at)
VALUES ('1.2.3.4', '恶意访问', 'DISABLE', NOW(), NOW());
  • 添加IP白名单

ip_limit 表插入需要放行的 IP 地址或网段,并将 is_active 设置为 ENABLE。例如:

sql
INSERT INTO ip_limit (ip_address, reason, is_active, created_at, updated_at)
VALUES ('5.6.7.8', '合作方白名单', 'ENABLE', NOW(), NOW());

注意:

  • ip_limit 表的 is_active 字段为 ENABLE 时表示白名单,为 DISABLE 时表示黑名单。
  • 支持单个IP和CIDR网段。
  • 所有操作建议有审计记录,便于后续追溯。
  • 所有直接对数据库的写操作,操作完成必须重启服务才能生效。

10. 参考资料

11. 致谢

感谢 MaxMind 提供的 GeoIP2 服务。

🚀 构建现代化数字资产交易平台