seanpor/JA4proxy
GitHub: seanpor/JA4proxy
一个基于 TLS 指纹的透传安全代理,在握手阶段识别并阻断恶意 bot、爬虫和撞库工具,无需解密流量。
Stars: 4 | Forks: 0
# JA4proxy
[](LICENSE)
[](https://www.python.org/downloads/)
[](https://go.dev/)

[](https://scorecard.dev/viewer/?uri=github.com/seanpor/JA4proxy)
[](https://goreportcard.com/report/github.com/seanpor/JA4proxy)
[](https://slsa.dev)
[](#-go-test-coverage)
[](https://github.com/seanpor/JA4proxy/releases)
JA4proxy 是一个感知 TLS 的透传安全代理,部署在 Web 服务器基础设施的前端。它根据在 TLS 握手前和握手过程中可见的明文元数据(如 JA4 指纹、SNI、ALPN、ASN、信誉源、行为信号)来做出允许/阻断/拖坑(tarpit)决策,并以字节对字节的方式原封不动地转发被允许的连接。它从不解密流量,也从不持有 TLS 密钥。
## 安全态势 (信任但验证)
我们的治理模型与 **OpenSSF** 和 **SLSA** 的最佳实践保持一致,以确保加固的供应链:
- **不可变的依赖项**:所有 Docker 基础镜像均锁定到 SHA256 摘要。
- **SBOM 生成**:通过 `make sbom` 生成完整的 CycloneDX 软件物料清单 (SBOM)。
- **自动化审计**:在 `main` 分支上进行持续的 OpenSSF Scorecard 审计。
- **最小权限**:严格的 GitHub Action token 权限(默认为 `read-all`)。
- **控制平面完整性**:通过 Redis 进行防篡改、已签名的执行更新。
## 按角色开始
| 你是… | 从这里开始 |
|------------|------------|
| 正在评估适配性的**网站所有者 / CISO** | [`docs/product/WHY_JA4PROXY.md`](docs/product/WHY_JA4PROXY.md) |
| 正在设计集成方案的**安全架构师** | [`docs/security/ARCHITECTURE.md`](docs/security/ARCHITECTURE.md) |
| 负责日常运维的**操作员** | [`docs/operations/OPERATIONS_GUIDE.md`](docs/operations/OPERATIONS_GUIDE.md) |
| **合规 / 审计** | [`docs/compliance/`](docs/compliance/) |
| **开发者 / 贡献者** | [`docs/developer/`](docs/developer/) |
## PDF 文档 (离线阅读)
| 受众 | PDF | 来源 |
|----------|-----|--------|
| 商务 / 商业 | [宣传册](docs/pdf/brochure/brochure.pdf) | `docs/pdf/brochure/` |
| 操作员 | [用户指南](docs/pdf/user-guide/user-guide.pdf) | `docs/pdf/user-guide/` |
| 架构师 | [参考手册](docs/pdf/reference-manual/reference-manual.pdf) | `docs/pdf/reference-manual/` |
## 快速入门与引导
要初始化你的环境,请运行交互式引导设置向导,它会处理密钥生成、环境变量 (`.env`) 和依赖项检查:
```
git clone https://github.com/seanpor/JA4proxy && cd JA4proxy
make init
```
### 验证 (开发者)
初始化完成后,构建二进制文件并运行测试套件:
```
make build
make test
```
### 多环境支持
JA4proxy 支持在同一主机上运行多个隔离的实例(例如,并行的开发和测试环境)。在引导设置 (`make init`) 期间,你可以指定一个**唯一的项目名称**和一个**端口偏移量**,以防止端口冲突和资源重叠。
### 手动测试
在本地验证你正在运行的设置:
```
# 验证合法流量(必须通过 proxy)
curl -kv https://localhost:443/
# 使用 CLI 为 IP 模拟安全 pipeline 决策
./bin/ja4p test ip 8.8.8.8
```
## 架构 (一段话简述)
该代理位于 TLS 透传负载均衡器和后端之间。每一个连接都会被解析以提取 ClientHello 元数据,接着经过严格的硬性阻断检查(黑名单、GeoIP),然后由并行的信号模块(格式错误的 SNI、TLS 版本不匹配)进行评分。最终结果通过一个可配置的、已签名的拨号方案映射为一个操作。后端自行完成 TLS 握手 —— JA4proxy 从不解密负载。
```
Internet ──TLS──▶ HAProxy (LB) ──TCP──▶ JA4proxy ×N ──TLS──▶ Backend (HTTPS)
:443 :8080 :443
│ ▲
write events │ │ signed dial & lists
(Redis Stream) ▼ │ (Redis pub/sub)
┌──────────────┐
│ Analytics │──▶ Prometheus
│ Node │
└──────────────┘
┌──────────────┐
│ Management │ FastAPI
│ API │
└──────────────┘
```
标签:CISA项目, Go, IP 地址批量处理, Python, Ruby工具, Web安全, 反爬虫, 搜索引擎查询, 无后门, 日志审计, 机器人防御, 流量代理, 网络指纹识别, 自定义请求头, 蓝队分析, 请求拦截, 逆向工具, 零信任网络