Fail2ban是一款用來阻擋使用暴力破解法登入伺服器的工具,最常被應用在SSH伺服器上。它會去檢查伺服器的日誌(Log),並將登入失敗的IP位址記錄下來,如果該IP在一段時間內錯了超過規定的次數,就會自動添加規則至防火牆中,阻擋該IP一段時間的連入。
安裝 Fail2ban
基於Debian的Linux發行版可以使用以下指令來安裝Fail2ban:
紅帽系的Linux發行版可以使用以下指令來安裝Fail2ban:
執行以下指令在開機時自動啟動Fail2ban服務:
執行以下指令立刻啟動Fail2ban服務:
設定 Fail2ban
如果您是使用基於Debian的Linux發行版,安裝完fail2ban
套件後就已經啟用sshd
的保護功能了。但還是可以參考這小節的說明來作設定。
Fail2ban的設定檔位於/etc/fail2ban
目錄,設定檔支援的副檔名為.conf
和.local
。副檔名.conf
是預設的設定檔,副檔名.local
是我們要修改設定值時要自行添加的設定檔。撰寫在.local
設定檔的設定會覆寫掉.conf
設定檔內原先的設定。
要設定sshd
的保護,可以新增一個檔案,路徑為/etc/fail2ban/jail.d/sshd.local
,檔案內容如下:
[sshd] enabled = true bantime = 10m bantime.increment = true bantime.maxtime = 1d findtime = 10m maxretry = 5
以上設定檔中,[sshd]
是指這個區塊的欄位是用來設定sshd
這個「jail」(一種稱呼某種用來限制存取的機制的常用名稱)。enabled = true
表示要啟用這個jail。bantime
是每次要封鎖的基本持續時間,m
表示分鐘、h
表示小時、d
表示天,如果不寫單位的話,單位會是秒。bantime.increment = true
是讓先前被封鎖過的IP再下一次被封鎖的時候拉長它的封鎖時間。bantime.maxtime
是設定最大的封鎖時間。在findtime
的時間內,如果有同樣的IP的錯誤嘗試次數超過maxretry
所規定的次數,這個IP就會被封鎖。
設定好後可以執行以下指令讓Fail2ban重新載入設定檔:
以下指令可以查看Fail2ban的狀態:
如上圖,可以看到sshd
這個jail被啟用了。
解封IP
以下指令可以查看被關進sshd
這個jail的IP有哪些:
如上圖,可以看到192.168.56.1
這個IP被封鎖了。如果要手動即時解封它,可以執行以下指令:
或是用以下指令解封也可以,不過這個指令是把某個IP從所有jail中釋放出來:
以下指令可以查看所有被Fail2ban封鎖的IP:
以下指令可以解封所有被Fail2ban封鎖的IP:
寄信通知
當有IP被封鎖的時候,Fail2ban可以主動發出電子郵件通知系統管理員,看要不要做什麼後續的處理。
如果要啟動寄信通知功能,可以編輯/etc/fail2ban/jail.d/sshd.local
,進行如下的修改:
[sshd] enabled = true bantime = 10m bantime.increment = true bantime.maxtime = 1d findtime = 10m maxretry = 7 destemail = yourname@example.com action = %(action_mwl)s
destemail
可以設定要寄到的電子郵件信箱。action = %(action_mwl)s
用來設定封鎖之後寄信。
注意,您的Linux作業系統必須要有寄信的能力,才能讓Fail2ban寄信。可以參考這篇文章來設定:
設定完成後,使用以下指令重啟Fail2ban:
如果只是使用fail2ban-client reload
重新載入設定檔,貌似對寄信的設定是無效的。重啟Fail2ban後,如果Fail2ban能成功寄出信件,您應該會收到一封Fail2ban寄出的sshd
這個jail被啟動的通知信,有收到的話表示Fail2ban的寄信通知功能可以正常使用。