ewanyonyi/saugra

GitHub: ewanyonyi/saugra

Saugra 是一款轻量级、自托管的 Web 应用防火墙,解决小型团队在 Web 和 API 安全防护中面临的高成本、复杂配置和决策不透明问题。

Stars: 1 | Forks: 0

# Saugra Web 应用防火墙 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/ef92fee12b082047.svg)](https://github.com/ewanyonyi/saugra/actions/workflows/ci.yml?query=branch%3Amain) [![codecov](https://codecov.io/github/ewanyonyi/saugra/graph/badge.svg)](https://codecov.io/github/ewanyonyi/saugra) [![License: AGPL-3.0-only](https://img.shields.io/badge/License-AGPL--3.0--only-blue.svg)](LICENSE) [![Rust](https://img.shields.io/badge/Rust-2021-orange.svg)](Cargo.toml) ![Saugra WAF Logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/507235891f082047.jpg) Saugra 是一款轻量级、自托管的 Web 应用防火墙,专为开发者和 小型团队设计,提供 OWASP 风格防护、速率限制、行为评分、机器人评分、持久化安全日志以及可解释的决策,无需采用 大型企业或云 WAF 平台。 产品方向为: ``` Rules-first protection + rate limiting + behavior scoring + bot scoring + AI explanations ``` ## 问题所在 许多小型团队、初创公司和自托管应用所有者需要防护 常见 Web 攻击,但现有 WAF 选项可能价格昂贵、调整复杂、难以解释或 与特定云提供商绑定。 传统 WAF 功能强大,但团队常因误报、不透明的拦截决策 以及运维复杂性而困扰。API 优先的应用也需要 适配现代 HTTP、JSON API、WebSockets 及 开发者主导部署工作流的防护方案。 ## 解决方案 Saugra 运行在公共代理与后端应用之间: ``` Client -> Nginx/Apache -> Saugra -> Backend app ``` 它检查请求,应用确定性安全规则,限制滥用流量, 对重复可疑行为和机器人活动进行评分,记录结构化安全事件,并解释请求被监控或拦截的原因。 Saugra 以规则为核心:AI 用于帮助解释和调整决策,但拦截依据来自规则、速率限制、行为评分、机器人评分及显式配置。 ## 适用对象 Saugra 适用于: - 小型 SaaS 团队 - API 优先的初创公司 - 后端开发者 - DevOps 工程师 - 自托管应用所有者 - 安全学习者和学生 - 希望获得轻量级防护且不完全依赖云 WAF 的团队 ## 选择 Saugra 的理由 成熟的 WAF 平台功能强大且广泛应用,但许多团队认为它们 价格高昂、配置复杂、难以调整或难以解释。 Saugra 专注于不同的体验:轻量级、自托管的防护, 配置简单,默认监控优先,决策透明, 且对现代 API 优先应用友好。 如果您需要以下特性,请选择 Saugra: - 简单的 YAML 配置 - 监控优先的部署 - 清晰的 JSON 安全日志 - 可解释的规则决策 - Nginx 和 Apache 兼容性 - 基于规则 + AI 辅助的自托管 WAF ## 当前状态 本仓库现已具备面向生产的基础功能: - Rust CLI 脚手架 - YAML 配置加载与验证 - 内置规则元数据及基础正则检查 - 监控/拦截/关闭模式模型 - 结构化日志配置 - 代理所有正常应用流量,并暴露 `/_saugra/health` 端点用于检查 WAF 服务状态 - 基于路由的多上游 HTTP 与 WebSocket 转发 - WebSocket 握手检查与升级隧道 - Redis 支持的生产级速率限制选项 - 轮转式本地 JSONL 安全事件存储 - 示例配置文件位于 `configs/saugra.example.yml` 请参阅 `ROADMAP.md` 了解公开的开发路线图。 公开文档: - `docs/ARCHITECTURE.md` — 技术架构 - `docs/PRODUCT_SPEC.md` — 产品规格 - `docs/LICENSING.md` — 许可、商业用途、责任和商标指南 - `docs/PRODUCTION_DEPLOYMENT.md` — Nginx/Apache 生产部署指南 - `docs/ADMIN_GUIDE.md` — 操作员命令、故障排除、白名单、拦截、日志及解释 - `docs/OWASP_TOP_10_STRATEGY.md` — 分层 OWASP Top 10 覆盖策略 - `docs/CRS_IMPORT.md` — OWASP CRS 转换支持与限制 - `docs/DEBIAN_PACKAGING.md` — `.deb` 构建及 GitHub Release 发布指南 - `docs/APT_REPOSITORY.md` — 签名的 Ubuntu/Debian APT 仓库计划 - `docs/OFFICIAL_DEBIAN_RELEASE.md` — 官方 Debian 归档发布计划 - `docs/RELEASE_PROCESS.md` — 维护者发布检查清单 - `docs/RUNTIME_ALLOWLIST.md` — 无需重启的本地运行时白名单设计 - `TRADEMARKS.md` — Saugra 名称、标识及品牌政策 安装状态: - 当前支持:从 Git/源代码构建并使用 systemd 运行。 - 当前支持:使用 `cargo-deb` 构建 `.deb` 软件包并发布到 GitHub Releases。 - 进行中:通过 GitHub Pages 发布签名的 Saugra 官方 Ubuntu/Debian APT 仓库。 - 计划后续:提交至官方 Debian 归档,并在可行时同步至 Ubuntu。 ## 快速开始 ### 前置条件 - 来自 [rustup](https://rustup.rs/) 的 Rust 工具链 - 用于生产级速率限制的 Redis - 当 Saugra 部署在真实应用前端时,需要 Nginx 或 Apache ### 从源码本地运行 ``` git clone https://github.com/ewanyonyi/saugra.git cd saugra cargo build cargo run -- test-config --config configs/saugra.example.yml cargo run -- rules list --config configs/saugra.example.yml cargo run -- run --config configs/saugra.example.yml ``` 保持 Saugra 运行,然后使用另一个终端进行以下检查。 检查健康端点: ``` curl http://127.0.0.1:8787/_saugra/health ``` 运行本地冒烟测试: ``` scripts/smoke-local.sh ``` 冒烟测试会启动一个临时后端,使用临时配置运行 Saugra, 验证正常流量被转发,验证 SQL 注入载荷被拦截, 检查 JSONL 事件格式,并清理资源。 ## 常用命令 查看 OWASP Top 10:2025 映射覆盖情况: ``` cargo run -- owasp coverage --config configs/saugra.example.yml ``` 按操作和 OWASP 类别汇总最近的安全事件: ``` cargo run -- logs summary --config configs/saugra.example.yml --limit 200 ``` 从本地事件日志生成每日安全摘要: ``` cargo run -- summary daily --config configs/saugra.example.yml ``` 预览清理过期生成的文件: ``` cargo run -- cleanup run --dry-run --config configs/saugra.example.yml ``` 解释已记录的请求决策: ``` cargo run -- explain --config configs/saugra.example.yml ``` 运行本地部署状态检查: ``` cargo run -- posture check --config configs/saugra.example.yml ``` 将支持的 OWASP CRS 正则规则转换为 Saugra YAML: ``` cargo run -- rules convert-crs --input /path/to/coreruleset/rules --output configs/rules/converted-crs.yml ``` 请参阅 `docs/CRS_IMPORT.md` 了解支持的 CRS 操作符、转换映射、数据文件导入行为及不支持的功能报告。 ## 生产部署 推荐的生产部署架构: ``` Client -> Nginx/Apache TLS -> Saugra on 127.0.0.1:8787 -> Backend app ``` 以 `monitor` 模式启动,使用 `logs tail`、`logs summary`、`explain` 和 `posture check` 审查真实流量,调整后切换至 `block` 模式。 生产环境注意事项: - 将 Saugra 部署在私有地址上,例如 `127.0.0.1:8787`。 - 在前端部署 Nginx 或 Apache 处理公共 TLS。 - 配置 `forwarded_headers.trusted_proxies` 为允许提供客户端 IP 和协议头的代理地址。 - 使用 `rate_limit.backend: redis`。 - 将事件存储在持久化路径,例如 `/var/log/saugra/saugra-events.jsonl`。 - 在通过 Saugra 路由浏览器 WebSocket 流量前,配置精确的 WebSocket `allowed_origins` 和 `allowed_hosts`。 完整的生产指南和示例: - `docs/PRODUCTION_DEPLOYMENT.md` - `configs/saugra.production.example.yml` - `configs/nginx.production.example.conf` - `configs/apache.production.example.conf` - `examples/django-channels-daphne-nginx/` ## 在服务器上安装 完整的 Ubuntu 安装路径,包括从 Git 构建、安装二进制文件、创建 `/etc/saugra/saugra.yml` 以及使用 systemd 运行 Saugra,请参见 `docs/PRODUCTION_DEPLOYMENT.md`。 简要步骤: ``` git clone https://github.com/ewanyonyi/saugra.git /opt/saugra cd /opt/saugra cargo build --release sudo install -m 0755 target/release/saugra /usr/local/bin/saugra saugra --version sudo useradd --system --home /var/lib/saugra --shell /usr/sbin/nologin saugra sudo mkdir -p /etc/saugra/rules /etc/saugra/standards /var/log/saugra /var/lib/saugra sudo cp configs/saugra.production.example.yml /etc/saugra/saugra.yml sudo cp configs/rules/REQUEST-*.yml /etc/saugra/rules/ sudo cp configs/standards/*.yml /etc/saugra/standards/ sudo cp configs/saugra.service.example /etc/systemd/system/saugra.service sudo chown -R saugra:saugra /var/log/saugra /var/lib/saugra sudo systemctl daemon-reload sudo systemctl enable --now redis-server sudo systemctl enable --now saugra ``` 验证已安装的配置: ``` saugra test-config --config /etc/saugra/saugra.yml ``` 检查服务状态: ``` curl -i http://127.0.0.1:8787/_saugra/health ``` ## 构建 Debian 软件包 Saugra 可以打包为 `.deb` 软件包,适用于 Debian 和 Ubuntu: ``` cargo install cargo-deb --version 3.6.0 --locked cargo test --locked --all-targets --all-features cargo deb --locked ``` 软件包构件将写入 `target/debian/` 目录。请参阅 `docs/DEBIAN_PACKAGING.md` 了解本地安装测试及 GitHub Release 发布流程。 ## 验证部署 对于您拥有的预发布或生产环境部署: ``` scripts/verify-remote-waf.sh https://staging.example.com --yes-i-am-authorized ``` 对于 `/` 路由不适用的应用,选择一个无害的 GET 路径: ``` scripts/verify-remote-waf.sh https://staging.example.com \ --path /accounts/login/ \ --yes-i-am-authorized ``` 远程验证器会发送安全的纯 GET 探针,检测常见 WAF 信号,如 SQL 注入、XSS、路径遍历、命令注入、扫描器用户代理、包含敏感信息的 URL、方法重写头、可疑内容类型、供应链标记、原型污染、日志注入及解析器边界情况。POST 请求体探针可通过 `--include-post` 选项启用。 ## 调整配置 在监控模式下审查日志后,使用排除项调整误报。 建议使用窄范围排除项: ``` rules: exclusions: - name: Allow article HTML previews rule_ids: - SAUGRA-XSS-001 - SAUGRA-BODY-001 path_prefixes: - /api/articles query_params: - content ``` 全局排除会降低整个应用的防护级别。仅当规则需在所有位置禁用时才使用。 ## 许可信息 有关商业用途、修改后的网络部署、保修和责任限制以及商标政策指南,请参阅 `docs/LICENSING.md`。
标签:AI辅助, API安全, AppImage, JSON输出, LangChain, OWASP防护, Rust语言, Web应用防火墙, 入侵防御, 可视化界面, 可解释AI, 威胁情报, 安全日志, 安全防护, 小团队部署, 开发者工具, 搜索引擎查询, 机器人检测, 流量过滤, 现代Web应用, 网络安全, 自托管, 行为评分, 规则基于, 轻量级, 通知系统, 隐私保护