ike實(shí)現(xiàn)方案格式feisky_第1頁(yè)
ike實(shí)現(xiàn)方案格式feisky_第2頁(yè)
ike實(shí)現(xiàn)方案格式feisky_第3頁(yè)
ike實(shí)現(xiàn)方案格式feisky_第4頁(yè)
ike實(shí)現(xiàn)方案格式feisky_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、IKE 實(shí)現(xiàn)方案1RFC 文檔對(duì) IKE 實(shí)現(xiàn)的要求2實(shí)現(xiàn)的總體IKE 是作為一個(gè)守護(hù)進(jìn)程運(yùn)行的, 負(fù)責(zé)處理用戶的管理配置命令、同協(xié)商實(shí)體的交互、 IKE 數(shù)據(jù)報(bào)的處理以及同內(nèi)核的 SADB 的交互。整個(gè)系統(tǒng)就按照功能劃分成幾個(gè)模塊:IKE 管理模塊、IKE 驗(yàn)證模塊、消息處理模塊。其中消息處理模塊按照消息的來(lái)源又分為幾個(gè)子模塊:網(wǎng)絡(luò)消息處理模塊、內(nèi)核消息處理模塊、狀態(tài)消息處理模塊和用戶命令處理模塊。為了各個(gè)模塊能對(duì)協(xié)商的數(shù)據(jù)進(jìn)行共享,設(shè)計(jì)了 IKE狀態(tài)庫(kù)模塊,能夠提供的接口實(shí)現(xiàn)查詢,更新、刪除、添加等操作。IKE 作為一個(gè)應(yīng)用層協(xié)議實(shí)現(xiàn)在應(yīng)用層, 但是需要同內(nèi)核 SADB進(jìn)行 SA 消息的傳

2、遞所以要提供了一個(gè)接口。本方案中實(shí)現(xiàn)了 PF_KEY協(xié)議作為內(nèi)核和 IKE 守護(hù)進(jìn)程的接口。左 圖 描 述了本系統(tǒng)的基本框架。其 中 用 戶管理接口是整個(gè) IPSEC 網(wǎng)關(guān)配置的一個(gè)子界面,提供用戶一個(gè)友好管理、配置、監(jiān)視界面。UDP/500 表示 IKE 守護(hù)進(jìn)程是利用 UDP 協(xié)議的 500 端口進(jìn)行網(wǎng)絡(luò)通信。2.1模塊功能簡(jiǎn)要介紹管理模塊負(fù)責(zé)處理用戶令并調(diào)用對(duì)應(yīng)的處理函數(shù),分析運(yùn)行數(shù)據(jù)并返回給用戶管理接口。消息服務(wù)器模塊負(fù)責(zé)幾個(gè)消息隊(duì)列,對(duì)其中的事件調(diào)用的處理函數(shù)。消息隊(duì)列分為管理消息,網(wǎng)絡(luò)消息,內(nèi)核消息以及 SA 狀態(tài)消息。IKE 驗(yàn)證模塊負(fù)責(zé)驗(yàn)證 IKE 協(xié)議的載荷數(shù)據(jù), 并構(gòu)造響應(yīng)

3、或請(qǐng)求數(shù)據(jù)報(bào)文。IKE 狀態(tài)庫(kù)IKE 運(yùn)行期間的需要的協(xié)商信息和當(dāng)前的SA 信息。2.2模塊的交互關(guān)系管理模塊與消息處理模塊管理模塊能夠把管理員的某些命令傳遞給消息處理模塊的管理消息處理子模塊。通信機(jī)制是利用 AF_UNIX socket 協(xié)議簇。系統(tǒng)創(chuàng)建一個(gè)臨時(shí)運(yùn)行文件,然后管理模塊和管理消息子模塊都創(chuàng)建一個(gè) AF_UNIX socketsock = socket(AF_UNIX, SOCK_STREAM, 0)。管理模塊向此 socket 發(fā)送管理消息,管理消息處理子模塊此 socket。消息處理模塊與 IKE 驗(yàn)證模塊網(wǎng)絡(luò)消息處理模塊分析并提取數(shù)據(jù),組織成 msg_digest 數(shù)據(jù)結(jié)構(gòu)

