王凱 李繼民
摘要:為了避免基于Linux系統的計算機在網絡世界中受到惡意攻擊,本課題利用Linux內核提供的iptables模塊所提供的接口函數來設置對網絡數據包的控制,從而實現保護個人計算機的目的。
關鍵詞:Linux;防火墻;網絡安全
1 引言
防火墻作為互聯網絡中使用最廣泛的安全措施,伴隨著互聯網的快速發展而得到廣泛應用。Linux作為在全球范圍內得到廣泛接受和應用的開源操作系統,所提供的靈活性和可操作性為開發和配置防火墻以及按照特定網絡環境的要求構建防火墻提供了一個價格低廉、性能優良的平臺,日益獲得了眾多企業和個人用戶的廣泛接受。
本課題研究的是在Linux下實現自己的防火墻,以便對本地主機的網絡保護,屏蔽外界一些不必要的信息,如對外來IP地址的訪問加以限制。本軟件利用Linux內核提供的iptables模塊所提供的接口函數來設置對網絡數據包的控制策略。所有我們認為是有用的數據流都被在防火墻中顯式地“聲明”成合法的數據包,沒有被“聲明”的數據包默認是非法的,是要被防火墻軟件鎖在計算機外面的。另外本軟件還實現了文件系統實時監控,這個功能能夠實時地通知用戶哪些文件被改動了。
2 關鍵技術
2.1 iptables內核模塊
內建于Linux內核的iptables為我們建立自己的防火墻提供了技術上的保障。無論是為Linux服務器提供防火墻,還是為內部LAN提供防火墻/路由器,iptables都能夠提供強大的過濾能力。Linux具有任何希望構造防火墻的人所需要的靈活性和實力,而且它還獨具成本低廉的優點。
iptables在處理不同種類的數據包時使用不同的規則表。這些規則表由功能上相互獨立的表模塊來實現。三個主要的模塊是filter表,nat表和對數據包進行特殊處理的mangle表,而且這三個表模塊都有自己的擴展模塊,它們會在首次引用時被動態載入。
作為防火墻的管理程序,iptables為輸入輸出規則鏈建立單獨的數據包過濾規則以組成防火墻。定義防火墻規則的一個重要方面就是規則的定義順序。數據包過濾規則以它們的定義順序存儲在內核的輸入、輸出或轉發規則鏈中。單個規則被插入到鏈的開頭或結尾。本防火墻軟件采用的是加到鏈的結尾的。規則的定義順序就是它們加入到內核表中的順序。
在本軟件的實現過程中,所有過濾的條目使用的是數字服務端口號而不是它們的名稱。iptables支持符號化的服務端口名稱,之所以不使用符號名稱而使用數字是因為在Linux的不同版本中符號的名稱不太統一。在個人自定義的規則中可以使用符號名稱,但是防火墻就有可能在系統升級之后被攻破,因而使用端口號將更為可靠。而且,使用符號名稱可能引起防火墻規則的含糊性。
2.2 腳本解釋器——Shell
Shell是一個作為用戶與Linux系統間接口的程序,它允許用戶向操作系統輸入要執行的命令。本防火墻軟件作為Shell的腳本來實現,腳本名字為rc.firewall里面包含了許多的命令,這些命令都用Shell作為解釋器。
在Shell腳本中會設置一些變量,其中最重要的變量就是iptables本身的命令。因為將iptables命令作為變量非常重要,因此在這里必須明確的指出來。在一個防火墻腳本中含糊不清是絕對不允許的,在本軟件開發過程當中,表示iptables命令的變量是$IPT。出現$IPT時,就表示這是iptables命令。
腳本中以“#”開頭來調用Shell作為腳本的解釋程序。腳本中的第一行如下:#!/bin/sh
3 系統設計思路
3.1 功能介紹
3.1.1 對輸入數據的處理。本軟件對外界數據的訪問首先要到達輸入接口(即自擴展的INPUT內建規則鍵),當數據到達時,系統根據事先設定好的各條規則逐條進行對比,如果訪問信息符合規則鏈當中的任何一條則接受,否則拒絕。
3.1.2 對轉發數據的處理。由于本軟件作為個人電腦所用的防火墻軟件,并不是作為網絡結點服務器使用,故而所有涉及到轉發的入站數據包(即最終目的地址不是本機的數據包)一律采取丟棄策略。
3.1.3 對輸出數據的處理。本軟件對本地產生的出站數據包在發出前依據OUTPUT規則鏈定義了一系列的出站規則,這些規則指定了這些出站數據在出站前所做的修改,如屏蔽本地主機一些重要的信息等等。如果出站數據包非法則對其進行丟棄處理,而并不需要另行通知本機。
3.1.4 文件系統監控功能。任何一個Linux文件系統中的文件被修改時,本軟件都會通知給用戶,提醒用戶注意。
文件系統監控模塊的實現是從根目錄“/etc”開始進行掃描,這個掃描過程間隔10秒進行一次,過程中進行判斷是否為一個文件,如果不是文件而是目錄則往下進行掃描,如果是文件則對文件進行時間戳的操作。首先讀取當前的系統時間,然后再讀取文件的最后修改時間,而后再調用時間比對函數difftime()計算當前時間與最后修改時間的差值,用這個差值與掃描間隔時間10秒進行比較,如果小于10秒則說明該文件是在最近5秒內被修改過了,這時則通知給用戶有文件被修改。
3.2 系統活動圖
本軟件系統開始于用戶啟用防火墻,當用戶開啟了防火墻時,本軟件自動啟動數據流匹配模塊和文件系統監控模塊。當網絡數據交換中的數據包符合輸入輸出數據匹配規則時則允許該數據包的訪問,否則拒絕該數據包的訪問。而文件系統監控模塊則一直在后臺進行文件系統的描述工作,當發現有文件被修改時則通知給用戶。而數據流匹配模塊和文件系監控模塊的運行都終止于本軟件的關閉。系統的活動圖如圖1所示。
4 軟件運行效果
本軟件作為Shell的腳本存放在/etc/rc.d/下,shell作為本防火墻腳本的解釋器,用戶只需要到此路徑下找到防火墻軟件并使之啟動即可。啟動參數為start。軟件運行后用戶無需任何其它操作,在網絡上的數據流保護過程都是程序在后臺完成的,當有數據流通過或拒絕時不對用戶進行任何通知。如果用戶想知道網絡上的行為,可以到防火墻日志文件當中去查看,這個日志文件是Linux系統自行維護的,是Linux操作系統自帶的功能模塊,在開發本防火墻軟件時只需要鏈接上就可以了。
系統啟動、退出及文件系統監控提示信息如圖2所示。
5 結束語
本軟件作為單系統防火墻是防火墻結構中的“最小安全”形式,但“最小安全”形式并不是不安全,只是比擁有較多機器的更復雜的防火墻軟件稍差一些;如果要求更高的安全性,需要用戶付出更多的投入和關注。需要指出的是,擁有防火墻并不意味著完全的保護。安全是一個過程,簡單的電子郵件也是有可能帶來危害的。所以本軟件只是采取了大量措施來減少成功的入侵帶來的危害。
參考文獻
[1]W.Richard Stevens. UNIX 環境高級編程(第2版)[M].北京:人民郵電出版社,2006.5.
[2]Steve Suehring等. Linux防火墻[M].北京:機械工業出版社,2006.6.
[3]謝希仁.計算機網絡(第5版)[M].北京:電子工業出版社,2008.1.
作者簡介:王凱(1980-),女,遼寧建昌人,大連東軟信息學院計算機科學與技術系講師。