国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于linux包過濾的防火墻的設(shè)計和實(shí)現(xiàn)

2012-04-29 00:44金鑫
電腦知識與技術(shù) 2012年30期
關(guān)鍵詞:防火墻

金鑫

摘要:基于linux過濾包的防火墻是一個簡單的、基于linux下的iptables的簡單的防火墻系統(tǒng),它能簡單的處理基本的網(wǎng)絡(luò)數(shù)據(jù)包的過濾,維護(hù)內(nèi)部網(wǎng)絡(luò)的安全性。本系統(tǒng)是以linux的netfilter框架系統(tǒng)底層,以python中的Flask框架作為系統(tǒng)的上層管理框架。整個系統(tǒng)分為兩個主要模塊。模塊一,WEB層,包過濾規(guī)則的添加、刪除、查看以及更改規(guī)則順序。模塊二,本地應(yīng)用層,與內(nèi)核和WEB層交互。模塊三,linux內(nèi)核層,包過濾的實(shí)現(xiàn)。

關(guān)鍵詞:linux; netfilter;防火墻;包過濾

中圖分類號:TP316文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)30-7192-04

當(dāng)今社會已經(jīng)不如信息時代,無論是個人,還是企業(yè),對互聯(lián)網(wǎng)的依賴越來越大。而伴隨著Internet在全世界范圍的迅速發(fā)展和廣泛應(yīng)用,Internet中出現(xiàn)的各種網(wǎng)絡(luò)安全問題也隨之而來,像信息泄露、數(shù)據(jù)篡改、服務(wù)拒絕等等安全問題屢出不窮。在互聯(lián)網(wǎng)中,內(nèi)部網(wǎng)絡(luò)連接外部網(wǎng)絡(luò)是通過接入Internet的路由器(router)接入的,路由強(qiáng)迫所有從內(nèi)部網(wǎng)絡(luò)流入和流出的通信流量。而防火墻就是應(yīng)用在路由器上,控制流入和流出網(wǎng)絡(luò)的一項網(wǎng)絡(luò)安全技術(shù)。使用防火墻能有效的保護(hù)內(nèi)部網(wǎng)絡(luò)免受外部網(wǎng)絡(luò)的攻擊,維持內(nèi)部網(wǎng)絡(luò)的安全性。

1 Linux 防火墻的設(shè)計

Firewall防火墻是一個簡單的基于linux平臺上的防火墻,它利用Linux內(nèi)核的netfilter模塊,對從本機(jī)進(jìn)出的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾,并可以通過WEB見面進(jìn)行交互操作,并可以對進(jìn)出防火墻的數(shù)據(jù)進(jìn)行記錄。

1.1 功能描述

防火墻的主要功能是對發(fā)送到本地以及從本地發(fā)出的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行攔截,防火墻的攔截功能定義是防火墻對什么網(wǎng)絡(luò)數(shù)據(jù)報進(jìn)行過濾、怎么樣進(jìn)行過濾。該防火墻可以對網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾,過濾規(guī)則如下:

策略:分為接收和丟棄。

地址過濾:根據(jù)源地址和目的地址過濾

端口過濾:根據(jù)源端口和目的端口進(jìn)行過濾

協(xié)議過濾:根據(jù)協(xié)議類型進(jìn)行過濾(TCP、UDP、ICMP)

防火墻能與用戶進(jìn)行交互是防火墻的基本功能,用戶可以使用WEB界面對防火墻的規(guī)則進(jìn)行一些操作。

規(guī)則的設(shè)置:用戶可以增加防火墻的規(guī)則,只要規(guī)則合法,會立即生效。

規(guī)則的顯示:用戶可以列出當(dāng)前防火墻中的所有規(guī)則。

規(guī)則的刪除:用戶可以根據(jù)規(guī)則的序號對防火墻中目前的規(guī)則進(jìn)行刪除操作。

1.2 防火墻過濾的鏈

本系統(tǒng)支持3條鏈的過濾,即只掛載了3個NETFITER鉤子點(diǎn),即INPUT鏈,OUTPUT鏈和FORWARD鏈。

INPUT鏈:防火墻的輸入鏈,即進(jìn)入主機(jī)的網(wǎng)絡(luò)數(shù)據(jù)包都會經(jīng)過該防火墻鏈,所有進(jìn)入的數(shù)據(jù)包都會匹配該鏈上的規(guī)則。

OUTPUT鏈:防火墻的輸出鏈,即從主機(jī)發(fā)出的網(wǎng)絡(luò)鼠標(biāo)都會經(jīng)過該鏈,可以將對從主機(jī)發(fā)出的網(wǎng)絡(luò)數(shù)據(jù)包的過濾規(guī)則放到該鏈,當(dāng)命中的時候,在這個鏈上對網(wǎng)絡(luò)數(shù)據(jù)包按照定義的動作進(jìn)行處理。

