執筆時,香港的一個網站正受到每秒逹 300 Gbps 的 DDoS 黑客攻擊,但幸好網站已有備無患,找來了一家專門提供網站保安服務的公司來守護網站的健康,讓香港市民仍然能使用網站所提供的服務,這個網絡守護神的功勞可謂功不可沒,這家網站保安服務供應商是誰,它就是 2009 年於美國成立的 Cloudflare 。

史上最大型的 DDoS 攻擊
直至昨天 (2014 年 6 月 21 日) 為止,Cloudflare 已成功頂住了 300 Gbps 的 DDoS 攻擊,這可謂史上以來第二大的 DDoS 的攻擊,但不查不知,原來史上以來最大的 DDoS 攻擊,發生於今年二月歐洲,當時的攻擊頻率為 400 Gbps,亦是 Cloudflare 這家公司去防禦的,詳情可以看下的連結:
Technical Details Behind a 400Gbps NTP Amplification DDoS Attack
Record-breaking DDoS attack in Europe hits 400Gbps
故此早前那個香港網站負責人聲稱已使用 Cloudflare 為網站護航,但於首輪只有 75 Gbps 的 DDoS 攻擊之下已不敵,不正是拆自己的招牌嗎?區區 75 Gbps 又怎會難到應付過 400 Gbps 的 Cloudflare 呢?
故此,它今次重整旗鼓,已將系統昇級,嚴陣以待即將來犯的黑客!果然不負眾望,成功抵擋了 300 Gbps 的 DDoS 的攻擊。
Cloudflare 的運作原理
Cloudflare 是怎樣去保護網站安全呢?
其實原理很簡單,它就好像大厦的保安員,所有來訪網站的訪客要先經過它的反向代理伺服器 ( Reverse Proxy ),當它 認為來訪的訪客沒有威脅的時候,它才會去處理來訪的要求,情況有類似一個智慧的防火牆。
另外,它還有一個增值服務,與一些傳統的 CDN ( Content Delivery Network ) 服務商一樣,提供網站內容快取服務。由於 Cloudflare 在全球不同的地點都設有伺服器,成為一個龐大的網絡系統,當有訪客經它的伺服器存取了網站的資料後,它會預留一個 Copy ,當有其他訪客要求存取同一份資料的時候,它就可以直接把相同的 Copy 傳送給其他訪客,減少原本網站的負荷。另外,它還會把訪客重新導向 ( Redirect )到訪客身處地域最接近的伺服器,意即如果您身處香港,就算原本網站伺服器不在香港,它都會派遺香港的伺服器來服侍您,如果您身處歐洲,它就會用最接近您的歐洲伺服器來服侍您,所以對網站用戶來說,亦會得到效能上的提昇。
以下是它現時的伺服器分佈及運作情況的連結:
https://www.cloudflare.com/system-status.html
簡單來說,由於它成為您的網站的守門員 ( Gate-keeper ),對於所有黑客的攻擊,首當其衝,身先士卒,故此能阻擋外來的威脅。

Cloudflare 的免費套餐
CDN 的服務總結有以下的好處:
- 加強網站安全,阻截不利網站的攻擊及 DDoS
- 減低原本網站的系統及網絡負荷
- 提昇網站載入速度,提高用戶體驗
- 不用修改網站程式,自動優化網站 ( Minify Javascript 、CSS、HTML 及移除圖像 meta-data,優化網頁元件載入次序等)
- 自動啟用 gzip compression 來加快網站資料傳送
- 大多 CDN 都會提供 DNS 服務,而效能也滿不錯的
當然,這些都需要代價的,就是錢。
從前做網站項目,都會接觸到這些 CDN Providers,如 Akamai 等。但這些都只是大型網站或大型企業才有財力利用得到,小型或個人網站都只好望門輕嘆。
但我這裡要告訴大家一個好消息,原來 Cloudflare 是有提供免費的套餐給大家使用的,不用花費一分一毫就可以得到 CDN 的好處和護航,當然要趁機試用一下。
到官方網站登記之後,它就會詢問您的網站堿名,輸入了後,系統就會掃描您的網站當前的 DNS Server 的設定,大約等待1 分鐘後,它就會顯示您的網站的 DNS Zone 的設定。

