Fail2ban 防止 SSH 暴力破解

Fail2ban 是 Linux 系統安全工具,專門防止 SSH 暴力破解攻擊。本文從新手角度,完整說明 Ubuntu 與 CentOS 安裝流程、設定檔位置與內容、啟動指令、參數設定及防禦策略,並示範 YAML 配置與五個實務案例。本文步驟清楚,讓使用者能從安裝到實務操作完整掌握 SSH 防護,提高 Linux 伺服器安全性與管理效率。

Fail2ban 安裝與設定 (Ubuntu / CentOS)

不同 Linux 發行版本安裝與設定 Fail2ban 的方式略有差異。本文分別說明 Ubuntu 與 CentOS 的安裝流程、服務啟動、設定檔位置與內容、常用參數及防禦機制,讓新手能逐步操作完成 SSH 安全防護。

Ubuntu 安裝與設定


# 更新套件清單
sudo apt update              # 更新套件資訊

# 安裝 Fail2ban
sudo apt install fail2ban     # 安裝 Fail2ban 套件

# 啟用開機自動啟動
sudo systemctl enable fail2ban   # 開機自動啟動服務

# 啟動 Fail2ban
sudo systemctl start fail2ban    # 啟動服務

# 查看服務狀態與已啟用 jail
sudo fail2ban-client status       # 列出所有啟用監控服務狀態

Ubuntu 設定檔位置與說明:

  • /etc/fail2ban/jail.conf:原始設定檔,包含各服務預設值,不建議直接修改。
  • /etc/fail2ban/jail.local:本地自訂設定檔,用來覆蓋預設值,建議所有自訂規則寫在此檔,方便日後更新。主要設定區塊包括 sshd、vsftpd 等服務。

jail.local SSH 範例設定:


[sshd]
enabled = true              # 啟用 SSH 監控
port = ssh                  # SSH 監控端口
filter = sshd               # 使用 sshd 過濾規則
logpath = /var/log/auth.log # SSH 登入日誌檔案
maxretry = 5                # 達到 5 次登入失敗封鎖
bantime = 3600              # 封鎖 1 小時
findtime = 600              # 10 分鐘內達 maxretry 封鎖
ignoreip = 127.0.0.1 192.168.1.0/24 # 白名單 IP 不封鎖

CentOS 安裝與設定


# 更新系統套件
sudo yum update -y

# 安裝 EPEL 套件庫 (提供 Fail2ban)
sudo yum install epel-release -y

# 安裝 Fail2ban
sudo yum install fail2ban -y

# 啟用開機自動啟動
sudo systemctl enable fail2ban.service

# 啟動 Fail2ban
sudo systemctl start fail2ban.service

# 查看服務狀態與已啟用 jail
sudo fail2ban-client status

CentOS 設定檔位置與說明:

  • /etc/fail2ban/jail.conf:原始設定檔,包含各服務預設值,不建議直接修改。
  • /etc/fail2ban/jail.local:建議所有自訂規則寫在此檔,方便更新與維護。主要設定區塊包含 sshd、vsftpd 等。

jail.local SSH 範例設定:


[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure   # CentOS SSH 登入日誌
maxretry = 5
bantime = 3600
findtime = 600
ignoreip = 127.0.0.1 192.168.1.0/24

Fail2ban YAML 配置與實務案例

使用 jail.local 配置服務防護,可自訂 maxretry、bantime、findtime、ignoreip 等參數。下列範例示範 YAML 配置,並附五個實務案例,幫助新手操作、測試及排查問題。


# SSH 監控範例
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
ignoreip = 127.0.0.1 192.168.1.0/24

# FTP 監控範例
[vsftpd]
enabled = true
port = ftp
filter = vsftpd
logpath = /var/log/vsftpd.log
maxretry = 3
bantime = 1800
findtime = 600
ignoreip = 127.0.0.1

# 案例一:檢查 SSH 封鎖狀態
sudo fail2ban-client status sshd

# 案例二:解除單一 IP 封鎖
sudo fail2ban-client set sshd unbanip 203.0.113.25

# 案例三:手動封鎖 IP
sudo fail2ban-client set sshd banip 198.51.100.10

# 案例四:監控登入日誌
sudo tail -f /var/log/auth.log

# 案例五:重新啟動套用新設定
sudo systemctl restart fail2ban
sudo systemctl status fail2ban

透過上述 YAML 配置與案例,新手可以完整掌握 Fail2ban 防護流程,從安裝、設定、啟動到日誌監控,確保 SSH 與其他服務安全。

📌 Linux Fail2ban 防護與伺服器安全延伸學習

  • 👉 Linux Server Security 完整指南
  • 👉 Linux SSH 無法連線排錯教學
  • 👉 Linux 防火牆 iptables / UFW 教學
  • 👉 Linux 使用者與權限管理
  • 👉 Linux crontab 自動排程教學
  • FAQ 常見問題

    Fail2ban 可以保護哪些服務?

    Fail2ban 可保護 SSH、FTP、HTTP、郵件及自訂服務,透過 jail 設定,自動封鎖多次失敗登入來源 IP,有效提升 Linux 系統安全性。

    Fail2ban 會封鎖合法使用者嗎?

    合理設定 maxretry 與 findtime,一般不會誤封正常使用者,可透過 ignoreip 設定白名單 IP 避免封鎖管理者或內網。

    如何解除被封鎖的 IP?

    使用 sudo fail2ban-client set sshd unbanip <IP_ADDRESS> 即可解除封鎖,恢復正常 SSH 連線。

    Fail2ban 封鎖時間可調整嗎?

    修改 jail.local 中的 bantime 參數即可調整封鎖時間,例如 bantime=7200 表示封鎖 2 小時。

    如何避免封鎖管理者或內網 IP?

    在 jail.local 中設定 ignoreip 白名單,Fail2ban 將不封鎖這些 IP,確保重要連線不中斷。

    Fail2ban 是否需要搭配防火牆?

    Fail2ban 透過 iptables 或 UFW 封鎖可疑 IP,建議同時啟用防火牆以確保封鎖效果。