◆吳 紅 呂 磊 羅 晨
?
基于Python語言的防火墻自動化運維工具的開發與應用
◆吳 紅 呂 磊 羅 晨
(國網四川省電力公司眉山供電公司 四川 620010)
國網四川省電力公司眉山供電公司建立了三道信息安全防線,一是邊界防火墻,二是服務器區域防火墻,三是服務器主機本地防火墻防護。第三道防線需要通過設置主機的防火墻來實現,但由于Windows(或Linux)主機防火墻設置比較復雜,不直觀,給運維人員帶來了困難,設置效率過低。為了解決這一問題,提出并研發一款基于Python語言的跨平臺可視化的防火墻自動運維工具,該工具具有典型性和推廣性。
防火墻;信息安全;運維;自動化;Python
防火墻由Check Point創立者Gil Shwed于1993年發明并引入國際互聯網。防火墻是位于內部網和外部網之間的屏障,如圖1。將“內部網絡”與“外部網絡”有效隔離開來,按照系統管理員預先定義好的規則來控制數據包的進出,只有滿足預先設定好規則的流量才能夠通過防火墻,從而在兩個網絡通信之中實現訪問控制[1]。

圖1 防火墻
眾所周知,防火墻對于抵抗網絡攻擊、保護信息系統的安全具有重要的意義,尤其是在當前網絡威脅泛濫的環境下,恰當的配置和利用防火墻可以防止大量的安全攻擊威脅。目前,市面上存在硬件和軟件兩種防火墻,而對于系統提供最直接保護的莫過于系統自帶的軟件防火墻。Windows系統默認集成了Windows防火墻,而Linux系統中默認也集成了iptables防火墻。合理并有效的配置、利用系統自身提供的防火墻,能夠有限防止黑客對信息系統進行惡意的攻擊[2]。
國網四川省電力公司眉山供電公司目前建立了三道信息安全防線來阻隔外部安全風險,一是邊界防火墻,二是服務器區域防火墻,三是服務器主機本地防火墻防護。第三道防線需要通過設置主機的防火墻來實現,但由于Windows(或Linux)主機防火墻設置比較復雜,不直觀,給運維人員帶來了困難,設置效率過低。通常運維工作存在以下問題:
(1)不同操作系統的防火墻規則配置命令不一致,容易記混;
(2)配置命令參數過多,書寫容易出錯;
(3)查看已配置過的規則不方便;
(4)不同操作系統之間規則不通用;
(5)管理主機過多的情況下,同一條規則在不同主機上需要多次配置,工作繁瑣,容易漏配誤配;
(6)要管理主機過多,系統密碼管理不便。
主要通過開發設計實現以下目標:
(1)統一不同操作系統的防火墻配置接口,使相同防火墻規則在不同操作系統上的配置對運維人員來說輸入一致;
(2)簡化防火墻配置輸入,使防火墻配置更接近自然語言,減輕運維管理的負擔;
(3)優化已有防火墻配置的輸出,使防火墻規則明細更直觀地呈現;
(4)創新防火墻規則的存儲與分發機制,實現相同防火墻規則在大規模網絡系統中的快速、安全應用;
(5)實現主機集群的密碼管理,方便對大規模主機密碼的統一記錄與安全管理。
該防火墻自動化運維工具的總體方案按軟件設計的流程,需討論以下四大方面見圖2。

圖2 總體方案分解圖
編程語言種類繁多,從項目創新目標上考慮,我們選擇了Java和Python 兩種移植性較好,都可以實現圖形化編程的語言進行比較。小組對兩種語言進行選擇,如表1。

表1 編程語言的選擇
要想實現創新目標中“統一不同操作系統的防火墻配置接口”與“高效完成相同防火墻規則大規模分發”的要求,需要實現防火墻規則存儲與分發機制的創新,見表2。

表2 防火墻規則存儲與分發機制的選擇
操作員與主機這二者誰是服務器誰是客戶端將決定整個軟件設計的框架,方案的選擇見表3。

表3 防火墻規則存儲與分發機制的選擇
Python屬于解釋型語言,可以不經編譯在主機上運行,也可以通過第三方軟件將源代碼打包導出成二進制文件在主機上執行[4]。我們對兩種方式進行分析討論,見表4。

表4 軟件交付形式的選擇
經過以上多次討論及技術驗證,我們最終確定了軟件的技術方案,見圖3,系統整體架構見圖4。

