跳转到内容

用 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 → 设置 取消启用并应用,服务停止后它加的防火墙规则通常也会撤掉。

配置步骤 ​

  1. 系统 → 插件(System → Plugins)安装 openmediavault-fail2ban,装完硬刷新浏览器,见安装、更新与卸载插件。
  2. 进入 服务 → 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(发邮件,不带日志)
  1. 进入 Jails 页,选中 ssh 这条,点编辑:勾选启用,把最大尝试改成 5,禁止时间从 -1 改成 3600。端口默认是 ssh(即 22);你改过 SSH 端口的话,这里要写实际的端口号,否则封禁规则挡的不是你真正在用的端口。
  2. 保存,点黄色提示条上的应用。

OMV 每次应用都会重新生成 /etc/fail2ban/jail.conf 和 jail.d 下以 openmediavault- 开头的文件,手改会被覆盖。新增规则只能在 Jails 页点创建,填名称、端口、最大尝试、禁止时间、筛选(Filter,过滤器名)和日志路径(留空表示读 systemd 日志)。

内置的 jail ​

名称过滤器端口日志来源说明
sshsshdsshsystemd 日志首选,建议只开它
sshd-ddossshdsshsystemd 日志和 ssh 用同一个过滤器,重复,不用开
omv-webguiomv-webguihttp,httpssystemd 日志读 OMV 自己记录的 Web 登录失败日志,见下
sambasamba139,445/var/log/samba/log.smbd需要先打开 Samba 的认证审计日志,见下
proftpproftpdftp,ftp-data,ftps,ftps-data/var/log/proftpd/proftpd.log配合 FTP 插件
nginx-404nginx-404http,https/var/log/nginx*/*access*.log每个 404 都计数,浏览器找不到图标也算,容易误伤,新手别开
owncloudowncloudhttp,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>

检查结果 ​

  1. fail2ban-client status 列出了你启用的 jail(例如 ssh)。
  2. 想验证封禁真的生效,先把 ssh 这条的禁止时间临时改成 600,用一台不在忽略 IP 里的设备连续输错密码,再看 fail2ban-client status ssh 里是否出现了它的 IP。验证完记得改回,并在测试设备上解封。
  3. 诊断 → 服务 → 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(防火墙脚本)。

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。