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 |