Fail2ban 就像是你服务器的一个 “不知疲倦的门卫兼保安”。

UFW 防火墙是静态的(你规定放行 52214 端口,它就一直开着门),而 Fail2ban 是动态的。它会实时监控系统的各种日志(比如 SSH 的登录日志)。当它发现某个 IP 地址在短时间内疯狂尝试输错密码时,它会立刻呼叫 UFW:“把这个 IP 给我拉黑!”

因为你已经更改了默认的 SSH 端口(52214),我们在配置 Fail2ban 时需要特别注意这一点。以下是详细的部署和配置流程:

# 第一步:安装 Fail2ban

在 Ubuntu/Debian 系统上,直接通过 apt 安装:

sudo apt update
sudo apt install fail2ban -y

# 第二步:创建本地配置文件

Fail2ban 的默认配置文件是 /etc/fail2ban/jail.conf强烈建议不要直接修改这个文件,因为软件更新时可能会覆盖它。
标准做法是创建一份命名为 jail.local ,Fail2ban 会优先读取 .local 文件中的设置:

sudo nano /etc/fail2ban/jail.local

# 第三步:粘贴以下定制配置

这是一个为你精简并优化过的配置。请将下面的内容完整复制并粘贴到你刚打开的 nano 编辑器中:

# ========================================================
# Fail2ban 自定义配置文件 (jail.local)
# ========================================================
[DEFAULT]
# 全局默认设置
# --------------------
# 忽略的 IP (白名单):这里必须填入你平时访问服务器的固定 IP(如果有的话)
# 比如你公司的固定 IP,防止你自己被误封。127.0.0.1 必须保留。
ignoreip = 127.0.0.1/8 ::1
# 惩罚时长 (bantime):被封禁的 IP 关多久的小黑屋 (例如:1h, 1d, -1 代表永久)
bantime = 24h
# 取证时间窗口 (findtime):在多长时间内统计失败次数
findtime = 15m
# 最大容错次数 (maxretry):在 findtime 内允许失败的次数
maxretry = 3
# 使用的防火墙动作:调用 iptables-multiport (UFW 的底层)
banaction = iptables-multiport
# ========================================================
# 具体监狱 (Jails) 设置
# ========================================================
[sshd]
# 保护 SSH 服务 (非常重要)
# --------------------
# 开启这个监狱
enabled = true
# ⚠️ 必须填写你修改后的 SSH 端口!
port = 52214
# 指定 SSH 的日志路径 (在 Ubuntu/Debian 通常是 auth.log)
logpath = /var/log/auth.log
# 针对 SSH,我们可以设置更严厉的规则,覆盖全局设置
maxretry = 3
bantime = 7d  # 抓到爆破 SSH 的,直接拉黑 7 天
# 使用 aggressive 模式,不仅防密码错误,还防一些高级的漏洞试探
mode = aggressive

# 1. 了解三个核心概念(全局设置)

在文件中找到 [DEFAULT] 这一块,这里定义了保安的 “判罚尺度”。你需要了解并可以按需修改以下三个参数:

  • bantime = 10m (封禁时间):抓到坏人后,关小黑屋多久。可以改为 1h (1 小时)、 1d (1 天),甚至 -1 (永久封禁)。建议初期设置为 1h
  • findtime = 10m (取证时间):保安的回忆时间窗口。
  • maxretry = 5 (容错次数):在 findtime 的时间内,允许失败多少次。

(举例:上面默认设置的意思是 —— 如果某个 IP 在 10 分钟内,连续输错 5 次密码,就把它封禁 10 分钟。)

(修改完成后,按 Ctrl+O 保存,回车确认, Ctrl+X 退出)

# 第四步:启动并验证 Fail2ban

让配置生效并设置开机自启:

# 重启服务应用新配置
sudo systemctl restart fail2ban
# 设置开机自启
sudo systemctl enable fail2ban

验证 Fail2ban 是否正常工作:

sudo fail2ban-client status

这会显示当前激活的 “监狱” 列表(你应该能看到 sshd )。

如果想看具体某个监狱(比如 sshd)抓了多少人:

sudo fail2ban-client status sshd

这个命令非常实用,它会列出当前被封禁的坏人 IP 列表 ( Banned IP list )。


# 💡 进阶小贴士:如果你把自己给封了怎么办?

刚配置好时,如果你自己不小心输错密码次数过多被拉黑了,连不上服务器怎么办?(前提是你通过云服务商的 VNC 网页终端登录进去了)

你可以使用这个命令手动解封指定的 IP(将 1.2.3.4 换成你的 IP):

sudo fail2ban-client set sshd unbanip 1.2.3.4