前言
安全加固在安全甚至運維領(lǐng)域,已經(jīng)是一個大家都不再感到陌生的名字了。相當多的安全甚至集成公司,都會再項目工程中提供此類服務(wù)。Coolc從事工作以來,也大大小小的實施了相當多次的安全加固工作,最近完成了一個大型運維環(huán)境的加固工作,積累了一些經(jīng)驗,現(xiàn)在記錄下來與大家分享。
因為所屬工作的原因,coolc不會透露具體的操作的技術(shù)細節(jié),這點還希望大家能見諒,但是Coolc會更多的闡述記錄在項目操作中框架性思維和理念,同大家分享我的收獲和經(jīng)驗。
背景
本次項目之所能稱之為大型項目,主要是基于如下幾個特點。
* 涉及的主機眾多,總體主機數(shù)量在萬臺以上。
* 涉及業(yè)務(wù)情況復(fù)雜、數(shù)量眾多,其中重點大業(yè)務(wù)有數(shù)百個,而旗下子業(yè)務(wù)更為種類繁多。
* 業(yè)務(wù)多為在線業(yè)務(wù),對于中斷的容忍度很低。
* 涉及部門多,光運維層面的部門會涉及10余個左右,橫向溝通成本較大。
內(nèi)容
困難
* 選用何種層面的加固技術(shù),是系統(tǒng)層?應(yīng)用配置層?IDS配合iptables聯(lián)動?抑或是kernel patch?
* 涉及的主機多為在線業(yè)務(wù),如何保證平滑切換。
* 橫跨多個部門,如何協(xié)調(diào)各個部門的人力資源具有相當難度。
* 安全加固本身是叫好不叫座的東西,在完成項目后如何體現(xiàn)安全加固的效果?
* 在自身進行了大量技術(shù)考量后,如何向技術(shù)部門驗證你的說法,得到一線運維部門的支持?
思路
1. 爭取運維線的上下層支持和理解。
2. 充分準備,數(shù)據(jù)支撐,取得認可。
3. 自動化部署,減輕工作量和誤操作。
4. 充分考慮回退和規(guī)避運維風(fēng)險。
5. 以點帶面,分步驟部署。
準備階段
安全加固項目的準備階段主要的工作內(nèi)容為,
* 確定項目組成和成員的職責
* 內(nèi)容宣講,介紹加固項目的工作內(nèi)容。
* 了解安全需求,打消存在的顧慮,爭取配合和支持。
* 對加固內(nèi)容進行測試,后續(xù)工程中需要配合工具和文檔進行準備。
人員準備
人員準備可講的東西不多,從這次操作中較多的體會是,項目組中最好能配備一個具有編寫腳本能力的人,減小大規(guī)模主機部屬時碰到的巨大工作量。其次,人員不在于多,PM的溝通能力要很強,具有較強的破冰和應(yīng)變能力。項目組能夠階段性引入實施部門的Teamleader ,在實施時會極大地提高執(zhí)行力。
宣講和破冰
在安全項目中,最常見的問題就是實施方和相關(guān)的配合人員,因關(guān)注點不同而導(dǎo)致的分歧。項目中安全人員關(guān)注的是如何按時完成項目,保證自身的安全項目內(nèi)容得以實現(xiàn)。而參與實施配合得人員關(guān)注點主要集中在。
* 加固是否會影響業(yè)務(wù)系統(tǒng)的正常運行。
* 加固是否會帶來業(yè)務(wù)上的中斷。
* 加固是否會給系統(tǒng)帶來性能上的影響。
* 加固實施是否會帶來大量的工作量和擠占大量的時間。
* 加固后運維工作是否會在操作上十分不便。
* 加固后的主機是否會會在安全上和現(xiàn)有水平相比,有很大提升。
此時整個項目的主要矛盾是相關(guān)人員對加固沒有了解,不清楚項目可能會帶來哪些“利”、“弊。
因此需要通過會議等方式,向各個部門的Leader ,骨干進行加固方面的知識介紹和內(nèi)容宣講。
首先,為了驗證自身說法的科學(xué)性,前期測試需要通過數(shù)據(jù)證明各種影響的具體數(shù)值,并給出目前的數(shù)值進行比較。根據(jù)數(shù)據(jù)同運維線溝通,商討性能等指標容忍基線。
其次,項目在設(shè)計時要充分考慮業(yè)務(wù)中斷、性能的影響。本次操作中Coolc,在初始設(shè)計上規(guī)避重起等可能造成中斷的行為,并出具了性能評估報告,比較圖譜等進行性能影響驗證。為了使報告具有說服力,應(yīng)盡量爭取將被實施部門提供樣機(或選取明星部門的主機),以便采集數(shù)據(jù)得到較大范圍的認可。
再次,Coolc在本次加固項目中,實施采取自動化腳步、程序的模式進行。事先設(shè)置好加固項的配置文件后,執(zhí)行安裝腳本自動化部署,盡量避免部署所帶來的時間和人力成本(Windows下安裝應(yīng)用程序亦是此類思想)。
同時此類自動化部署,十分有利于在短時間內(nèi)批量部署大規(guī)模主機。 而且腳本應(yīng)具有很強的回退功能,能通過執(zhí)行腳步達到完全回退的目的。(當然回退功能的自保護能力應(yīng)該很強 :))
同時,提供一份加固影響表,將每項加固內(nèi)容可能帶來的影響進行描述,并且在實施中時時更新此表,并同步收集故障案例,作為培訓(xùn)資料。
最后,加固效果的驗證本身存在一定的困難,前期可以采用制作演示錄像,PPT講解等方式,后期進行培訓(xùn)時,可以構(gòu)建一些演練環(huán)境進行展示。
總結(jié)一下,此階段主要是對加固框架內(nèi)容進行修正,同時向各個部門傳導(dǎo)加固意識,打消顧慮,尋求領(lǐng)導(dǎo)層支持和理解,也為后面的大規(guī)模實施打下基礎(chǔ)。
實施和嘗試
經(jīng)過前一階段的準備和溝通,基本達成了如下效果。
* 各個部門在部門領(lǐng)導(dǎo)和骨干級知曉了解了安全加固的內(nèi)容。
* 對安全加固內(nèi)容的安全提升有了認可。
* 對于安全加固方面可能造成的影響有了一定認識。
* 熟悉安全加固項目中的項目組成員和每個成員的職責。
* 清楚地知悉安全加固不會帶來很大工作量。并且是必須要操作的一個安全工程項目。
在此基礎(chǔ)上,整個項目的主要矛盾點已經(jīng)由對項目不了解,工作量可能的負擔,轉(zhuǎn)變?yōu)榱税踩庸淌欠窠o運維帶來風(fēng)險。
1. 針對主要矛盾上的變化,整個項目調(diào)整進入實施和嘗試階段。在此階段 ,主要工作從各個部門抽取主機,進行初步的加固試運行。試運行的主要目的是:
2. 驗證穩(wěn)定性,因為此階段運維人員重點關(guān)注穩(wěn)定性,所以從項目組側(cè)應(yīng)保證,實施的加固大多數(shù)情況下,確實可以保證技術(shù)層面的穩(wěn)定;如果一旦出現(xiàn)問題,響應(yīng)時間解決問題的態(tài)度要到位;選取主機要具有代表性和一定的數(shù)量,這樣在數(shù)據(jù)上才會有說服力和驗證效果。
3. 進行項目磨合,此時是熟悉配合人員的最好階段,同時也為項目組提供了后期部署的演練機會。因為此階段時間壓力小,因此應(yīng)盡可能多的讓項目組組員熟悉各個環(huán)節(jié)(讓每個成員都可以互為備份),并對操作流程進行演練修正。
4. 試驗主機的選取,Coolc采用的方式為典型主機選取方法,一般會選取如下類型的主機:
* 典型角色,選取的主機在業(yè)務(wù)架構(gòu)上是典型角色,如一個游戲中,前臺的應(yīng)用服務(wù)器,Cache服務(wù)器,DB等,各抽取一臺。
* 負載特征明顯,系統(tǒng)負載上有較多代表性的主機,如高IO訪問量的主機,高并發(fā)session主機,高CPU占用,高內(nèi)存占用的主機。
* 充分尊重運維人員的意見,抽取試驗的目的,最終還是為了通過在有代表性主機的試運行,能提前發(fā)現(xiàn)隱患,避免可能的問題。因此抽取何種主機方面,熟悉實際環(huán)境的運維人員的意見十分值得參考。
* 架構(gòu)上冗余,考慮到試運行可能帶來的風(fēng)險,選取主機應(yīng)盡量選取架構(gòu)上提供冗余支持的主機,不要在可能出現(xiàn)單點故障的主機上實施。
如果在試驗階段出現(xiàn)大型事故,那么此項目推行的難度將會幾何級上升,因此此階段一定要慎重,同時PM要具有在基層消化小型問題的能力,避免一般性問題因人為因素被放大升級。
總結(jié),此階段主要是通過溝通,爭取一小批具有代表性的主機參加試運行,觀察實際運行效果,安全人員對試驗情況進行跟蹤,對發(fā)現(xiàn)的問題進行修正。同時鍛煉隊伍,準備下一階段的大規(guī)模部署
全面展開
通過前一階段的工作,基本可以到達如下效果
* 業(yè)務(wù)部門領(lǐng)導(dǎo)到技術(shù)層對于整個加固的穩(wěn)定性有了初步認可。
* 參與配合的實際運維人員對于操作方法、流程和人員有了熟悉和操作經(jīng)驗。
* 加固項目在加固內(nèi)容上可能存在的問題和不兼容基本被消化。
* 加固項目組內(nèi)技術(shù)人員得到鍛煉,能應(yīng)付一般突發(fā)情況,并對各個部門的業(yè)務(wù)結(jié)構(gòu)、人員組成結(jié)構(gòu)相當?shù)恼J識和了解。
此階段主要矛盾也有對于加固內(nèi)容的穩(wěn)定性的擔心,逐漸轉(zhuǎn)化為對工程操作方法不了解,以及擔心在后續(xù)工作中可能碰到未知問題,所造成的不安。
因此該階段的重點為。
* 同運維部門Leader和骨干共同回顧前期的項目進度和成果。
* 同運維部門骨干和部門領(lǐng)導(dǎo)確認回退方案,認可回退方案的可靠性和可行性。(這點是重中之重。
舉例:
當加固后,運維中出現(xiàn)故障,是否為安全加固導(dǎo)致,往往會帶來很多爭論和工作量,尤其是如果因為此類故障,導(dǎo)致對加固穩(wěn)定性的質(zhì)疑,將直接影響整個工程的進度。如果能夠雙方認可回退方案,一旦出現(xiàn)問題,運維部門執(zhí)行回退后,即可迅速定位是否是“加固造成的影響”,便于雙方進行排障。
* 同運維部門就項目中的人員分工、操作內(nèi)容、時間等進行落實,并進行備忘。
* 對新裝主機加固納入裝機流程,保證后續(xù)上架主機全部閉合為“加固主機”。
* 對相關(guān)運維技術(shù)人員進行培訓(xùn),重點在于回退技術(shù)的反復(fù)演練。并讓運維部門領(lǐng)導(dǎo)了解到此技術(shù),在部門內(nèi)進行強化。
* 向運維技術(shù)人員表明態(tài)度,并做出行動,加固相關(guān)支持的將以持續(xù)性的姿態(tài)進行,不會在加固完結(jié)后終止。
* 組織“實戰(zhàn)演練”,通過搭建模擬環(huán)境,讓一線人員有機會操作實際工具,增加其操作和動手能力。
重點關(guān)注
因為此階段將會完成整個實施過程的95%以上的加固工作,因此在部署時的技巧十分重要,部署實的幾個大原則為:
* 階梯式部署,部署之初應(yīng)該采取逐步遞增的方式,如分5個階段,在3個月內(nèi)部署3000臺主機,可以采取如下步驟 1% ---9% ---10%---30%---50%。
* 選取角色考慮,在部署時應(yīng)充分利用業(yè)務(wù)的冗余特性,盡量避免按照業(yè)務(wù)角色分類、分組,在一次部署時,選取單一角色的主機進行部署。如圖所示(pdf版本:http://blog.xfocus.net/resserver.php?blogId=16&resource=harden+os.pdf),右圖的方式,如果部署時出現(xiàn)故障,那么整個業(yè)務(wù)都將受到影響,對用戶提供的服務(wù)不得不中斷。
因此不應(yīng)該以業(yè)務(wù)系統(tǒng)為單位進行部署,而應(yīng)該縱向切片進行部署,這樣如果出現(xiàn)故障,即便部分節(jié)點不可用,但是由于同一角色服務(wù)器被分批次部署,提供了冗余,服務(wù)提供商依然可以為用戶提供持續(xù)服務(wù),如左圖所示。
* 每完成一個階段,如50% ,80%應(yīng)該時時輸出加固階段性報告,對具體實施人員和相關(guān)部門Leader進行通告和知會。
* 此階段應(yīng)該注意收集加固效果體現(xiàn)的案例,作為階段性報告輸出和結(jié)項報告素材。
項目收尾完結(jié)
項目進入到此階段,大部分主機完成加固,主要矛盾基本消失,主要工作集中在:
* 主要是對剩余主機做好加固收尾工作,不殘留未加固主機,如果有特殊情況,需要進行文檔備案。
* 整理項目資料,文檔 、代碼等進行封閉,不再進行改動,保存歸檔并進行備份。
* 酬謝相關(guān)配合Leader和技術(shù)人員。
* 發(fā)出結(jié)項報告,對于整個項目進行回顧,總結(jié)案例、加固成效和問題。
* 作為持續(xù)性安全工程,提出下一階段的構(gòu)想藍圖。
總結(jié)
曾經(jīng)同朋友開玩笑說,通過此次項目的操作,Coolc也許是加固主機最多的人之一了,當然在實際操作中涉及了更多的是PM的角色,主要是籌劃、設(shè)計、推動等工作偏多,總結(jié)了一些項目操作的經(jīng)驗,從內(nèi)容上看,此項目也許只能視為中小型項目,但從主機數(shù)目看,此項目絕對可以視為大型安全項目,因此Coolc覺得其中積累的一些經(jīng)驗,應(yīng)該還是有一定的成色,不妨寫出來與大家分享。
項目中涉及的具體內(nèi)容、技術(shù)細節(jié)、代碼工具以及數(shù)字等數(shù)據(jù),因為涉及敏感信息,不方便提供,還請大家原諒。如果大家有什么希望同Coolc討論的,歡迎同我Email聯(lián)系,謝謝。
作者:Coolc
Email: eanalysis AT gmail.com
Homepage:blog.xfocus.net/coolc


