CDN、DDoS到底是個(gè)什么鬼?建一個(gè)網(wǎng)站需要考慮哪些因素呢?
建一個(gè)菠菜網(wǎng)站需要考慮哪些因素呢,或者我們最擔(dān)心什么? 怕被攻擊,時(shí)不時(shí)的DDOS攻擊夠你喝一壺的;怕性能不夠,會(huì)員一多,訪問連接數(shù)太多,網(wǎng)站頂不住;怕網(wǎng)站響應(yīng)慢,延時(shí)太大,網(wǎng)頁(yè)半天打不開。也許解決上述問題,有一堆的解決方案,但有沒有一個(gè)簡(jiǎn)單粗暴的,特別有效的產(chǎn)品或方案對(duì)應(yīng)呢?
有,那就是CDN。但,為什么它就能解決上述問題呢?
網(wǎng)上有很多介紹關(guān)于CDN的文章,要么太簡(jiǎn)單,就介紹有什么功能,要么就太玄奧,云里霧里,就是讓你看不明白。好今天就帶大家瞧瞧CDN的廬山真面目
談CDN之前我們先談?wù)劜げ斯揪W(wǎng)站的服務(wù)器架構(gòu)。
下圖是一般公司的服務(wù)器架構(gòu)(low) ,網(wǎng)站一般由WEB服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器構(gòu)成。這個(gè)是最最最簡(jiǎn)單,沒有任何優(yōu)化的設(shè)計(jì)。服務(wù)器搭建好之后,就要去申請(qǐng)域名了,賣域名的網(wǎng)站很多,國(guó)內(nèi)很多,上網(wǎng)搜一搜,國(guó)外比較有名的是godaddy。
用戶訪問網(wǎng)站流程圖
服務(wù)器搭建完成后,申請(qǐng)好域名配置好公網(wǎng)IP,在第三方域名解析商或自建DNS服務(wù)器上解析完后,用戶就可以訪問了。
如圖所示:
- 搭建服務(wù)器,申請(qǐng)域名及配置公網(wǎng)IP地址
- 選擇第三方域名解析商解析
- 用戶配置DNS 如8.8.8.8 或114.114.114.114或運(yùn)營(yíng)商DNS服務(wù)器
- 用戶瀏覽器輸入WWW.XXX.COM
- 用戶到自己配置的DNS地址的服務(wù)器上查找WWW.XXX.COM的解析記錄獲取IP地址
- 用戶DNS服務(wù)器通過遞歸查找最后查到為WWW.XXX.COM域名解析的服務(wù)器如cloudflare 的DNS服務(wù)器。從cloudflare 獲取網(wǎng)址對(duì)應(yīng)WEB服務(wù)器的公網(wǎng)IP 并返回給用戶終端(PC和手機(jī))
- 用戶終端獲取WEB服務(wù)器公網(wǎng)IP后,通過路由訪問1.1.1.1:80的服務(wù)即WEB服務(wù)。
通過分析網(wǎng)站的服務(wù)器架構(gòu)及用戶訪問網(wǎng)站的過程,不難看出這個(gè)WEB服務(wù)的很多節(jié)點(diǎn)都是非常脆弱且及容易被攻擊的。
傳統(tǒng)WEB服務(wù)器架構(gòu)的弱點(diǎn)總結(jié):WEB服務(wù)器數(shù)量較少,一臺(tái)或幾臺(tái),當(dāng)用戶數(shù)一大,性能不夠,連接數(shù)不夠,默認(rèn)一臺(tái)WEB服務(wù)器的連接數(shù)只有3W多個(gè)。
WEB服務(wù)器的真實(shí)公網(wǎng)IP通過域名解析被獲取后,可以非常簡(jiǎn)單的被防火墻訪問禁止。服務(wù)器真實(shí)IP暴露后,可以對(duì)WEB服務(wù)器展開流量攻擊(DDOS),CC攻擊針對(duì)連接數(shù)。
針對(duì)以上弱點(diǎn),有些公司會(huì)采用以下解決方案
改進(jìn)型WEB服務(wù)器及安全架構(gòu)
圖中的改進(jìn)最明顯的是服務(wù)器的角色及服務(wù)器數(shù)量大大增加,LVS負(fù)載均衡的加入,使得改服務(wù)器架構(gòu)中可支持多臺(tái)服務(wù)器同時(shí)提供服務(wù),反向代理服務(wù)器可以過濾一部分基于連接的攻擊,避免后端真實(shí)服務(wù)器的直接面對(duì)攻擊。并通過多臺(tái)WEB服務(wù)器極大提高系統(tǒng)的并發(fā)能力,支持更多的玩家會(huì)員。緩存服務(wù)器的加入,可以讓動(dòng)態(tài)頁(yè)面和靜態(tài)頁(yè)面分離開來,加快用戶的訪問體驗(yàn)。但這種仍然沒辦法面對(duì)流量型攻擊。
沒錯(cuò)圖中數(shù)據(jù)中心加入了重量級(jí)的安全設(shè)備,假定該數(shù)據(jù)中心帶寬為40G(非常大帶寬的數(shù)據(jù)中心了),并具備40G的流量清洗能力。但仍然不足以保障網(wǎng)站系統(tǒng)的安全。因?yàn)榉植际降牧髁抗簦l(fā)于一點(diǎn)。沖擊力非常強(qiáng)大。超過40G的流量攻擊并不難組織起來,這個(gè)世界的僵死主機(jī)實(shí)在太多了。并且開啟40G的流量防御服務(wù)代價(jià)非常高昂,而且一般攻擊流量達(dá)到該數(shù)據(jù)中心出口帶寬40G的時(shí)候,流量清洗已經(jīng)沒有用了,這個(gè)時(shí)候數(shù)據(jù)中心往往是關(guān)閉該網(wǎng)站對(duì)外的網(wǎng)絡(luò)服務(wù)來保全整個(gè)數(shù)據(jù)中心。
即便流量在5-10G左右,如果攻擊者不定時(shí)攻擊,仍然會(huì)影響網(wǎng)站的對(duì)外服務(wù),影響用戶體驗(yàn),運(yùn)維人員除了觀察并被磨煉心志外,并沒有什么可以做的。
但是方案中通過引入LVS(負(fù)載均衡)、反向代理、緩存服務(wù)器后對(duì)系統(tǒng)的安全、性能、擴(kuò)展性是巨大的進(jìn)步,值得鼓勵(lì)及肯定。并且離我們的CDN的最終解決方案越來越近了。
怎么搞定該死的分布式DDOS攻擊呢,分析DDOS攻擊的過程及原理不難找到答案。DDOS攻擊的原理是把分布式的萬千僵尸主機(jī)的涓涓細(xì)流匯聚成狂暴的河流來攻擊一點(diǎn)。我們是不是可以把狂暴的河流化成萬千的涓涓細(xì)流呢。
他強(qiáng)任他強(qiáng),明月照山崗。
CDN的核心或者魔鬼的細(xì)節(jié)就在DNS解析原理上。稍微解析下DNS解析的原理。
域名解析記錄有好幾種,最著名且實(shí)用的有兩種:A記錄,CNAME(別名)其實(shí)翻譯成改變名字更好理解,英文原意其實(shí)也是(change name)。
訪問一個(gè)網(wǎng)站,首先拿到的是它的域名,因?yàn)橛蛎容^好記,針對(duì)人類的,但機(jī)器并不喜歡,訪問網(wǎng)站對(duì)于人類來說是基于名字(域名),對(duì)于機(jī)器來說是通過互聯(lián)網(wǎng),是基于路由,基于IP地址。所以域名解析的生意就來了,需要把域名解析成IP地址。雖然第三方域名解析商都是免費(fèi)做這個(gè)事情。
CNAME 顧名思意,改變名字,對(duì)于域名就是改變域名,并不是真的改變,對(duì)于人類是不知道的。在域名解析的過程中把域名改成另一個(gè)域名。
前文說過對(duì)付分布式攻擊流量,就要把聚集的流量化成分布式的,或者使其不能聚集一點(diǎn)。通過CNAME 可以實(shí)現(xiàn)把流量引向別處,暫時(shí)的,最終還是需要回來的。光引向別處還不行,還需要把流量分散開來。
好了,CDN就是這么個(gè)作用,把流量引向別處,并讓流量分散開來。
CDN 架構(gòu)
如架構(gòu)圖所示,CDN服務(wù)商會(huì)在多個(gè)地點(diǎn)的多個(gè)數(shù)據(jù)中心中部署服務(wù)器,起到分流的作用,及用戶就近訪問的作用。
CDN怎么起作用呢?比如購(gòu)買了圖中CDN的服務(wù)商的CDN服務(wù),首先把菠菜網(wǎng)站的域名解析到這個(gè)CDN提供商,通過別名的形式,轉(zhuǎn)移流量。
比如www.xxx.com Cname www.cdn.com
上述解析一般是在第三方域名解析商完成,一般是免費(fèi)的。考慮行業(yè)的敏感性建議采用國(guó)外域名解析商cloudflare ,注冊(cè)賬號(hào)非常簡(jiǎn)單快捷,不用提供任何個(gè)人信息。
一般CDN提供商都會(huì)向用戶提供域名管理界面,這個(gè)界面上填寫要被保護(hù)的域名及源站公網(wǎng)IP地址(別名其實(shí)也可以)
這一步的主要作用是完成了引流。流量到了CDN了。
接下來就要把流量化成涓涓細(xì)流了,CDN一般自建有DNS服務(wù)器,根據(jù)客戶的域名及訪問的源IP地址,把流量分到就近的數(shù)據(jù)中心,比如這個(gè)客戶指定用香港的線路,即把該客戶網(wǎng)站的流量指向香港的各個(gè)數(shù)據(jù)中心。這個(gè)導(dǎo)流其實(shí)也是依賴于DNS功能,因?yàn)镃DN DNS服務(wù)器上保留有這些節(jié)點(diǎn)的服務(wù)器(LVS 負(fù)載均衡服務(wù)器 或反向代理服務(wù)器)的公網(wǎng)IP地址。當(dāng)終端用戶完成DNS查詢獲取到節(jié)點(diǎn)服務(wù)器的公網(wǎng)地址后,用戶直接通過路由訪問CDN 節(jié)點(diǎn)數(shù)據(jù)中心的LVS服務(wù)器,并通過LVS調(diào)用客戶源站W(wǎng)EB服務(wù)器及數(shù)據(jù)庫(kù)服務(wù)器。對(duì)于網(wǎng)站靜態(tài)頁(yè)面直接通過緩存服務(wù)器訪問。從而極大的提高了訪問速度,并增強(qiáng)了并發(fā)能力。
數(shù)據(jù)流是這樣的:
1) DNS查詢
最終用戶------www.xxx.com------CNAME WWW.cdn.com-----A記錄 Y.Y.Y.(1-100)
2) 數(shù)據(jù)訪問 最終用戶 ----------------y.y.y.(1-100):80
發(fā)現(xiàn)了什么了嗎,源站的公網(wǎng)IP地址被隱藏起來了,用戶只能查詢到CDN的公網(wǎng)IP地址。
會(huì)發(fā)現(xiàn)第一次訪問往往比不用CDN服務(wù)還要慢,因?yàn)樾枰狢DN DNS查詢及調(diào)度。一旦完成DNS查詢,后續(xù)就又快又穩(wěn)。
由于CDN提供商往往在一個(gè)地方租用多個(gè)數(shù)據(jù)中心。所以完全不用擔(dān)心流量型DDOS攻擊了。道理很明顯,40G 流量分到10個(gè)數(shù)據(jù)中心就是4G了,分到100個(gè)呢?并且最多影響部分地區(qū)的,其實(shí)根本不會(huì)影響。
由于CDN提供商在某個(gè)數(shù)據(jù)中心都啟用了反向代理服務(wù)器所以也不用擔(dān)心CC攻擊了。如果數(shù)據(jù)中心有IPS等設(shè)備,技術(shù)型的漏洞攻擊的威脅也大大降低。
好了,你明白CDN是什么鬼了嗎?
CDN網(wǎng)絡(luò)架構(gòu)