阻擋 MJ12bot 惡意蜘蛛訪問

Blocked Mj12bot Spider Access

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

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

CPU Graphs
Linode CPU Graphs

Traffic Graphs
Linode 流量 Graphs

Advertisement

阻擋 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 性能不能太弱。

參考文件:

Anti Bad Bots and Crawlers by User Agent

As we know there are many crawlers and spider, such as Googlebot, Baiduspider. But there are also some crawlers not compliance the rules of robots. That will ta...

Webinoly 安裝 VPS 教學系列文章:

1. Webinoly 快速安裝 WordPress 教學

Webinoly 是由 QR Consultoría 的首席 IT 顧問 Cristhian Martinez 所發佈的一支免費 Linux Shell Script,它沿用了 EasyEngine 大部分的功能,並小幅度的改進及更新,在 VPS 上更容易的建置 WordPress;Webinoly 簡單一個指令,就會在 VPS 主機上自動安裝 Linux Ubuntu + Nginx + MariaDB + PHP7.1 + FastCGI Cache。

2. Webinoly 安裝後如何更改 PHP 版本

Webinoly 預設安裝,是很有佛心安裝 PHP 7.1 version,但是不是很多網站的 WordPress 主題或外掛可以接受 PHP 7.1 的新語法,造成許多的 php-errors 或有的功能不能用。我的前一個主題 MyThemeShop TruePixel Themes 就被雷到,與另一個外掛衝突的嚴重。

3. FastCGI Cache 快取 WooCommerce 的問題

WordPress 的 WooCommerce 購物車快取的問題,現在的快取外掛,多數可以處理購物車 (cart)、結帳頁 (checkout)、帳號登陸頁 (account) 快取的問題,只要這三個部分不做快取,購物功能是不會有影響。如果是用主機端直接做 Nginx FastCGI Cache,因為是 Page Cache 方式,

4. Webinoly 的 Zend Opcache 性能優化

PHP 於 5.6 版後,Debian / Ubuntu 預設都內建 Zend Opcache,Opcache 是 PHP 優化加速模組,PHP7.0 配合 Opcache 快取功能,更能提升 PHP7.0 的速度。Webinoly 預設安裝,Opcache 已經啟用,預設值為 64MB,實際在 2G RAM VPS 運作中,有點不夠用,無法達到高命中率 (hits),修改 PHP 配置,優化 Opcache 性能。

5. Webinoly 的 Memcached 性能優化

Memcached 是一個免費開源並且高性能的分佈式記憶體對象緩存系統,主要用於加速動態 Web 程序,減輕數據庫負載,再簡單的說,Memcached 是專為數據庫的快取機制。Webinoly 預設安裝,Memcached 已經啟用,預設值為 64MB,實際上是不夠網站快取運作,修改 /etc/memcached.conf 配置,優化 Memcached 性能。

6. 阻擋 MJ12bot 惡意蜘蛛訪問

7. Webinoly 安裝 VPS 教學

VPS 服務器上安裝 Webinoly 安裝包是非常容易,它優化了 LNMP WEB 服務性能,增強 WordPress 後台登錄的安全性,讓您的網站更可靠的配置。我在前幾篇文章中,有簡單的介紹 Webinoly 安裝方法,這一篇裡,會更詳細介紹 Webinoly 安裝及功能,更容易上手 VPS 服務器。

8. Webinoly 安裝 VPS 教學 – 進階版

Webinoly 是 LNMP (LEMP) 自動安裝的一個程序,簡單、快速在您的 VPS 主機,並且自動配置和優化您自己的 VPS 伺服器;Linux Ubuntu + Nginx + MariaDB + PHP 7.3 是您的網站的最可靠配置之一,通過 Webinoly 一步安裝完成。

Featured Photo by Tama66 on pixabay

Follow me

yungke

視咖啡如命的癮君子,沒有厲害的技術,只會小打小鬧的電腦工程師,其實是個打雜小弟,修電燈、水管也都是我的工作。
yungke
Follow me
Advertisement

Follow Me

查看本文
喜愛 Like 點擊數!!
Back to top