Docker部署的Bitwarden/Vaultwarden安全加固 使用Fail2ban防止暴力破解,自动拉黑封禁爆破者IP

前几天写了一篇Vaultwarden部署的文章(PC 安卓 苹果全平台密码管理工具BitWarden本地部署教程1Panel+Dcoker+反代 (wanpeng.life)),但是如果Vaultwarden直接暴露在公网上还是挺危险的,极大可能被人暴力破解,那么有什么方法进行防护呢?今天就跟大家分享一下,利用Fail2ban进行对爆破者IP的自动封禁。

Faile2ban简介

Fail2Ban 是一个用 Python 编写的安全软件框架,它能够防止基于暴力破解的攻击。它通过监控日志文件(如 /var/log/auth.log, /var/log/apache/access.log 等)来检测多个失败的登录尝试,然后通过更新防火墙规则(如 iptables)来临时禁止可疑的 IP 地址。

一、先决条件

开启 Bitwarden 日志记录

首先要开启 Bitwarden 的日志记录功能,fail2ban 需要通过读取日志中的登录错误日志,来累计失败次数,执行封禁动作。

docker run -d --name vaultwarden \
...
  -e LOG_FILE=/data/vaultwarden.log \
  -e TZ=Asia/Shanghai \
...
# 验证
cat vaultwarden.log

此步骤为重新编辑 Bitwarden 容器的启动命令,新增环境变量 LOG_FILE=/data/vaultwarden.log ,用于把日志持久化到本地。(容器不支持修改,只能删除重建,新增环境变量步骤会删除原容器,如原容器有数据,并且没有持久化到本地,请谨慎操作。)

二、配置步骤

1. 创建持久化存储

创建持久化存储,将 fail2ban 的配置文件持久化到本地,防止重建容器时被删除。

mkdir -p /opt/1panel/apps/fail2ban/action.d
mkdir -p /opt/1panel/apps/fail2ban/filter.d
mkdir -p /opt/1panel/apps/fail2ban/jail.d

路径自定义,跟下面的步骤都有关联,灵活定义、修改。

2. 把 REJECT 类型替换为 DROP

将 iptables 的策略规则有拒绝改成直接丢弃。

# vim /opt/1panel/apps/fail2ban/action.d/iptables.local

[Init]
blocktype = DROP
[Init?family=inet6]
blocktype = DROP

3. 创建 Dockerfile 文件

创建 fail2ban 容器的 Dockerfile 文件,用来启动容器;

时区国内请使用 “TZ=Asia/Shanghai”

注意 volumes 块的编写,确定要要存放的路径,我这里都放在了 /opt/1panel/apps/fail2ban 下

# vim /opt/1panel/apps/fail2ban/docker-compose.yml

version: '3'
services:
  fail2ban:
    container_name: fail2ban
    restart: always
    image: crazymax/fail2ban:latest
    environment: 
      - TZ=Asia/Shanghai
      - F2B_DB_PURGE_AGE=30d
      - F2B_LOG_TARGET=/data/fail2ban.log
      - F2B_LOG_LEVEL=INFO
      - F2B_IPTABLES_CHAIN=INPUT

    volumes:
      - /opt/1panel/apps/fail2ban:/data
      - /opt/1panel/apps/fail2ban/vaultwarden:/vaultwarden:ro
      - /opt/1panel/apps/bitwarden/bitwarden/data/vaultwarden.log:/vaultwarden.log

    network_mode: "host"

    privileged: true
    cap_add:
      - NET_ADMIN
      - NET_RAW

坑点:

Github 的部署手册没有/opt/1panel/apps/bitwarden/bitwarden/data/vaultwarden.log:/vaultwarden.log 这条,就会导致在后续启动容器的时候报错找不到 vaultwarden.log 文件。

这是因为 Bitwarden 容器的日志存放在本地,fail2ban 容器并没有权限访问,所以需要把本地 Bitwarden 的日志映射到容器内,映射后,容器方可正常启动。

未映射:

容器启动失败。

映射后:

容器正常启动。

4. 使用 Dockerfile 启动容器

启动容器,找到自己定义好的容器数据持久化目录,找到 Dockerfile 文件。

cd /opt/1panel/apps/fail2ban/
docker-compose up -d

5. Filter 配置

创建过滤器,检测失败的登录尝试。

# vim /opt/1panel/apps/fail2ban/filter.d/vaultwarden.local

[INCLUDES]
before = common.conf

[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =

6. Jail 配置

创建监禁规则,定义监控的端口、日志文件路径、最大重试次数、封禁时间等参数。

# vim /opt/1panel/apps/fail2ban/jail.d/vaultwarden.local

[vaultwarden]
enabled = true
port = 58843
filter = vaultwarden
banaction = %(banaction_allports)s
logpath = /vaultwarden.log
maxretry = 3
bantime = 14400
findtime = 14400

端口记得替换成自己部署时填写的端口。

7. 验证

查看封禁状态

docker exec -t fail2ban fail2ban-client  status  vaultwarden

解封IP地址

docker exec -t fail2ban fail2ban-client set vaultwarden unbanip XX.XX.XX.XX

Github 链接:https://github.com/dani-garcia/vaultwarden/wiki/Fail2Ban-Setup#synology-dsm

赞(1) 打赏
未经允许不得转载:万万没想到 » Docker部署的Bitwarden/Vaultwarden安全加固 使用Fail2ban防止暴力破解,自动拉黑封禁爆破者IP

评论 抢沙发

评论前必须登录!

立即登录   注册

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

登录

找回密码

注册