Django IP风险拦截插件,支持风险查询、地区规则和自动封禁。
Project description
django-ip-safeguard Enterprise
企业级 Django IP 风险防护中间件与运营控制台
📌 项目简介
django-ip-safeguard 是一个面向企业生产环境的 Django 请求前置安全插件。
它在请求进入业务视图前完成 IP 风险识别、地区策略校验、缓存决策复用和封禁治理,并提供企业 Dashboard 与策略中心。
🧭 企业能力总览
🛡️ 请求前置防护:中间件早期阻断风险流量,减少业务层压力。🌍 风险与地区策略:支持风险分阈值、风险标签、国家白黑名单。⚙️ 策略中心:支持数据库策略覆盖settings(策略即时生效)。📊 Dashboard:提供统计面板、策略接口、健康检查、解封接口。🔐 安全加固:管理接口权限控制、API Key 环境变量化、IP 脱敏审计。🚀 高可用:熔断、重试、并发去重锁、分级缓存 TTL、降级策略。
🏗️ 企业架构说明
- 请求进入
IpGuardMiddleware。 - 读取运行时策略(数据库策略优先,其次
settings)。 - 先查封禁缓存,再查情报缓存。
- 缓存未命中时调用 Provider,并应用并发去重和熔断策略。
- 风险引擎判定放行/阻断。
- 记录审计日志(可配置脱敏)。
- Dashboard 对外提供管理与运营数据接口。
⚡ 快速接入(企业版)
1) 安装
pip install django-ip-safeguard
2) 注册 App 与中间件
INSTALLED_APPS = [
# ...
"django_ip_safeguard",
]
MIDDLEWARE = [
"django_ip_safeguard.middleware.IpGuardMiddleware",
# ...
]
3) 挂载企业控制台 URL
from django.urls import include, path
urlpatterns = [
path("ip-guard/", include("django_ip_safeguard.urls")),
]
4) 执行迁移
python manage.py migrate
5) 设置最小生产配置
import os
IP_GUARD_ENABLED = True
IP_GUARD_REDIS_URL = "redis://127.0.0.1:6379/0"
IP_GUARD_PROVIDER = "http"
IP_GUARD_PROVIDER_ENDPOINT = "https://risk-api.example.com/ip/query"
IP_GUARD_PROVIDER_API_KEY = os.getenv("IP_GUARD_PROVIDER_API_KEY", "")
IP_GUARD_RISK_SCORE_THRESHOLD = 70
IP_GUARD_TRUSTED_PROXY_CIDRS = ("10.0.0.0/8",)
🧩 配置分组说明
🔧 基础开关
IP_GUARD_ENABLEDIP_GUARD_REDIS_URLIP_GUARD_CACHE_TTLIP_GUARD_BAN_TTLIP_GUARD_BLOCK_STATUS_CODEIP_GUARD_USE_DB_LOGIP_GUARD_ENABLE_POLICY_CENTERIP_GUARD_POLICY_CACHE_SECONDS
🌐 Provider
IP_GUARD_PROVIDERIP_GUARD_PROVIDER_ENDPOINTIP_GUARD_PROVIDER_API_KEY(建议仅环境变量)IP_GUARD_PROVIDER_TIMEOUTIP_GUARD_PROVIDER_MAX_RETRIESIP_GUARD_PROVIDER_RETRY_BACKOFFIP_GUARD_PROVIDER_CIRCUIT_BREAKER_FAILURESIP_GUARD_PROVIDER_CIRCUIT_BREAKER_TTLIP_GUARD_PROVIDER_HEADERS
🛡️ 风险规则
IP_GUARD_RISK_SCORE_THRESHOLDIP_GUARD_BLOCKED_RISK_TAGSIP_GUARD_ALLOWED_COUNTRIESIP_GUARD_BLOCKED_COUNTRIESIP_GUARD_IP_WHITELIST
🧯 降级与高可用
IP_GUARD_FAIL_OPENIP_GUARD_FAIL_OPEN_PATH_PREFIXESIP_GUARD_FAIL_CLOSE_PATH_PREFIXESIP_GUARD_DEDUPE_LOCK_SECONDSIP_GUARD_HIGH_RISK_CACHE_TTLIP_GUARD_LOW_RISK_CACHE_TTL
🔐 审计与合规
IP_GUARD_IP_MASK_ENABLEDIP_GUARD_IP_MASK_KEEP_PREFIX
📊 Dashboard 与管理接口
GET /ip-guard/:企业管理面板入口GET /ip-guard/api/dashboard/:24h 统计、Top 风险 IP、国家分布GET /ip-guard/api/policy/:读取当前策略POST /ip-guard/api/policy/:更新策略POST /ip-guard/api/unban/:手动解封 IPGET /ip-guard/api/health/:Redis/Provider/策略中心健康摘要
✅ 企业上线检查清单
- 已开启受信代理网段,避免伪造
X-Forwarded-For。 - API Key 通过环境变量注入,不落盘。
- 关键路径已设置
fail-close(登录/支付/管理端)。 - 已配置白名单(办公网、探针、健康检查)。
- 已开启审计日志与 IP 脱敏。
- 已验证熔断、降级、Redis 异常场景行为。
- 已跑通
pytest与ruff。
🧪 开发与验证命令
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest -q
ruff check .
📚 文档导航
- 企业完整指南:
docs/django-ip-guard-开发与发布指南.md - 企业发布流程:
docs/django-ip-guard-开发与发布指南.md中 “PyPI 发布流程”
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
django_ip_safeguard-0.1.0.tar.gz
(20.8 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_ip_safeguard-0.1.0.tar.gz.
File metadata
- Download URL: django_ip_safeguard-0.1.0.tar.gz
- Upload date:
- Size: 20.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
839142c2c170e49f1013c56cbe20a1683728ccd8c790a2a525c591f6ea0354f8
|
|
| MD5 |
f19bc2ad65f22938b6bdd6cc79054441
|
|
| BLAKE2b-256 |
8b8ec4ae42cb39706f518eaa8bcdcb733bc1fe7f03e21fd79220ad15da8f67aa
|
File details
Details for the file django_ip_safeguard-0.1.0-py3-none-any.whl.
File metadata
- Download URL: django_ip_safeguard-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31b247fb692c3eb7b2380b9ffd020cb82acd45356527a4d91e27ab9e46218681
|
|
| MD5 |
32b1f38c4f3f13bae779cd8ad25163d6
|
|
| BLAKE2b-256 |
648cc6bf73dc8b49c921a0c6efe99ccc9551bd2699211f10de7f40c809a6be80
|