圖3 主機防火墻便捷設置效果工具最佳方案

圖4 系統整體架構圖
本系統采取了C/S架構,把系統分成兩個部分---中控和Agent,中控部分是客戶端,負責管理總體規則;Agent部分是服務器端,負責管理服務器端的防火墻策略[6]。Agent的規則存放在中控上。采用AES加密客戶端和服務器端的通信,確保傳輸信息安全。中控和Agent均可以在Windows和Linux兩大主流操作系統平臺上運行,中控采用了PyQT圖形界面庫開發,Agent采用命令行界面運行,中控和Agent均需要一直運行。中控和Agent間的操作命令傳遞規則類似http協議的參數傳遞方式,使得命令交互更簡單可靠。中控和Agent都有操作日志記錄每一個通信請求以及命令的執行情況。如圖5。

圖5 系統整體架構圖
由于網絡環境不一定可信,存在被竊聽的風險,所以為保證安全性,中控和Agent之間的通信必須加密。目前采用CBC模式的AES密鑰加密中控和Agent之間的通信。如圖6。

圖6 CBC加密模型圖
中控通過數據庫暫存各Agent的防火墻規則,通過可視化編輯數據庫,進行規則的添加、更新、刪除等操作。規則包含IP,端口,協議,方向,采取動作等,IP支持常規的IP,網段等書寫方式,端口支持常規端口,端口范圍等,協議支持TCP,UDP和all。如圖7。
運維人員可能會面對購置新服務器,修改主機IP等情況。因此需要考慮Agent的擴展性。新加入一個Agent只需要在服務器端運行Agent程序并在中控端添加其IP地址即可。如圖8、9。

圖7 中控端推送防火墻規則至Agent端
中控和Agent都會對操作過程進行記錄,中控日志記錄了發出的命令和收到的返回以及執行途中的異常,Agent日志記錄了收到的命令和發出的命令結果以及每次執行的系統命令和系統命令輸出和執行異常。如果遇到了異常情況,可以保留日志以幫助后期程序的bug修復。
Agent的密碼要定期修改,在程序中有一個線程專門用于更新Agent的密碼,這個線程從數據庫讀取到達修改密碼期限的主機或者新加入的主機,生成一個隨機的字符串作為主機的密碼,通過通信機制傳輸到Agent上,執行修改密碼的系統命令更新運行當前Agent腳本的用戶的密碼,更新記錄在數據庫里,可以在中控界面可以看到各Agent的每一次密碼修改記錄,以便登錄Agent的時候查詢或者在出現意外時恢復。
由于防火墻規則較多,比較混亂,查找起來不方便,因此實現了一個簡單的主機過濾器。主機過濾器可以過濾出滿足一定條件的主機的所有規則和密碼修改記錄,使得運維人員可以更快找到關心的主機,并為其配置規則。如圖10。

圖10 讀取Agent端防火墻規則
該工具目前已在國網四川省電力公司眉山供電公司20臺服務器上進行了部署,運維效率提升5倍以上。在網絡安全日益重要的大環境下,利用Python語言開發實現跨平臺、可視化、自動化、C/S模式的工具,使之服務于安全運維,從而提高運維人員工作效率的經驗,在國網范圍內具有借鑒和推廣的價值與意義。如圖11。

本文主要介紹了國網眉山供電公司基于現實網絡安全防護的需求,解決目前防火墻運維難度大、效率低的問題,從而提出設計并實現的一種基于Python語言的自動化防火墻運維工具。該工具能夠顯著降低防火墻運維難度,提升防火墻運維效率,從而有效保障主機系統的安全性,具有較強的實踐意義和推廣價值。
[1]曹漢平,馮啟明,吳春蕾.Linux防火墻技術研究[J].武漢理工大學學報(交通科學與工程版), 2002.
[2]張英,江晨平.基于windows防火墻技術的研究與實現[J].商情,2013.
[3]博嘉科技.Linux防火墻技術探秘[M].國防工業出版社, 2002.
[4]康計良.Python語言的可視化編程環境的設計與實現[D].西安電子科技大學,2012.
[5]肖文鵬.用PyQt進行Python下的GUI開發[J].中文信息:程序春秋, 2002.
[6]葉磊,文濤,劉立亮.基于python的網絡及信息系統安全過程管理工具[J].數字技術與應用, 2017.