FORWARD鏈:防火墻的轉(zhuǎn)發(fā)鏈,即主機(jī)進(jìn)行轉(zhuǎn)發(fā)的網(wǎng)絡(luò)數(shù)據(jù)包都會經(jīng)過該鏈,如果需要對轉(zhuǎn)發(fā)的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾,可以將規(guī)則放到FORWARD鏈上。

1.3 系統(tǒng)采用的技術(shù)方案

在Linux操作系統(tǒng)上,netfilter是一款非常成熟、十分成功的網(wǎng)路數(shù)據(jù)包過濾框架,Linux下著名的防火墻工具iptables就是基于netfilter框架構(gòu)建的。本系統(tǒng)是以netfilter框架為底層框架,以netlink框架作為中間層,以Flask框架作為和用戶交互的web層。

本系統(tǒng)也是采用netfilter的5個鉤子實(shí)現(xiàn)的。FIREWALL防火墻選取了netfilter 5個鉤子中的3個作為實(shí)現(xiàn)防火墻網(wǎng)絡(luò)數(shù)據(jù)包截取的基礎(chǔ),即:NF_INET_LOCAL_IN、NF_INET_LCOAL_OUT和NF_INET_FORWARD,分別對應(yīng)防火墻的INPUT鏈、OUTPUT鏈和FORWARD鏈。

上面的內(nèi)容是防火墻內(nèi)核層面的實(shí)現(xiàn)技術(shù),而防火墻要能與用戶交互,必須有一種合適的用戶空間和內(nèi)核空間交互的方式。在Linux系統(tǒng)中,內(nèi)核空間和用戶空間進(jìn)行交互的方式主要有ioctl()方式、sysctl()方式、網(wǎng)絡(luò)方式、PROC方式、文件讀寫方式等。本系統(tǒng)采用的是netlink()方法。Netlink框架用于實(shí)現(xiàn)數(shù)據(jù)在內(nèi)核空間和用戶空間傳遞的方式。

本系統(tǒng)作為一個模塊載入Linux內(nèi)核空間的。這樣模塊加載后,內(nèi)核不需要重新編譯,而且用戶也可以動態(tài)地加載和寫在模塊,調(diào)試也很方便。本系統(tǒng)采用的是web方式和用戶交互,這樣更易于和用戶交互。該系統(tǒng)采用的是python中流行的web框架Flask。Flask是一款簡潔的、靈活的、強(qiáng)大的python web框架。

2Linux防火墻的實(shí)現(xiàn)

如何實(shí)現(xiàn)一個基于linux 3.2內(nèi)核的包過濾的防火墻模塊。下面將詳細(xì)介紹該模塊的總體架構(gòu)、主要數(shù)據(jù)結(jié)構(gòu)、基本流程和各部分實(shí)現(xiàn)的功能。

2.1系統(tǒng)架構(gòu)

本系統(tǒng)(FIREWALL)的總體架構(gòu)設(shè)計如下圖,主要包括3個層次:內(nèi)核層、應(yīng)用層、WEB層。

本系統(tǒng)中內(nèi)核模塊主要是處理網(wǎng)絡(luò)數(shù)據(jù)包的過濾、防火墻過濾規(guī)則的增加、刪除和列表,防火墻鉤子的掛載,過濾規(guī)則的處理以及防火墻模塊的載入內(nèi)核。

2.2主要的數(shù)據(jù)結(jié)構(gòu)

在本系統(tǒng)中,內(nèi)核中防火墻的規(guī)則是通過數(shù)據(jù)結(jié)構(gòu)struct firewall_rules結(jié)構(gòu)組成的,一個規(guī)則包含鏈的值、源IP地址、目的IP地址、源端口、目的寬口、協(xié)議類型、規(guī)則的動作。在內(nèi)核模塊中用next指針激昂鏈中的規(guī)則連接起來,用戶空間使用該結(jié)構(gòu)主要是獲得規(guī)則列表的時候,對規(guī)則進(jìn)行分析。

其中chain的取值如下表1:

內(nèi)核中共有3條鏈,分別是INPUT、OUTPUT、FORWARD鏈,鏈中的規(guī)則可以使用上述的結(jié)構(gòu)struct firewall_rules來表示。表示鏈的數(shù)據(jù)結(jié)構(gòu)是struct firewall_list,建立3個此類型的變量,分別表示3條鏈,其中rule指向規(guī)則列表的第一個規(guī)則,number是鏈中規(guī)則的個數(shù)。

2.3 模塊功能的實(shí)現(xiàn)

