−25%

Windows 年繳方案適用,至 10 月 31 日。 檢視方案

EQVPS
開始使用

如何在 VPS 上設定 fail2ban 阻止暴力破解攻擊

阻止針對您伺服器的持續密碼猜測:fail2ban 監控記錄,自動封禁登入失敗次數過多的 IP。安裝它、啟用 SSH jail、調整封禁規則——只需幾條指令。

即使其他方面都已經鎖緊,機器人也從不會停止對 22 埠的密碼嘗試——這是持續的背景噪音和負載。fail2ban 會監控您的記錄,自動封禁登入失敗次數過多的任何 IP,讓攻擊者嘗試幾次後就被擋在外面,而不是無休止地猜下去。安裝很簡單,記錄垃圾資訊卻能大幅減少。

1. 安裝 fail2ban

sudo apt update && sudo apt install -y fail2ban

2. 建立本機設定

不要直接編輯系統自備的 jail.conf——而是在 jail.local 中覆蓋它:

sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[DEFAULT]
# don't ban yourself — add your home/office IP
ignoreip = 127.0.0.1/8 ::1
bantime  = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true
EOF

這會在 10 分鐘內出現 5 次登入失敗後,將該 IP 封禁一小時。把您自己的 IP 加到 ignoreip 裡,這樣打錯一次密碼也不會把您鎖在外面。

3. 啟動並設定開機自啟

sudo systemctl enable --now fail2ban

4. 檢查 SSH jail

sudo fail2ban-client status sshd

您會看到目前有多少個 IP 被封禁——短短幾分鐘內的數字往往會讓人意外。

管理封禁

sudo fail2ban-client set sshd unbanip 1.2.3.4   # lift a ban
sudo fail2ban-client status                     # list all jails
sudo systemctl reload fail2ban                  # apply config changes

誠實的提醒

  • 把您自己的 IP 加到 ignoreip,這樣反覆打錯密碼不會封禁您自己。如果真的被封了,等 bantime 結束,或者使用服務供應商的控制台——EQVPS 為每台 VPS 都提供了這個。
  • fail2ban 是對 SSH 金鑰的補充,而不是替代。 金鑰讓猜測永遠不可能成功;fail2ban 則消除噪音,並保護其他服務。
  • 隨選調整: 更長的 bantime 能嚇退執著的攻擊者;但太激進則有可能誤封正常但不穩定的連線。

下一步

fail2ban 只是加固伺服器的一層防護。把它和 SSH 金鑰認證、UFW 防火牆結合起來,並在對外暴露任何東西之前,走一遍完整的新 VPS 安全清單。

如何在 VPS 上建立 sudo 使用者並停用 root →

常見問題

fail2ban 到底是做什麼的?

它監控記錄檔案(比如 SSH 的認證記錄),尋找同一個 IP 的重複失敗記錄,一旦某個 IP 超過閾值,就會新增一條臨時的防火牆封禁。那些整天敲打 22 埠的機器人,嘗試幾次後就會被攔下,而不是無休止地猜下去。這是自動化的、持續生效的防護。

已經用了 SSH 金鑰,還需要 fail2ban 嗎?

它們解決的是不同的問題。SSH 金鑰讓猜測變得幾乎不可能;fail2ban 則能減少無盡嘗試帶來的噪音和負載,並保護您暴露出去的其他服務(郵件、網頁登入等)。只用金鑰登入 SSH 時風險已經很低,但 fail2ban 是廉價的縱深防禦,還能減少記錄垃圾資訊。

fail2ban 會誤封我自己嗎?

有可能——如果您自己把密碼打錯好幾次,您會被封禁 bantime 那麼久,之後自動解封。為了避免把自己鎖在外面,把您自己的 IP 加到設定裡的 'ignoreip',並記住服務供應商的控制台(EQVPS 就提供)總能讓您重新進去。

怎麼檢視誰被封了,或者解封某個 IP?

用 'sudo fail2ban-client status sshd' 檢視該 jail 及被封的 IP。要解除封禁:'sudo fail2ban-client set sshd unbanip 1.2.3.4'。要永久信任某個 IP,把它加到 ignoreip 裡再重新載入。

bantime、findtime 和 maxretry 分別是什麼?

maxretry 是允許的失敗次數,findtime 是統計這些失敗的時間視窗,bantime 是封禁持續的時長。例如 10 分鐘內失敗 5 次會觸發 1 小時封禁。對付更執著的攻擊者,可以把 bantime 調長(或設為更長的值)。

評論

目前還沒有評論。歡迎成為第一位。

發表評論

評論在顯示前會經過審核。