HTTP/HTTPS过滤代理
这是一个功能强大的HTTP/HTTPS代理服务器,具有灵活的过滤功能,可以根据规则选择性地丢弃或允许特定请求。
注意 该服务器仍在开发阶段,不建议用于生产环境部署!
- 支持HTTP和HTTPS协议代理
- 灵活的过滤规则系统,基于主机名匹配和端口
- 通过REST API实时控制代理行为
- 支持基于正则表达式的主机名匹配
- 可配置的临时或永久过滤
- 从配置文件加载默认规则
- 防止回环请求(避免代理自身循环)
- Python 3
在 Python 3.12 上测试通过。
-
克隆仓库:
git clone https://github.com/yourusername/filter-proxy.git cd filter-proxy -
创建配置文件(可选): 参考
config.json.example,创建config.json文件,配置代理和过滤规则。如果不存在,将使用默认配置。 -
运行代理服务器:
python server.py -
设置环境变量(可选):
# 启用调试输出 DEBUG=true python server.py # 指定不同的配置文件 CONFIG_FILE=custom_config.json python server.py
支持使用Docker镜像快速部署。
docker run --name filter-proxy -p 22223:22223 -p 22224:22224 -d ghcr.io/chenxiex/filter-proxy每条规则包含以下属性:
type: 规则类型,可以是"allow"或"deny"host_pattern: 主机名匹配模式,使用正则表达式port: 端口号,0表示匹配所有端口priority: 优先级,数字越大优先级越高description: 规则描述(可选)
规则匹配时会按优先级降序排列,第一条匹配的规则决定了请求是被允许还是丢弃。
代理服务器提供以下HTTP API用于控制和监控:
GET /filter?seconds=X
启用过滤功能,持续X秒(0表示永久)
GET /resume
停止过滤,恢复正常代理操作
GET /status
显示当前代理状态和活动的过滤规则
GET /rules
列出所有当前的过滤规则
GET /add_rule?type=deny|allow&host=PATTERN&port=PORT&priority=PRIORITY
添加一条新的过滤规则
GET /remove_rule?index=INDEX
按索引号删除规则
GET /remove_rule?type=TYPE&host=PATTERN&port=PORT&priority=PRIORITY
删除所有匹配指定属性的规则
将浏览器代理设置为:
- 主机:127.0.0.1
- 端口:22223
-
启动30秒的过滤模式:
curl http://localhost:22224/filter?seconds=30 -
添加规则允许访问Google:
curl "http://localhost:22224/add_rule?type=allow&host=.*\.google\.com&port=0&priority=50" -
阻止访问Facebook:
curl "http://localhost:22224/add_rule?type=deny&host=.*\.facebook\.com&port=0&priority=60" -
查看当前规则:
curl http://localhost:22224/rules -
恢复正常代理:
curl http://localhost:22224/resume
- 建议允许访问RPC端口(默认22224),否则在启用过滤后将无法控制代理
- 小心使用高优先级的deny规则,它们可能会意外阻止重要连接
- 在生产环境中,建议设置RPC服务器的访问控制,以防止未授权访问
这个软件开发的初衷是为了在 Linux 上运行米家游戏时方便地断网启动。例如,以下是一个用于启动米家游戏的配置文件:
{
"proxy_host": "0.0.0.0",
"proxy_port": 22223,
"rpc_host": "0.0.0.0",
"rpc_port": 22224,
"max_connections": 1024,
"filter_rules": [
{
"type": "allow",
"host_pattern": "(localhost|127\\.0\\.0\\.1)",
"port": 22224,
"priority": 100,
"description": "允许访问RPC服务器,移除该过滤规则可能导致过滤开启后无法关闭"
},
{
"type": "deny",
"host_pattern": "dispatchcnglobal\\.yuanshen\\.com",
"port": 0,
"priority": 30,
"description": "gi"
},
{
"type": "deny",
"host_pattern": "globaldp-prod-cn01\\.juequling\\.com",
"port": 0,
"priority": 20,
"description": "zzz"
},
{
"type": "deny",
"host_pattern": "globaldp-prod-cn01\\.bhsr\\.com",
"port": 0,
"priority": 10,
"description": "hsr"
},
{
"type": "allow",
"host_pattern": ".*",
"port": 0,
"priority": 0,
"description": "默认规则:允许所有其他请求"
}
]
}使用该配置文件启动 filter-proxy 后,通过设置 HTTP_PROXY=http://localhost:22223 和 HTTPS_PROXY=http://localhost:22223 环境变量为游戏设置代理。然后,在游戏启动前执行脚本:
#!/bin/bash
curl http://localhost:22224/filter?seconds=20注意调整断网时间。然后就可以享受游戏了!