在实际运维中,Fail2ban 不只是一个防护工具,它还是一台服务器长期遭受攻击后形成的“安全记忆库”。当更换或迁移 VPS 时,如果只重新安装 Fail2ban 而不迁移其历史状态,就等于让攻击者从零开始重新测试新服务器的防御边界。

本文介绍一种可验证、可复现、可迁移的 Fail2ban 完整状态迁移方法。


一、Fail2ban 的真实数据在哪里

Fail2ban 的运行状态由两部分构成:

类型目录
配置与规则/etc/fail2ban
封禁状态与历史/var/lib/fail2ban

其中 /var/lib/fail2ban 通常包含一个 SQLite 数据库,用于存储:

  • 当前被封禁的 IP
  • 各 jail 的失败计数
  • 封禁时间与解封时间

这是 Fail2ban 最重要的“资产”。


二、为什么不能在运行时备份

Fail2ban 在运行中会持续写入数据库:

  • 新 IP 被封
  • 旧 IP 解封
  • 失败次数更新

如果在运行中直接复制数据库文件,极容易得到:

  • 半写入的数据库
  • 未合并的 WAL
  • 不一致的 SQLite 状态

这会导致迁移后 Fail2ban 启动失败或悄然失效。

因此,正确做法是:
先停服务,再备份数据。


三、确认 Fail2ban 运行模式

Fail2ban 有两种运行模型:

模式特征
root 模式系统中没有 fail2ban 用户
非 root 模式存在 fail2ban 用户,systemd 中有 User=fail2ban

可以通过以下方式确认:

getent passwd fail2ban
ps -eo user,group,comm | grep fail2ban
systemctl cat fail2ban | grep -i user

在某些云 VPS 或老系统中,Fail2ban 以 root 身份运行,这是完全合法且安全的配置。


四、正确备份方式

在源服务器上:

systemctl stop fail2ban

tar -czvf /root/fail2ban-full-backup.tar.gz \
    /etc/fail2ban \
    /var/lib/fail2ban

这个压缩包包含了:

  • 所有 jail 规则
  • 所有过滤器
  • 所有封禁 IP
  • 所有失败计数

等同于 Fail2ban 的“完整灵魂”。


五、在新 VPS 上恢复

在新服务器上安装 Fail2ban 后:

systemctl stop fail2ban
tar -xzvf fail2ban-full-backup.tar.gz -C /

然后根据运行模式设置权限:

如果是 root 模式

chown -R root:root /etc/fail2ban /var/lib/fail2ban

如果是 fail2ban 用户模式

chown -R root:root /etc/fail2ban
chown -R fail2ban:fail2ban /var/lib/fail2ban

最后启动:

systemctl start fail2ban

验证:

fail2ban-client status

如果看到原有 jail 和原有 banned IP 数量,说明迁移成功。


六、这种迁移方式的意义

大多数 VPS 迁移流程是:

换机器 → 重新安装 Fail2ban → 攻击者重新开始扫描

而完整迁移 Fail2ban 的方式是:

换机器 → 直接继承原服务器的攻击历史 → 攻击者立刻被旧黑名单拦截

这相当于把一台“经历过真实互联网攻击的服务器防御体系”整体复制到新环境,是生产级运维中非常少见但极其高价值的做法。

Leave a Reply

Your email address will not be published. Required fields are marked *