国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
自建CDN防御DDoS:架構(gòu)設(shè)計(jì)、成本與部署細(xì)節(jié)

自建CDN防御DDoS:架構(gòu)設(shè)計(jì)、成本與部署細(xì)節(jié)

本系列的第一篇文章中,我們介紹了我們客服系統(tǒng)遇到DDoS攻擊的情況,以及我們?yōu)槭裁礇Q定采用自建CDN的方式來(lái)解決這個(gè)問(wèn)題的原因。

下面,我們將介紹自建CDN的具體建設(shè)規(guī)劃,主要從以下幾個(gè)方面進(jìn)行考量:硬件成本、帶寬成本、架構(gòu)設(shè)計(jì)、實(shí)際部署。

硬件成本

在硬件上,我們選型的需求是在1U的基礎(chǔ)上具有強(qiáng)勁的性能,同時(shí)性?xún)r(jià)比要高。

我們選擇了(強(qiáng)氧)雙子星服務(wù)器,其硬件規(guī)格為:1U機(jī)身+支持雙路至強(qiáng)CPU+最大支持48G內(nèi)存+雙千兆網(wǎng)口x2+H3C S1208八口千兆,提供三年質(zhì)保服務(wù),總價(jià)約1.5萬(wàn)。

帶寬成本

單線機(jī)房的機(jī)房和帶寬資源,由于不需要經(jīng)過(guò)第三方拉線撮合,直接從運(yùn)營(yíng)代理商購(gòu)買(mǎi),因此選擇余地大,性?xún)r(jià)比高。以租用電信、聯(lián)通單線資源為例,每條線獨(dú)享100M帶寬,提供8個(gè)IP,有些機(jī)房自帶硬防,能夠防御5G-10G流量。

平均費(fèi)用,每個(gè)節(jié)點(diǎn)帶寬成本基本在1.6~2.5萬(wàn)/年。

架構(gòu)設(shè)計(jì)

CDN架構(gòu)上要充分體現(xiàn)出抗攻擊能力和靈活應(yīng)變的原則。因此,我們將CDN節(jié)點(diǎn)分解成反向代理+緩存加速+攻擊防御這三個(gè)不同層次的功能結(jié)構(gòu)。

  • 反向代理功能(作用:路由加速,隱藏主節(jié)點(diǎn),負(fù)載均衡)
  • 緩存加速功能(作用:靜態(tài)推送,節(jié)省后端主節(jié)點(diǎn)帶寬)
  • 攻擊防御功能(作用:快速解析,匹配過(guò)濾惡意攻擊)

開(kāi)源世界里能夠擔(dān)當(dāng)反向代理及緩存的軟件不少,而且各有優(yōu)劣。作為架構(gòu)師,要考慮如何選型,我們從性能、功能、配置上來(lái)進(jìn)行比較篩選。

軟件名稱(chēng) 性能 功能 過(guò)濾規(guī)則配置
Squid 不能多核是硬傷,磁盤(pán)緩存容量有優(yōu)勢(shì),性能中等 多,支持ACL角色控制,也支持ICP緩存協(xié)議 支持外部規(guī)則文件讀取及熱加載,支持熱啟動(dòng)
Varnish 多核支持,內(nèi)存緩存,性能強(qiáng) 夠用,不支持集群,支持后端存活檢查 不支持外部文件讀取,需要轉(zhuǎn)義,支持熱啟動(dòng)
Nginx 多核支持,支持代理插件,性能較強(qiáng) 多,通過(guò)插件可以充當(dāng)多角色服務(wù)器 不支持外部文件讀取,需要轉(zhuǎn)義,支持熱啟動(dòng)
ATS 多核支持,磁盤(pán)/內(nèi)存緩存,性能強(qiáng) 夠用,支持插件開(kāi)發(fā),也支持ICP協(xié)議 支持外部規(guī)則文件讀取及熱加載,支持熱啟動(dòng),但缺乏文檔
HAProxy 多核支持,無(wú)緩存,HTTP頭支持語(yǔ)法操作,性能強(qiáng) 少,只專(zhuān)注HTTP頭部解析和轉(zhuǎn)發(fā)功能,支持ACL角色控制,支持后端存活檢查 支持外部規(guī)則文件讀取及熱加載,支持熱啟動(dòng),支持會(huì)話粘滯和長(zhǎng)連接