由于該防火墻系統(tǒng)的功能設(shè)計比較簡單,過濾模塊只要符合用戶規(guī)則的數(shù)據(jù)進(jìn)行判定,讓網(wǎng)絡(luò)數(shù)據(jù)包通過或者將數(shù)據(jù)包丟棄即可。所以防火墻的主要工作在于對規(guī)則匹配的判定上。防火墻的過濾模塊使用netfilter框架中的鉤子來實(shí)現(xiàn)的,要能夠使用防火墻的過濾模塊,需要將過濾函數(shù)掛載到鉤子函數(shù)上?;卣{(diào)函數(shù)的原型為:

防火墻啟動后,首先是根據(jù)數(shù)據(jù)流確定是那條鏈,在判斷該數(shù)據(jù)包是否匹配該鏈中的規(guī)則。該防火墻系統(tǒng)中,過濾規(guī)則的操作包括:

規(guī)則的附加:WEB層將用戶輸入的過濾規(guī)則數(shù)據(jù)傳送給應(yīng)用層,應(yīng)用層再通過netlink方式,將該數(shù)據(jù)傳輸給內(nèi)核,內(nèi)核組裝這些信息,并將其插入對應(yīng)鏈的規(guī)則鏈表中。

規(guī)則的插入:WEB層將用戶輸入的過濾規(guī)則數(shù)據(jù)及規(guī)則要插入的位置傳送給應(yīng)用層,應(yīng)用層再通過netlink方式,將該數(shù)據(jù)傳輸給內(nèi)核,內(nèi)核組裝這些信息,超找輸入的位置,并將其插入對應(yīng)鏈的規(guī)則鏈表中的相應(yīng)位置。

規(guī)則的刪除:WEB層獲取用戶需要刪除的規(guī)則ID,并將其傳送給應(yīng)用層,應(yīng)用層再通過netlink方式,將該數(shù)據(jù)傳輸給內(nèi)核,內(nèi)核找出該規(guī)則的位置,并將其刪除。

規(guī)則的列表:內(nèi)核將OUTPUT鏈、INPUT鏈和FORWARD鏈中的所有規(guī)則的詳細(xì)信息,通過netlink發(fā)送給應(yīng)用層,應(yīng)用層再通過shell傳送給web后端,在后端組裝后傳輸?shù)紿TML,展示給用戶。

Netlink框架用于實(shí)現(xiàn)用戶命令的交互,用戶可以將從WEB收到的數(shù)據(jù)通過netlink發(fā)送給內(nèi)核,內(nèi)核也可以將需要發(fā)送給WEB層的數(shù)據(jù),先通過netlink發(fā)送給應(yīng)用層。接收用戶的輸入,并將這些數(shù)據(jù)發(fā)送給應(yīng)用層;接收應(yīng)用層數(shù)據(jù),并將其展示給用戶。

3 編譯、調(diào)試和測試

本章對該防火墻系統(tǒng)的內(nèi)核模塊和應(yīng)用端的程序進(jìn)行編譯,并搭建測試環(huán)境對整個防火墻系統(tǒng)的規(guī)則配置、網(wǎng)絡(luò)數(shù)據(jù)包的攔截情況進(jìn)行測試,通過web端的交互來測試整個系統(tǒng)的狀況。

內(nèi)核程序和用戶程序在firewall文件夾下,內(nèi)核位于module中是以firewall_k*開頭,其中頭文件firewall.h和firewall_para.h是內(nèi)核空間和用戶空間的程序公用的,通過使用宏__KERNEL__進(jìn)行條件包括。

用戶層的代碼僅包含firewall_u.c,其頭文件與內(nèi)核公用,Makefile代碼如下,其中頭文件在內(nèi)核的目錄中,所以使用了“-I ../module/”項。

3.2 編譯及運(yùn)行

對上述的兩個程序進(jìn)行編譯,分別生成了用戶層程序firewall和核心模塊程序firewall_module.ko,加載內(nèi)核模塊firewall_module.ko

Sudo make install

運(yùn)行web程序:

Python application

打開瀏覽器,輸入網(wǎng)址:http://localhost:5000

4 結(jié)束語

本系統(tǒng)只提供了一些基本的功能,還不能提供防火墻需求的完全信息,還需要進(jìn)一步地考查調(diào)研。所有可能實(shí)現(xiàn)的功能都將會在今后的工作中繼續(xù)分析、設(shè)計、逐步實(shí)現(xiàn),力求使本系統(tǒng)更加完善。

參考文獻(xiàn):

[1] Chun W J. PYTHON核心編程[M].宋吉廣,譯.北京:人民郵電出版社,2008.

[2] Robert Love.Linux System Management[M].O'Reilly Media, Inc, 2007.

[3] 豐士昌.Fedora Linux系統(tǒng)與網(wǎng)絡(luò)服務(wù)管理完全學(xué)習(xí)手冊[M].北京:科學(xué)出版社,2010.

[4] Micheal Rash.Linux防火墻[M].陳健,譯.北京:人民郵電出版社,2009.

猜你喜歡
防火墻
全民總動員,筑牢防火墻
海南新農(nóng)合有了“防火墻”
在舌尖上筑牢抵御“僵尸肉”的防火墻
下一代防火墻要做的十件事
新漢 HENGETM工業(yè)防火墻
筑起網(wǎng)吧“防火墻”