个人服务器专用 fail2ban 集中管控免费自托管

散⁠落各⁠处⁠的 fail2ban,
在同⁠一⁠界⁠面查⁠看并⁠拦⁠截。

SSem SecuMon 是专为自行运维 VPS 和家用服务器的个人打造的免费 fail2ban 集中管理控制台。只需在每台服务器上放一个小巧的代理程序,就能在一个界面中看到当前谁被拦截、是第几次屡犯,并通过签名命令执行封禁 · 解封 · IP 段封锁 · 国家封锁。

Linux 服务器 + fail2ban · nftables · 代理程序不开放任何入站端口 · 控制台部署在你自己的服务器上

secumon 仪表盘封禁列表目标执行国家封锁 admin · ADMIN
当前封禁1283 台服务器合计
今日新增37比昨天多 12
屡犯 IP19累计 3 次及以上
自动封锁6最近 24 小时
封禁趋势 · 24 小时web-01vpn-gw
服务器代理程序 3
  • web-0112 秒前
  • vpn-gw8 秒前
  • home-nas21 秒前
当前被拦截的 IP128
IP服务器jail屡犯等级国家剩余时间
203.0.113.45web-01 · vpn-gwsshd第 4 级 · 8 小时XA5 小时 12 分
198.51.100.7vpn-gwsshd第 2 级 · 2 小时XB1 小时 40 分
203.0.113.201home-nassshd第 3 级 · 4 小时XC3 小时 5 分
192.0.2.88web-01apache-auth第 1 级 · 1 小时XD24 分

界面示例中的服务器名称、IP 和国家均为虚构(IP 取自文档专用的保留地址段,国家代码 XA–XD 仅作示例)。

个⁠人⁠服⁠务⁠器也⁠天⁠天被⁠人⁠敲⁠门

暴露在互联网上的服务器每天都会收到数千次连接尝试。fail2ban 能挡住它们,但服务器一旦超过两台,就会出现看不到的盲区。

每台服务器都要分别查看

想知道谁被拦截了,就得逐台 SSH 登录,手动运行 fail2ban-client。同一个 IP 在轮番试探多台服务器,你也看不出来。

指数封禁终究会解除

屡犯次数越多封得越久,但时间一到还是会放开。第三次找上门的不是手误,而是在持续试探的对手。

IP 段封锁很容易出错

把数千个 IP 段逐台写进防火墙并保持更新,非常费工夫。一旦写错,连你自己的连接都会被切断。

一⁠目⁠了⁠然

查看、拦截、大范围封锁,都在一个控制台里完成。以下界面均为虚构的示例数据。

把一个 IP 追踪到底

在封禁列表中点击 IP,即可在一处看到该 IP 被封禁的服务器、封禁历史、当前等级以及下次封禁的预计时长。

  • 同时显示该 IP 被封禁的所有服务器
  • 国家信息来自内置查询表 — 不消耗外部 API 配额
  • 就地解封 · IP 段封锁 · AbuseIPDB 举报
203.0.113.45XA屡犯 4 次
涉及服务器
web-01 · vpn-gw
当前等级
第 4 级 · 8 小时
下次封禁预计
16 小时
信誉评分
100 / 100

封禁历史 — 1 小时 → 2 小时 → 4 小时 → 8 小时

解封IP 段封锁AbuseIPDB 举报

大范围封锁前,要确认两次

IP 段封锁是最危险的功能,因此设置了多重防误操作机制。必须再次输入要封锁的 IP 段才会执行,默认 30 天后自动解除。

  • 拒绝大于 IPv4 /16 · IPv6 /48 的 IP 段
  • 私有网络 · 回环地址 · 你指定的 IP 段无法被封锁
  • 多个 IP 段 × 多台服务器,一次完成
IP 段封锁
IP 段
203.0.113.0/24
地址数
256 个
服务器
web-01 · vpn-gw
期限
30 天后自动解除

受保护 IP 段(私有网络 · VPN · 你的服务器)无法封锁。

取消封锁

还能按国家封锁

从 233 个国家中选择,把所选国家的 IP 段写入服务器防火墙。启用后立即下载列表,30 秒内应用到所有服务器。

  • 没有变化就不会重复下发到服务器
  • 固定规则顺序,确保不拦截已建立连接的响应和 DNS
  • 启用前先显示 IP 段数量
国家封锁 2 个国家 · 4,600 个 IP 段
  • XA国家 A3,120 个 IP 段
  • XB国家 B1,480 个 IP 段
  • XC国家 C9,860 个 IP 段
  • XD国家 D640 个 IP 段

权威 DNS(53)始终放行。如果你在运营邮件接收或 VPN 服务,请先查看指南。

它⁠能做⁠什⁠么

查看、拦截,乃至自动拦截 — 只收录几台个人服务器真正需要的功能。

统一仪表盘

在一个界面中查看所有服务器的当前封禁、累计封禁、屡犯 IP 和趋势,也可以只看其中一台服务器。

屡犯等级显示

读取 fail2ban 的指数封禁(1 · 2 · 4 · 8… 倍),显示当前处于第几级、下次会被封禁多久。

封禁 · 解封

直接在界面上下发命令。服务器上的代理程序验证签名后才会执行,结果记录在命令历史中。

IP 段封锁

通过范围上限、受保护 IP 段、确认输入和自动解除(默认 30 天)防止误操作。若已被更大的 IP 段覆盖,则自动跳过。

屡犯 IP 自动封锁

累计被封禁 3 次及以上的 IP,将在所有服务器上封锁 30 天。仅限单个 IP,每次最多 20 条,全部记录并发送通知。

公开封锁列表

每天下载一次 Spamhaus DROP 和 FireHOL level1 并应用到所有服务器。与你自己的 IP 段重叠的条目会先被过滤掉。

国家封锁

把所选国家的 IP 段写入服务器防火墙的专用列表。关闭时只清空该列表 — 其他封锁保持不变。

AbuseIPDB · Telegram

只向 AbuseIPDB 举报被封禁的 IP,并查询其信誉。自动封锁和列表变更通过 Telegram 通知。密钥只保存在控制台服务器上。

审计日志 · 两步验证

所有执行、举报和登录都会被记录。提供只读、操作员、管理员三种角色以及 TOTP 两步验证。

它⁠是如⁠何工⁠作⁠的

控制台不会向服务器推送命令,而是由服务器上的代理程序主动连接控制台上报状态,取走签名命令,自行验证后再执行。

  1. 上报状态 代理程序每 30 秒读取一次 fail2ban 和防火墙状态,用自己的密钥签名后发送给控制台。
  2. 集中汇总 控制台把所有服务器的状态汇总到同一个数据库中,无论哪台服务器都显示在同一界面上。
  3. 命令进入队列 点击封禁或封锁时,控制台只是为命令签名并放入队列,不会连接到服务器。
  4. 验证后执行 代理程序只执行签名、目标服务器、有效期(60 秒)和防重放全部校验通过的命令。
  5. root 只给一个包装脚本 代理程序不以 root 运行。特权操作只经过一个 root 包装脚本,它只接受允许的动作。

防火墙按此顺序判定

SecuMon 使用一张专用的 nftables 表,不与 fail2ban 规则混在一起。封锁分为三层,可以看出“为什么被拦截”,更新其中一层也不会影响其他层。

  1. 1已建立连接的响应放行
  2. 2DNS (53)放行
  3. 3手动 · 自动封锁拦截 · 到期解除
  4. 4公开封锁列表拦截
  5. 5国家拦截

安⁠全⁠原⁠则

我们的设计目标是:为保护服务器而引入的工具,不能成为新的漏洞。

  • 服务器不开放任何入站端口。始终由代理程序主动连接控制台。
  • 所有命令均使用 Ed25519 签名。60 秒后过期,只执行一次,且只有指定的服务器才会执行。
  • 只允许五种动作。状态检查 · 封禁 · 解封 · IP 段封锁 · 解除封锁 — 不经过 shell,仅以参数数组方式执行。
  • 不会切断你自己的访问路径。对私有网络、回环地址和你指定的 IP 段,控制台会拒绝封锁;命令到达服务器后,包装脚本还会再检查一次。
  • 机密只通过文件注入。API 密钥、Telegram 令牌和签名密钥都以控制台服务器上的文件形式注入,密码使用 PBKDF2 哈希。
  • 保护登录。TOTP 两步验证、连续失败 5 次锁定 15 分钟,每个修改状态的请求都会校验 CSRF 令牌。

使⁠用⁠条⁠件

要保护的服务器
Linux(systemd)+ fail2ban · nftables · sqlite3。amd64 · arm64。已在 Ubuntu 22.04 · CentOS 8 上验证。
控制台服务器
1 台。JDK 21 · Tomcat 11 · PostgreSQL 17。用 Docker 启动最简单。
网络
只要各服务器能通过 HTTPS 访问控制台地址即可。建议将控制台置于 VPN 或内网之后。
时钟
所有服务器的时钟都需用 NTP 同步。签名时间偏差超过 60 秒即会被拒绝。
界面语言
控制台界面和日志消息目前仅提供韩语。本介绍和指南提供 10 种语言版本。
费用
免费。专为个人服务器打造。

准备中安装包的发布正在准备中。

准备工作和安装步骤,请先在免费指南中查看。

查看免费指南

从免⁠费⁠指⁠南开⁠始

从准备工作到第一次封锁,以一台个人服务器为例逐步讲解。
还收录了启用国家封锁前必须了解的事项。

查看免费指南

如有疑问,请联系 halo@levelupsoft.com