我們對(duì)這三層功能結(jié)構(gòu)分別進(jìn)行了測(cè)試調(diào)優(yōu)及生產(chǎn)線的實(shí)踐檢驗(yàn),從以下方面評(píng)估:

  • HTTP防御性能:HAProxy在應(yīng)對(duì)大流量CC攻擊時(shí),做正則匹配及頭部過(guò)濾時(shí),CPU消耗只占10%~20%。其它軟件均狂占CPU資源約90%以上,容易成瓶頸導(dǎo)致整個(gè)系統(tǒng)無(wú)響應(yīng)。
  • 反向代理性能:?jiǎn)渭冝D(zhuǎn)發(fā)效率以?xún)?nèi)存緩存型的Varnish性能最強(qiáng),ATS和Nginx次之,考慮大容量緩存因素,ATS也是個(gè)不錯(cuò)的選擇,但文檔缺乏,需要持續(xù)關(guān)注。Nginx是專(zhuān)門(mén)針對(duì)C10K的產(chǎn)物,性能不錯(cuò),配合眾多插件,改造性很強(qiáng)。
  • 過(guò)濾規(guī)則的可配置性:HAProxy,ATS,Squid均支持規(guī)則文件讀取、ACL定制和熱加載、熱啟動(dòng)。Nginx則不支持外部文件正則匹配,略差一點(diǎn),但可塑性強(qiáng)。

因此,綜合上述考慮,最終我們采用的架構(gòu)是HAProxy+Varnish/ATS/Nginx的組合,即防御型反向代理緩存方案,功能角色如下:

  • 前面由HAProxy全力負(fù)責(zé)動(dòng)靜資源分離,實(shí)現(xiàn)會(huì)話粘滯,節(jié)點(diǎn)負(fù)載均衡,故障轉(zhuǎn)移,遇到危急時(shí)承擔(dān)基于Http協(xié)議的CC類(lèi)型攻擊防御。
  • 后面為可插拔替換的反向代理緩存引擎:根據(jù)生產(chǎn)線上的實(shí)際應(yīng)用場(chǎng)景及緩存對(duì)象的容量來(lái)決定使用內(nèi)存型的varnish或者是磁盤(pán)型的ats,如果需要定制功能很強(qiáng)(防盜鏈)的反向代理如Nginx+plugins。

這個(gè)組合最大的特點(diǎn)是:

  • 支持外部過(guò)濾規(guī)則的讀取,尤其是關(guān)鍵字符串無(wú)需轉(zhuǎn)義,可直接追加到文件中。
  • 支持配置文件熱加載生效,都支持reload,服務(wù)平滑生效。
  • 可插拔式的緩存組件靈活應(yīng)對(duì)各種業(yè)務(wù)需求。
  • 部署簡(jiǎn)單,節(jié)點(diǎn)失效/生效切換方便。

LVS缺席:為什么這里沒(méi)有提及LVS,因?yàn)長(zhǎng)VS是個(gè)重量級(jí)、高效穩(wěn)定的四層轉(zhuǎn)發(fā),不能作七層HTTP協(xié)議的識(shí)別,但完全可以架設(shè)在七層之前。所以,LVS的使用并不會(huì)影響網(wǎng)絡(luò)結(jié)構(gòu),后續(xù)仍然可以想上就上,只是前提要兼顧到LVS的單點(diǎn)故障。

實(shí)際部署

最終我們?cè)谥鞴?jié)點(diǎn)周?chē)还膊渴鹆?個(gè)CDN節(jié)點(diǎn)(節(jié)點(diǎn)數(shù)量根據(jù)自身公司實(shí)力及實(shí)際生產(chǎn)環(huán)境要求而靈活調(diào)整,此數(shù)字僅作參考),這些節(jié)點(diǎn)又按照地域劃分成了四個(gè)大區(qū):北方(以山東,河北為主)、西南(以四川為主)、華東(以寧波,嘉興為主) 華南(以福建,湖南為主 )兼顧全國(guó)各個(gè)省份。

總體成本情況

8個(gè)單線加速節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)100Mx8,8臺(tái)雙子星服務(wù)器,總共投資約30W(后續(xù)費(fèi)用只考慮帶寬支出,約15W/年),我們應(yīng)急撥款為10W,每個(gè)月CDN預(yù)算為2W。

項(xiàng)目進(jìn)度安排:

1~4個(gè)月抓進(jìn)度:特點(diǎn)是快速部點(diǎn)。這里有個(gè)訣竅,前期可以先跟IDC按月或者季度簽約,然后通過(guò)監(jiān)控看連續(xù)的節(jié)點(diǎn)質(zhì)量,如果節(jié)點(diǎn)質(zhì)量不佳,更換提供商,這樣損失不會(huì)太大,如果節(jié)點(diǎn)質(zhì)量好,就半年付或者年付,這樣就可以保證質(zhì)量和性?xún)r(jià)比最高;

5~8個(gè)月為完善期:根據(jù)預(yù)算,有節(jié)奏的加點(diǎn),加帶寬,保證帶寬的冗余度;

8個(gè)月以后為穩(wěn)定期:根據(jù)實(shí)際情況保證節(jié)點(diǎn)的最大可用性,同時(shí)也提升了整體防御能力。

如何做防護(hù)策略

開(kāi)啟HAProxy的httplog功能,記錄日志。

HAProxy的配置策略:

