feat: MeshSafe 文件摆渡安全卫士 v1.0 初始提交

核心功能:
- 6 层检测管线: L0 结构分析 → L1 ClamAV → L2 文档深度检测 → L3 关键词匹配 → L4 YARA → L5 PE/二进制
- FastAPI + PostgreSQL + Redis + Docker Compose 架构
- 客户端 HMAC-SHA256 签名鉴权 + 限流 + 幂等性
- 控制台 UI (登录/Dashboard/诊断中心/策略管理/任务列表/测试中心/产品介绍页)
- 三层诊断定时器 (error_scan 30s / db_aggregate 30s / container_check 5min)

并发与稳定性修复:
- 诊断定时器 Redis 时间槽位锁 (多 worker 同一槽位只有一个执行)
- JSONL 存储 fcntl 跨进程排他锁 + 容错解码 + 原子重写
- 移除 SQLite fallback, 统一 PostgreSQL
- API_CLIENTS 脱敏为环境变量, .env 已 .gitignore
This commit is contained in:
2026-10-28 19:07:11 +08:00
commit 16f134e328
113 changed files with 24604 additions and 0 deletions

37
scripts/init_clamav.sh Normal file
View File

@@ -0,0 +1,37 @@
#!/bin/sh
# =============================================================================
# ClamAV 容器入口脚本(POSIX sh 兼容,Alpine/Debian slim 通用)
# =============================================================================
#
# 逻辑:
# 1) 检查 /var/lib/clamav 是否有 .cvd/.cld 签名库文件
# - 有 → 直接启动 clamd
# - 没有 → 尝试 freshclam 拉取(外网场景),失败则静默降级(内网正常)
# 2) 光闸摆渡导入:用户把 clamav-db-*.tar.gz 解压到 ./data/clamav/ 后
# 下次 docker restart meshsafe-clamav 会自动加载
# =============================================================================
set -eu
DATA_DIR="/var/lib/clamav"
CVD_COUNT=$(ls -1 "$DATA_DIR"/*.cvd "$DATA_DIR"/*.cld 2>/dev/null | wc -l || true)
echo "[init_clamav] ClamAV 签名库检查..."
echo "[init_clamav] 数据目录: $DATA_DIR 已有签名文件: $CVD_COUNT"
if [ "$CVD_COUNT" -eq 0 ]; then
echo "[init_clamav] 签名库为空,尝试 freshclam 拉取(外网环境)..."
if freshclam --stdout 2>&1 | tail -20; then
NEW_COUNT=$(ls -1 "$DATA_DIR"/*.cvd 2>/dev/null | wc -l || true)
echo "[init_clamav] freshclam 成功,新签名文件数: $NEW_COUNT"
else
echo "[init_clamav] freshclam 失败(内网光闸环境正常,等离线导入)"
echo "[init_clamav] 离线导入步骤:"
echo " 1. 外网: bash scripts/sync_clamav_db.sh → 生成 clamav-db-*.tar.gz"
echo " 2. 光闸: 把 tar.gz 摆渡到内网"
echo " 3. 内网: tar -xzf clamav-db-*.tar.gz -C ./data/clamav/"
echo " 4. 内网: docker restart meshsafe-clamav"
fi
fi
echo "[init_clamav] 启动 clamd..."
exec clamd --foreground