4、,然后把此數(shù)據(jù)作為參數(shù)調(diào)用 IKE 驗(yàn)證模塊進(jìn)行處理。IKE 驗(yàn)證模塊返回后繼處理標(biāo)志,把構(gòu)建的響應(yīng)載荷或失敗代碼添加到 msg_digest 結(jié)構(gòu)中。數(shù)據(jù)結(jié)構(gòu)(概念結(jié)構(gòu))如下:struct msg_digest 原始數(shù)據(jù)包消息到達(dá)的接口發(fā)送者 ip 地址發(fā)送者端IKE 載荷加密標(biāo)志包對(duì)應(yīng)的協(xié)商對(duì)象的狀態(tài)當(dāng)前狀態(tài)對(duì)象響應(yīng)報(bào)文載荷驗(yàn)證失敗原因3各個(gè)模塊的實(shí)現(xiàn)3.1管理模塊的實(shí)現(xiàn)3.1.1 設(shè)計(jì)管理模塊對(duì)上提供系統(tǒng)的運(yùn)行狀態(tài)和狀態(tài)設(shè)置服務(wù),對(duì)下則提供系統(tǒng)需要的各種初始參數(shù),包括自身和安全網(wǎng)關(guān)的、密鑰信息、協(xié)商策略、協(xié)商時(shí)機(jī),也包括了必要的策略設(shè)置信息以增強(qiáng)安全性。模塊設(shè)計(jì)能夠進(jìn)行實(shí)時(shí),實(shí)時(shí)反映系統(tǒng)

5、的運(yùn)行狀態(tài)、及時(shí)響應(yīng)令。配置文件系統(tǒng)的初始運(yùn)行參數(shù),它的是靜態(tài)且一般為固定的信息。日志文件系統(tǒng)運(yùn)行以來(lái)的所有事件,包括策略更改、狀態(tài)的更改、網(wǎng)絡(luò)異常事件。管理模塊對(duì)上層提供了命令接口可以直接地動(dòng)態(tài)裝載和更改協(xié)商信息、啟動(dòng)協(xié)商,刪除 SA。模塊這些命令數(shù)據(jù),再把參數(shù)傳遞給消息處理模塊來(lái)具體執(zhí)行。3.1.2 具體實(shí)現(xiàn)3.1.2.1 功能接口1.載入、重載協(xié)商通道參數(shù),啟動(dòng)、關(guān)閉協(xié)商通道2.sa 的更新、刪除、添加3.靜態(tài)配置文件的修改4.數(shù)據(jù)統(tǒng)計(jì)、狀態(tài)顯示、檢查日志3.1.2.2 安全考慮配置文件中的配置信息和、密鑰信息采用 shadow。3.2消息服務(wù)器模塊3.2.1 設(shè)計(jì)在系統(tǒng)運(yùn)行期間,管理模

6、塊可能要發(fā)送管理消息,內(nèi)核發(fā)出的 SA 請(qǐng)求,更新消息,以及網(wǎng)絡(luò)上傳來(lái)的協(xié)商消息另外系統(tǒng)自身由于網(wǎng)絡(luò)擁塞產(chǎn)生超時(shí)消息或設(shè)置的 SA 生命過(guò)期更新消息。所以本模塊被設(shè)計(jì)成服務(wù)器模式,并對(duì)每種消息類型設(shè)置一條消息隊(duì)列。模塊輪詢這幾條消息隊(duì)列,如果有消息就調(diào)用對(duì)應(yīng)的消息處理函數(shù)來(lái)處理。3.2.2 具體實(shí)現(xiàn)3.2.2.1 管理消息處理模塊Admsg_handle 接收到管理模塊的消息之后, 對(duì)消息進(jìn)行完整性檢 查 , 根 據(jù) 消 息 的 類 型 調(diào) 用 對(duì) 應(yīng) 的 處 理 函 數(shù) 。 例 如 ,terminate_connection 終止協(xié)商、initiate_co nnection 啟動(dòng)協(xié)商等等。

