2025年8月28日 星期四

Mapleboard MP510-50 測試 (四十) : 加強 Fail2ban 的 sshd 封鎖條件

自從安裝 Fail2Ban 後, 持續收到它寄來的 IP 封鎖報告郵件, 企圖暴力破解 ssh 密碼的駭客行為一天至少 10 次以上 :




目前的封鎖設定如下 :

tony1966@LX2438:~$ sudo cat /etc/fail2ban/jail.local
[sudo] tony1966 的密碼: 
...
(略)
...
[sshd]
enabled = true
port = 22
logpath = /var/log/auth.log
maxretry = 5
bantime = 1h
findtime = 10m
action = %(action_mw)s

此設定為十分鐘內超過 5 次錯誤就封鎖一個小時, 我決定加強封鎖條件, 修改如下 :

tony1966@LX2438:~$ sudo nano /etc/fail2ban/jail.local  




新設定是 15 分鐘內超過 3 次錯誤就封鎖 12 個小時, 改完須重啟服務才會生效 :

tony1966@LX2438:~$ sudo systemctl restart fail2ban  

檢視目前的封鎖項目 : 

tony1966@LX2438:~$ sudo fail2ban-client status   
Status
|- Number of jail: 5
`- Jail list: nginx-404, nginx-badbots, nginx-noscript, recidive, sshd

檢視目前 sshd 封鎖狀態 :

tony1966@LX2438:~$ sudo fail2ban-client status sshd  
[sudo] tony1966 的密碼: 
Status for the jail: sshd
|- Filter
|  |- Currently failed: 7
|  |- Total failed: 16
|  `- File list: /var/log/auth.log
`- Actions
   |- Currently banned: 4
   |- Total banned: 4
   `- Banned IP list: 213.6.203.226 5.29.135.63 103.189.235.60 189.47.10.153 

透過減少嘗試次數可降低暴力破解成功機率, 用 12 小時長時間封鎖來拖垮機器人駭客.


2025-09-01 補充 :

因為 Fail2Ban 封鎖條件變嚴格後, Gmail 收到封鎖通知信的頻率變高, 收件夾都被淹沒了. 問 ChatGPT 解決方案, 原來可以用 Buffered 的方式, 指定 12/24 小時才整批寄出一封通知信, 作法很簡單, 就是把 jail.local 裡 [sshd] 的 action 從 %(action_mw)s 改成 %(action_mwlb)s :

用 nano 編輯 jail.local 設定檔 :

tony1966@LX2438:~$ sudo nano /etc/fail2ban/jail.local   
[sudo] tony1966 的密碼: 




這樣會將多次封鎖事件暫存起來, 定期批次寄一封信, 信件內容會包含多個被封鎖的 IP.  預設批次寄信的間隔約 1 小時, 可以在 [DEFAULT] 中指定 :

[DEFAULT]
mta = sendmail
destemail = 我的 Gmail 
sender = 我的 Gmail
banaction = iptables-multiport
action = %(action_mwlb)s[name=SSH, buffer=43200]

此處 buffer 參數用來指定美批次送信間隔秒數  :

buffer=86400 : 每 24 小時寄一次彙整通知
buffer=43200 : 每 12 小時寄一次

按 Ctro+O 存檔再按 Ctrl+X 跳出 nano. 

但重啟卻出現錯誤 :

tony1966@LX2438:~$ sudo fail2ban-client reload  
[sudo] tony1966 的密碼: 
2025-09-01 16:36:45,085 fail2ban                [399327]: ERROR   Failed during configuration: Bad value substitution: option 'action' in section 'sshd' contains an interpolation key 'action_mwlb' which is not a valid option name. Raw value: '%(action_mwlb)s'

原因是 action_mwlb 並不存在, 「b」(buffer) 的版本在某些發行版或新版 Fail2Ban 才有, 不是通用的. 只好恢復原狀. 

沒有留言 :