基本上,所有 DNS Entry Type (A 、MX、CNAME 及 NS 等) 都支援,在這裡您可以修改、移除或增加新的 DNS Entry。留意上圖的雲 Icon,當它是橙色的時候,就代表所有流經那個網站的請求,都會經過 CDN 伺服器,而呈現灰色時,則代表會 by-pass CDN 伺服器而直接流向原本的網站。要注意的是,只有 A 和 AAAA Entry 支持 CDN 服務,而當然這裡只把 HTTP 和 HTTPS (免費套餐並不支持 SSL) 才啟用 CDN 服務。
完成後,它就會告訴您把網站 DNS 伺服器指向它們的専用伺服器。那麼您就會登入您的 Domain Registrar 去改變 DNS 轉向。大概 2 小時至 48 小時後,您的網站域名服務就會交由 Cloudflare 處理,您可以跟原本的 DNS 伺服器說拜拜了。
如果擔心 DNS 的設定有誤,可以先自行 dig 一 dig 它的 DNS 的 Zone Record,確定無誤後,才把網站 DNS 轉向。其例子如下:
$ dig +cmd @GAIL.NS.CLOUDFLARE.COM itarchitect.hk any ; <<>> DiG 9.9.5 <<>> +cmd @GAIL.NS.CLOUDFLARE.COM itarchitect.hk any ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<$ dig +cmd @GAIL.NS.CLOUDFLARE.COM itarchitect.hk any ; <<>> DiG 9.9.5 <<>> +cmd @GAIL.NS.CLOUDFLARE.COM itarchitect.hk any ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38849 ;; flags: qr aa rd; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 3 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;itarchitect.hk. IN ANY ;; ANSWER SECTION: itarchitect.hk. 300 IN MX 30 mx.itarchitect.hk. itarchitect.hk. 86400 IN NS gail.ns.cloudflare.com. itarchitect.hk. 86400 IN NS noah.ns.cloudflare.com. itarchitect.hk. 86400 IN SOA gail.ns.cloudflare.com. dns.cloudflare.com. 2015509553 10000 2400 604800 3600 itarchitect.hk. 300 IN A 108.162.196.209 itarchitect.hk. 300 IN A 108.162.197.209 ;; ADDITIONAL SECTION: mx.itarchitect.hk. 300 IN A 66.96.142.52 mx.itarchitect.hk. 300 IN A 66.96.142.50 mx.itarchitect.hk. 300 IN A 66.96.142.51 ;; Query time: 14 msec ;; SERVER: 173.245.58.116#53(173.245.58.116) ;; WHEN: Sun Jun 22 17:45:15 CST 2014 ;; MSG SIZE rcvd: 226
效能測試
把 DNS 服務完全交託給它,真的沒有問題嗎?趕快來做一個 DNS Speed Test。

