fail2ban 教學:5 步防禦 SSH 暴力破解,保護你嘅 Linux Server

# fail2ban 教學:5 步防禦 SSH 暴力破解,保護你嘅 Linux Server 做 IT 嘅你一定試過——朝早返工 check server log,見到成千上萬條 SSH failed login attempt,啲 bot 由半夜開始就不停撞你個 port 22。就算改咗 SSH port、disable 咗 root login,班友都仲係會用 scripts 自動 scan ...

fail2ban 教學:5 步防禦 SSH 暴力破解,保護你嘅 Linux Server - 文章重點速覽 infographic

fail2ban 教學:5 步防禦 SSH 暴力破解,保護你嘅 Linux Server

做 IT 嘅你一定試過——朝早返工 check server log,見到成千上萬條 SSH failed login attempt,啲 bot 由半夜開始就不停撞你個 port 22。就算改咗 SSH port、disable 咗 root login,班友都仲係會用 scripts 自動 scan 再撞㗎。咁點先可以真正擋到?

答案就係 fail2ban

fail2ban 係一個 open-source intrusion prevention framework,佢會監控你嘅 log files(例如 `/var/log/auth.log`),一偵測到可疑 pattern(例如短時間內大量 SSH 登入失敗),就會自動喺 iptables / firewalld 加一條 ban rule,封鎖嗰個 IP 一段指定時間。簡單講:fail2ban 幫你自動踢走搞事嘅 IP,唔使你日日人手 check log。

以下係 fail2ban 教學嘅完整 5 步驟,跟住做就搞掂。

fail2ban 係咩原理?

fail2ban 嘅核心概念係 filter → action
1. Filter:用 regex 去 match log file 入面嘅失敗事件
2. Action:觸發後執行嘅動作,通常係 ban IP

fail2ban 內置咗好多預設嘅 jail(監獄),包括 sshd、nginx-http-auth、proftpd 等等。每個 jail 都可以獨立設定 ban 條件同時間。

Step 1:安裝 fail2ban

Ubuntu / Debian:

sudo apt update && sudo apt install fail2ban -y

CentOS / RHEL / Rocky Linux:

sudo dnf install epel-release -y
sudo dnf install fail2ban -y

裝完之後,fail2ban 會自動 start 同 enable:

sudo systemctl enable fail2ban --now
sudo systemctl status fail2ban

Step 2:建立 fail2ban 自訂設定

預設 config 放喺 `/etc/fail2ban/jail.conf`,但 千祈唔好直接改佢!fail2ban 嘅最佳做法係 create 一個 `.local` override file:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

編輯 `jail.local`:

sudo nano /etc/fail2ban/jail.local

重點設定:

[DEFAULT]
# 被封鎖 IP 嘅白名單(你自己 office / VPN IP)
ignoreip = 127.0.0.1/8 ::1 202.xxx.xxx.xxx/32

# ban 幾耐(秒):600 = 10 分鐘,86400 = 24 小時
bantime = 3600

# 喺幾多秒之內觸發 ban(findtime)
findtime = 600

# 最多容許幾多次失敗(maxretry)
maxretry = 5

# 用邊個防火牆 backend
banaction = iptables-multiport

Step 3:啟用 SSH jail(fail2ban SSH 防護)

fail2ban 預設有 `sshd` jail,只係要 enable。喺 `jail.local` 加上:

[sshd]
enabled = true
port = 22
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400

呢個設定意思係:如果同一個 IP 喺 600 秒內(findtime default)SSH 登入失敗 3 次,fail2ban 就會 ban 佢 24 小時。比起 default 只 ban 10 分鐘,呢個設定 aggressive 好多,對暴力破解效果顯著。

Step 4:fail2ban 常用管理指令

fail2ban 附帶 `fail2ban-client` 工具,下面係 fail2ban 教學中必學嘅 CLI 指令:

# 睇所有 jail 狀態
sudo fail2ban-client status

# 睇 sshd jail 詳細狀態(ban 咗幾多 IP)
sudo fail2ban-client status sshd

