什么是 Fail2ban?
Fail2ban 是一个开源工具,通过监视应用程序日志并使用正则表达式匹配,将多次登录失败的 IP 地址通过 iptables 规则进行封禁。这可以有效防止主密码遭受暴力破解攻击,尤其适用于像 Bitwarden 这样的密码管理器。
安装 Fail2ban
在 Debian/Ubuntu 系统上,使用以下命令安装:
apt install fail2ban
配置前的准备
在配置 Fail2ban 之前,请确保服务的 TZ
(时区)和 IP_HEADER
(IP 头部)环境变量设置正确。前者影响日志时间戳,后者确保日志中记录的是真实的访问 IP 地址。
创建过滤器
首先,在 /etc/fail2ban/filter.d
目录下创建文件 bitwarden.local
,内容如下:
[INCLUDES]
before = common.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =
这个过滤器用于匹配 Bitwarden 日志中的失败登录尝试。
创建 Jail
接下来,在 /etc/fail2ban/jail.d
目录下创建文件 bitwarden.local
,内容如下:
[bitwarden]
enabled = true
port = 80,443
name = bitwarden
filter = bitwarden
banaction = iptables-multiport
logpath = /root/bitwarden-data/bitwarden.log
maxretry = 3
bantime = 14400
findtime = 14400
注意:如果你的服务器监听端口不是 80 和 443,请相应修改
port
参数,否则 iptables 规则将无法正确封禁对实际端口的访问。
重启 Fail2ban
配置完成后,重启 Fail2ban 服务:
systemctl restart fail2ban
测试配置
故意输入错误的密码,查看 Jail 状态中的记录数是否增加:
fail2ban-client status bitwarden
当失败次数达到 3 次后,当前 IP 应被封禁,无法访问 80 和 443 端口。
解封 IP
如果需要手动解封某个 IP,使用以下命令:
fail2ban-client set bitwarden unbanip XX.XX.XX.XX