本篇文章更新時間:2022/05/24
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


有鑒於之前主機被爬蟲給爬到高負載,這次就來自己實作一個日誌分析工具,然後考量有些網站有搭配 Cloudflare CDN 服務,不只是把惡意名單產出,還同步 Cloudflare WAF 與 Fail2ban 兩個工具整合。

過去有寫過相關的筆記文: [Fail2ban] 針對 Nginx 伺服器架構下的 WordPress 資安攻擊防護[HAProxy] 搭配 Fail2ban 封鎖惡意請求的 WordPress 網站安全性設定

有趣的是每個 Cloudflare 帳號下剛好有一個使用者層級的防火牆規則,可以同一個帳號下所有網站通用。

意思就是該帳號下代管的所有網站都適用,不一定要同主機,但要啟用 CDN 服務才可以。

如果沒有啟用 CDN,那就是靠同步輸出 Fail2ban 的 Bash Script 來執行黑名單匯入,這塊就是要個別主機上去部署一下,但也是同一台主機上的網站都可以受惠。

由於這樣的分析與防火牆管理工具與主機配置有很大關聯,這邊就沒有開源程式碼,開源設計觀念與名單囉!

  1. 我使用的網站伺服器軟體為 Nginx ,所以使用這套工具 nginx-log-analyzer 來每分鐘分析一次最新的瀏覽日誌(最新的 120 筆)
  2. 去除靜態檔案的存取後以 IP 維度統計:請求數、請求起始時間、請求結束時間、請求 HTTP 方法、使用者代理(User-Agent)、請求路徑、請求狀態
  3. 封鎖條件:請求速率太快(每秒 > 1.5 個頁面)、使用者代理黑名單、請求帶有關鍵字的黑名單路徑、Nginx 本身紀錄的狀態
  4. 設定白名單,避開 Googlebot, Bingbot, Applebot
  5. 支援多個 Cloudflare 帳號、支援多個 Nginx 瀏覽紀錄日誌分析
  6. 同步每個帳號之間的 IP 黑名單
  7. 產出 Fail2ban 的封鎖名單,主機定時執行匯入

Fail2ban 封鎖畫面

使用者代理黑名單也使用前篇 [Nginx] 阻擋惡意請求來源(User-Agent)的方法 提到的 GitHub 專案。 路徑黑名單部分,能列舉的很多,但至少我已經把 xmlrpc.php 的請求不論方法為何,都直接先封鎖了。

儘管知道 Fail2ban 有方法也可以同步惡意請求的 IP 到 Cloudflare,但說實在那功能對多網站分多 Cloudflare 帳號的管理者來說太雞肋。

這三天把功能實作出來,僅僅是觀察有沒有意外,就已經累積了要破千個惡意請求 IP。有了自己能夠實作管理的規則工具,網站樣本數也很足夠,相信是可以對即時發生的攻擊起到效果。

Cloudflare API: User-level Firewall Access Rule

Fail2ban 手動匯入封鎖 IP 的方法fail2ban-client set jail_name banip xx.xx.xx.xx

最後就是開源我掃出來的惡意 IP 清單: https://www.mxp.tw/ ban_ip_list.txt (為了不被爬蟲爬取,要使用的人就是把連結中的空白移除就是了)


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon