安全

如何為 SSH 設定 fail2ban(2026)

設定 fail2ban 擋住 SSH 暴破機器人:安裝、設定 sshd jail(maxretry、findtime、bantime)、查封和解封、並從手機做——以及怎麼避免把自己鎖在外面。

CC Chen Chen· 創始人·2026 年 6 月 24 日·閱讀 5 分鐘

fail2ban 給 SSH 做什麼

fail2ban 盯著你的認證記錄檔,在某個 IP 失敗登入太多次後臨時封鎖它——於是暴破你 SSH 的機器人在防火牆層被擋住,而不是沒完沒了地錘。它是有用的一層防禦,但要看清它的位置:如果你已經切到 SSH 金鑰並關閉密碼登入,那些暴破嘗試本來就不可能成功。fail2ban 是縱深防禦和降記錄檔噪音,不是第一道線。先設好金鑰(金鑰 vs 密碼),再在上面加 fail2ban。

第 1 步——安裝 fail2ban

sudo apt update && sudo apt install fail2ban   # Debian/Ubuntu
# RHEL/Fedora: sudo dnf install fail2ban

它帶合理的預設值,但你該把自己的設定寫在 jail.local 裡,免得軟體更新覆蓋掉。

第 2 步——設定 SSH jail

建立 /etc/fail2ban/jail.local:

[sshd]
enabled  = true
port     = ssh
maxretry = 5
findtime = 10m
bantime  = 1h

讀作:在 10 分鐘5 次失敗登入後,把該 IP 封 1 小時。對反覆試探者你可以調高 bantime(有人用一天,或用 bantime.increment = true 遞增)。如果你把 SSH 挪離了 22 連接埠,把 port 設成你的真實連接埠。

第 3 步——重啟並驗證

sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

狀態行顯示目前被封的 IP 和總數。要放掉你誤封的位址(比如你自己手滑登入幾次之後):

sudo fail2ban-client set sshd unbanip 203.0.113.10
從手機在伺服器上查 fail2ban 狀態的 SSH 工作階段
跑 fail2ban-client status sshd 看被封的 IP。安裝、設定、查狀態這一切,從手機走 SSH 都沒問題。

從手機做

fail2ban 完全能從手機走 SSH 管理:用 SFTP 或 nano 編輯 jail.local、重啟服務、查狀態。如果記不住確切的 fail2ban-client 子命令,描述給 TermAI 助手——「顯示 sshd 被封的 IP」、「解封這個位址」——執行前先複核命令。

TermAI 建議一條 fail2ban 命令,帶 Run 按鈕
要對的 fail2ban-client 命令、執行前先複核——在手機上查封鎖時很方便。

別把自己鎖在外面

如果你自己登入失敗幾次,fail2ban 可能把也封了。兩個保險:測試時保持一個能用的工作階段開著;把你自己的 IP(或你的 Tailscale 段)加進忽略名單:

# 在 jail.local 的 [DEFAULT] 裡
ignoreip = 127.0.0.1/8 100.64.0.0/10

那個 100.64.0.0/10 是 Tailscale 段——如果你走 Tailscale 連 SSH,你自己的連線就不會被封。更好的是:乾脆把 SSH 留在 Tailscale 後面,公網機器人一開始就到不了。

常見問題

用了 SSH 金鑰還需要 fail2ban 嗎?
可選。有了金鑰並關閉密碼登入,暴破本來就不可能成功。fail2ban 仍能降記錄檔噪音、擋住流量,所以很多管理員把它當額外一層。

fail2ban 封一個 IP 多久?
你設的 bantime——1 小時常見。可以調高、或對反覆試探者遞增。

怎麼在 fail2ban 裡解封一個 IP?
fail2ban-client set sshd unbanip <IP>。把可信 IP 加進 ignoreip,它們永遠不會被封。

快速事實

  • 作用:多次 SSH 失敗登入後封 IP
  • 位置:縱深防禦——金鑰 + 禁密碼更重要
  • 設定:/etc/fail2ban/jail.local[sshd] maxretry / findtime / bantime
  • 別自封:ignoreip 你的 IP / Tailscale 段;更好是把 SSH 留在 Tailscale 後
Try TermAI

Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog