ServerAvatar 教學 – 如何設定主機、網站層級的 Fail2ban 安全防護
Fail2ban 是以 Python 語言所撰寫的安全防護軟體,透過分析系統紀錄檔的方式找出重複嘗試登入失敗的 IP 位址,並設定規則阻擋觸發過濾條件的非授權連線行為。
善加利用可以運用其彈性的架構,針對需求設計不同的過濾條件來達到伺服器防護的功能。
常見應用有:
- 阻擋 SSH、FTP 多次嘗試錯誤連線
- 阻擋特定瀏覽器或網路爬蟲
- 提供管理者了解異常伺服器服務要求 (如 apache、postfix、vsftpd、proftpd 等)
參考資料:清華大學網路系統組 – Fail2ban 的安裝設定說明
最常使用在 SSH (Secure Shell Protocol) 服務上,當使用者多次嘗試輸入帳號、密碼登入時發生驗證錯誤,可以透過即時分析系統紀錄檔,過濾出有用的資訊協助管理者了解這些行為是否對伺服器有害。
而 ServerAvatar 在主機安裝完成後,會自動預設安裝 Fail2ban 安全防護功能。
在這篇教學文章中,我們教大家如何在 ServerAvatar 伺服器控制面板上完成主機層級、WordPress 網站層級的 Fail2ban 安全防護設定。
主機層級 Fail2ban 設定
在 ServerAvatar 上啟用 Fail2ban 功能相當簡單,首先,從控制面板中的 Servers 選項中進入你想設定的主機。
點擊主機資訊方塊中上方的主機名稱或下方的 Dashboard 皆可。
從主機管理頁面的選單中進入 Fail2ban 設定頁面。
步驟一:啟用 Fail2Ban 安全防護功能
在 Fail2ban 設定頁面中,直接切換至啟用狀態就能開啟主機的 Fail2ban 功能。
步驟二:自訂 Fail2Ban 設定
接下來,就是自訂「嘗試登入」的相關限制了。
- Ban Time
當單一 IP 地址嘗試登入超過次數限制 (Max Retry) 時,「禁止登入的時間長度」,可以以分鐘或小時進行設定。 - Find Time
「觀察的時間區間」,在觀察期間之內嘗試登入超過次數限制,這個 IP 地址就會被禁止一段時間 (Ban Time) 無法再次嘗試登入。 - Max Retry
單一 IP 地址的「嘗試登入次數」限制。
步驟三:檢視 Ban IP 清單
設定完成之後,等待一段時間就會發現網路世界上心存不良的人真的不少,即使是默默無名的網站都會持續不斷有駭客、機器人嘗試登入。
根據上個步驟中所設定的規則而被禁止登入的 IP 地址可以在 Ban IP 的清單中查看,管理者也可以使用右上角的 + Add 按鈕自行增加禁止 (Ban)、忽略檢查 (Ignore) 的 IP 地址。
就是這麼簡單,主機層級的 Fail2ban 安全防護功能就設定好了。
一般來說,在這個主機中建立的 WordPress 網站的 Fail2ban 功能也會自動生效。
然而,如果是透過 Cloudflare 代管 DNS 並使用其 Proxy 設定,我們需要完成以下章節中的設定,才能在網站層級正常使用 Fail2ban 功能。
網站層級 Fail2ban 設定
這部分的設定主要是要在 Fail2ban 設定檔中讓系統知道管理者的 Cloudflare 金鑰與帳號資訊,才不會誤禁了 Cloudflare 的代理 IP 位址。
步驟一:登入主機
首先,我們需要登入主機才能將 Cloudflare 的金鑰與帳號資訊加到 Fail2ban 的設定檔中。
方法一:Vultr root 登入
最單純的方式就是使用 PuTTY 終端,輸入主機 IP 位址、Port 之後點擊 Open 按鈕。
接著使用主機的 root 使用者帳號、密碼登入。
帳號 (Username)、密碼 (Password) 可以登入 Vultr 帳號之後在主機的 Overview 頁籤中找到:
方法二:SSH 金鑰登入
使用 SSH 金鑰登入可以省卻輸入密碼的重複動作,更為方便且安全。
ServerAvatar 在主機建立完成後都會將主機的 IP、資料庫帳密、Redis 密碼、SSH 名稱、Public/Private Key 都寄到管理員的郵箱中。
先到郵箱中找到公開金鑰與私密金鑰並安全、妥善的儲存到你的電腦中。
接下來,我們需要使用 PuTTYgen 將 ServerAvatar 提供的私密金鑰格式從 PEM 轉為 PPK。
首先,開啟 PuTTYgen 程式,點擊 Load 按鈕將私密金鑰載入。
接著會跳出這個提示小視窗,說明已成功載入 PEM 格式的私密金鑰。按下確定按鈕。
私密金鑰載入後,按下 Save private key 就會將私密金鑰轉換為 PuTTY 支援的 PPK 格式。過程中會詢問是否新增登入時需要輸入的密碼片語/註記詞 (passphrase),可以按照你的需求自行決定。
接下來就能透過 PuTTY 終端,使用私密金鑰直接登入主機囉。
關於使用 PuTTY 終端 SSH 搭配金鑰登入主機,可以參考這篇文章。
步驟二:找到 cloudflare.conf 設定檔
從 PuTTY 終端登入主機後,切換路徑到 fail2ban 下的 action.d 資料夾:
cd /etc/fail2ban/action.d
在 action.d 資料夾中找到 cloudflare.conf 檔案之後進入編輯模式:
vi cloudflare.conf
步驟三:加入 Cloudflare 金鑰、帳號資訊
在 cloudflare.conf 檔案尾端的部分,將你的 Cloudflare 的 Global API Key 與電子郵件加進去。
cftoken = <Your Global API Key>
cfuser = <Your Cloudflare Email ID>
Cloudflare 的 Global API Key 可以從 Cloudflare 帳號 >「我的設定檔」>「API 權杖」中找到。
完成之後儲存檔案、退出編輯模式。(可以關閉 PuTTY 終端)
步驟四:修改 Jail Configuration 設定檔
回到 ServerAvatar,進入網站管理頁面中的 Fail2ban 選項。
接著,在 Jail Configuration 設定檔的最尾端加入以下設定:
action = cloudflare
iptables-allports
完成後按下 Save 按鈕,系統會自動測試,測試成功後就會自動重啟 Fail2ban 服務。
同時也會在下方出現 Ban IP 的資訊區塊囉。
結語
這樣我們就完成了 ServerAvatar 上主機與網站層級的 Fail2ban 安全防護設定囉!
設定完成後可以明確感受到主機資源的使用都更為平穩,相較於直接在命令列中操作使用 Fail2ban,ServerAvatar 將 Fail2ban 整合的讓人更容易管理與使用。
熟知網路安全的管理者們也可以更方便的設定、維護其過濾條件 (filter.d)、禁止設定 (jail.d),以及因應措施 (action.d),建立出強大的安全防護規則。
希望透過這個教學文章能讓大家更加瞭解 Fail2ban 安全防護的功能。
如果有什麼心得、想法或建議,也歡迎大家加入社團一起討論唷!