Akshayanil1/ip-threat-gateway

GitHub: Akshayanil1/ip-threat-gateway

该项目是一个基于 FastAPI、Redis 和 Nginx 的 IP 威胁网关,通过在请求入口检查 IP 威胁源与地理位置数据来拦截恶意连接。

Stars: 0 | Forks: 0

# IP 威胁网关 IP 智能与威胁网关位于您的应用程序前端,根据已知的威胁源和 GeoIP 数据检查传入的 IP,并决定是否允许该连接。 ## 架构 ``` ┌──────────────────────────────┐ │ Nginx │ │ (auth_request module) │ └──────┬───────────┬───────────┘ │ │ ┌────────────┘ └────────────┐ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ Gateway API │ │ Protected │ │ (FastAPI) │ │ Application │ │ Port 8000 │ │ Port 8080 │ └────────┬────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ │ Redis │ │ - Threat Set │ │ - Cache TTL │ └─────────────────┘ ``` ## 工作原理 1. **Nginx auth_request**:暂停流量并询问 Gateway API 该 IP 是否安全 2. **Redis 缓存检查**:如果该 IP 最近被检查过,则立即返回缓存的结果 3. **威胁源检查**:如果未被缓存,则与已知恶意 IP 的 Redis Set 进行核对 4. **GeoIP 查询**:查询本地 MaxMind 数据库以获取国家信息 5. **带 TTL 的缓存**:将结果存储在 Redis 中,有效期为 24 小时(SETEX 模式) 6. **Nginx 决策**:200 = 允许通过,403 = 拒绝连接 ## 快速开始 ### Docker(推荐) ``` docker compose up -d --build ``` ### 手动设置 ``` # 安装依赖 pip install -r requirements.txt # 下载 GeoLite2 数据库(需要 MaxMind license key) # 将 GeoLite2-Country.mmdb 放在 ./data/ 目录下 # 将 threat feed 加载到 Redis python scripts/load_threats.py # 启动 Redis redis-server & # 启动 API python -m app.main ``` ## API 端点 | 方法 | 端点 | 描述 | |--------|----------|-------------| | `GET` | `/check?ip=` | 检查 IP 是否安全 | | `POST` | `/load-threats` | 加载/重新加载威胁源 | | `GET` | `/stats` | 查看统计数据 | | `GET` | `/health` | 健康检查 | ## 使用示例 ### 检查 IP ``` curl http://localhost:8000/check?ip=8.8.8.8 ``` 响应: ``` { "ip": "8.8.8.8", "verdict": "allow", "is_threat": false, "country_code": "US", "country_name": "United States", "cached": false } ``` ### 加载威胁源 ``` curl -X POST http://localhost:8000/load-threats ``` ### 查看统计 ``` curl http://localhost:8000/stats ``` ## 配置 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `REDIS_HOST` | `localhost` | Redis 主机 | | `REDIS_PORT` | `6379` | Redis 端口 | | `REDIS_DB` | `0` | Redis 数据库 | | `THREAT_FEED_URL` | ipsum CSV | 威胁 IP 列表的 URL | | `THREAT_CACHE_TTL` | `86400` | 缓存 TTL(秒,24小时) | | `GEO_DB_PATH` | `/app/data/GeoLite2-Country.mmdb` | MaxMind 数据库路径 | ## Redis 数据结构 | 键 | 类型 | 用途 | |-----|------|---------| | `threat:ips` | SET | 已知的恶意 IP | | `ip:
` | STRING (JSON) | 带有 TTL 的缓存检查结果 | ## 技术栈 - **FastAPI** - 高性能 Python API - **Redis** - 威胁集合 + 带 TTL 的通读缓存(SETEX) - **MaxMind GeoIP2** - 本地 IP 地理定位数据库 - **httpx** - 威胁源下载 - **Nginx** - 用于流量控制的 auth_request 模块 - **Docker** - 容器化部署 ## 许可证 MIT
标签:API网关, AV绕过, FastAPI, GeoIP, Nginx, Redis, WAF, 威胁情报, 开发者工具, 搜索引擎查询, 请求拦截, 运行时操纵, 逆向工具