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


現在只要一開站,就有無數的「機器人(爬蟲、Bot)」來光臨,而一個內容網站機器人通常應該要比真人瀏覽來得少,如果這比例失衡,滿有可能「網站正在被攻擊」。

面對這種「可能的」攻擊,就要做出防範,以免問題擴大。

後果:

  1. 因為太多機器人請求網站,導致網站主機資源不足,停止服務(DDoS攻擊)。
  2. 網站已經有漏洞被打穿,攻擊者持續利用網站漏洞來幹壞事。

Nginx 防範惡意請求的作法

if ($http_user_agent ~* (....){  return 403; }

其實就是一行,寫在 server 的 block 裡,就可以讓惡意瀏覽的來源被阻擋,而不經過其他資源請求。

惡意名單來源

上面的作法如圖參考:

惡意名單

做法不難,難的是「怎麼知道他是惡意?」以及「有沒有現成的惡意名單可以取得?」

惡意請求如果不討論他送什麼內容給網站執行,那就是「請求的頻率」,因為頻率過高,會造成網站主機的負載過高。

這塊可以搭配 Nginx 的 limit_req_zone 限制請求 與 limit_conn_zone 限制連線數的設定,本篇不多介紹。

回到惡意名單,可以參考這個專案 Nginx Ultimate Bad Bot Blocker這份清單

要使用這個名單然後產出如上圖使用在 Nginx 裡的設定,可以使用這個指令:

wget -q -O- "https://raw.githubusercontent.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents.list" | uniq | sed -e 's/\\\\ / /g' | sed -e 's/\./\\\./g' | tr '\n' '|'

取得組合好的設定後就可以放到 Nginx 裡使用。

上述就是一個基礎的操作,實際上要注意兩件事:

  1. 自己的名單

    上述提供的名單可以作為一個「你如果還沒有開始」的人使用,實際上建議是自己維護一個清單,然後搭配這份去整合(去除重複)。很多情況下你的網站正在遭受攻擊,而前面那份名單沒有列出來的最新即時名單,你就可以趕快補上,讓主機得到即時保護。

  2. 如果前方還有使用 Cloudflare CDN 的情境

    如果網站有使用 Cloudlfare CDN 的話,這份阻擋的方法會失效,除非去串 Cloudlfare 的 API 完成更進階的整合,不然就是要把這個阻擋的名單實作在 Cloudlfare 的 WAF 中。參考如下圖:Cloudlfare WAF

後記

網站架設好只是個開始,後續的維護工作才是真的考驗啊~

本篇是針對有帶入「自我識別」 User-Agent 標頭的 Bot 才有用,如果今天就是故意模擬瀏覽器的通用識別,那這種只能從阻擋 IP 下手了。


Share:

作者: Chun

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

發佈留言

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


文章
Filter
Apply Filters
Mastodon