什么是 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