Linux 伺服器安全加固:用 Fail2Ban 自動封鎖暴力破解攻擊

# Linux 伺服器安全加固:用 Fail2Ban 自動封鎖暴力破解攻擊 做 IT 嘅你一定遇過呢個情況:朝早返到公司 check server log,見到成晚有人喺度狂撞 SSH password,幾千次 login attempt,雖然未必撞得入,但見到都心驚膽跳。今日就同大家分享一個簡單又有效嘅防禦工具 — **Fail2Ban**,等佢幫你自動封鎖可疑 IP,唔使自己手動 ban。 #...

# Linux 伺服器安全加固:用 Fail2Ban 自動封鎖暴力破解攻擊

做 IT 嘅你一定遇過呢個情況:朝早返到公司 check server log,見到成晚有人喺度狂撞 SSH password,幾千次 login attempt,雖然未必撞得入,但見到都心驚膽跳。今日就同大家分享一個簡單又有效嘅防禦工具 — **Fail2Ban**,等佢幫你自動封鎖可疑 IP,唔使自己手動 ban。

## 咩係 Fail2Ban?

Fail2Ban 係一個開源入侵防禦工具,佢會持續 monitor 你 server 嘅 log file(例如 SSH、Apache、Nginx),當佢 detect 到某個 IP 喺短時間內有太多次失敗登入嘗試,就會自動將嗰個 IP 加入 firewall rule 封鎖一段時間。簡單講:**自動化嘅保安看更**。

Fail2Ban 支援好多 service,包括 SSH、vsftpd、Postfix、Dovecot、Apache、Nginx 等等,基本上你諗到嘅 Linux service 佢都睇得住。

## 點樣安裝 Fail2Ban?

大部份 Linux distribution 嘅 official repo 都有 Fail2Ban,安裝好簡單:

### Ubuntu / Debian

sudo apt update
sudo apt install fail2ban -y

### CentOS / RHEL / Rocky Linux

# 先啟用 EPEL repo
sudo dnf install epel-release -y
sudo dnf install fail2ban -y

安裝完之後,Fail2Ban 會自動啟動,但預設設定比較保守,我哋要自己 tune 一 tune。

## Fail2Ban 基本設定

Fail2Ban 嘅設定檔放喺 `/etc/fail2ban/`,主要分兩種:

– `jail.conf` — 預設設定(唔好直接改呢個 file)
– `jail.local` — 你嘅自訂設定(override jail.conf)

最佳做法係 create 一個 `jail.local` 嚟 override 預設值:

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

### 常用設定參數

[DEFAULT]
# 被封鎖嘅時間(秒),預設 600 秒 = 10 分鐘
bantime = 3600

# 計算失敗次數嘅時間窗口(秒)
findtime = 600

# 喺 findtime 內最多容許幾多次失敗
maxretry = 5

# 白名單 IP — 公司 office IP 或者你屋企 IP
ignoreip = 127.0.0.1/8 ::1 203.0.113.0/24

# 用邊種 firewall 方式封鎖(ufw / firewalld / iptables)
banaction = ufw

### 啟用 SSH 保護

喺 `jail.local` 入面揾到 `[sshd]` section,enable 佢:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200

呢個設定意思係:任何 IP 喺 10 分鐘內 SSH 登入失敗 3 次,就封鎖佢 2 個鐘。

## 進階用法:自訂 Jail 保護 Web App

除咗 SSH,你仲可以自訂 rule 保護 web application。例如你想保護 WordPress login page:

sudo nano /etc/fail2ban/filter.d/wordpress.conf

[Definition]
failregex = ^<HOST> .* "POST /wp-login.php HTTP.* 200
ignoreregex =

然後喺 `jail.local` 加:

[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600

## 常用 Fail2Ban 管理指令

裝好之後,呢幾個 command 你一定要識:

# 檢查 Fail2Ban 運行狀態
sudo systemctl status fail2ban

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

# 睇 SSH jail 嘅詳細資料(包括已封鎖 IP 列表)
sudo fail2ban-client status sshd

# 手動封鎖一個 IP
sudo fail2ban-client set sshd banip 192.168.1.100

# 手動解封一個 IP
sudo fail2ban-client set sshd unbanip 192.168.1.100

# 重新載入設定(改完 config 之後)
sudo systemctl reload fail2ban

## 實戰小貼士

1. **白名單好重要**:記得將自己公司嘅 static IP 加去 `ignoreip`,唔係封咗自己就搞笑
2. **bantime 唔好太短**:10 分鐘太短,攻擊者會等夠鐘再嚟過,建議最少 1 個鐘
3. **定期 check log**:`/var/log/fail2ban.log` 會記錄曬所有 ban/unban 動作,得閒望下
4. **配合其他工具**:Fail2Ban + UFW + SSH key-only login,三重防禦

## 總結

Fail2Ban 係一個輕量級但非常實用嘅安全工具,安裝簡單、設定靈活,基本上任何對外開放 service 嘅 Linux server 都應該裝。佢唔會取代 firewall 或者 IDS/IPS,但作為第一道自動化防線,絕對係性價比最高嘅選擇。

裝咗 Fail2Ban 之後,你會發現 server log 乾淨好多,夜晚瞓覺都安心啲。IT 人嘅浪漫就係:**set 好自動化,然後去飲杯咖啡** ☕

#server #Linux #IT教學 #技術分享 #SSH

Linux 伺服器安全加固:用 Fail2Ban 自動封鎖暴力破解攻擊 - 文章重點速覽 infographic