切換選單
切換偏好設定選單
切換個人選單
尚未登入
若您做出任何編輯,會公開您的 IP 位址。

如何在搬瓦工服務器上安裝ufw防火牆和Fail2ban來防止黑客暴力破解

出自md5.pw
這是此頁面最近一次修訂;沒有已批准修訂。

上一篇教程中,我們成功將服務器重裝為了 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

正確的結果應該類似下方輸出,且不會出現 ERRORFailed 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