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