4月5日訊 V?社官方近期發(fā)布一篇名為《刀塔漫談:如何拒絕拒絕服務(wù)》,闡述如何在2015年解決被DDOS攻擊的問(wèn)題。歡迎回到“刀塔漫談”特色博文,我們開(kāi)發(fā)團(tuán)隊(duì)的成員會(huì)在文章中梳理
4月5日訊 V?社官方近期發(fā)布一篇名為《刀塔漫談:如何拒絕拒絕服務(wù)》,闡述如何在2015年解決被DDOS攻擊的問(wèn)題。
![undefined](http://img.shudns.com/20240405/mmg00pkrma1.jpg)
歡迎回到“刀塔漫談”特色博文,我們開(kāi)發(fā)團(tuán)隊(duì)的成員會(huì)在文章中梳理自己遇到的一些挑戰(zhàn)、錯(cuò)誤修復(fù)還有偶爾令人莞爾的意外,主要是在開(kāi)發(fā)像Dota這樣獨(dú)特游戲的過(guò)程中。這是一個(gè)關(guān)于互聯(lián)網(wǎng)的故事,還有它如何不按應(yīng)有的方式工作,什么時(shí)候在正常工作,實(shí)際上又完全沒(méi)有。 這是一個(gè)關(guān)于互聯(lián)網(wǎng)如何停止服務(wù)我們的客戶,以及我們?nèi)绾涡迯?fù)它的故事?;ヂ?lián)網(wǎng)和我們心目中的相比是一片更為狂野的邊界。離開(kāi)了雙因素身份驗(yàn)證和可信cookie的安全范圍,外面可能會(huì)有點(diǎn)荒亂,充滿了身懷惡意的隨機(jī)壞蛋——而且他們?cè)絹?lái)越有能力讓你的生活變得非常悲慘,不為別的,就因?yàn)樗麄兡茏龅玫?。?dāng)時(shí)還是2014年,這些壞蛋使用的方法是分布式拒絕服務(wù)(DDoS)攻擊?!胺植际健笔侵复罅炕ヂ?lián)網(wǎng)主機(jī)惡意向特定目標(biāo)IP注入流量,企圖壓垮網(wǎng)絡(luò)堆棧。這被稱為飽和攻擊,而其目的并不是嘗試進(jìn)入網(wǎng)絡(luò)。只是企圖拒絕服務(wù)。分布式拒絕服務(wù)意味著想要合法服務(wù)的合法人會(huì)被惡意流量擠出去。
DDoS攻擊的問(wèn)題是在于,截至2014年底,實(shí)施這些攻擊的并不是擁有高級(jí)計(jì)算機(jī)科學(xué)學(xué)位、專精于數(shù)據(jù)泄露的超級(jí)黑客。 實(shí)施的幾乎可以是任何人,他們只要付錢(qián)就能找到人或者機(jī)器人來(lái)為他們辦事。而且原因很明顯。盡管有些人純粹是為了破壞公物而樂(lè)意這樣做,但其他人是有動(dòng)機(jī)的:DDoS攻擊肯定會(huì)導(dǎo)致你或你支持的人馬上要輸?shù)谋荣惐黄戎兄?。這就不再只是偶然的煩惱了。這會(huì)演變?yōu)楣还粲型婕冶荣惖娜魏斡螒颉?/strong>到了2015年初,我們發(fā)現(xiàn)Dota和CS:GO遭遇的DDoS攻擊次數(shù)大幅增加,其他公司也有大幅增加的報(bào)告。突然之間,有人讓任何人都可以很容易地發(fā)動(dòng)攻擊。2015年8月,國(guó)際邀請(qǐng)賽被DDoS攻擊擾亂比賽現(xiàn)場(chǎng)。盡管比賽中的職業(yè)選手沒(méi)有受到影響,但在兩個(gè)多小時(shí)的時(shí)間里,轉(zhuǎn)播方無(wú)法進(jìn)入比賽進(jìn)行實(shí)況的解說(shuō)。直播流的外送成為了一個(gè)難題。選手們就像是在虛空里打的比賽。這是一場(chǎng)有數(shù)百萬(wàn)人觀看、有數(shù)百萬(wàn)美元獎(jiǎng)金的職業(yè)競(jìng)技賽事,但有人用了五美元的軟件就擾亂了整個(gè)比賽。這是Valve無(wú)法忽視的問(wèn)題。
在找到了有效的解決方案之前,我們嘗試了多種應(yīng)對(duì)DDoS攻擊的解決方案。最初,我們嘗試使用功能強(qiáng)大的網(wǎng)絡(luò)交換機(jī)來(lái)過(guò)濾流量。不幸的是,這種類(lèi)型的過(guò)濾本質(zhì)上很難去針對(duì)游戲流量。游戲服務(wù)器的本質(zhì)就是從任意IP地址接收未經(jīng)請(qǐng)求的UDP(用戶數(shù)據(jù)報(bào)協(xié)議)流量。想象一下,你有一家郵局,專門(mén)為你清理不需要的垃圾信件。但再想象一下,你的工作是給人建議的專欄作家,而且你一直收到大量來(lái)自隨機(jī)陌生人的合法信件。對(duì)你來(lái)說(shuō),郵局不知道什么是垃圾信件,什么不是。游戲服務(wù)器的流量往往就是這樣的情況。此外,UDP數(shù)據(jù)包中的源IP不安全,很容易被欺騙。我們的郵局甚至無(wú)法通過(guò)信封上的回郵地址來(lái)尋找線索,因?yàn)槔偶陌l(fā)件人偽造了他們的地址。Steam提供了大量的游戲內(nèi)容,并為此建立了一個(gè)龐大的網(wǎng)絡(luò)。我們已經(jīng)利用該網(wǎng)絡(luò)通過(guò)專用鏈路來(lái)傳輸游戲流量、獲得良好的對(duì)等互連、確保使用網(wǎng)絡(luò)工程的最佳實(shí)踐等。 這能使玩家ping時(shí)間保持在較低水平,但無(wú)法阻止DDoS攻擊。問(wèn)題是在于UDP協(xié)議不安全,因此雖然我們擁有自己的網(wǎng)絡(luò),但并不是私有的。為了防止攻擊者使用我們自己的網(wǎng)絡(luò)來(lái)攻擊我們的服務(wù)器,我們需要控制所有入口并保護(hù)它們。為了實(shí)現(xiàn)這個(gè)目標(biāo),我們?yōu)橛螒蛄髁縿?chuàng)建代理、通過(guò)中繼設(shè)備傳輸網(wǎng)絡(luò)上的每個(gè)數(shù)據(jù)包?,F(xiàn)在,當(dāng)客戶端想要與游戲服務(wù)器通信時(shí),它必須通過(guò)中繼設(shè)備來(lái)實(shí)現(xiàn),中繼設(shè)備既會(huì)對(duì)其進(jìn)行身份驗(yàn)證,又會(huì)將該流量代理到游戲服務(wù)器。這意味著服務(wù)器的IP地址始終都是隱藏的——攻擊者根本不會(huì)知道要攻擊哪里。重新使用上述的郵局比喻,我們的垃圾信件發(fā)送者再也沒(méi)有地址讓他們?nèi)ゼ乃屠偶?。他們可以把垃圾信件發(fā)送到該地區(qū)的每個(gè)郵局并要求他們郵寄,但沒(méi)有授權(quán)的情況下,郵局并不會(huì)這樣做。(而且,郵局會(huì)發(fā)現(xiàn)有人企圖向一個(gè)人寄出100000封信是有點(diǎn)可疑。)
但不能直接攻擊中繼設(shè)備嗎?嚴(yán)格來(lái)說(shuō),可以的。但我們的數(shù)量基本上是無(wú)限的,而且我們構(gòu)建的目的就是為了被攻擊。“中繼設(shè)備”只是運(yùn)行軟件的計(jì)算機(jī)的另一種說(shuō)法??梢怨羲蚴蛊潆x線,但是設(shè)計(jì)協(xié)議時(shí)就考慮過(guò)這樣的情況。如果客戶端嘗試玩游戲并與中繼設(shè)備失去聯(lián)系,它只會(huì)再切換到下個(gè)設(shè)備。中繼設(shè)備就像散布在世界各地的數(shù)百個(gè)棋子,其唯一目的是守衛(wèi)游戲服務(wù)器。(順便說(shuō)一句,干掉中繼設(shè)備比聽(tīng)起來(lái)要難。它們的設(shè)計(jì)非常好,并且位于網(wǎng)絡(luò)的特定位置,所以盡管它們是為了離線而設(shè)計(jì)的,但我們還沒(méi)有失去過(guò)一個(gè)。)這個(gè)解決方案簡(jiǎn)單但有效。之前如果有人想要破壞游戲,他們只需擊垮一臺(tái)游戲服務(wù)器(門(mén)檻非常低)?,F(xiàn)在他們必須擊垮整個(gè)數(shù)據(jù)中心——門(mén)檻非常非常高。那還有攻擊可以做到嗎?當(dāng)然有。那還有任何人在網(wǎng)上花五美元買(mǎi)到的攻擊可以做到嗎?沒(méi)有。這么復(fù)雜的攻擊背后需要的財(cái)力超出了大多數(shù)人的承受范圍。隨著這個(gè)新系統(tǒng)的啟動(dòng)和運(yùn)行,我們頓悟了:如果我們控制自己的私有網(wǎng)絡(luò),我們就不會(huì)受制于正?;ヂ?lián)網(wǎng)的工作原理。我們可以利用它來(lái)改善客戶體驗(yàn)。在常規(guī)的互聯(lián)網(wǎng)中,當(dāng)你將數(shù)據(jù)包從一個(gè)IP地址發(fā)送到另一個(gè)IP地址,你使用的路由是由邊界網(wǎng)關(guān)協(xié)議(BGP)來(lái)決定。這是一種路由算法,會(huì)決定你的數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸方式,并且你無(wú)權(quán)決定它挑選的路由。但是,了由數(shù)百個(gè)全球中繼設(shè)備和數(shù)據(jù)中心組成的虛擬私有網(wǎng)絡(luò),我們基本上可以自行選擇從客戶端到游戲服務(wù)器的路由——通常是比默認(rèn)路由更快的捷徑。如果你使用Steam數(shù)據(jù)報(bào)中繼(SDR),Steam Overlay會(huì)顯示你的ping時(shí)間以及我們?yōu)槟闾峁┑穆酚?,以便你可以親自了解是如何優(yōu)化的。
最初用于保護(hù)Dota游戲服務(wù)器的一個(gè)功能現(xiàn)在超出了所有人的預(yù)期。SDR網(wǎng)絡(luò)通常每秒傳輸多達(dá)140M數(shù)據(jù)包和550GBit。我們?cè)?1個(gè)數(shù)據(jù)中心設(shè)有中繼設(shè)備,容量超過(guò)5TBit。現(xiàn)在我們所說(shuō)的Steam數(shù)據(jù)報(bào)中繼不僅可以防止DDoS攻擊,還可以提升每個(gè)Dota玩家的連接穩(wěn)定性并且降低延遲。不僅適用于Dota,也適用于Steam上任何想要利用它的游戲。我們希望大家能再次從刀塔漫談中享受到樂(lè)趣。這次的文章技術(shù)性很強(qiáng),感謝你能堅(jiān)持讀完!也請(qǐng)隨時(shí)告訴我們,你希望下期介紹哪方面的內(nèi)容。
相關(guān)閱讀:解決攻擊漫談