内容提要
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错误。