Sign inSign up

tinkerbell37745/clamav-timedock

By tinkerbell37745

•Updated about 1 month ago

A ClamAV container with crontab-tasking available.

Buildkit cache
Image
0

2.5K

tinkerbell37745/clamav-timedock repository overview

ClamAV-Web 标志

⁠ClamAV-Web

为 ClamAV⁠ 容器提供的 Web 管理、任务调度与多用户工作台

GitHub Release Docker Pulls Docker Image Size GitHub Last Commit License

Go React

GitHub⁠ · Docker Hub⁠ · 快速开始⁠ · 开发⁠ · API⁠

ClamAV-Web 将 ClamAV 的扫描能力、定时任务和结果处理整合为一个浏览器可用的管理界面。它以单个 Docker 镜像运行:内含 ClamAV、Go 后端、React 前端和 cron 调度服务,适合家庭服务器、小型团队与NAS场景。

本项目负责管理、编排与展示;病毒检测和病毒库更新仍由上游 clamav/clamav 完成。

⁠📸 界面预览

状态首页
ClamAV 状态与扫描统计
手动扫描
文件浏览与扫描提交
定时任务
cron 规则管理
历史任务
历史任务记录
隔离区
隔离区

⁠✨ 功能一览

模块能力
状态面板查看 ClamAV 连通性、运行状态、最近扫描结果与统计;管理员可休眠或唤醒引擎。
手动扫描在 /scan 中安全浏览并多选文件/目录,提交串行扫描任务。
定时任务可视化创建、编辑、启停和重载五段 cron 规则。
任务与历史调整等待队列、取消未开始任务;异步查询历史、日志、检出详情与统计。
文件处置支持仅告警、移动至隔离区、直接删除;隔离文件可恢复或永久清理。
信任区以 SHA-256 生成 ClamAV allow-list,支持文件与目录递归加入。
多用户内置 admin / user、Argon2id 密码哈希、Cookie session,以及用户间业务数据隔离。
TimeDock 模式适配拾光坞 NAS 的用户空间隔离机制,可将每个账号限制在指定的 /scan 子目录,避免越权浏览和提交路径。

⁠🧱 工作方式

浏览器
  │ React + Vite 构建的单页界面
  ▼
Go HTTP 服务(认证、权限、队列、API、SQLite 索引)
  ├── /scan_once.sh ──► clamd / ClamAV
  ├── /cron.sh ───────► Debian cron
  ├── /config         ──► 规则、白名单、服务配置
  └── /data /state /log /quarantine ──► 持久化数据与运行产物

生产构建会先编译 ClamAV-Web/,再将静态文件嵌入 Go 可执行程序;容器启动后由 startup.sh 协调 ClamAV、cron 和 Web 服务。扫描全局串行执行,防止多个任务同时挤占扫描引擎。

⁠🚀 快速开始

⁠1. 构建镜像
docker build -t tinkerbell37745/clamav-timedock .
⁠2. 准备持久化目录
mkdir -p config data scan quarantine log state

将需要扫描的内容放入 scan/。默认情况下,Web 界面只能浏览和操作容器内的 /scan;文件浏览会隐藏符号链接,相关 API 也会拒绝包含符号链接的路径。

⁠3. 启动服务

首次注册管理员必须设置一个非空的 ADMIN_REGISTER_TOKEN。请替换示例中的随机值,并妥善保管。

docker run -d \
  --name clamav-web \
  --restart unless-stopped \
  -p 8080:8080 \
  -e TZ=Asia/Shanghai \
  -e ADMIN_REGISTER_TOKEN='replace-with-a-long-random-token' \
  -v "$(pwd)/config:/config" \
  -v "$(pwd)/data:/data" \
  -v "$(pwd)/scan:/scan" \
  -v "$(pwd)/quarantine:/quarantine" \
  -v "$(pwd)/log:/log" \
  -v "$(pwd)/state:/state" \
  tinkerbell37745/clamav-timedock

访问 http://<主机地址>:8080。首次打开时,使用你设置的令牌注册首个账户;该账户会自动成为管理员。完成首次运行流程后,管理员可在界面中创建其他账户。

⁠📦 持久化目录

六个目录都建议挂载到宿主机;容器需要读取 /scan,而隔离、删除和恢复还需要对它写入。

