如何在搬瓦工服务器上安装ufw防火墙和Fail2ban来防止黑客暴力破解
更多语言
更多操作
在上一篇教程中,我们成功将服务器重装为了 Debian 12 系统。
Debian 12 (Bookworm) 相比旧版本做了一个重要的底层变更:默认不再安装 rsyslog,这意味着 /var/log/auth.log 这种传统的文本日志文件在默认状态下是不存在的。
这导致很多网上的旧版 Fail2Ban 教程在 Debian 12 上会失效(常见报错为 Failed to access socket path 或无法封禁 IP)。
本篇教程将基于 Debian 12 的新特性,带大家部署 UFW 防火墙,并配置使用 Systemd 驱动的 Fail2Ban,为你的 VPS 提供严谨、有效的安全防护。
第一步:基础环境更新
安全的第一步永远是保持软件最新。连接 SSH 后,执行以下命令更新软件包列表:
apt update && apt upgrade -y

第二步:配置 UFW 防火墙
UFW (Uncomplicated Firewall) 是管理 iptables 的前端工具,配置简单且不易出错。
1. 安装 UFW
apt install ufw -y

2. 放行 SSH 端口(核心步骤)
注意:在启动防火墙之前,必须显式放行 SSH 端口,否则会直接切断你当前的连接。
- 默认端口:如果你没改过端口,执行:
ufw allow 22/tcp
- 自定义端口:如果你修改了 SSH 端口(例如 29999),请务必改为:
ufw allow 29999/tcp

3. 放行 Web 服务(可选)
如果你后续计划部署博客或网站,建议提前放行 HTTP 和 HTTPS 端口:
ufw allow 80/tcp
ufw allow 443/tcp
4. 启用防火墙
确认规则添加无误后,启用 UFW:
ufw enable
系统会提示可能会中断 SSH 连接,输入 y 并回车确认。

第三步:部署 Fail2Ban (适配 Debian 12)
Fail2Ban 通过监控日志来发现恶意行为(如频繁输错密码),并自动调用防火墙封禁来源 IP。
1. 安装 Fail2Ban
apt install fail2ban -y

2. 创建自定义配置文件
为了保持配置的整洁和持久性(防止软件升级覆盖配置),我们不要直接修改 /etc/fail2ban/jail.conf,而是在 jail.d 目录下新建一个高优先级的配置文件。
使用 vim 或 nano 编辑新文件:
nano /etc/fail2ban/jail.d/defaults-debian.conf

3. 写入核心配置(Systemd 模式)
这是最关键的一步。
针对 Debian 12 默认没有 auth.log 的情况,我们需要指定 backend = systemd,让 Fail2Ban 直接从系统日志接口读取数据。
请将以下内容复制并粘贴到文件中:
[DEFAULT]
# 忽略的 IP 白名单(将 1.1.1.1 替换为你自己的常用 IP,或者删除该行)
ignoreip = 127.0.0.1/8 ::1
# 封禁时长:1小时 (-1 为永久封禁)
bantime = 1h
# 判定时间窗口:10分钟内输错 N 次即封禁
findtime = 10m
# 最大尝试次数
maxretry = 5
# [重要] 指定封禁动作使用 ufw
banaction = ufw
[sshd]
enabled = true
# [核心] Debian 12 必须指定 backend 为 systemd 才能读取日志
backend = systemd
port = ssh
- 按
Ctrl + O保存,按Ctrl + X退出编辑器。*

4. 启动并验证服务
配置完成后,重启 Fail2Ban 服务以应用更改:
systemctl restart fail2ban
systemctl enable fail2ban
验证服务状态:
输入以下命令查看 SSH 监控模块的运行情况:
fail2ban-client status sshd
正确的结果应该类似下方输出,且不会出现 ERROR 或 Failed to access socket 的报错:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
如果看到 Journal matches 或类似的日志源提示,说明 Fail2Ban 已经成功挂载到 systemd 日志流上,开始正常工作了。

总结
至此,UFW防火墙和Fail2ban都设置完成。 index.php?title=Category:500 常见应用指南 — Application Guides