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