阻擋 MJ12bot 惡意蜘蛛訪問

阻擋 MJ12bot 惡意蜘蛛訪問

Written by

Photo by LucasVphotos on Unsplash

MJ12bot 蜘蛛是一隻來自英國的搜索引擎網站,照理說搜索引擎的蜘蛛是不該擋掉的,如果你用到一個小記憶體或 CPU 很爛的 VPS,一下子就會被 MJ12bot 蜘蛛搞掛掉;他不像一般正常的 Googlebot,文件爬完後就離開,MJ12bot 一來就是好幾個小時,造成服務器極大的壓力。

內容目錄:

  • 阻擋 MJ12bot
  • 代碼的作用
  • Webinoly 安裝 VPS 教學系列文章

如下圖可見,MJ12bot 蜘蛛可以造成 CPU 負載極高,服務器資源被耗光。

CPU Graphs
Linode CPU Graphs

Traffic Graphs
Linode 流量 Graphs

阻擋 MJ12bot

使用 Nginx conf 文件,將下方的設置存為 agent_bot.conf 文件,或直接添加在 nginx.conf 文件的 server 段配置裡:

if ($http_user_agent ~* (ApacheBench|pingback|YisouSpider|MJ12bot|AhrefsBot|360JK|Jorgee) ) {return 101;}
if ($http_user_agent = "" ) {return 101;}
if ( $request = "POST /reg.html HTTP/1.1" ) {return 400;}
if ( $request = "POST / HTTP/1.1" ) {return 400;}
if ( $request = "POST / HTTP/1.0" ) {return 400;}
if ( $request = "POST // HTTP/1.0" ) {return 400;}

存為 agent_bot.conf 文件,用 SFTP 上傳到 /var/ www/yungke.me/conf/nginx 資料夾下。

重啟 Nginx 程序

nginx -t && service nginx restart

代碼的作用

這段代碼的作用是 Nginx 檢測到相對應的條件,就把這個請求直接轉出。避免請求數據庫和 PHP 程序,減輕服務器的處理負擔。由於 Nginx 處理靜態內容的效率很高,所以可以最大限度的避免服務器資源被耗光。

自己模擬蜘蛛爬取:

curl -I -A 'mj12bot' https://yungke.me

回應:

HTTP/1.1 101 
Server: nginx
Date: Sun, 02 Jul 2017 11:17:47 GMT
Content-Type: application/octet-stream
Content-Length: 0
Connection: upgrade

回應為 HTTP/1.1 101,已經成功將 mj12bot 導向到 101。

curl -I -A 'Googlebot' https://yungke.me

回應:

HTTP/1.1 200 OK
Server: nginx
Date: Sun, 02 Jul 2017 11:21:11 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Link: ; rel="https://api.w.org/"
X-SRCache-Fetch-Status: MISS
X-SRCache-Store-Status: BYPASS
Strict-Transport-Security: max-age=31536000

正常的好蜘蛛爬取,回應 HTTP/1.1 200 OK,表示可以正常爬取你的網站。

其他的問題:

  • 如果你發現用了以上代碼後,有些功能失靈,那麼就檢查下過濾的關鍵詞。如果你想過濾更多的內容也可以加入更多的關鍵詞。
  • 還有就是加入 pingback 過濾請求,可以阻擋比較低能 CC 請求,但是如果你的服務器比較低階。比如你的服務器的 CPU 不夠力 ,那麼還是極其容易 Nginx 佔用到 CPU 100% 而導致網站無法訪問,所以最終是拼服務器的性能。
  • 不管 Nginx 回應是 403 還是 101,都需要 Nginx 給出處理和回應,雖然避開了 MySQL 及 PHP 其實結果還是要用到 CPU,CPU 性能不能太弱。

參考資料:

https://xuri.me/2015/03/18/anti-bad-bots-and-crawlers-by-user-agent.html

hosted by kinsta

發佈留言

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

Your Mastodon Instance