• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Linux的Netfilter處理數(shù)據(jù)包的過程分析

      2009-10-26 09:35:10高祥斌
      新媒體研究 2009年13期
      關(guān)鍵詞:鉤子鏈表內(nèi)核

      高祥斌

      [摘要]防火墻技術(shù)在保護(hù)網(wǎng)絡(luò)安全方面的作用越來越明顯。相比較window,Linux有更好的網(wǎng)絡(luò)性能,因此基于Linux的Netfilter技術(shù)的使用越來越廣泛。先分析Netfilter技術(shù)的特點(diǎn),然后從兩個(gè)方面對(duì)其進(jìn)行詳細(xì)分析:Netfilter的工作原理和Netfilter對(duì)數(shù)據(jù)包的處理過程,最后簡要分析Netfilter應(yīng)用開發(fā)及其優(yōu)越性。

      [關(guān)鍵詞]Netfilter數(shù)據(jù)包鉤子函數(shù)

      中圖分類號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0710041-01

      網(wǎng)絡(luò)在經(jīng)濟(jì)和生活的各個(gè)領(lǐng)域正在迅速普及,眾多的企業(yè)、組織、政府部門與機(jī)構(gòu)都在組建和發(fā)展自己的網(wǎng)絡(luò),并連接到Internet上。為了保護(hù)組織資源不泄露,不受到病毒侵襲,黑客攻擊,網(wǎng)絡(luò)安全越來越受到人們的重視。Linux良好的網(wǎng)絡(luò)性能和開放源代碼的特點(diǎn),使越來越多的用戶選擇了Linux作為其防火墻的操作平臺(tái),本文正是針對(duì)當(dāng)前流行的Linux中采用的Netfilter技術(shù)進(jìn)行相關(guān)分析。

      一、Netfilter的技術(shù)特點(diǎn)

      Netfilter技術(shù)對(duì)ipchains進(jìn)行了改進(jìn):它摒棄了ipchains不區(qū)分?jǐn)?shù)據(jù)包是單純的進(jìn)入包、外出包或中轉(zhuǎn)包的做法,同時(shí)為每種網(wǎng)絡(luò)協(xié)議(IPv4、IPv6等)定義一套鉤子函數(shù),這些鉤子函數(shù)在數(shù)據(jù)包流過協(xié)議棧的幾個(gè)關(guān)鍵點(diǎn)被調(diào)用;Netfilter內(nèi)核中,任何模塊可以對(duì)每種協(xié)議的一個(gè)或多個(gè)鉤子進(jìn)行注冊(cè),實(shí)現(xiàn)掛載,這樣當(dāng)某個(gè)數(shù)據(jù)包被傳遞給Netfilter框架時(shí),內(nèi)核能檢測(cè)是否有任何模塊對(duì)某種協(xié)議和鉤子函數(shù)進(jìn)行了注冊(cè)[1]。如果是注冊(cè)了,這些模塊就調(diào)用注冊(cè)時(shí)使用的回調(diào)函數(shù)對(duì)數(shù)據(jù)包進(jìn)行檢查或修改,然后決定是丟棄還是接受數(shù)據(jù)包;Netfilter位于Linux的IP層,它的防火墻的代碼與實(shí)現(xiàn)IP層的代碼完全分離,從而構(gòu)成不同的模塊,使網(wǎng)絡(luò)層和防火墻在結(jié)構(gòu)上很清晰,防火墻代碼修改和功能擴(kuò)充更加容易。

      二、Netfilter技術(shù)分析

      Netfilter是Linux內(nèi)核實(shí)現(xiàn)數(shù)據(jù)包過濾、網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)、數(shù)據(jù)包處理等的功能框架。相對(duì)于原來的ipchains防火墻,Netfilter防火墻以更好的結(jié)構(gòu)重新構(gòu)造,并實(shí)現(xiàn)了許多新功能。

      (一)Netfilter的工作原理。Netfilter的設(shè)計(jì)為Linux內(nèi)核中其它模塊動(dòng)態(tài)參與IP層中的數(shù)據(jù)包處理提供了途徑。其實(shí)現(xiàn)方法是:

      1. 在內(nèi)核中建立了一個(gè)函數(shù)指針鏈表,即鉤子函數(shù)鏈表,加入到鏈表中的函數(shù)指針?biāo)傅暮瘮?shù)稱為鉤子函數(shù)(Hook Function)。當(dāng)內(nèi)核模塊需要參與IP層中對(duì)數(shù)據(jù)包的處理時(shí),通過調(diào)用Netfilter中鉤子函數(shù)的注冊(cè)函數(shù),注冊(cè)內(nèi)核模塊的數(shù)據(jù)包處理函數(shù),Netfilter將在鉤子函數(shù)鏈表中記錄下此模塊中的數(shù)據(jù)包處理函數(shù)指針。

      2. IP層在數(shù)據(jù)包處理過程中,會(huì)檢查相應(yīng)的鉤子函數(shù)鏈表中是否有鉤子函數(shù)被注冊(cè):如果存在注冊(cè)的鉤子函數(shù),便會(huì)調(diào)用此函數(shù),并且根據(jù)該函數(shù)的處理結(jié)果,決定是繼續(xù)完成IP層中的后續(xù)處理過程,還是丟棄此數(shù)據(jù)包,中斷數(shù)據(jù)包的傳輸;如果不存在注冊(cè)的鉤子函數(shù),則繼續(xù)完成IP層中的后續(xù)處理。

      3. 當(dāng)內(nèi)核模塊不需要參與IP層的數(shù)據(jù)包處理時(shí),調(diào)用Netfilter鉤

      子注銷函數(shù),Netfilter從鉤子函數(shù)鏈表中去掉此鉤子函數(shù)指針,這樣IP層檢測(cè)不到鉤子函數(shù)的存在,會(huì)繼續(xù)其后續(xù)操作。

      鉤子和掛載函數(shù)是Netfilter架構(gòu)中的核心部分。Linux內(nèi)核的Netfil

      Ter框架為IPv4協(xié)議實(shí)現(xiàn)了五個(gè)鉤子函數(shù)掛載點(diǎn),分別為:NF_IP_PRE_ROUT

      ING,NF_IP_LOCAL_IN,NF_IP_FORWARD,NF_IP_POST_ROUTING,NF_IP_LOC

      AL_OUT。當(dāng)數(shù)據(jù)包流經(jīng)IPv4協(xié)議棧的五個(gè)掛載點(diǎn)時(shí),內(nèi)核就會(huì)調(diào)用在掛載點(diǎn)注冊(cè)的回調(diào)函數(shù)對(duì)數(shù)據(jù)包進(jìn)行處理。Netfilter掛載點(diǎn)回調(diào)函數(shù)的調(diào)用代碼是通過NF_HOOK宏嵌入在網(wǎng)絡(luò)協(xié)議棧的代碼之中的,其定義在include/li

      nux/netfilter.h中。

      (二)Netfilter對(duì)數(shù)據(jù)包的處理過程。基于Linux的Netfilter防火墻設(shè)計(jì)中,其對(duì)數(shù)據(jù)包的處理過程如圖1所示:

      圖1Netfilter中數(shù)據(jù)包的處理過程

      圖1中共有5個(gè)鉤子函數(shù)(即HOOK),數(shù)據(jù)包從左邊進(jìn)入系統(tǒng),進(jìn)行IP校驗(yàn)以后,數(shù)據(jù)包經(jīng)過第一個(gè)鉤子函數(shù)鏈表NF_IP_PRE_ROUTING進(jìn)行處理;然后就進(jìn)入路由代碼,決定該數(shù)據(jù)包是需要轉(zhuǎn)發(fā)還是發(fā)給本機(jī);若該數(shù)據(jù)包是發(fā)給本機(jī)的,則經(jīng)過鉤子函數(shù)鏈表NF_IP_LOCAL_IN處理后傳遞給上層協(xié)議;若該數(shù)據(jù)包應(yīng)該被轉(zhuǎn)發(fā),則它被NF_IP_FORWARD處理;轉(zhuǎn)發(fā)的數(shù)據(jù)包經(jīng)過最后一個(gè)鉤子函數(shù)鏈表NF_IP_POST_ROUTING處理以后,再傳輸?shù)骄W(wǎng)絡(luò)上。本地產(chǎn)生的數(shù)據(jù)包經(jīng)過鉤子函數(shù)鏈表NF_IP_LOCAL_OUT處理后,進(jìn)行路由選擇處理,然后經(jīng)過NF_IP_POST_ROUTING處理并發(fā)送到網(wǎng)絡(luò)上。另外,還可以使用內(nèi)核模塊在Netfilter的五個(gè)鉤子函數(shù)鏈表上掛載一個(gè)或者多個(gè)這樣的鉤子函數(shù)。這樣當(dāng)有數(shù)據(jù)包進(jìn)入鉤子點(diǎn)處理時(shí),將查找被掛載的函數(shù),然后調(diào)用這些函數(shù)對(duì)數(shù)據(jù)包進(jìn)行處理。

      (三)Netfilter應(yīng)用和開發(fā)。一般而言基于Netfilter的應(yīng)用開發(fā)有兩種[2]:從用戶空間的角度進(jìn)行開發(fā),這種開發(fā)主要是如何充分發(fā)揮內(nèi)核所提供的防火墻功能,它不能為防火墻增加基本功能模塊;另外就是從內(nèi)核空間的角度進(jìn)行開發(fā)。這種方法不僅能充分發(fā)揮現(xiàn)有功能,而且還能添加新的功能模塊。

      Netfilter具有良好的框架和拓展性,這使得開發(fā)人員無需過多涉及內(nèi)核協(xié)議棧的改動(dòng)。開發(fā)基于Netfilter框架的內(nèi)核模塊一般有一下幾個(gè)步驟:分析功能需求,確定要在哪幾個(gè)鉤子掛載點(diǎn)處注冊(cè)鉤子函數(shù);按照鉤子函數(shù)的接口規(guī)范編寫鉤子函數(shù);在掛載點(diǎn)處注冊(cè)鉤子函數(shù)。

      參考文獻(xiàn):

      [1]鄒思軼,嵌入式Linux設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2002.

      [2]姚曉宇、趙晨,Linux內(nèi)核防火墻Netfilter實(shí)現(xiàn)與應(yīng)用研究[J].計(jì)算機(jī)工程,2003(5).

      猜你喜歡
      鉤子鏈表內(nèi)核
      萬物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
      群眾路線是百年大黨成功之內(nèi)核性制度因素的外在表達(dá)
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      基于二進(jìn)制鏈表的粗糙集屬性約簡
      跟麥咭學(xué)編程
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      誰和誰好
      快樂語文(2018年15期)2018-11-29 10:23:17
      基于鏈表多分支路徑樹的云存儲(chǔ)數(shù)據(jù)完整性驗(yàn)證機(jī)制
      幸福的一家
      《脈望館鈔校本古今雜劇》穿關(guān)之“鉤子困帶”考
      中華戲曲(2017年2期)2017-02-16 06:53:24
      龙口市| 威宁| 涡阳县| 南开区| 视频| 池州市| 象山县| 封开县| 乌鲁木齐市| 绵竹市| 榕江县| 瑞丽市| 昭苏县| 邮箱| 武川县| 义乌市| 宁津县| 会宁县| 噶尔县| 凤翔县| 盐池县| 拉萨市| 化州市| 舟曲县| 白银市| 龙门县| 思南县| 四会市| 徐水县| 庆阳市| 叶城县| 三穗县| 新化县| 灵川县| 石泉县| 民权县| 延津县| 信丰县| 聂拉木县| 会昌县| 吉木萨尔县|