我发布了一个零依赖Python库,允许你在runtime管理网络输出流量。它可以轻松集成到Django中。
什么它的作用
tethered限制了你的Python进程在runtime可以连接的主机。它在sys.addaudithook处截取socket操作,遵循一个白名单才能在机器上发送包。零依赖,避免基础设施更新。
import tethered
tethered.activate(allow=["*.stripe.com:443", "db.internal:5432"])
- 主机名通配符
- CIDR范围
- IPv4/IPv6
- 端口过滤器
- Works with requests, httpx, aiohttp, Django, Flask, FastAPI - 在Python socket上运行的任何库
- 只记录模式下的模式锁定
- 模式无法关闭
on_blocked回调- 线程安全
- 异步安全
- Python 3.10–3.14
安装:uv add tethered
GitHub:[https://github.com/shcherbak-ai/tethered]
许可:** MIT **
Django集成
在settings.py,wsgi.py或manage.py中调用activate(allow=[…])来激活tethered,防止你的应用开始之前。任何连接到白名单之外的主机都会引发 EgressBlocked(是一个RuntimeError,而不是OSError),因此不会被 HTTP库或重试逻辑无声地吞没。中间件应该捕捉并处理它。
目标受众
- 关心供应链攻击的团队 - 偶尔引入的依赖不能打电话回家
- LLM代理(大脑模型)开发者 - 约束他们只接收批准的API
- 想要测试从生产端点隔离的任何人
- 声明网络接口可以声明依赖项的后端工程师
比较
- 防火墙/出向代理/服务网格:需要基础设施团队,管理员权限,运营在网络层面。tethered在进程内部,需要一个功能调用。
- 出向代理服务(Squid, Smokescreen):有效,无论是在中央部署还是作为侧车部署,添加了运维复杂性,延迟和另一个维护的服务。tethered在进程内部,没有部署开销。
- seccomp/OS sandbox:硬隔离,但OS特定,配置复杂。tethered可补充 - 为防御在深度提供两者。
tethered填补了无控制和一次基础设施更新之间的差距。
评论 (0)