開始運行伺服器後,將面對無數的外部攻擊。SSH暴力破解攻擊、針對網頁應用程式的無差別登錄嘗試、端口掃描等都是日常威脅。如果這些威脅被忽視,最終可能導致系統入侵。Fail2Ban是一種輕量且強大的基於Linux的入侵防禦解決方案,可以解決這些問題。

Fail2Ban會自動檢測可疑的IP並將其封鎖。這樣一來,管理員無需費太多精力即可保護伺服器。

Fail2Ban安裝方法

Fail2Ban在大多數Linux發行版中都以包的形式提供,因此安裝非常簡單。

Ubuntu/Debian系列

sudo apt update
sudo apt install fail2ban

安裝完成後,我們需要啟動服務並設置為開機自啟。

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Fail2Ban Overview

Fail2Ban基本設置方法

Fail2Ban使用/etc/fail2ban/jail.conf文件作為基本設置文件,但建議創建/etc/fail2ban/jail.local文件進行自定義,而不是直接修改此文件。

創建jail.local文件:

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

主要設置項目: - bantime: 封鎖期間(秒) - findtime: 被視為攻擊嘗試的時間範圍(秒) - maxretry: 允許的最大失敗嘗試次數

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log

實際應用案例示例

1. 封鎖SSH暴力破解

如上所述設置[sshd] jail後,如果登錄失敗超過5次,該IP將被封鎖1小時。

2. 封鎖Apache登錄攻擊

[apache-auth]
enabled = true
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3

如果針對網頁伺服器的驗證失敗超過3次,將會被封鎖。

Fail2Ban監控方法

監控Fail2Ban是否正常運行有多種方法。

1. 通過fail2ban-client檢查狀態

可以查看特定 jail(例如:sshd)的狀態。

sudo fail2ban-client status sshd

輸出示例:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 2
|  |- Total failed: 15
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned: 3
   `- Banned IP list: 192.168.1.100

2. 監控日誌文件

Fail2Ban的操作歷史記錄在/var/log/fail2ban.log文件中。

tail -f /var/log/fail2ban.log

藉此可以實時監控封鎖和解封事件。

Fail2Ban工作原理

  1. 日誌監控: Fail2Ban持續監控設定的日誌文件。(例如:/var/log/auth.log/var/log/apache2/error.log

  2. 應用過濾器: 檢測特定模式(登錄失敗、身份驗證錯誤等)。

  3. 執行措施: 超過設定的maxretry後,將通過iptables封鎖該IP或執行例如firewall-cmd、nftables等防火牆命令。

  4. 自動解除: bantime過後,自動解除封鎖。

Fail2Ban具有模組化結構,可以針對不同的服務(jail)進行獨立的監控和封鎖設置,不僅僅是保護SSH,而是加強對各種服務的安全。

SSH攻擊的永久封鎖設置方法

對待SSH攻擊者必須果斷。Fail2Ban中,將bantime設為-1即可永久封鎖。

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = -1
findtime = 600
maxretry = 5

這樣設置後,SSH驗證失敗超過5次的IP將被永久封鎖,無法訪問伺服器。

[高級技巧] 理解Fail2Ban的基本封鎖操作

Fail2Ban在未單獨定義action的情況下也會自動運作。其原因是基本設置包含使用iptables的封鎖命令。

  • 如果未單獨指定action,則將應用[DEFAULT]部分中的action = %(action_)s設置。
  • %(action_)s會內部使用iptables命令封鎖惡意IP。
  • 因此,即使不單獨編寫action,也會通過iptables進行IP封鎖。

基本封鎖命令示例(參見action_.conf)

iptables -I INPUT -s <ip> -j REJECT

換句話說,Fail2Ban將自動控制iptables來封鎖攻擊IP。

注意: - 如果想使用其他防火牆工具如UFW、firewalld,則必須明確設置action。 - 此外,封鎖規則可能在伺服器重啟時消失,因此最好設置Fail2Ban服務於開機時自動啟動。


此外,還可以自定義多種過濾器,或進行電子郵件警報設置等高級設置。


自從伺服器暴露在互聯網世界的一刻起,安全性就不是選擇,而是必須。
瞬間的放鬆可能會引發致命後果。
Fail2Ban將成為抵禦這些威脅的堅實盾牌。
記住,現在就有人在盯著你的伺服器。