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 與其他服務安全。
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,建議同時啟用防火牆以確保封鎖效果。