嘩,簡直快到無倫,還不用 5 ms ,我早前的 DNS 伺服器要 200 ms 以上呢。免費 DNS Hosting 有這樣的速度,還可以去哪裡找?
跟住就是 CDN 的分佈快取服務,首先要驗証一下身處香港的我是否真的把我的 Web 請求傳送到香港的伺服器,可以利用官方提供的 CGI 程序去驗証:
http://itarchitect.hk/cdn-cgi/trace
得到以下的結果,其中 colo= 就是標明Reverse Proxy 的位置了。
fl=23f9
h=itarchitect.hk
ip=xxx.xxx.xxx.xxx
ts=1403434416.079
visit_scheme=http
uag=Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
colo=HKG
spdy=off
0
至於其他的位置代碼,可以參考其官方網站。
最後,就是實際網站載入速度比拚。方法如下,
- 先清除 Chrome 瀏覽器的快取檔案。
- 首先利用 Chrome 瀏覽器訪問 香港 SoftLayer 試用體驗 ,確定 Cloudfare 已把網頁快取到它的伺服器中。
- 再清除 Chrome 瀏覽器的快取檔案。
- 啟用 Chrome 開發人員工具 (F12)
- 然後再訪問 香港 SoftLayer 試用體驗,紀錄網頁載入時間。
- 然後清除 Chrome 瀏覽器的快取檔案,並修正 Windows 的 hosts file ,令Chrome 瀏覽器直接指向網站訪問。
- 再利用Chrome 開發人員工具再訪問香港 SoftLayer 試用體驗 ,紀錄並比較網頁載入時間。
測試結果顯示,直接訪問時,網站載入需時 6.87 秒,利用了 Cloudflare 後則只需 3.11 秒,足足快了一半。
另外,它還會自動 minify 網站的 HTML、Javascript 、CSS,甚至改變網頁的載入次序。View Source 之下,網站的 Javascript 載入方式已經被改寫成以下的樣子:
<script type="text/javascript"> //<![CDATA[ try{if (!window.CloudFlare) {var CloudFlare=[{verbose:0,p:0,byc:0,owlid:"cf",bag2:1,mirage2:0,oracle:0,paths:{cloudflare:"/cdn-cgi/nexp/dokv=abba2f56bd/"},atok:"72cbf1ed3fc80106d86cb34dfa42e050",petok:"7942ae5fac9ba00a2b1ca81a822cdd56a2011d22-1403432533-1800",zone:"itarchitect.hk",rocket:"a",apps:{}}];CloudFlare.push({"apps":{"ape":"729238247096b40867a041c126f8d781"}});document.write('<script type="text/javascript" src="//ajax.cloudflare.com/cdn-cgi/nexp/dokv=97fb4d042e/cloudflare.min.js"><'+'\/script>');}}catch(e){}; //]]> </script> ..... ..... <script type='text/rocketscript' data-rocketsrc='http://itarchitect.hk/wp-includes/js/jquery/jquery.js?ver=1.11.0'></script> <script type='text/rocketscript' data-rocketsrc='http://itarchitect.hk/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.1'></script> <script type='text/rocketscript' data-rocketsrc='http://itarchitect.hk/wp-content/themes/spacious/js/spacious-custom.js?ver=3.9.1'></script>
增值服務
除了保安和網站快取代理服務外,它還提供很多其他的增值服務,其中一個最主要的就是 Web Analytics 服務,附有訪客數據及圖表,但由於是免費計劃,不能得到即時的數據,只能看到昨天或之前的數據,見圖如下:

個人認為這個 Web Analytics 的服務挻陽春的,還是建議選用 Google Analytics 會比較好,不過它可以匯報為網站擋住了多少個威脅及節省了多少網絡頻寬。

如果想選用 Google Analytics,您可以在 Cloudflare Apps 選單中加入到您的網站,它可以為您設置 (當然首先要自行建立 Google Analytics 賬戶 ),它還有許多其他增值的 Apps ,可以無須修改網站程式碼而加入到到您的網站中。

Amazon AWS 的最佳配撘
由於 Amazon AWS 是按網絡流量及 I/O 來計算收費,而 Cloudflare 的免費套餐竟然是無限流量,而且還可以降低對 AWS 的網絡流量和系統負荷,簡直是窮網主的恩物!
AWS 的 Security Group 是提供 Whitelist 的 ACLs,我就曾經試過給來自某一個 IP 的惡意網站攻擊,由於 AWS 只有 Whitelist ACL,最後我只好登入 Linux VPS 暫時用 iptables 封截它。但 Cloudflare 的 Threat Control 比起 AWS 的 Security Group 提供更全面的保護,同時提供 Whitelist 及 Blacklist 的 ACLs,往後就多了一個方法來封截惡意攻擊。

唯一的不好處
免費套餐的不好處就是不支援 SSL ,即是當訪客利用 HTTPS 來訪問網站的時候,會出現 Timeout 的情況。如果要讓網站可以利用到 HTTPS,就必須要付費來購買 Pro 或上的套餐。不過,暫時博客還沒有開放給其他 bloggers 使用,這個問題暫時還可以修改 hosts 來解決自身登入 WordPress admin console 的問題。