




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Good is good, but better carries it.精益求精,善益求善。FreeSWAN+結構框架-1實現總體思想通過改造Linux的IP協議棧源代碼,使得IP實現與IPSec實現完全整合。該實現按功能分,可以分為以下幾個功能模塊模塊:安全策略庫,安全關聯庫,AH協議處理,ESP協議處理,算法(加密卡的實現),日志、統計、配置與審計,面向應用的接口。按處理過程分,還可以分為以下幾個處理模塊:進入IP層預處理、IPSec進入策略處理、路由、本機對IP包處理、IPSec進入處理、轉發(fā)處理、本地IP包處理、IPSec外出處理、發(fā)送處理。Ipsec協議實現與IP實現的整合思想:利用
2、Netfilter的HOOK機制,在接受IP包和發(fā)送IP包的過程中,在適當的處理位置調用相關的ipsec處理模塊。1.1Netfilter的HOOK機制的介紹圖1Netfilter是linux2.4內核實現數據包過濾/數據包處理/NAT等功能的抽象、通用化的框架。Netfilter框架包含以下三部分:1、為每種網絡協議(IPv4、IPv6等)定義一套鉤子函數(IPv4定義了5個鉤子函數),這些鉤子函數在數據報流過協議棧的幾個關鍵點被調用。在這幾個點中,協議棧將把數據報及鉤子函數標號作為參數調用netfilter框架。2、內核的任何模塊可以對每種協議的一個或多個鉤子進行注冊,實現掛接,這樣當某個
3、數據包被傳遞給netfilter框架時,內核能檢測是否有任何模塊對該協議和鉤子函數進行了注冊。若注冊了,則調用該模塊的注冊時使用的回調函數,這樣這些模塊就有機會檢查(可能還會修改)該數據包、丟棄該數據包及指示netfilter將該數據包傳入用戶空間的隊列。3、那些排隊的數據包是被傳遞給用戶空間的異步地進行處理。一個用戶進程能檢查數據包,修改數據包,甚至可以重新將該數據包通過離開內核的同一個鉤子函數中注入到內核中。IP層的五個HOOK點的位置如圖1所示:(ipv4)1.NF_IP_PRE_ROUTING:剛剛進入網絡層的數據包通過此點(剛剛進行完版本號,校驗和等檢測),源地址轉換在此點進行;2.
4、NF_IP_LOCAL_IN:經路由查找后,送往本機的通過此檢查點,INPUT包過濾在此點進行;3.NF_IP_FORWARD:要轉發(fā)的包通過此檢測點,FORWORD包過濾在此點進行;4.NF_IP_POST_ROUTING:所有馬上便要通過網絡設備出去的包通過此檢測點,內置的目的地址轉換功能(包括地址偽裝)在此點進行;5.NF_IP_LOCAL_OUT:本機進程發(fā)出的包通過此檢測點,OUTPUT包過濾在此點進行。1.2處理模塊之間的關系IPSec安全網關對IP報文的接收、轉發(fā)和發(fā)送處理的整個過程如圖2。當安全網關的網卡接收的數據報時,通過中斷觸發(fā)內核的中斷處理程序,將網卡接收的數據報傳送到內
5、核空間,然后再通過IP層預處理程序將數據報轉換為IP包。此時,我們將利用內核的Netfilter機制提供的HOOK點PRE_ROUTING,將IP包傳送到IPSec進入策略處理模塊。該模塊將決定哪些包可以進入安全網關,哪些包需要丟棄。對于允許進入網關的IP包,將送回到路由處理模塊。路由處理根據IP頭決定IP包是發(fā)送到本機還是繼續(xù)轉發(fā)。對于發(fā)送到本機的IP包,首先經過內核對IP包的處理,如:分片重組、選項處理等等。然后利用HOOK點LOCAL_IN,將重組的IP包傳送到IPSec進入處理模塊。IPSec進入處理模塊將對IPSec包和非IPSec包進行區(qū)分,對于發(fā)往本機的非IPSec包將直接傳送到
6、傳輸層處理模塊;對于IPSec包將進行認證或解密等IPSec處理,并剝去IPSec頭。處理完后,將重新組裝成IP包發(fā)回到IP層預處理模塊。這樣該IP包將重新通過路由來決定發(fā)往何處。對于轉發(fā)的IP包,首先進行轉發(fā)處理,如:決定下一跳、減少TTL、對某些特殊情況發(fā)送ICMP包。然后,利用HOOK點IP_FORWARD,將IP包傳送到外出IPSec外出處理模塊。IPSec處理將根據策略區(qū)分IPSec包、非IPSec包以及包發(fā)往何處。對于IPSec包將丟棄。對于發(fā)往內部網的非IPSec包,直接將包傳送給發(fā)送處理模塊,發(fā)往內部網。對于發(fā)往外部網的IP包,將根據策略進行認證或加密等IPSec處理,最后將處
7、理過的IP包傳送到發(fā)送處理模塊。對于從安全網關傳輸層發(fā)送的報文,首先進行本地的IP包處理,構建IP包。然后對IP包進行路由,決定IP包的出口。路由之后將利用HOOK點LOCAL_OUTPUT,將IP包傳送到IPSec外出處理模塊。IPSec外出處理將根據策略決定那些包需要進行IPSec處理。對于不需要處理的IP包,直接傳送到發(fā)送處理模塊。對于需要進行IPSec處理的IP包,將根據策略進行認證或加密等IPSec處理,然后將IPSec包重新發(fā)回到路由處理模塊,決定IPSec包將發(fā)往何處。當再次經過HOOK點時,IPSec外出處理將通過策略將處理過的IP包直接傳送到發(fā)送處理模塊。發(fā)送處理模塊將進行分
8、片等處理,最后將包發(fā)送到網卡。圖21.3功能模塊之間的關系各功能模塊之間的關系如圖3所示。安全策略庫存放了由用戶或系統管理員所制定的策略,策略將決定通訊的雙方是否采用IPSec處理,以及決定采用何種IPSec協議、模式、算法和嵌套需求。安全關聯庫由一系列安全關聯項組成。安全關聯是兩個通訊實體經過協商建立起來的一種協定。它們決定了用來保護數據包安全所需的各種參數:序號計數器;抗重播窗口;AH驗證算法及其密鑰;ESP加密、認證算法、密鑰;安全關聯的生存期;IPsec協議模式。算法庫存放了多種可選的認證和加密算法,在處理時將通過安全關聯中的算法項來指明所需要使用的算法。面向應用的接口提供了管理安全策
9、略庫,以及配置網關,處理日志、統計、審計信息的接口。用戶或系統管理員可通過配置服務器關聯全策略庫,還可以進行手工注入安全關聯或者啟動IKE動態(tài)協商安全關聯,以及對日志、統計、配置、審計信息的提取和處理。圖32各個模塊的實現2.1處理模塊的實現2.1.1Netfilter鉤子函數2.1.1.1實現思想利用Linux提供的Netfilter框架,并在Netfilter框架提供的HOOK點上注冊并實現IPSec相關處理函數,使得IPSec處理能加入到IP包接收或發(fā)送處理過程的適當位置。2.1.1.2實現細節(jié)Linux內核的Netfilter框架在ipv4中提供了5個HOOK點(圖1),在每個HOOK
10、點上都可以通過一個注冊函數nf_register_hook(structnf_hook_ops*reg)將自己實現的處理函數掛接到HOOK點上。這樣在每一次HOOK點被激活時,都將查詢并執(zhí)行該HOOK點所注冊的處理函數。然后在處理結束時返回相關的信息來決定被處理的包是丟棄、拒絕,還是繼續(xù)進行HOOK點后面的處理。因此我們的工作便是生成一個structnf_hook_ops結構的實例(結構如下):structnf_hook_opsstructlist_headlist;nf_hookfn*hook;intpf;inthooknum;intpriority;并將該結構中的一個相關處理函數nf_ho
11、okfn(定義如下)實現為我們所需的相關IPSec處理函數:unsignedintnf_hookfn(unsignedinthooknum,structsk_buff*skb,conststructnet_device*in,conststructnet_device*out,int(*okfn)(structsk_buff*);并用nf_register_hook將該實例注冊到由hooknum所指定的HOOK點上。這樣,當hooknum指定的HOOK點被激活時(如在ip_rcv中的:NF_HOOK(PF_INET,NF_IP_PRE_ROUTING,skb,dev,NULL,ip_rcv_f
12、inish)),將根據priority所指定的優(yōu)先級,依次執(zhí)行在該HOOK點注冊的函數,因此我們所實現的相關IPSec處理函數將得到執(zhí)行。Netfilter還提供了一系列返回信息(如下):NF_ACCEPT繼續(xù)正常傳輸數據報NF_DROP丟棄該數據報,不再傳輸NF_STOLEN模塊接管該數據報,不要繼續(xù)傳輸該數據報NF_QUEUE對該數據報進行排隊(通常用于將數據報給用戶空間的進程進行處理)NF_REPEAT再次調用該鉤子函數在處理結束后將通過返回信息來決定被處理的數據報在HOOK點之后應該怎樣處理。2.1.2初始化IPSec的實現2.1.2.1注冊HOOK點2.1.3進入IP包預處理2.1.
13、3.1實現思想從網卡傳來的數據報在進入IP層處理之前先進行一些檢查,并在此時激活第一個HOOK點:NF_IP_PRE_ROUTING,對進入本機的包進行進入前預處理。我們實現的IPSec進入策略處理模塊也在此時通過HOOK點被調用執(zhí)行。2.1.3.2實現細節(jié)該模塊首先對傳入的IP包進行必要的檢查:1、通過包類型標志pkt_type檢查IP包是否是其他機器(PACKET_OTHERHOST)的,如果是就丟棄。2、檢查IP包的長度是否合法。3、檢查IP版本。4、檢查校樣和。最后激活HOOK點:NF_HOOK(PF_INET,NF_IP_PRE_ROUTING,skb,dev,NULL,ip_rcv
14、_finish)。然后將依次調用在該HOOK點上注冊處理函數,其中包括我們實現的IPSec進入策略處理模塊。2.1.4IPSec進入策略處理2.1.4.1實現思想該模塊將根據IP報文的相關信息構造選擇符。然后通過選擇符查詢進入安全策略庫,找到第一個匹配項(策略)。再根據策略對IP包進行策略檢查和處理:1、對于外部網的進入包drop:(增強型包過濾)不允許某些外部網的包進入;不允許某些外部網的不加密包進入;不允許某些網應該加密卻未加密的包進入;不允許某些外部網的加密包進入。reject:類似于drop,不過要對ICMP包進行特殊處理。accept:對某些外部網的不加密包或加密包允許通過,對已經經
15、過IPSec處理的包(用于IPSec嵌套的情況)允許通過。2、對于內部網的進入包drop:對某些內部網機器的IP包不允許通過accept:允許內部網的IP包通過最后對于通過的包,傳回到ip_rcv_finish繼續(xù)處理2.1.4.2實現細節(jié)1、從IP包中提取源目的IP地址、源目的端口、下一層協議等信息。2、根據這些提取的信息查詢進入安全策略庫,找到匹配的策略項。3、根據策略項所指定的策略進行處理:丟棄:返回NF_DROP,Netfilter機制將丟棄該數據包,不再傳輸。并將該事件記錄到日志中。拒絕:返回NF_STOLEN,Netfilter機制將接管該數據包,不再繼續(xù)傳輸。并將該事件記錄到日志
16、中。接收:返回NF_ACCEPT,Netfilter機制將正常傳輸該數據包:將該包傳送給ip_rcv_finish。其中對于IPSec包需要作上標記(利用標記變量nmask),表明該包需要在以后進行IPSec處理。2.1.5路由2.1.5.1實現思想根據IP包的源地址、目的地址和服務類型(tos)等信息查找路由表,找到該IP包對應的路由項,并記錄該項。在路由項中指出了IP包接下來該如何處理:對于本地IP包,將交給本機的IP處理模塊ip_local_deliver;對于非本機接收包,適合轉發(fā)的將交給轉發(fā)處理模塊ip_forward,其他情況將作特殊處理。2.1.5.2實現細節(jié)1、將從IP包中提取
17、的源地址、目的地址和服務類型值,通過適當的散列算法產生散列值。2、根據散列值在路由緩存散列表中查找散列位置3、進一步根據源地址、目的地址、輸入接口、服務類型在散列鏈中找到正確的路由項。4、根據路由項中指定的輸入處理函數,調用適當的函數:對于本地IP包調用ip_local_deliver;對于其他IP包調用ip_forward。2.1.6本機對IP包處理2.1.6.1實現思想對經過路由傳送來的IP包,首先檢查是否存在分片。如果存在分片,必須緩存IP分片包。等所有的分片到齊時,進行分片重組處理,將分片合成完整的IP報文。然后激活HOOK點:NF_IP_LOCAL_IN,對進入IP包進行相關處理。我
18、們實現的IPSec進入處理模塊也在此時調用。2.1.6.2實現細節(jié)1、檢查IP包的3位標志字段,當IP包片偏量(frag_off)第14位(IP_MF)為1時,表示該IP包有后繼分片。這時將進行分片重組處理ip_defrag。2、分片重組處理:根據分片包的16位標識、源地址、目的地址、協議字段計算分片包的散列值。根據散列值,定位該包在分片鏈中的位置。如果有分片鏈,說明已有其他分片到達。將該分片插入到對應的分片隊列中。檢查該分片是否是最后一個分片,分片是否都到齊了。如果都滿足,則將分片重組為一個完整的IP包。返回新的IP包。3、激活HOOK點:NF_HOOK(PF_INET,NF_IP_LOCA
19、L_IN,skb,skb-dev,NULL,ip_local_deliver_finish)。然后將依次調用在該HOOK點上注冊處理函數,其中包括我們實現的IPSec進入處理模塊。2.1.7IPSec進入處理2.1.7.1實現思想首先檢查nmask標記,判斷該IP包是否是一個IPSec包。如果不是,則將利用返回值NF_ACCEPT,繼續(xù)正常傳輸該數據報到ip_local_deliver_finish。如果是,則將進行IPSec進入處理,并在處理完后調用ip_rcv將IP包傳送回進入IP包預處理模塊,此時應該返回NF_DROP,使該包不在向上傳輸。IPSec進入處理首先將從IP包中提取目的地址、
20、下一協議、安全參數索引(spi)信息,并根據這些信息查找安全關聯庫(SAD),找到對應的唯一的一個SA。然后根據找到的SA進行:SA狀態(tài)處理、SA生存期處理、重播窗口處理、模式處理、相關IPSec協議處理(AH或ESP)。當處理完一個SA后,必須要標記處理過的SA(用于后期的進入策略匹配),并檢查是否存在SA串(即多個SA)。如果有,則循環(huán)處理SA串,直到遇到傳輸層協議頭或者非本機的IP頭(表明SA串上的所有SA都處理完畢)。最后根據處理過的IP包的相關信息查找安全策略庫(SPD),找到該IP包所對應的進入策略(該策略應該與發(fā)送端的外出策略是相同的)。然后檢查該策略所指定的SA串是否與處理過并
21、標記的SA串相同,從而判斷是否進行了所要求的IPSec處理。如果不相同,則丟棄該IP包,并進行日志記錄。2.1.7.2實現細節(jié)1、檢查nmask標記(該標記在進入策略處理時被設置上)。如果不是IPSec包,返回NF_ACCEPT;如果是,繼續(xù)進行IPSec進入處理。2、提取IP頭中的目的地址、下一協議,通過下一協議字段信息,提取IPSec頭中的安全參數索引(spi)信息。3、根據三元組查找安全關聯庫(SAD)。如果沒找到對應的SA(或SA串),則將該IP包丟棄,并記錄日志信息;如果找到了對應的SA(或SA串),則將根據SA(或SA串)對IPSec包進行下面的處理。4、檢查SA的狀態(tài):對于幼稚(
22、SADB_SASTATE_LARVAL)和死亡(SADB_SASTATE_DEAD)狀態(tài)的包將丟棄,并記錄日志信息5、檢查SA的生存期。生存期分為以下幾種:字節(jié)數、包數、使用時間、增加時間,并且對于每一種生存期還有軟硬之分。如果是硬生存期過期了,則將激活IKE模塊動態(tài)協商一個新的SA,將過期的SA(或SA束)刪除,并將IP包丟棄,并記錄日志信息;如果是軟生存期過期了,同樣要激活IKE模塊動態(tài)協商一個新的SA,但此時并不刪除SA(或SA束),而是將SA的狀態(tài)標記為正在死亡(SADB_SASTATE_DYING)。而且不丟棄該數據包,繼續(xù)進行處理。6、檢查重播窗口:檢查時將判斷到達的IPSec包的
23、序列號是否小于該網關所記錄的處理過的最大IPSec包的序列號。如果小,則再檢查序號的差值是否超過了窗口的大小。如果沒有超過,則檢查窗口,判斷該IPSec包是否已經到達過,如果已經到達過,則將該包丟棄;如果沒到達,則接收。如果到達的IPSec包的序列號大于處理過的最大序列號,則接收,并繼續(xù)處理。7、根據SA指定的IPSec協議(AH或ESP)、算法和密鑰進行認證或(和)解密處理。8、更新重播窗口:此時檢查如果被處理的IPSec包的序列號大于網關處理過的最大序列號,并且序號的差值小于窗口大小,則更新窗口,標記該到達并處理過的包。最后將網關處理的最大序列號更新為該被處理IPSec包的序列號。9、更新
24、SA的生存期:字節(jié)數、包數、使用時間。10、記錄下該SA信息,以便與以后進行進入策略檢查。11、提取IPSec頭指出的下一協議:如果還是IPSec協議,說明有多個SA(SA串)對該數據包進行了處理,則需要利用原IP頭和處理過的數據區(qū)組成新的IP包,進行循環(huán)處理;如果是IP協議,說明SA(或SA串)已經處理完畢,則需要根據內部的IP頭信息組建新的IP包,并跳出循環(huán)進入后繼的處理。12、進行進入策略匹配:根據新的IP包信息(源地址目的地址、源端口目的端口、協議)查找安全策略庫(SPD),找到該包所對應的第一個進入處理策略(可能匹配多個)。檢查該策略所指定的SA(或SA串)即其應用的順序是否與10中
25、記錄過的SA(或SA串)以及順序相同。如果相同,則說明滿足進入策略允許該數據報進入安全網關;如果不相同,則將再次查找策略庫(遍歷策略庫),直到匹配成功。如果最后還沒有找到正確的進入策略,則將丟棄該數據報,并記錄日志信息。13、最后調用IP包與處理模塊(ip_rcv),重新對新生成的IP包進行處理。14、返回NF_DROP,說明IP包不從該HOOK點返回。2.1.8轉發(fā)處理2.1.8.1實現思想對于非本地的IP包,需要將它進行轉發(fā)。轉發(fā)處理首先要檢查IP頭的TTL字段不能小于1,否則將向該IP包的發(fā)送者發(fā)送ICMP超時差錯包。減小TTL值。接下來提取該IP包的路由信息(在轉發(fā)前已經記錄),根據路
26、由信息獲得該IP包的外出設備。然后根據外出設備的MTU和IP頭的分片標志,判斷允許分片,如果需要分片且不允許分片(DF位設置為1),則發(fā)送ICMP_DEST_UNREACH目的不可達ICMP報文。最后激活HOOK點:IP_FORWARD,對轉發(fā)IP包進行相關處理。我們實現的IPSec外出處理模塊也在此時調用。2.1.8.2實現細節(jié)1、檢查IP頭的TTL字段:如果小于1,則向該IP包的發(fā)送者發(fā)送ICMP生存期超時差錯包,丟棄該包2、減少該IP包的TTL值。3、提取轉發(fā)前記錄的路由信息,找到外出設備。4、根據外出設備的MTU和IP頭的分片標志,判斷允許分片,如果需要分片且不允許分片(DF位設置為1
27、),則發(fā)送ICMP_DEST_UNREACH目的不可達ICMP報文。5、激活HOOK點:NF_HOOK(PF_INET,NF_IP_FORWARD,skb,skb-dev,dev2,ip_forward_finish);調用我們實現的IPSec外出處理模塊。2.1.9本地IP包處理2.1.9.1實現思想對于本地傳輸層(TCPUDP)產生的包,首先將進行路由,然后組裝成IP包。最后包激活HOOK點5:NF_IP_LOCAL_OUT。在這個HOOK點上將調用我們實現的IPSec外出處理模塊。2.1.9.2實現細節(jié)1.查找路由2.填充IP頭,組裝IP包3.激活HOOK點5:NF_IP_LOCAL_O
28、UT,對于TCP:NF_HOOK(PF_INET,NF_IP_LOCAL_OUT,skb,NULL,rt-u.dst.dev,ip_queue_xmit2)對于UDP:NF_HOOK(PF_INET,NF_IP_LOCAL_OUT,skb,NULL,rt-u.dst.dev,ip_send)2.1.10IPSec外出處理2.1.10.1實現思想IPSec的外出處理函數掛在HOOK點:NF_IP_FORWARD、NF_IP_LOCAL_OUT上。在這里首先將根據IP包的相關信息查找安全策略庫(SPD),找到該IP包對應的外出策略。策略將決定對該IP包的幾種處理:ACCEPT;IPSECSALis
29、t;DROP;TRAP;HOLD。ACCEPT表示對IP包不做任何IPSec處理,允許IP包直接通過。IPSECSAList表示將根據SAList指示的安全關聯串(SA串)對IP包進行IPSec處理。DROP表示將丟棄策略不允許外出的IP包,或者先前試圖等待SA協商,但SA卻不能協商成功的包。TRAP表示要求更新一個安全關聯(SA),此時將設置SA為HOLD,并通過發(fā)送PF_KEY消息來觸發(fā)IKE守護進程進行安全關聯(SA)的協商。HOLD表示SA還未協商成功,要求丟棄IP包。對于可以進行IPSec外出處理的包,根據策略提供的信息,查找安全關聯庫(SAD),找到該IP包應該應用的安全關聯(SA
30、或SA串)。如果沒有找到SA,則將通過發(fā)送PF_KEY消息來觸發(fā)IKE守護進程進行安全關聯(SA或SA串)的協商,此時IP包被暫時保持,直到sa創(chuàng)建或超時。如果找到了SA(或SA串),則檢查SA的狀態(tài)、生存期。然后進行IPSec協議處理,根據SA(或SA串)所指定的協議(AH或ESP),循環(huán)對IP包進行認證、加密等處理。SA串處理完畢后,將重新構建IP包,并對新的IP包重新進行路由。最后返回NF_ACCEPT,表示該IP包將進入激活HOOK點時指定的處理函數:ip_queue_xmit2、ip_send,進入發(fā)送處理模塊。2.1.10.2實現細節(jié)1.查找SPD(外出策略)庫,找到匹配項的所定義
31、的目標動作。1)ACCEPT:返回NF_ACCEPT,即包不用經過任何加工處理,直接通過。2)DROP:返回NF_DROP,丟掉此包不再傳輸3)TRAP:發(fā)送PF_key消息ACCQUIRE給IKE守護進程,在SPD中把它替換成HOLD,返回NF_STOLEN,不繼續(xù)傳輸該數據報。4)HOLD:截取符合此策略的包,更新以前截獲的包,返回NF_STOLEN,不繼續(xù)傳輸該數據報。5)IPSECSalist:進行IPSec處理。以下便是詳細的步驟說明。2.根據策略提供的信息,查找安全關聯庫(SAD),尋找該IP包應該應用的安全關聯(SA或SA串)。如果沒有找到SA,則將通過發(fā)送PF_KEY消息來觸發(fā)
32、IKE守護進程進行安全關聯(SA或SA串)的協商,此時IP包被暫時保持,直到sa創(chuàng)建或超時。3.如果找到了SA(SA串),檢查當前SA的狀態(tài),對于已經過時的SA,要釋放SA和這個SA包。4.設置重播窗口。5.檢查SA的生命期,包括使用時間,已處理的字節(jié)數,處理的IP包數目。對于已經過生命期的SA,要刪除,發(fā)PF_key消息給IKE。(IKE應該自己維護SA,更新刪除應該能自動進行不需內核干涉或提醒,但是要實現對于字節(jié)的限制應該只能由內核告訴IKE進行更新)6.根據SA中的協議設置AH或ESP頭,然后轉到SA鏈的下一個SA,重復從4開始的處理。7.設置新的MTU(如果實現了PMTU機制,要做相應
33、的處理)8.根據SA指定的協議(AH或ESP)設置頭空間和尾空間,并使用SA規(guī)定的協議中應該使用的加密或驗證算法處理IP包數據區(qū)內容。9.處理結束后調整IP頭重新設置校驗和。10.更新SA的生命期11.對于SA串將循環(huán)處理SA串上的每一個SA12.對新的IP包重新進行路由。13.返回NF_ACCEPT,將IP包傳送到進入激活HOOK點時指定的處理函數:ip_queue_xmit2、ip_send。進入發(fā)送處理模塊。2.1.11發(fā)送處理2.1.11.1實現思想首先要判斷是否需要進行分片處理。轉發(fā)的IP包,或者是本地產生的經過IPSec處理過的IP包的長度有可能大于發(fā)送接口的MTU,此時必須進行分
34、片處理。分片結束后將IP包交給鏈路層處理模塊,然后由網卡發(fā)送該數據包。2.1.11.2實現細節(jié)1、判斷是否需要分片,如果需要,則調用分片函數ip_fragment進行分片。2、將IP包交給鏈路層處理模塊:dev_queue_xmit。2.2功能模塊的實現2.2.1策略庫(SPD)的實現:2.2.1.1實現思想:我們將安全策略庫的配置設置在安全網關上,各個安全網關獨立配置策略庫。但要保證策略的一致性。安全策略庫(SPD)說明了對IP數據報提供何種保護,并以何種方式實施保護。SPD中策略項的建立和維護應通過協商;而且對于進入和外出處理都應該有自己的策略庫。對于進入或外出的每一份數據報,都可能有三種
35、處理:丟棄、繞過或應用IPSec。SPD提供了便于用戶或系統管理員進行維護的管理接口。可允許主機中的應用程序選擇IPSec安全處理。SPD中的策略項記錄對SA(SA束)進行了規(guī)定,其字段包含了IPsec協議、模式、算法和嵌套等要求。SPD還控制密鑰管理(如ISAKMP)的數據包,即對ISAKMP數據包的處理明確說明。SPD是利用radix樹型結構來構造。每一個結點就是一個策略項。策略項中包含一個SAID數據結構,它是SPD與SAD之間的接口。可以由它來查找SAD,從而指定相關的SA(或SA串)。這樣使得策略項可以對應相關的一個SA或者多個SA(SA串)。SPD中策略項的查找是通過選擇符來進行的
36、。SA或SA束的粒度決定于選擇符。通過選擇符,可以找到外出或進入IP包應該實行的策略項。兩個策略項的選擇符可以相同。我們選用第一匹配項,并保證SPD始終以同樣的順序進行查找,這樣就保證了第一匹配策略項的一致性選擇。2.2.1.2實現細節(jié)1、策略庫的構建方式:采用radix樹型結構。存放在內核中。2、選擇符的構成。選擇符包含下列參數:目的地IP地址、源IP地址、名字(用戶ID、系統名字)、數據保密等級、源端口和目的端口3、策略項的構成。策略項包含下列參數:radix樹相關數據結構、SAID結構、地址、掩碼。4、為用戶層提供的接口(PF_key),允許用戶程序可通過接口對庫進行操作:添加、刪除、搜
37、索(匹配)。5、對策略庫的操作時機:用戶通過配置界面對策略庫進行相關操作;IKE協商SA完畢后,在更新SAD的同時,也要建立新的SAD與SPD之間的關聯。2.2.1.3基本操作用戶配置程序通過PF_key接口調用內核相關程序程序,實現對安全策略庫的操作。1、添加策略項:ipsec_create_policy根據用戶傳入的信息構造策略項結構,然后將該結構加入到radix樹中。2、刪除策略項:ipsec_delete_policy根據用戶傳入信息,在radix樹中找到該策略項,然后刪除該節(jié)點。3、查找策略項:ipsec_find_policy根據用戶傳入信息,在radix樹中查找到該策略項。2.2
38、.2安全關聯庫(SAD)的實現2.2.2.1實現思想安全關聯(SA)是構成IPSec的基礎。SA是兩個通信實體經過協商建立起來的一種協定。他們決定了用來保護數據保安全的IPSec協議、模式、算法及密鑰、生存期、抗重播窗口、計數器等等。SA是單向的,因此外出和進入處理需要不同的SA。SA還與協議相關,每一種協議都有一個SA。安全關聯庫(SAD)維護了IPSec協議用來保障數據保安全的SA記錄。每個SA都在SAD中有一條記錄相對應。對于外出處理,應SPD中查找指向SAD中SA的指針,如SA未建立,則應激活IKE建立SA,并同SPD和SAD的記錄關聯起來。對于進入處理,SAD的記錄用目的IP地址、I
39、PSec協議類型和SPI標識。SAD是利用HASH表來構造的。SAD的查找是通過一個三元組(SAID):協議、目的地址、SPI來進行的,三元組標識了唯一的SA。通過對SAID的散列找到SA頭,然后再進行詳細匹配找到相應的SA。SA的管理可以通過手工進行,也可以通過IKE來進行動態(tài)協商。為了進行SA的管理,我們利用PF_key實現了一個用戶應用與內核通訊的接口。2.2.2.2實現細節(jié)1、安全關聯庫(SAD)的構建方式:通過hash表(如圖)2、SAD庫的查找通過一個SAID:3、SA記錄的構成。每一個SA的基本結構包括:序號計數器:32比特。序號計數器溢出標志:標識序號計數器是否溢出。如果溢出,
40、則產生一個審計事件,并禁止用SA繼續(xù)發(fā)送數據包。抗重播窗口:32比特計數器及位圖,用于決定進入的AH或ESP數據包是否為重發(fā)的。AH驗證算法及其密鑰等。ESP加密算法、密鑰、IV模式、IV等。ESP驗證算法、密鑰等。如未選擇驗證服務,該字段為空。安全關聯的生存期:一個時間間隔。IPsec協議模式:隧道、傳輸或通配:主機實施應支持所有模式;網關實施應支持隧道模式PMTU:所考察的路徑的MTU及其壽命變量。4、SAD和SPD之間是通過SAID進行關聯的。通過查看SPD中的SAID值,可對SAD進行查找,找到該策略項所應該實施的SA。5、安全關聯庫與用戶程序(IKE)的接口,通過PF_key來實現。
41、無論是手工創(chuàng)建一個SA,還是通過密鑰管理協議IKE動態(tài)創(chuàng)建SA,都通過該接口對SAD和SPD進行操作。2.2.2.3基本操作1、創(chuàng)建一個SA:ipsec_create_sa根據用戶提供的SA相關參數構建SA結構,然后提取SAID值,并對SAID進行散列。將SA結構放入散列鏈頭。2、刪除一個SA:ipsec_delete_sa根據用戶參數,提取SAID。根據SAID查找SAD,找到后將SA結構從鏈中刪除。3、查找一個SA:ipsec_find_sa根據用戶參數,提取SAID。對SAID散列后,在SAD散列表中中找到SA鏈頭,再進行詳細SAID匹配找到為一的SA。2.2.3AH協議處理模塊實現2.
42、2.3.1AH格式:各字段含義如下:1)下一頭(8比特):標識緊跟驗證頭的下一個頭的類型。2)載荷長度(8比特):以32-位字為單位的驗證頭的長度,再減去2。例如,缺省的驗證數據字段的長度是96比特(3個32-位字),加上3個字長的固定頭,頭部共6個字長,因此該字段的值為4。3)保留(16比特):保留為將來使用。4)安全參數索引(32比特):用于標識一個安全關聯。5)序號(8比特):單增的計數器值。6)驗證數據(可變):該字段的長度可變(但應為32-位字的整數倍),包含的數據有數據包的ICV(完整性校驗值)或MAC。2.2.3.2實現功能:AH用于為IP提供數據完整性、數據原始身份驗證和一些可
43、選的、有限的抗重播服務。2.2.3.3實現模式:在安全網關上只實現隧道模式:AH:外部IP頭下一個頭載荷長度保留安全參數索引(SPI)序列號驗證數據內部IP頭TCP頭數據2.2.4ESP協議處理模塊實現2.2.4.1ESP格式各字段含義如下:1)安全參數索引(32比特):標識一個安全關聯。2)序號(32比特):單增的計數器值。3)載荷數據(可變):傳輸層數據段(傳輸模式)或IP包(隧道模式),通過加密得到保護。4)填充(0-255字節(jié)):額外的字節(jié)。有的加密算法要求明文長度是8位組的某個整倍數。5)填充長度(8比特):表示填充的字節(jié)數。6)下一頭(8比特):通過標識載荷中的第一個頭(如IPv6
44、中的擴展頭,或諸如TCP之類的上層協議頭),確定載荷數據字段中數據的類型。驗證數據(可變):長度可變的字段(應為32-位字的整數倍),用于填入ICV。ICV的計算范圍為ESP包中除去驗證數據字段的部分。2.2.4.2實現功能:ESP用于為IP提供機密性、數據源驗證、抗重播以及數據完整性等安全服務。2.2.4.3實現模式在安全網關上只實現隧道模式:ESP:IP頭安全參數索引(SPI)序列號內部IP頭TCP頭數據填充項填充項長度下一個頭驗證數據2.2.5算法實現2.2.5.1實現思想支持多種認證算法和加密算法,并且可以動態(tài)添加。其中現有認證算法支持:hmac-md5-96和hmac-sha1-96;加密算法支持:3des-md5-96和3des-sha1-96。密鑰生成分為兩種:一種是預共享密鑰PSK,一種是公私鑰RSA。如果利用PSK生成密鑰,則通訊雙方的PSK密鑰必須相同。2.2.5.2實現細節(jié)2.2.6日志、統計、配置與審計實現2.2.6.1日志與審計VPN網關將記錄對網關進行的各種操作,包括錯誤信息、安全規(guī)則文件的修改等等。并按照安全等級、事件名稱
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海市澄衷高級中學2025年高三4月調研測試(二模)物理試題含解析
- 四川省攀枝花市西區(qū)2025屆三年級數學第二學期期末調研模擬試題含解析
- 遼寧省沈陽市第一三四中學2025年初三最后一模(5月月考)生物試題含解析
- 委托合同協議書范本十
- 四川省瀘州市瀘縣一中2025屆招生全國統一考試(模擬)化學試題含解析
- 設備買賣合作合同
- 產品陳列合同
- 餐廳主管勞動合同
- 統編版二年級語文下冊期中測試卷(B)(含答案)
- 江西省贛州市龍南市2024-2025學年七年級下學期期中地理試題(含答案)
- 北師大版二年級下冊數學計算題300道及答案
- 投標項目分析報告案例模板
- 大樹移植方案可行性論證
- 固體物理課件完全版
- 人民衛(wèi)生出版社選題表
- 《大學生安全教育》教案-第十一課 預防激情犯罪
- Higg?FEM?平臺操作介紹
- 重慶外國語學校2024屆化學高二第一學期期中綜合測試模擬試題含解析
- 圖形與坐標復習(評學科帶頭人)
- 九年級上冊歷史知識點復習課件(部編版)
- 脫碳塔CO2脫氣塔設計計算
評論
0/150
提交評論