7、3.2.2.2 內(nèi)核消息處理模塊內(nèi)核響應(yīng)消息的處理也分為兩種:同步和異步。同步消息是當(dāng)調(diào)用函數(shù)向內(nèi)核發(fā)送了 pfkey 消息,阻塞該進(jìn)程內(nèi)核的響應(yīng)消息。例如在程序完成階段 2 的 sa 協(xié)商向內(nèi)核發(fā)送一個(gè)安裝 sa 的消息,然后就等待內(nèi)核的響應(yīng)消息。如果此時(shí)該 pfkey socket 接口內(nèi)無(wú)消息可讀就返回,否則一直阻塞該 socket 接口。由于內(nèi)核處理之后的響應(yīng)消息發(fā)送給所有已打開的 pfkey socket 接口,所以接收響應(yīng)消息時(shí)要根據(jù)進(jìn)程號(hào)和 pfkey 消息號(hào)確定是否為自己的消息,如果進(jìn)程號(hào)不是自己的進(jìn)程號(hào)且又不是內(nèi)核進(jìn)程號(hào) 0和消息類型為 SADB_ACQUIRE,那么丟棄此條

8、消息。如果符合以上兩個(gè)條件,檢查 pfkey 消息號(hào),如果是自己的消息號(hào),處理它否則把它排隊(duì)到異步消息隊(duì)列pfkey_iq_head。此時(shí)如果此 pfkey socket 接口一直有消息可讀,就一直阻塞此進(jìn)程直到等到有它的響應(yīng)消息來(lái),當(dāng)然沒有消息就立刻返回。異步消息只有這兩種情況,一是進(jìn)程發(fā)送給內(nèi)核遲遲沒有處理而以致延誤發(fā)送響應(yīng)的,二是內(nèi)核主動(dòng)發(fā)出的消息,例如請(qǐng)求 SA,SA 的過(guò)期。模塊到有消息到達(dá)時(shí),取出消息。根據(jù)消息類型調(diào)用對(duì)應(yīng)的消息分析處理函數(shù),檢查它的完整性和。然后根據(jù) SA 類型調(diào)用響應(yīng)函數(shù)。3.2.2.3 網(wǎng)絡(luò)消息處理模塊網(wǎng)絡(luò)消息處理模塊即充當(dāng)服務(wù)器又充當(dāng)客戶端角色。當(dāng)UDP 5

9、00 端口時(shí),它是服務(wù)器,作為協(xié)商的響應(yīng)者。服務(wù)器生成另一個(gè)socket 用于它們之間的協(xié)商通信。當(dāng)它發(fā)出協(xié)商請(qǐng)求時(shí), 它作為協(xié)商的發(fā)起者充當(dāng)客戶端。模塊的功能是把本地的 IKE 載荷數(shù)據(jù)封裝成 UDP 報(bào),把接收到的UDP/500 數(shù)據(jù)報(bào)剝離出 IKE 載荷。3.2.2.4 超件處理模塊當(dāng)網(wǎng)絡(luò)消息處理模塊向外發(fā)送 UDP 報(bào)時(shí),為了防止報(bào)文丟失就在超件隊(duì)列中此事件。當(dāng)設(shè)置的超時(shí)時(shí)間到達(dá),超件處理模塊就調(diào)用的超時(shí)處理函數(shù),重發(fā)或丟棄。直到它重發(fā)次數(shù)到達(dá)或此事件被清除。當(dāng)需要的報(bào)文到達(dá)時(shí),網(wǎng)絡(luò)消息處理模塊又會(huì)把注冊(cè)的超件從隊(duì)列中清除。生成的 sa 對(duì)象的過(guò)期事件同樣在超時(shí)隊(duì)列中。當(dāng)軟過(guò)期或硬過(guò)期

10、到達(dá), 調(diào)用的處理函數(shù), 重協(xié)商或刪除 sa.3.3IKE 驗(yàn)證模塊3.3.1 設(shè)計(jì)根據(jù) IKE 協(xié)議的 RFC 文檔,每種模式的協(xié)商過(guò)程都有固定的消息條數(shù)且每條消息的內(nèi)容都作明確的規(guī)定。有差別的就是在不同的認(rèn)證方式荷的加密方式有所不同。這樣按照協(xié)商過(guò)程中接收到的消息來(lái)劃分協(xié)商狀態(tài),每種狀態(tài)都有對(duì)應(yīng)的狀態(tài)遷移函數(shù)。當(dāng)協(xié)商過(guò)程中下一條消息到來(lái),就調(diào)用此時(shí)狀態(tài)所對(duì)應(yīng)的遷移函數(shù)進(jìn)行分析處理,驗(yàn)證通過(guò)就躍遷到下一個(gè)狀態(tài)。所有的狀態(tài)遷移函數(shù)都定義好之后,地址放在狀態(tài)遷移函數(shù)表中。當(dāng)啟動(dòng) ike 時(shí),把每個(gè)狀態(tài)的遷移函數(shù)地址寫到一張索引表中。這樣當(dāng)需要對(duì)某條消息進(jìn)行處理時(shí),以此時(shí)協(xié)商的狀態(tài)作索引找到的狀態(tài)

