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 管理:用 SFTP 或 nano 編輯 jail.local、重啟服務、查狀態。如果記不住確切的 fail2ban-client 子命令,描述給 TermAI 助手——「顯示 sshd 被封的 IP」、「解封這個位址」——執行前先複核命令。
別把自己鎖在外面
如果你自己登入失敗幾次,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 後
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.