外观
用 Fail2ban 封禁暴力破解
完成后,同一个 IP 反复猜 SSH 或 Web 界面的密码,会被自动封禁一段时间;你自己的网段不会被误封。
适合谁
- SSH 或其他服务确实要对局域网以外开放,或者局域网里有不完全可信的设备。
- 它是补充,不是替代:先做好SSH 加固(只认公钥)和管理员账户,再考虑 Fail2ban。只用公钥登录的 SSH,被爆破也猜不出密钥,Fail2ban 对它只剩减少日志噪音的作用。
- 不要用它代替「不暴露到公网」,见远程访问。
插件信息
| 项 | 内容 |
|---|---|
| 包名 | openmediavault-fail2ban |
| 来源 | omv-extras(社区维护) |
| OMV 8 状态 | 截至 2026-10-22 的 omv-extras synchrony 软件源为 8.0(amd64、arm64) |
| 菜单位置 | 服务 → Fail2ban → 设置(Services → Fail2ban → Settings)、Jails;状态页在 诊断 → 服务 → Fail2ban(Diagnostics → Services → Fail2ban) |
| 依赖 | fail2ban、whois。要先安装 omv-extras |
先看清默认值
安装后服务是关的,所有 jail(规则)也都是关的。这些默认值来自插件源码,直接开启会有几个坑:
| 设置 | 默认值 | 问题 |
|---|---|---|
| 忽略 IP(Ignore IP) | 只有 127.0.0.1 | 局域网地址不在白名单里,你自己输错几次密码,电脑就被封了 |
| 查找时间(Find time) | 604800 秒(一周) | 失败次数在一周内累计,一周内输错 3 次就封,太苛刻 |
| 禁止时间(Ban time) | 604800 秒(一周) | 但每条 jail 自带的禁止时间会覆盖它,见下一行 |
| 每条 jail 的禁止时间 | -1 | 负数表示永久封禁 |
| 最大尝试(Max retry) | 3 | 偏严 |
| 动作(Action) | action_mwl | 每次封禁都发一封带 whois 和日志的邮件,被扫描时邮箱会被刷满 |
| 目的地Email(Dest email) | root@localhost | 改成你真实的邮箱 |
默认配置可能把你自己永久封掉
- 影响范围:被封的 IP 在封禁期内连不上被保护的端口(SSH、Web 界面、SMB 等),不影响其他 IP。
- 前置条件:开启前先把你自己的网段写进忽略 IP;把每条 jail 的禁止时间从
-1改成有限时长;确认你能在本机控制台登录。 - 怎么回退:在 OMV 的 shell 里用
fail2ban-client set <jail 名> unbanip <IP>解封单个 IP;或者在服务 → Fail2ban → 设置取消启用并应用,服务停止后它加的防火墙规则通常也会撤掉。
配置步骤
系统 → 插件(System → Plugins)安装openmediavault-fail2ban,装完硬刷新浏览器,见安装、更新与卸载插件。- 进入
服务 → Fail2ban → 设置,建议这样改(这是本站的建议值,不是默认值):
| 字段 | 建议 |
|---|---|
| 启用 | 勾选 |
| 忽略 IP | 加上你的局域网网段,用空格分隔,例如 127.0.0.1/8 192.168.1.0/24。支持单个 IP、CIDR 网段和 DNS 主机名 |
| 查找时间 | 600(10 分钟) |
| 禁止时间 | 3600(1 小时) |
| 最大尝试 | 5 |
| 目的地Email | 你的邮箱。邮件靠 OMV 的邮件通知发出,先配好,见配置邮件通知 |
| 动作 | 嫌邮件太多,选 action_(只封禁不发邮件)或 action_mw(发邮件,不带日志) |
- 进入
Jails页,选中 ssh 这条,点编辑:勾选启用,把最大尝试改成5,禁止时间从-1改成3600。端口默认是ssh(即 22);你改过 SSH 端口的话,这里要写实际的端口号,否则封禁规则挡的不是你真正在用的端口。 - 保存,点黄色提示条上的应用。
OMV 每次应用都会重新生成 /etc/fail2ban/jail.conf 和 jail.d 下以 openmediavault- 开头的文件,手改会被覆盖。新增规则只能在 Jails 页点创建,填名称、端口、最大尝试、禁止时间、筛选(Filter,过滤器名)和日志路径(留空表示读 systemd 日志)。
内置的 jail
| 名称 | 过滤器 | 端口 | 日志来源 | 说明 |
|---|---|---|---|---|
ssh | sshd | ssh | systemd 日志 | 首选,建议只开它 |
sshd-ddos | sshd | ssh | systemd 日志 | 和 ssh 用同一个过滤器,重复,不用开 |
omv-webgui | omv-webgui | http,https | systemd 日志 | 读 OMV 自己记录的 Web 登录失败日志,见下 |
samba | samba | 139,445 | /var/log/samba/log.smbd | 需要先打开 Samba 的认证审计日志,见下 |
proftp | proftpd | ftp,ftp-data,ftps,ftps-data | /var/log/proftpd/proftpd.log | 配合 FTP 插件 |
nginx-404 | nginx-404 | http,https | /var/log/nginx*/*access*.log | 每个 404 都计数,浏览器找不到图标也算,容易误伤,新手别开 |
owncloud | owncloud | http,https,8443 | /MyPath/owncloud.log | 日志路径是占位符,OMV 8 一般用不到 |
omv-webgui:Web 界面登录失败时,OMV 会在系统日志里写一行 Unauthorized login attempt from <来源地址>,这条 jail 就是读它。注意:来源地址取的是 nginx 看到的客户端地址。如果你让反向代理挡在 OMV 前面,看到的就是代理的 IP,封禁会误伤代理自己,这种情况下不要开它,或者把代理加进忽略 IP。
samba:OMV 的 Samba 默认不记录认证失败。按插件里过滤器文件的说明,要在 服务 → SMB/CIFS → 设置(Services → SMB/CIFS → Settings)页面最下面高级设置(Advanced settings)分组里的扩展选项(Extra options)加一行(页面上还有一个在主目录分组下的同名字段,别选错),让 Samba 把认证失败记到 log.smbd(该过滤器注明只在 OMV 8 上测试过):
text
log level = 0 auth_json_audit:2@/var/log/samba/log.smbd查看封禁记录与解封
- 状态:
诊断 → 服务 → Fail2ban显示fail2ban-client status的输出,以及每个启用的 jail 的详情,包括Currently banned和Banned IP list。 - 日志:
诊断 → 系统日志(Diagnostics → System Logs)里选 Fail2ban,对应/var/log/fail2ban.log。 - 命令行:
sh
# 在 OMV 的 shell 里,以 root 身份
fail2ban-client status
fail2ban-client status ssh
# 解封一个 IP(jail 名和 IP 按实际填写)
fail2ban-client set ssh unbanip <IP>检查结果
fail2ban-client status列出了你启用的 jail(例如ssh)。- 想验证封禁真的生效,先把
ssh这条的禁止时间临时改成600,用一台不在忽略 IP 里的设备连续输错密码,再看fail2ban-client status ssh里是否出现了它的 IP。验证完记得改回,并在测试设备上解封。 诊断 → 服务 → Fail2ban页面能正常打开。
局限与注意
- Fail2ban 只能封来源 IP。分布式的、IP 不断变化的爆破,它挡不住。
- 它的封禁规则挂在
INPUT链上(OMV_FAIL2BAN_CHAIN默认值)。通过 Docker 端口映射发布的容器服务,流量通常走转发链,不在它的保护范围内。 - OMV 的防火墙脚本在启动或停止时会清空
INPUT和OUTPUT链,Fail2ban 挂在INPUT链上的规则会被一起清掉。按源码推断,改过防火墙规则并应用后,要重启一次 Fail2ban(systemctl restart fail2ban),再用fail2ban-client status确认。这一点本站未在实机验证。 - 它和 OMV 自带的账户锁定是两套机制:账户锁定按账号计数,Fail2ban 按IP 封禁,可以同时存在。
- 卸载插件时,界面执行的是
apt-get --auto-remove --purge remove,插件的配置和它生成的 jail 文件会被清除,fail2ban和whois这类不再被需要的依赖通常也会一并移除,见安装、更新与卸载插件。
常见问题
刚装好、还没启用任何 jail 就打开诊断页,报 Invalid RPC response。 这是插件的已知问题(GitHub issue 41):没有启用 jail 时,诊断页拿到的是字符串而不是列表。源码主分支已经改成显示 No jail enabled,但 synchrony 软件源里的 8.0 是否已包含修复,本站未核实。启用至少一条 jail 后页面通常恢复正常。
自己被封了。 在另一台设备上,或者在本机控制台里用 fail2ban-client set <jail 名> unbanip <你的 IP> 解封,然后把你的网段加进忽略 IP。
改了 SSH 或 Web 端口,封禁不起作用。 对应 jail 的端口还是旧的。改成新端口号后应用。
邮件太多。 把动作改成 action_ 或 action_mw。
参考资料
- omv-extras 插件源码:openmediavault-fail2ban(默认值在
conf.service.fail2ban.sh,jail 模板和过滤器在srv/salt与etc/fail2ban/filter.d)。 - OMV 源码:
var/www/openmediavault/rpc/session.inc(Web 登录失败日志的格式)、etc_iptables_openmediavault-firewall.j2(防火墙脚本)。