11、函數(shù)的地址,然后根據(jù)認(rèn)證方式找到正確的狀態(tài)遷移函數(shù)進(jìn)行處理。在遷移函數(shù)里按照協(xié)議規(guī)定對(duì)載荷數(shù)據(jù)進(jìn)行驗(yàn)證,驗(yàn)證通過(guò)就要構(gòu)建響應(yīng)載荷。如果認(rèn)證出現(xiàn)錯(cuò)誤,根據(jù)安全性級(jí)別決定是否向 peer 發(fā)送通知載荷,來(lái)構(gòu)建通知載荷。其中在階段 1 時(shí)即 isakmp sa 還沒有建立起來(lái),通知載荷是明文發(fā)送的其沒有 hash 載荷。在階段 2 的狀態(tài)處理函數(shù)中如果 sa 已建立起來(lái),則要通過(guò) pfkey 接口向內(nèi)核安裝該 sa。3.3.2 具體實(shí)現(xiàn)stf_susSe_Transfer_Function(struct msg_digest *md)參數(shù) md 是由網(wǎng)絡(luò)消息處理函數(shù)提取出的 IKE 協(xié)商交換載荷。返

12、回值的類型為 stf_sus 指示網(wǎng)絡(luò)消息處理模塊的后繼處理。STF_IGNORE忽略STF_NO_REPLY/*成功,但沒有響應(yīng)報(bào)文發(fā)送*/STF_UNPEND_QUICK/* 階段 1 協(xié)商成功,沒有響應(yīng)消息;協(xié)商所有的階段 2 協(xié)商 */STF_REPLY/*成功,需要發(fā)送響應(yīng)報(bào)文*/STF_REPLY_UNPEND_QUICK/* 響應(yīng),階段 1 成功;協(xié)商所有的階段 2 協(xié)商*/STF_ERNAL_ERROR /* 拋棄所有與此接收到報(bào)文相關(guān)的,協(xié)商失敗 */STF_FAIL /* 某些地方驗(yàn)證失敗,拋棄所有為此協(xié)商建立的數(shù)據(jù)結(jié)構(gòu);發(fā)送一個(gè)通知載荷。*/3.4IKE 狀態(tài)庫(kù)3.4.1

13、 設(shè)計(jì)IKE 在開始協(xié)商時(shí)需要知道一些必要的協(xié)商策略、密鑰信息、協(xié)商網(wǎng)關(guān)的身份數(shù)據(jù)等必要數(shù)據(jù)。在協(xié)商期間還需要協(xié)商對(duì)象的狀態(tài),協(xié)商對(duì)象要存放要協(xié)商 SA 的所有協(xié)商信息。IKE 自動(dòng)重協(xié)商也要監(jiān)視 SA 的狀態(tài)。這些數(shù)據(jù)組織管理,提供接口便于各模塊共享。3.4.2 具體實(shí)現(xiàn)雖然稱之為庫(kù),但是它不需要復(fù)雜的操作,數(shù)據(jù)結(jié)構(gòu)通過(guò)指針組織成鏈表形式。查找、更新、刪除、添加在對(duì)應(yīng)的鏈表上操作。系統(tǒng)共有兩條全局變量鏈表,分別是 connections 和 ses。Connection :的是一條協(xié)商通道的信息,它的集合可以看作 ike 的策名字:標(biāo)識(shí)一條 connection策略:策略中既包含 isakm

14、p 認(rèn)證策略,又包括 ipsec 驗(yàn)證加密策略以及無(wú) sa 時(shí)的策略,以掩碼位指示。Pluto 使用 16 位的整形數(shù)值來(lái),只定義了它實(shí)現(xiàn)的策略且沒有預(yù)留出別的策略的位置。我考慮把這幾種策略分開,這樣不會(huì)增加太多空間花銷且不用進(jìn)行額外的分類操作,還可以擴(kuò)展。Isakmp 策略:PSK ,DSS_sig,RSA_sig,RSA_encrypt,PRSA_encrypt;IPSEC 策略:Encrypt,Authenticate,compress,tunnel,pfs;其它:PASS ,DROP,ON_HOLD;時(shí)間參數(shù):包括 isakmp SA 存活期,ipsec sa 存活期 ,更新密鑰時(shí)間間