global    nbproc 24    pidfile /var/run/haproxy.pid    daemon    quiet    user nobody    group nobody    chroot /opt/haproxy    spread-checks 2defaults    log 127.0.0.1   local5    mode    http    option  forwardfor    option  httplog    option  dontlognull    option  nolinger # reduce FIN_WAIT1    option  redispatch    retries 3    option  http-pretend-keepalive    option  http-server-close    option  accept-invalid-http-request    timeout client 15s    timeout connect 15s    timeout server 15s    timeout http-keep-alive 15s    timeout http-request 15s    stats enable    stats uri /stats    stats realm 53KF\ Proxy\ Status    stats refresh 60s    stats auth admin:adminxxxlisten Web_FB 0.0.0.0:80    option httpchk GET /alive.php HTTP/1.0    acl invalid_referer hdr_sub(referer) -i -f /opt/haproxy/etc/bad_ref.conf    acl invalid_url url_sub -i -f /opt/haproxy/etc/bad_url.conf    acl invalid_methods method -i -f /opt/haproxy/etc/bad_method.conf    block if invalid_referer || invalid_url || invalid_methods    acl dyn_host hdr(host) -i -f /opt/haproxy/etc/notcache_host.conf    acl static_req path_end -i -f /opt/haproxy/etc/allow_cache_file.conf    use_backend img_srv if static_req !dyn_host# acl shaohy    acl geek hdr_dom(host) -i 17geek.com    use_backend geek if geek# backend shaohybackend geek    mode http    balance source    cookie SESSION_COOKIE insert indirect nocache    option tcpka    server geek_1 127.0.0.1:81 cookie geek_1 maxconn 10000 weight 8backend img_srv    mode http    option tcpka    server img_srv 127.0.0.1:88 maxconn 30000 weight 8

Varnish的配置策略:

backend h_17geek_com_1 {            .host="127.0.0.1";          .port="81";             .connect_timeout=300s;          .first_byte_timeout=300s;       .between_bytes_timeout=300s;     }                  director geek srv {             { .backend=h_17geek_com_1; .weight=3;} }                  sub vcl_recv {    if (req.http.host~"^(www).?17geek.com$"){        set req.backend=geek_srv;               if (req.request != "GET" && req.request != "HEAD") {            return (pipe);                      }                               if(req.url ~ "\.(php|jsp)($|\?)") {                     return (pass);                      }                               else {                                  return (lookup);                    }                       }                        }

對(duì)于CC類(lèi)型的DDoS攻擊,通過(guò)第一篇當(dāng)中介紹的監(jiān)控異常流量的方法依然適用,而且優(yōu)勢(shì)更明顯,因?yàn)椋?/p>

  • 節(jié)點(diǎn)各自承擔(dān)相應(yīng)的日志記錄,分析日志的系統(tǒng)開(kāi)銷(xiāo),發(fā)現(xiàn)異常請(qǐng)求后直接在haproxy前端做ACL規(guī)則 過(guò)濾,因此,攻擊壓力不會(huì)傳遞給后端服務(wù)器,保證后端安全。
  • 節(jié)點(diǎn)受到的攻擊流量過(guò)大,機(jī)房可以拉黑IP或者引流,后端智能DNS會(huì)自動(dòng)把這個(gè)節(jié)點(diǎn)剔除,后續(xù)請(qǐng)求不要通過(guò)此節(jié)點(diǎn)。

在本系列的下一篇文章中,我們會(huì)介紹這個(gè)CDN架構(gòu)的一些后續(xù)改進(jìn)工作,包括智能DNS、大規(guī)模日志分析、利用OpenCDN改善后臺(tái)管理等。

作者簡(jiǎn)介

邵海楊(個(gè)人頁(yè)面),來(lái)自杭州Linux用戶(hù)組。網(wǎng)名“海洋之心”,系統(tǒng)架構(gòu)師,業(yè)余撰稿人,致力于開(kāi)源軟件及前沿科技的研究和探索。

張磊(微博,博客),來(lái)自杭州谷歌開(kāi)發(fā)者社區(qū)。專(zhuān)注于信息安全技術(shù)領(lǐng)域,曾主導(dǎo)多項(xiàng)銀行/證券行業(yè)網(wǎng)站安全測(cè)試和入侵取證分析項(xiàng)目,為四大銀行提供安全防護(hù)技術(shù)支持。目前創(chuàng)業(yè)做互聯(lián)網(wǎng)安全防護(hù)。 ?

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
【圖文并茂】一步步帶你了解Web站點(diǎn)架構(gòu)
從接入層入手,如何設(shè)計(jì)高并發(fā)的微服務(wù)架構(gòu)?
haproxy 命令配置實(shí)例
負(fù)載均衡集群解決方案(三)haproxy
keepalived haproxy 實(shí)現(xiàn)web 雙主模型的高可用負(fù)載均衡
如何精心設(shè)計(jì)CDN架構(gòu)?
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服