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, 威胁情报, 开发者工具, 搜索引擎查询, 请求拦截, 运行时操纵, 逆向工具