# 人手 ban 一個 IP
sudo fail2ban-client set sshd banip 192.168.1.100

# 人手 unban 一個 IP
sudo fail2ban-client set sshd unbanip 192.168.1.100

# 睇 fail2ban log(即時)
sudo tail -f /var/log/fail2ban.log

`fail2ban-client status sshd` 嘅 output 會顯示:
– Currently banned IP list
– Total banned count
– Filter 同 action 狀態

Step 5:fail2ban 進階玩法 — 自訂 jail + 通知

除咗 SSH,fail2ban 仲可以保護其他 service。例如加一個 nginx 防 CC 攻擊嘅 jail:

[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3

仲可以 set fail2ban 喺 ban IP 嗰陣 send email 通知你:

[DEFAULT]
destemail = admin@yourdomain.com
sender = fail2ban@yourdomain.com
action = %(action_mwl)s

`action_mwl` = 用 iptables ban IP + send whois report 去你 email。

fail2ban 實戰 Tips

ignoreip 一定要 set 你公司 static IP — 唔係你喺 office 打錯幾次 password 就 ban 咗自己
定期 review `/var/log/fail2ban.log` — 如果發現某個 IP range 持續攻擊,可以考慮用 iptables 直接 ban 成個 subnet
fail2ban + GeoIP — 進階用法係配搭 GeoIP,只允許香港 IP access SSH,其他地區直頭唔俾 connect
bantime 唔好太短 — 好多 bot 會喺 unban 之後立即再撞,set 86400(24h)或以上會好啲
fail2ban 唔係 firewall replacement — 佢係 layer 7 防護,你應該同時有正規 firewall(例如 iptables / nftables / UFW)做第一道防線

fail2ban 係 Linux 伺服器安全嘅基本配置之一,簡單、輕量、效果好。裝完之後你會發現 `/var/log/auth.log` 清靜咗好多,啲 bot 撞幾次就自動被封,唔使再擔心暴力破解。

如果你仲未裝 fail2ban,今日就好裝咗佢。記住:security 呢樣嘢,永遠係預防勝於治療。

🔗 參考資料:

📌 延伸閱讀:

常見問題

fail2ban FAQ:點解裝咗仲係見到好多 failed login attempt?

首先要確認 jail 係咪 enable 咗:sudo fail2ban-client status sshd。如果見到 Currently banned: 0,check 下 SSH log path 係咪正確(Ubuntu 係 /var/log/auth.log,CentOS 可能係 /var/log/secure)。另外留意 ban action 係咪對應你嘅 firewall backend——iptables 用 iptables-multiport,nftables 要改做 nftables-multiport

fail2ban FAQ:可以同時保護幾多種 service?

冇上限。你可以 enable 晒內置嘅 jails(sshd、postfix、dovecot、apache、nginx),甚至自己寫 custom filter 去保護任何有 log file 嘅應用程式。只需要喺 /etc/fail2ban/filter.d/ 度加一個 .conf file 定義 regex pattern,然後喺 jail.local enable 就得。

fail2ban FAQ:萬一 ban 錯自己點算?

唔使驚,用 sudo fail2ban-client set sshd unbanip YOUR_IP 就可以即刻解封。強烈建議將你自己公司嘅 static IP 加入 ignoreip 白名單,咁就永遠唔會 ban 到自己。

Linux 伺服器保安綜合建議

除咗用上述工具之外,Linux 伺服器安全仲有唔少基本功要做好。首先係 keep 住系統更新:sudo apt update && sudo apt upgrade -y 或者 sudo dnf update -y 要定期執行。第二係配置好 firewall rules——最基本係只開放必要嘅 ports(22 for SSH、80/443 for web),其他全部 drop 晒。第三係用強密碼或者 SSH key pair,唔好用 default 密碼。

仲有就係 enable SELinux 或 AppArmor、定期 audit user accounts(刪除唔再用嘅 login)、用 rkhunterchkrootkit 掃 rootkit。做好基本功,配合自動化防禦機制,先可以真正保護到你嘅伺服器。

#fail2ban #Linux安全 #SSH防護 #伺服器保安 #fail2ban教學