Linode 網頁伺服器遭受攻擊紀錄,用 CloudFlare 快取解決

本篇文章是我的 Smooth Jazz 網站所使用的 Linode VPS 虛擬主機遭受到惡意攻擊的紀錄。

這個禮拜日放假在家,突然收到來自於 Linode 的 Email 警告通知訊息,告知我的 VPS 虛擬主機網路流量有異常,檢查之後發現是有無聊人士故意從網站上重複下載大檔案,似乎想灌爆伺服器的流量或頻寬,以下是整個處理過程的記錄。


以下是來自於 Linode 主機商的 Email 原文,信中告知我的 VPS 主機網路流量已經超過門檻值長達 2 個小時,在過去的兩小時中網路的平均流量是 12.93 Mb/s:

Your Linode, linode01, has exceeded the notification threshold (10) for outbound traffic rate by averaging 12.93 Mb/s for the last 2 hours. The dashboard for this specific Linode is located at: <https://manager.linode.com/linodes/dashboard/linode01>

This is an automated message, please do not respond to this email. If you have questions, please open a support ticket.

You can view or change your alert thresholds under the “Settings" tab of the Linode Manager.

This is not meant as a warning or a representation that you are misusing your resources. We encourage you to modify the thresholds based on your own individual needs.

You may access the members’ site at <https://manager.linode.com/>.

Linode: linode1392812

一開始以為只是普通砍站的流量暴增,應該過一陣子就好了,結果過了八小時之後,又收到第二封 Linode 寄來的 Email,內容還是一樣,也就是說這個無聊的駭客連續用將近 13 Mb/s 的流量在灌我的伺服器,而我目前使用的是 Linode 最低階的 VPS 方案,一個月的流量是 2TB,若是放著長期讓他灌下去也是會破表的,所以還是要處理一下。

Step 1
檢查 Linode 的網路流量圖,看起來流量真的是暴增,不處理不行。

Linode 網路流量圖

Step 2

首先用 SSH 連上自己的主機,用 iftop 指令查看目前主要的大流量到底是從哪裡來的:

sudo iftop

結果查出來主要的流量都是從 162.158.58.216 這個 IP 位址來的。

Step 3
whois 查看 162.158.58.216 這個 IP 位址是屬於哪一個單位:

whois 162.158.58.216

發現這是 CloudFlare 的 IP 位址,而我的 Smooth Jazz 網站剛有使用 CloudFlare 的 CDN,所以這個 IP 位址並不是真正攻擊者的 IP 位址。

Step 4
檢查一下 Nginx 網頁伺服器的紀錄檔,找出 162.158.58.216 這個 IP 位址最近的記錄:

grep 162.158.58.216 /var/log/nginx/access.log

結果發現攻擊者都只下載 mp3 與 mp4 這類的音樂與影片檔,完全沒有 html 的網頁紀錄,而且決大部分都是重複的檔案,下載的時間間隔也都差不多,看起來就是用程式跑出來的:

Nginx 紀錄檔

Step 5
檢查 Google Analytics 的線上人數,發現線上的人數非常少,與記錄檔的紀錄相差甚遠,所以可以肯定這一定是故意的攻擊流量。

Step 6
檢查一下 CloudFlare 的網路流量圖,由於 mp3 與 mp4 這類的影音檔預設不在 CloudFlare 快取的檔案類型之內,所以這些流量就會直接轉送至我們的 Linode 伺服器,造成 Uncached 的流量激增。

CloudFlare 網路流量圖

Step 7
若想要讓 CloudFlare 可以幫我們快取 mp3 與 mp4 這類的影音檔,可以從 Page Rules 頁面來新增 Page Rule,點選「Create Page Rule」。

CloudFlare Page Rules

Step 8
在網址的部分(If the URL matches)填入想要被快取的檔案網址,可以配合星號 * 這個萬用字原來指定,假設我的 mp4 影片檔都放在 http://jazz.gtwang.org/video/ 這個路徑之下,我就可以使用 http://jazz.gtwang.org/video/* 的方式,指定這個路徑之下的所有檔案。

接著在下方的處理方式的地方(Then the settings are),新增一條「Cache Level」設定,然後選擇「Cache Everything」,讓 CloudFlare 將所有的檔案都快取。

CloudFlare 新增 Page Rule

Step 9
設定好 CloudFlare 的快取 Page Rule 之後,我們的 Linode 主機流量馬上就恢復正常了。

Linode 網路流量圖

而這個攻擊的流量轉嫁至 CloudFlare 之後,好像馬上又消失了,我猜是被 CloudFlare 直接擋掉了。

CloudFlare 網路流量圖

這裡我們沒有看到攻擊者真實的 IP 位址,如果想看的話,可以把 CloudFlare 的 CDN 關掉,或是參考 Cloudflare Support 的說明,使用 CF-Connecting-IP 表頭將攻擊者的 IP 寫入 Nginx 紀錄檔。

參考資料:Quora

網頁空間

2 Comments

  1. 萬一將Cloudflare關掉,這樣攻擊者就知道你的真實IP,那麼如果他再繼續無聊下去的話,你不就得換IP了嗎?

    • G. T. Wang

      當然是打算自己對付攻擊者時,才把 CloudFlare 關掉,許多伺服器的防護工作要自己來,多出許多雜事,不過應該是不致於需要更換自己的伺服器 IP 位址。

      如果我剛好沒事做的時候,我可能會把 CloudFlare 關掉,換一個不限流量的主機商(例如 DreamHost 的空間)讓它繼續抓,或是在背後把 mp3/mp4 換成自己的 PHP 指令稿,產生無限大的檔案給對方,想辦法讓檔案在網路傳輸過程經過 zip 等方式壓縮之後非常小,降低自己耗損的網路流量,而檔案解壓縮之後變成非常大,如果他是直接把檔案儲存在硬碟,就…

      不過我最近很忙,就不想理他了。 🙂

Leave a Reply