15、隔 rekeymargin,隨機(jī)更新參數(shù) refuzz,更新密鑰重試次數(shù)。當(dāng) sa 的剩余時(shí)間小于 rekeymargin * ( 1- rnd%)時(shí)進(jìn)行更新,其中 rnd 是 0 到 refuzz 內(nèi)的數(shù)。防止協(xié)商雙方同時(shí)進(jìn)行密鑰更新產(chǎn)生冗余的 sa 協(xié)商。協(xié)商兩網(wǎng)關(guān)主機(jī)的信息:包括(IPaddr,F(xiàn)QDN,USERFQDN),主機(jī)地址,下一個(gè)路由地址,子網(wǎng)地址,端等等。接口設(shè)備協(xié)商的 sa 的序列號(hào)連接類型:CK_TEMPLATE,通配的連接即 peer 的地址為 anyaddr。用于移 動(dòng) 用 戶 和 內(nèi) 核 的 協(xié) 商 請(qǐng) 求 ; CK_PERMANENT , 一 般 連 接 ;CK_

16、INSTANCE,CK_TEMPLATE 連接的實(shí)例化。CK_GOING_AWAY,正在被刪除的連接。其它信息(網(wǎng)關(guān)信息包括公鑰,根據(jù) DNSsec)se :協(xié)商的 sa 的狀態(tài),屬性值,它的集合可以看作是 ike 的 SA 庫(kù)序列號(hào):依附的 connection使用的加密驗(yàn)證信息,包括算法類型,加密器驗(yàn)證器,oakley 組,P 信息,包括具體的協(xié)議屬性,spi,密鑰階段 2 用到的完美向前 oakley 組,Situation, 策略,消息序列號(hào),已使用的消息序列號(hào),DH 值,各種密鑰素材值狀態(tài)對(duì)應(yīng)的超件所有的 connection 結(jié)構(gòu)被連接到 connections 鏈上,查找、更新、

17、刪除、添加在此鏈上操作。4面向內(nèi)核接口的實(shí)現(xiàn)4.1設(shè)計(jì)通過(guò)實(shí)現(xiàn) PF_KEY 協(xié)議來(lái)作為內(nèi)核和 IKE 守護(hù)進(jìn)程的接口。PF_KEY 是一個(gè)新的 socket 協(xié)議簇,用于任的密鑰管理程序和操作系統(tǒng)內(nèi)核的密鑰管理進(jìn)行通信。這里的密鑰管理程序就是 IKE 守護(hù)進(jìn)程,而內(nèi)核密鑰管理是SADB。它的概念模型如下:PF_KEY 協(xié)議簇的 socket 的操作同其他類型的 socket 操作無(wú)差別。s = socket(PF_KEY, SOCK_RAW, PF_KEY_V2);IKE 守護(hù)進(jìn)程通過(guò)使用這個(gè) socket 接口來(lái)發(fā)送和接收信息與內(nèi)核通信。對(duì)這個(gè) socket 的操作同其它 socket 一

18、樣, bind(), connect(), socketpair(),accept(), getpeername(), getsockname(), ioctl(), and listen().實(shí)現(xiàn)的主要消息種類:SADB_ADD向內(nèi)核的 SADB 增加一個(gè) SASADB_DELETE從內(nèi)核的 SADB 刪除一個(gè) SASADB_GET從內(nèi)核的 SADB 獲取一個(gè) SASADB_REGISTERIKE 守護(hù)進(jìn)程策自己能提供服務(wù)的協(xié)議類型,AH,ESP 或其它SADB_EXPIRE內(nèi)核發(fā)送給IKE 守護(hù)進(jìn)程某個(gè) SA 過(guò)期,包括軟、硬過(guò)期4.2具體實(shí)現(xiàn)內(nèi)核部分內(nèi)核啟動(dòng)時(shí)調(diào)用 ipsec_init()(/ipsec_init.c),為了使用 pf_key 接口它調(diào)用pfkey_init()(/pfkey_v2.c)。此函數(shù)它要服務(wù)的 SA 類型:AH,ESP,IPI

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論