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 防護與伺服器安全延伸學習
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,建議同時啟用防火牆以確保封鎖效果。
