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

# Linux 伺服器安全加固:用 Fail2Ban 自動封鎖暴力破解攻擊 做 IT 嘅朋友一定遇過呢個情況:朝早返工一睇 server log,成堆 SSH login failure,來自世界各地唔同 IP,心都寒一寒。今日就同大家分享一個免費又有效嘅工具 — **Fail2Ban**,等佢幫你自動擋走呢啲惡意攻擊。 ## 咩係 Fail2Ban? **Fail2Ban** 係一個開源入侵防禦...

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

做 IT 嘅朋友一定遇過呢個情況:朝早返工一睇 server log,成堆 SSH login failure,來自世界各地唔同 IP,心都寒一寒。今日就同大家分享一個免費又有效嘅工具 — **Fail2Ban**,等佢幫你自動擋走呢啲惡意攻擊。

## 咩係 Fail2Ban?

**Fail2Ban** 係一個開源入侵防禦框架,佢會持續監控你嘅 log file(例如 `/var/log/auth.log`),當偵測到某個 IP 短時間內多次登入失敗,就會自動喺 firewall 層面 ban 咗佢一段時間。簡單嚟講:**自動化嘅保安看更**。

Fail2Ban 支援好多 service:SSH、Apache、Nginx、Postfix、Dovecot、MySQL 等等,基本上你諗到嘅佢都 cover 到。

## 安裝 Fail2Ban

Ubuntu/Debian 系:

sudo apt update && sudo apt install fail2ban -y

RHEL/CentOS/Rocky Linux 系:

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

裝完之後,Fail2Ban 會自動啟動,但預設只係監控 SSH。我哋要自己 configure。

## 基本設定檔配置

Fail2Ban 嘅設定檔放喺 `/etc/fail2ban/`。**千祈唔好直接改 `jail.conf`**,因為 package update 會 overwrite。正確做法係 create 一個 `jail.local`:

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

以下係一個實用嘅 SSH 防護設定:

[DEFAULT]
# 被封鎖嘅 IP 會被 ban 幾耐(秒)
bantime = 3600

# 偵測時間窗口(秒)— 喺呢段時間內觸發 maxretry 就會 ban
findtime = 600

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

# 用邊個 firewall backend(ubuntu 用 ufw,centos 用 firewalld)
banaction = ufw

# 白名單 — 公司內部 IP 唔會俾人 ban
ignoreip = 127.0.0.1/8 192.168.0.0/16 10.0.0.0/8

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

## 進階用法:自訂 Jail 保護 Nginx

除咗 SSH,你仲可以加自訂 jail 保護 web server。例如防止 WordPress wp-login.php 暴力破解:

[nginx-wp-login]
enabled = true
filter = nginx-wp-login
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 300
bantime = 3600

然後 create 對應嘅 filter file `/etc/fail2ban/filter.d/nginx-wp-login.conf`:

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

## 常用管理指令

# 檢查 Fail2Ban 運行狀態
sudo fail2ban-client status

# 睇 SSH jail 嘅統計
sudo fail2ban-client status sshd

# 手動 ban 一個 IP
sudo fail2ban-client set sshd banip 1.2.3.4

# 手動 unban 一個 IP
sudo fail2ban-client set sshd unbanip 1.2.3.4

# 睇 banned IP list
sudo fail2ban-client banned

# 重新載入設定
sudo systemctl reload fail2ban

## 實戰小貼士

1. **bantime 唔好太短**:至少 3600 秒(1 小時),暴力攻擊通常係 automated bot,ban 得短佢會即刻返嚟
2. **用 incremental banning**:Fail2Ban 支援 `bantime.increment`,第一次 ban 10 分鐘,第二次 30 分鐘,第三次 1 日,如此類推
3. **配合 UFW/Firewalld**:確保 firewall 本身都有基本 rules,Fail2Ban 係額外防線
4. **定期睇 log**:`/var/log/fail2ban.log` 會記錄曬所有 ban/unban 動作,得閒望下知道有咩人搞你
5. **Email 通知**:可以 set `action = %(action_mw)s` 等 Fail2Ban ban 人嗰陣 send email 俾你

## 總結

**Fail2Ban** 係每個 Linux server 都應該裝嘅基本防護工具。佢唔會食你好多資源,設定簡單,但可以擋走 90% 以上嘅自動化暴力攻擊。記住:security 係 layered defense,Fail2Ban 係第一層,唔好淨係靠佢一個,仲要配合 firewall rules、SSH key authentication、定期 update 等等。

裝咗 Fail2Ban 之後,你會發現 auth.log 清靜好多 — 呢個就係自動化保安嘅威力。

#技術分享 #IT教學 #安全 #監控 #Linux

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