seanpor/JA4proxy

GitHub: seanpor/JA4proxy

一个基于 TLS 指纹的透传安全代理,在握手阶段识别并阻断恶意 bot、爬虫和撞库工具,无需解密流量。

Stars: 4 | Forks: 0

# JA4proxy [![许可证: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python 3.14](https://img.shields.io/badge/python-3.14-blue.svg)](https://www.python.org/downloads/) [![Go 1.26.4](https://img.shields.io/badge/go-1.26.4-00ADD8.svg)](https://go.dev/) ![CI](https://github.com/seanpor/JA4proxy/actions/workflows/ci.yml/badge.svg) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/seanpor/JA4proxy/badge)](https://scorecard.dev/viewer/?uri=github.com/seanpor/JA4proxy) [![Go Report Card](https://goreportcard.com/badge/github.com/seanpor/JA4proxy)](https://goreportcard.com/report/github.com/seanpor/JA4proxy) [![SLSA 3](https://slsa.dev/images/gh-badge-level3.svg)](https://slsa.dev) [![覆盖率](https://img.shields.io/badge/coverage-verified-brightgreen)](#-go-test-coverage) [![GitHub release (latest by mature)](https://img.shields.io/github/v/release/seanpor/JA4proxy)](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安全, 反爬虫, 搜索引擎查询, 无后门, 日志审计, 机器人防御, 流量代理, 网络指纹识别, 自定义请求头, 蓝队分析, 请求拦截, 逆向工具, 零信任网络