在用户发现之前,先知道你的邮件服务器已被列入黑名单。
针对你所运营的 IP 和域名的自托管监控:24 个 DNS 黑名单、SSL 与域名到期、SPF/DKIM/DMARC 以及正常运行时间,并在发生变化时发出告警。

git clone https://github.com/bekkaze/abusebox.git && cd abusebox
docker compose up -d
打开 http://localhost:3000,以 admin 身份登录,密码从 docker compose exec backend cat /app/data/initial_admin_password 获取,然后在设置中修改密码。更多选项见安装。
如果 AbuseBox 帮你避免了一次退信,点个 star 能帮助其他邮件运维人员发现它。
监控
检查
日常使用
git clone https://github.com/bekkaze/abusebox.git
cd abusebox
cp backend/.env.example .env # optional: alerts, API keys, admin account
docker compose up -d # pulls the prebuilt images (add --build to build from source)
打开 http://localhost:3000,即可开始使用。
首次登录: 用户名为
admin,首次启动时会生成一个随机密码。可通过docker compose exec backend cat /app/data/initial_admin_password读取该密码;后端日志会指明该文件的位置,但不再直接打印密码本身,因此你分享给他人的日志不会让对方获得账户访问权限。登录后请立即在设置中修改密码;修改后保存的副本会被删除。如需自行指定密码,请在首次启动前于.env中设置DEFAULT_ADMIN_PASSWORD。如果数据路径不可写,账户将完全不会被创建,日志会说明这一情况,而不会把密码写入其中。UI 可在任意主机名下响应,因此你可以立即从另一台机器打开它。在将其暴露到你不信任的网络之前,请先置于你自己的 HTTPS 反向代理之后。
前置条件: Python 3.11+、Node.js 20.19+、Yarn
后端:
cd backend
cp .env.example .env
pip install -r requirements.txt
uvicorn app.main:app --host 127.0.0.1 --port 8100 --reload
首次启动会生成管理员密码,并将其保存在数据库旁边,文件名为 initial_admin_password。终端会显示该文件的确切路径。
前端(新终端):
cd frontend
cp .env.example .env
yarn install
yarn dev
打开 http://localhost:3000。
frontend/.env 配置开发服务器:VITE_BASE_URL 是它代理 /api 的后端地址(默认 http://localhost:8100),VITE_ALLOWED_HOSTS 是它响应的主机名(默认 localhost,127.0.0.1)。Docker 镜像不使用这两项;它用 nginx 提供构建后的 UI,并将 /api 代理到 BACKEND_URL。
Unraid 社区应用(Community Applications)的模板位于 templates/unraid/。AbuseBox 以两个容器运行,因此需要同时安装两者:
abusebox-backend.xml 和 abusebox-frontend.xml 复制到服务器上的 /boot/config/plugins/dockerMan/templates-user/(或在 Docker → Template repositories 下添加此仓库)。/mnt/user/appdata/abusebox,并将 Allowed browser origins 设置为你打开 AbuseBox 时使用的地址,例如 http://192.168.1.10:3000。http://192.168.1.10:8100。不要使用 localhost —— 那指向的是前端容器自身。http://<your-server>:3000。管理员密码位于你所选数据路径下的 initial_admin_password 中;AbuseBox-Backend 日志会指明该文件。可通过 Docker → AbuseBox-Backend → Console 使用 cat /app/data/initial_admin_password 读取,或通过 SMB 从共享目录读取。Unraid 没有内置解析器,因此 Blacklist resolvers 默认为空,将使用服务器自身的解析器。如果黑名单显示 "No answer",请参阅 显示 "No answer" 的黑名单。
templates/portainer/ 包含一个应用模板和一个自包含的 compose 文件(无构建上下文,无绑定挂载)。
https://raw.githubusercontent.com/bekkaze/abusebox/main/templates/portainer/template.json,然后从 App Templates 部署 AbuseBox。https://github.com/bekkaze/abusebox,compose 路径为 templates/portainer/docker-compose.yml。将 Allowed browser origins 设置为你打开 AbuseBox 时使用的地址,然后访问 http://<your-server>:3000。要获取管理员密码,请在 Portainer 中打开后端容器的 Console 并运行 cat /app/data/initial_admin_password。
templates/casaos/docker-compose.yml 是一个自包含的 CasaOS 应用。
+),选择 Import 并粘贴该文件的内容。APP_CORS_ALLOWED_ORIGINS 设置为你打开 AbuseBox 时使用的地址,例如 http://192.168.1.10:3000,否则浏览器将阻止 API 调用。数据位于 /DATA/AppData/abusebox/data。管理员密码位于该文件夹中的 initial_admin_password 内,你可以在 CasaOS 文件管理器中打开它。
docker compose pull && docker compose up -d
数据库会在启动时自动迁移,你的数据会保留。(从源码构建?git pull && docker compose up -d --build。)
大多数版本不需要其他操作。少数需要额外操作的版本列在下面,更新日志 中有每个版本的完整细节。
v1.3.4 — 无需任何操作。有两项新增内容位于仓库中而非镜像中,因此如果你需要它们,也要执行 git pull:docker-compose.yml 末尾被注释掉的 enable_ipv6 块(参见 超时的 WHOIS),以及 templates/ 中用于 Unraid、Portainer 和 CasaOS 的安装模板。
v1.3.2 — 除了拉取镜像外,还要执行 git pull:docker-compose.yml 为黑名单查询新增了一个 DNS 解析器(Unbound),参见 显示“No answer”的黑名单。后端的 8100 端口现在仅在本机监听,因此其他位置的脚本应通过 3000 端口调用 API。后端容器以非特权用户运行,并在首次启动时取得数据卷的所有权,因此无需任何操作。仍在使用 password123?它仍然可用,但会显示一条横幅要求你更改它。
v1.3.0 — 前端是由 nginx 提供的生产构建,因此 .env 中的 VITE_ALLOWED_HOSTS、VITE_BASE_URL 和 VITE_API_DOCS_URL 已不再使用,可以删除;API 文档已移至 http://localhost:3000/api/swagger/。迁移已移至 Alembic,现有数据库会在首次启动时升级。ISP 和其他商业用户需要设置 SPAMHAUS_DQS_KEY,参见 配置。