Abhishek-yadav04/Obsidian
GitHub: Abhishek-yadav04/Obsidian
基于 Coraza v3 引擎构建的企业级 Web 应用防火墙,集威胁情报、GeoIP 封禁与实时分析于一体,提供开箱即用的 Web 安全防护方案。
Stars: 0 | Forks: 0
# 🛡️ OBSIDIAN Sentinel WAF v2.2.4 企业版
/:`.
- The release job packages artifacts and creates a GitHub Release. The workflow also verifies the pushed Docker image by attempting to `docker pull` the released image during the release job.
- An SBOM (CycloneDX JSON) is generated and attached to the release artifacts.
How to pull the official release image from GHCR:
```bash
# 认证到 GHCR(使用具有适当范围的个人访问令牌)
echo "${GHCR_TOKEN}" | docker login ghcr.io -u --password-stdin
# 拉取指定标签的镜像(示例:v2.2.4)
docker pull ghcr.io//:v2.2.4
```
如果您在发布或 CI 方面遇到问题,请查看 `.github/workflows/ci.yml` 和 `.github/workflows/release.yml` 以了解构建期间执行的确切步骤。
{
"status": "healthy",
"uptime": "2h30m15s",
"version": "2.1.0",
"edition": "Enterprise",
"name": "Obsidian Sentinel WAF",
"features": {
"waf_engine": true,
"threat_intelligence": true,
"rate_limiting": true,
"geoip_blocking": true,
"webhook_alerts": true,
"postgresql": true,
"redis": true,
"advanced_analytics": true
},
"stats": {
"total_requests": 15432,
"blocked_requests": 127,
"active_threats": 2041,
"blocked_countries": 3
}
}
```
---
## 🔐 安全
### JWT Token 安全
- Tokens signed with HMAC-SHA256
- Configurable expiration (default: 15 minutes)
- Refresh token rotation
- Secrets stored in environment variables
- Constant-time signature comparison
- Role-based claims validation
### 高级限流
- 256-shard sliding window algorithm
- Redis-backed distributed limiting
- Per-IP and per-endpoint tracking
- Configurable limits:
- 200 requests/minute general
- 5 login attempts/minute
- Custom thresholds per endpoint
- Whitelist/blacklist IP management
- Geographic rate limiting
### 威胁情报来源
- **Spamhaus DROP/EDROP** - 800+ malicious networks
- **Emerging Threats** - 1000+ compromised IPs
- **Firehol Level 1** - 200+ high-confidence threats
- **Custom feeds** - User-defined blocklists
- **GeoIP risk scoring** - Country-based threat assessment
- **Real-time updates** - Feeds refreshed every 4 hours
### GeoIP 安全
- MaxMind GeoIP2 database integration
- Country-based blocking/allowing
- Risk score calculation
- VPN/Proxy/Tor detection
- Threat score based on geography
- Custom country rules with reasons
### 安全标头
```
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Referrer-Policy: strict-origin-when-cross-origin
Content-Security-Policy: default-src 'self'; ...
```
---
## 📦 部署
### Docker(推荐)
#### 简单部署
```dockerfile
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY . .
RUN cd cmd/obsidian && go build -o obsidian .
FROM alpine:latest
RUN apk --no-cache add ca-certificates tzdata
WORKDIR /app
COPY --from=builder /app/cmd/obsidian/obsidian .
EXPOSE 8082
CMD ["./obsidian", "-port", "8082"]
```
#### Docker Compose(仓库标准)
使用已提交的 `docker-compose.yml` 和以下模板之一:
- `.env.docker.example` 用于本地 postgres + redis 容器
- `.env.external.example` 用于托管/外部 DB + Redis
```
# 内置 postgres + redis
cp .env.docker.example .env.docker
docker compose --env-file .env.docker up -d --build
# 外部托管服务
cp .env.external.example .env.external
docker compose --env-file .env.external up -d --build
```
注意:
- 对于 Compose 网络,请在 URL 中使用服务名(`postgres`、`redis`),而不是 `localhost`。
- `.env` 用于本地 `go run` 工作流;Docker 发布/部署请首选专用的环境文件。
- `OBSIDIAN_JWT_SECRET` 是必需的,必须按环境设置。
### Kubernetes
```
apiVersion: apps/v1
kind: Deployment
metadata:
name: obsidian-waf
namespace: security
spec:
replicas: 3
selector:
matchLabels:
app: obsidian-waf
template:
metadata:
labels:
app: obsidian-waf
spec:
containers:
- name: obsidian
image: obsidian:2.1.0
ports:
- containerPort: 8082
env:
- name: OBSIDIAN_JWT_SECRET
valueFrom:
secretKeyRef:
name: obsidian-secrets
key: jwt-secret
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: obsidian-secrets
key: database-url
- name: REDIS_URL
value: "redis://obsidian-redis:6379/0"
- name: GEOIP_DATABASE_PATH
value: "/data/GeoLite2-Country.mmdb"
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /api/health
port: 8082
initialDelaySeconds: 10
periodSeconds: 30
readinessProbe:
httpGet:
path: /api/health
port: 8082
initialDelaySeconds: 5
periodSeconds: 10
volumeMounts:
- name: geoip-data
mountPath: /data
volumes:
- name: geoip-data
configMap:
name: geoip-database
---
apiVersion: v1
kind: Service
metadata:
name: obsidian-waf-service
spec:
selector:
app: obsidian-waf
ports:
- protocol: TCP
port: 80
targetPort: 8082
type: LoadBalancer
```
### Systemd 服务
```
[Unit]
Description=Obsidian Sentinel WAF
After=network.target
[Service]
Type=simple
User=obsidian
WorkingDirectory=/opt/obsidian
Environment=OBSIDIAN_JWT_SECRET=your-secret-here
ExecStart=/opt/obsidian/obsidian -port 8082
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
```
## 📊 文档
| 文档 | 描述 |
|----------|-------------|
| [生产审计报告](docs/PRODUCTION_AUDIT_REPORT.md) | 包含 100 个问题和 50 个功能的全面安全审计 |
| [贡献指南](CONTRIBUTING.md) | 如何为项目做出贡献 |
| [安全策略](SECURITY.md) | 如何报告漏洞 |
| [许可证](LICENSE) | Apache 2.0 许可证 |
## 🧪 测试
### 运行测试
```
go test ./... -v
```
### 运行测试并查看覆盖率
```
go test ./... -cover -coverprofile=coverage.out
go tool cover -html=coverage.out
```
### 测试 WAF 规则
```
# 测试 XSS 阻断
curl -X GET "http://localhost:8082/api/test?input="
# 测试 SQL 注入阻断
curl -X GET "http://localhost:8082/api/test?id=1' OR '1'='1"
```
## 📊 监控
### 指标端点
`GET /api/metrics` 返回全面的系统指标:
```
{
"total_requests": 25432,
"blocked_requests": 327,
"uptime_seconds": 172800,
"memory_alloc_mb": 65,
"memory_sys_mb": 128,
"goroutines": 23,
"rate_limiter": {
"active_visitors": 15,
"blacklist_count": 5,
"whitelist_count": 10,
"rate_limited_ips": 3,
"requests_per_minute": 200,
"shards": 256,
"total_allowed": 25105,
"total_blocked": 327
},
"threat_intel": {
"total_threats": 2041,
"feeds_active": 4,
"last_update": "2026-02-01T14:30:00Z",
"blocked_today": 127,
"high_risk_count": 1205
},
"geoip": {
"blocked_countries": 3,
"total_lookups": 15432,
"cache_hits": 12890,
"cache_misses": 2542
},
"webhooks": {
"active_webhooks": 2,
"alerts_sent_today": 15,
"alerts_failed": 1
}
}
```
### WebSocket 实时更新
连接到 `ws://localhost:8082/api/ws?token=` 以获取实时统计更新。
## 🤝 贡献
1. Fork 本仓库
2. 创建您的功能分支(`git checkout -b feature/amazing-feature`)
3. 提交您的更改(`git commit -m 'Add amazing feature'`)
4. 推送到分支(`git push origin feature/amazing-feature`)
5. 打开一个 Pull Request
有关详细指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 📜 许可证
本项目基于 Apache 2.0 许可证授权 - 详情请参阅 [LICENSE](LICENSE) 文件。
## 🙏 致谢
- [Coraza WAF](https://coraza.io) - 核心 WAF 引擎
- [OWASP CRS](https://coreruleset.org) - 核心规则集灵感来源
- [ModSecurity](https://modsecurity.org) - SecLang 规则语言
## 📞 支持
- **问题**:[GitHub Issues](https://github.com/Abhishek-yadav04/Obsidian/issues)
- **讨论**:[GitHub Discussions](https://github.com/Abhishek-yadav04/Obsidian/discussions)
- **安全**:请参阅 [SECURITY.md](SECURITY.md) 以报告漏洞
## 👨💻 作者
由 [contrib.rocks](https://contrib.rocks) 制作。
具备高级安全功能的企业级 Web Application Firewall
基于 Coraza v3 引擎 | 实时防护 | 零信任架构 | GeoIP 封禁 | 高级分析
功能 • 快速开始 • 架构 • API • 部署 • 安全
## 📋 概述
Abhishek Yadav
计算机科学专业学生
⭐ 如果您觉得有帮助,请给本仓库一个 Star!
用 ❤️ 为网络安全社区打造
首先,非常感谢 [Juan Pablo Tosso](https://twitter.com/jptosso) 启动这个项目,并在 Coraza 周围建立了一个了不起的社区! 今天我们拥有许多优秀的贡献者,没有你们我们无法做到这一切!标签:API网关安全, AppImage, CISA项目, Coraza, CSRF防护, EVTX分析, GeoIP封禁, Go语言, HMAC-SHA256, IP 地址批量处理, JWT认证, MaxMind, OWASP Top 10防护, PE 加载器, PostgreSQL, RBAC权限控制, Slack集成, WAF, Webhook告警, WebSocket监控, Web应用防火墙, WSL, 企业级安全, 入侵防御, 反向代理, 威胁情报, 子域名突变, 安全监控, 安全管理工具, 实时分析, 应用层防护, 开发者工具, 恶意IP检测, 搜索引擎查询, 日志审计, 测试用例, 程序破解, 网络安全, 自动化扫描, 请求拦截, 隐私保护, 零信任架构, 高并发