容器路径用途
/scan可浏览、扫描和处置的目标数据根目录
/quarantine隔离文件与其原始路径记录
/config定时规则、信任区、服务配置
/data用户、会话和历史索引 SQLite 数据库
/state扫描任务 JSON、状态文件和锁
/logGo 后端、启动、cron、扫描与检出日志

⁠🔐 安全与权限

  • 密码以带独立随机 salt 的 Argon2id 哈希保存;认证使用 HttpOnly、SameSite=Strict 的 Cookie session。
  • session 的绝对有效期为 24 小时,空闲有效期为 2 小时;登录接口有单 IP 与全局限流。
  • 除首次状态、首次管理员注册和登录外,所有 API 都要求登录;浏览器中的写操作还必须同源。
  • 用户的扫描队列、规则、信任区、历史、日志、查询任务和隔离区相互隔离。admin 只拥有用户与全局服务管理权,不能查看其他用户的业务数据。
  • move、remove、清空历史与清空隔离区会修改或删除数据。建议先使用“仅告警”,并使用 EICAR 等安全测试样本验证流程。

如在 HTTPS 反向代理后部署,请设置 SCANNER_COOKIE_SECURE=true;若需要读取真实客户端 IP,只能在可信代理前提下配置 SERVER_TRUSTED_REVERSEPROXY。完整语义见 服务端配置⁠。

⁠⚙️ 常用配置

配置默认值说明
SCANNER_ADDR:8080Web 服务监听地址。
ADMIN_REGISTER_TOKEN无首次管理员注册的必填令牌;推荐通过 Docker secret 注入。
SCANNER_COOKIE_SECUREfalseHTTPS 反向代理后设为 true。
IS_TIMEDOCKNY 时启用 TimeDock 模式。
TZ镜像默认值页面时间与 cron 时区。
SCAN_WAIT_INTERVAL30定时任务等待扫描锁的重试间隔(秒)。
SCAN_WAIT_MAX_SECONDS0定时任务最大等待时间;0 为不限制。
USER_DATABASE_FILE/data/users.db用户与 session 数据库。
HISTORY_DATABASE_FILE/data/history.db历史任务索引数据库。
CLAMAV_SLEEP_TIMER3600ClamAV 自动休眠间隔(秒);配置文件或 API 设为 0 可关闭。
LOG_FILE_MAX_SIZE5242880/log/clamavweb.log 单文件最大字节数。
LOG_FILE_NUM5Go 后端日志文件总数(包含当前文件)。
LOG_LEVELwarnGo 后端最低日志等级。

服务配置保存在 /config/clamavweb.conf,管理 API 可调整登录限制、历史索引间隔和 ClamAV 自动休眠时间,供前端设置页接入;日志配置需手工修改并重启服务,不通过界面或 API 暴露。配置项范围、默认值及反向代理规则见 server/server_conf.md⁠。

⁠📖 使用要点

  • 处理方式:warn 只记录威胁;move 移至隔离区并可恢复;remove 直接删除,不能恢复。
  • 定时规则:使用五段 cron(分 时 日 月 周),支持范围、步长与逗号列表;保存后会校验并重载。
  • 信任区:白名单按内容 SHA-256 生效。文件变更后需重新添加;扫描执行时不能修改信任区。
  • 队列:等待任务可调整顺序或取消;容器重启后,内存中尚未开始的手动任务不会恢复。
  • 隔离恢复:若原路径已有同名文件,恢复会拒绝覆盖;恢复出的文件仍可能有风险。

⁠🛠️ 开发与接口

前端源码位于 ClamAV-Web/,后端源码位于 server/。本地前端开发服务器监听 http://127.0.0.1:5174,并默认将 /api 代理到 http://127.0.0.1:8080。

cd ClamAV-Web
npm ci
npm run dev
cd server
go test ./...

更完整的架构、开发流程、测试与扩展约定,请阅读 DEV.md⁠。请求与响应详情请阅读 server/api.md⁠。

⁠🙏 致谢

本项目开发中使用到了以下数个项目/开源仓库,致谢

⁠📄 License

本项目采用 MIT License⁠。

Tag summary

Content type

Image

Digest

sha256:f37a5de54…

Size

91.2 MB

Last updated

about 1 month ago

docker pull tinkerbell37745/clamav-timedock