網頁空間

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 紀錄檔。

更多 Linode 相關的教學,可以參考本站 Linode 相關的文章

參考資料:Quora

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

1 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

2 年 ago