本篇文章是我的 Smooth Jazz 網站所使用的 Linode VPS 虛擬主機遭受到惡意攻擊的紀錄。
這個禮拜日放假在家,突然收到來自於 Linode 的 Email 警告通知訊息,告知我的 VPS 虛擬主機網路流量有異常,檢查之後發現是有無聊人士故意從網站上重複下載大檔案,似乎想灌爆伺服器的流量或頻寬,以下是整個處理過程的記錄。
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 的網路流量圖,看起來流量真的是暴增,不處理不行。
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 的網頁紀錄,而且決大部分都是重複的檔案,下載的時間間隔也都差不多,看起來就是用程式跑出來的:
Step 5
檢查 Google Analytics 的線上人數,發現線上的人數非常少,與記錄檔的紀錄相差甚遠,所以可以肯定這一定是故意的攻擊流量。
Step 6
檢查一下 CloudFlare 的網路流量圖,由於 mp3 與 mp4 這類的影音檔預設不在 CloudFlare 快取的檔案類型之內,所以這些流量就會直接轉送至我們的 Linode 伺服器,造成 Uncached 的流量激增。
Step 7
若想要讓 CloudFlare 可以幫我們快取 mp3 與 mp4 這類的影音檔,可以從 Page Rules 頁面來新增 Page Rule,點選「Create Page Rule」。
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 將所有的檔案都快取。
Step 9
設定好 CloudFlare 的快取 Page Rule 之後,我們的 Linode 主機流量馬上就恢復正常了。
而這個攻擊的流量轉嫁至 CloudFlare 之後,好像馬上又消失了,我猜是被 CloudFlare 直接擋掉了。
這裡我們沒有看到攻擊者真實的 IP 位址,如果想看的話,可以把 CloudFlare 的 CDN 關掉,或是參考 Cloudflare Support 的說明,使用 CF-Connecting-IP
表頭將攻擊者的 IP 寫入 Nginx 紀錄檔。
更多 Linode 相關的教學,可以參考本站 Linode 相關的文章。
參考資料:Quora