如何在搬瓦工服務器上安裝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 負責「站崗」,利用 Debian 12 原生的 systemd 日誌接口,精準攔截暴力破解者。
這種配置方案無需安裝額外的 syslog 服務,既節省了系統資源,又符合新版 Linux 的技術規範,是最推薦的配置方式。