CDN场景下配置Vaultwarden启用fail2ban

CDN场景下配置Vaultwarden启用fail2ban

💡 原文中文,约7700字,阅读约需19分钟。
📝

内容提要

Vaulwarden是一个开源的密码管理工具,使用Rust实现了Bitwarden Server API。本文介绍了如何使用fail2ban在CDN场景下防止暴力破解。

🔎

延伸解读

CDN场景下的封禁挑战

使用CDN后,所有用户请求都经由CDN节点转发,源站无法直接看到用户真实IP。传统fail2ban通过iptables封锁IP的方式在源站会失效,因为源站看到的都是CDN节点IP。因此需要将封禁动作从网络层转移到应用层,通过Nginx网关来阻断恶意请求,同时利用RealIP模块从X-Forwarded-For头中提取用户真实IP。

fail2ban与Nginx的联动机制

文章通过自定义fail2ban的action,将封禁IP以Nginx map格式写入vaultwarden_blocked_ips.map文件,并触发Nginx reload。Nginx配置中利用map指令将$remote_addr映射为$blck_lst_ses变量,当变量非空时直接返回403。这种设计让fail2ban的封禁列表能动态生效,无需重启Nginx,实现了从日志监控到请求拦截的闭环。

配置中的关键细节

Vaultwarden需设置LOG_LEVEL=warn并指定日志文件路径,确保登录失败事件被记录。fail2ban的filter规则需精确匹配日志中的IP地址,如'Username or password is incorrect'和'Invalid admin token'。jail配置中maxretry=3、bantime=14400等参数决定了封禁阈值和时长。此外,Nginx需正确设置real_ip_header和set_real_ip_from,否则无法获取真实用户IP。

测试与日常管理

配置完成后,可通过Web界面故意输错密码3次来测试封禁效果,使用fail2ban-client status vaultwarden查看封禁列表。常用命令包括banip手动封禁、unbanip解封以及status查看状态。解封后用户即可恢复访问。这种方案不仅适用于Vaultwarden,也可为其他自托管服务在CDN场景下提供防暴力破解参考。

❓

Q&A

什么是Vaultwarden,它的主要功能是什么?

Vaultwarden是一个开源自托管的密码管理工具,使用Rust实现了Bitwarden Server API,主要用于管理密钥与凭证。

如何在CDN场景下配置fail2ban以防止暴力破解?

在CDN场景下,需要从Nginx网关层面配置自定义规则,使用fail2ban监听Vaultwarden的日志文件,封锁多次登录失败的IP。

fail2ban是如何工作的,它的主要功能是什么?

fail2ban通过监听登录失败事件,自动封锁多次尝试失败的IP地址,以防止暴力破解。

在配置Vaultwarden时,如何设置日志等级和输出路径?

在config.env文件中,将日志等级设置为warn,并指定日志文件输出路径为/log/vaultwarden.log。

如何测试fail2ban的效果?

可以通过输入3次错误密码登录来测试fail2ban,之后使用命令查看被封禁的IP状态。

在Nginx中如何根据fail2ban的封锁列表阻止请求?

需要在Nginx配置中使用map指令引入vaultwarden_blocked_ips.map文件,并根据该文件的内容返回403错误。

🏷️

标签

➡️

继续阅读