專利名稱:使用會(huì)話追蹤的動(dòng)態(tài)分組過濾器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及數(shù)據(jù)通信系統(tǒng),尤其涉及一種使用會(huì)話追蹤來判定是否允許或拒絕一個(gè)分組的動(dòng)態(tài)分組過濾器。
背景技術(shù):
近年來,全世界都見證了因特網(wǎng)的爆炸性增長。在用戶數(shù)似乎正在無止境增長的同時(shí),每年都會(huì)有更多的主機(jī)加入。因特網(wǎng)能夠使用不同的技術(shù)來進(jìn)行通信,其中包括遠(yuǎn)程計(jì)算機(jī)登錄、文件傳輸、萬維網(wǎng)(WWW)瀏覽、電子郵件等等。此外還設(shè)計(jì)了不同的協(xié)議并把這些協(xié)議用于因特網(wǎng),以便處理不同類型的通信,例如,用于文件傳送的文件傳送協(xié)議(FTP),用于萬維網(wǎng)業(yè)務(wù)的超文本標(biāo)記語言(HTML)等等。通常,涉及因特網(wǎng)通信的協(xié)議是在傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)這個(gè)協(xié)議集的保護(hù)下進(jìn)行劃分的,所述協(xié)議集包含了處于OSI通信棧的不同層的協(xié)議。
因特網(wǎng)的一個(gè)關(guān)鍵特征在于它是一個(gè)幾乎任何配備了計(jì)算機(jī)、電話線和因特網(wǎng)服務(wù)提供商(ISP)帳號(hào)的個(gè)人都可以訪問的公共網(wǎng)絡(luò)。對(duì)這種大規(guī)模的公眾可訪問性而言,其不利之處在于它使得黑客及有意對(duì)因特網(wǎng)上一臺(tái)或多臺(tái)主機(jī)進(jìn)行惡意活動(dòng)的其他人能夠很容易地進(jìn)行訪問。黑客可以設(shè)法侵占遠(yuǎn)程網(wǎng)絡(luò)的計(jì)算機(jī)并且繼續(xù)監(jiān)聽(tap)通信數(shù)據(jù),由此諸如惡意用戶竊取秘密信息或者刪除重要文件這類非法行為都是有可能發(fā)生的。而因特網(wǎng)架構(gòu)委員會(huì)(IAB)則是通過在允許經(jīng)由因特網(wǎng)進(jìn)行安全事務(wù)的IPv6中包含諸如加密和驗(yàn)證等安全特性來解決安全方面的需要的。
為了對(duì)抗黑客的威脅并且確保專用通信網(wǎng)的安全,現(xiàn)今,較為普遍的做法是在公司或單位的專用通信網(wǎng)入口安裝一個(gè)防火墻。防火墻使用了某種形式的分組過濾器,其功能是執(zhí)行用戶定義的安全策略。防火墻則是一個(gè)位于單位的本地網(wǎng)絡(luò)與全球因特網(wǎng)之間邊界上的系統(tǒng)。它對(duì)所有數(shù)據(jù)通信進(jìn)行過濾,以免將信息泄漏到外部網(wǎng)絡(luò),并且防止外界對(duì)內(nèi)部網(wǎng)絡(luò)進(jìn)行非授權(quán)訪問。而拒絕/允許決定則是為防火墻接收的各個(gè)分組做出的。
同時(shí),整個(gè)世界都在目睹著無線服務(wù)(即蜂窩電話、雙向?qū)ず魴C(jī)、無繩設(shè)備等等)與膝上計(jì)算機(jī)、PDA等個(gè)人計(jì)算設(shè)備方面的日益增長的需求。許多個(gè)人計(jì)算設(shè)備都結(jié)合了無線通信電路,由此能夠經(jīng)由無線網(wǎng)絡(luò)(例如蜂窩或其他寬帶方案)而與因特網(wǎng)這類WAN網(wǎng)絡(luò)進(jìn)行通信。因此,越來越多的PDA和蜂窩電話正在連接到因特網(wǎng)上,由此將這些設(shè)備暴露給了危險(xiǎn)分子。優(yōu)選地,這些設(shè)備使用某種防火墻來防止對(duì)其進(jìn)行的非授權(quán)訪問。然而,現(xiàn)今大多數(shù)防火墻都是以軟件方式實(shí)施的,它們需要一臺(tái)完整的臺(tái)式計(jì)算機(jī)的計(jì)算資源,而這使得它們?cè)诜涓C電話或PDA這類便攜計(jì)算設(shè)備中的應(yīng)用變得不切實(shí)際。
因此,需要一種易于在小型設(shè)備中實(shí)現(xiàn)的防火墻或分組過濾器,所述防火墻或分組過濾器適于引入小型便攜計(jì)算設(shè)備之中,例如蜂窩電話和無線連接的PDA。
發(fā)明內(nèi)容
本發(fā)明提供了一種新穎和有益的動(dòng)態(tài)分組過濾器,它可以在硬件、軟件或者硬件與軟件的組合中實(shí)現(xiàn)。本發(fā)明可以引入一個(gè)基于硬件并且適合在便攜計(jì)算設(shè)備中使用的防火墻之中,所述便攜計(jì)算設(shè)備是諸如蜂窩電話和無線連接的PDA這類適于連接到因特網(wǎng)的設(shè)備。
本發(fā)明對(duì)經(jīng)由輸入分組流接收的分組執(zhí)行動(dòng)態(tài)分組過濾。優(yōu)選地,本發(fā)明位于WAN(即因特網(wǎng))與本地LAN之間。在這種情況下,動(dòng)態(tài)分組過濾器可以進(jìn)行操作,以便過濾從WAN到LAN的入站分組以及從LAN到WAN的出站分組。需要注意的是,動(dòng)態(tài)過濾對(duì)檢查動(dòng)態(tài)協(xié)議行為有效,而不是協(xié)議的靜態(tài)規(guī)則。本發(fā)明通過創(chuàng)建會(huì)話來追蹤源與目的地之間的通信狀態(tài),由此實(shí)現(xiàn)了這個(gè)目的。
新的會(huì)話將被檢測、創(chuàng)建,與之相關(guān)的數(shù)據(jù)則保存在一個(gè)會(huì)話數(shù)據(jù)庫中。此外還嘗試識(shí)別各個(gè)接收分組并將這些接收分組與先前打開的會(huì)話相關(guān)聯(lián)。會(huì)話識(shí)別則是通過使用散列表來快速確定會(huì)話數(shù)據(jù)庫中的相應(yīng)會(huì)話記錄才得以加快的。并且可以使用完整或部分套接字信息來計(jì)算所述散列。完整套接字信息包括104個(gè)比特的源和目的地IP地址、源和目的地端口號(hào)以及協(xié)議。名為漏洞(hole)的部分套接字信息則遺漏了一個(gè)或多個(gè)信息項(xiàng)。漏洞數(shù)據(jù)庫被用于保存當(dāng)前開啟的漏洞。一旦識(shí)別出漏洞會(huì)話(hole session),則使用缺少的參數(shù)來填充所述漏洞。
如果沒有發(fā)現(xiàn)漏洞,則創(chuàng)建一個(gè)新的會(huì)話。如果發(fā)現(xiàn)一個(gè)現(xiàn)有漏洞,則從會(huì)話數(shù)據(jù)庫中讀取會(huì)話相關(guān)數(shù)據(jù)并且根據(jù)一組規(guī)則來檢查接收分組。所述規(guī)則描述為狀態(tài)轉(zhuǎn)移圖,它指定了由特定協(xié)議所允許的狀態(tài)和轉(zhuǎn)移。
如果一個(gè)分組符合所述協(xié)議的合法性為,則允許所述分組,否則將會(huì)拒絕這個(gè)分組。然后,使用新的狀態(tài)信息和相關(guān)參數(shù)來更新會(huì)話數(shù)據(jù),并且把會(huì)話數(shù)據(jù)回寫到會(huì)話數(shù)據(jù)庫中。
盡管本發(fā)明意圖是以硬件方式實(shí)現(xiàn),但是也可以通過軟件方式來實(shí)施本發(fā)明。在一個(gè)實(shí)施例中,包含處理器、存儲(chǔ)器等設(shè)備的計(jì)算機(jī)進(jìn)行操作,以便執(zhí)行一個(gè)適于執(zhí)行本發(fā)明的動(dòng)態(tài)分組過濾方法的軟件。
因此,根據(jù)本發(fā)明,提供了一種過濾一個(gè)輸入分組流的方法,所述方法包括以下步驟建立一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,其中每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng),一旦接收到一個(gè)先前并未保存在會(huì)話數(shù)據(jù)庫中的套接字,則打開一個(gè)新的會(huì)話,根據(jù)接收分組的相關(guān)套接字來識(shí)別一個(gè)與之相關(guān)的會(huì)話,根據(jù)多個(gè)預(yù)定規(guī)則來處理對(duì)應(yīng)于接收分組的會(huì)話數(shù)據(jù),以便產(chǎn)生處理結(jié)果,并且根據(jù)處理結(jié)果來判定是否允許或拒絕所述接收分組。
根據(jù)本發(fā)明,還提供了一種監(jiān)視通信會(huì)話狀態(tài)的方法,所述方法包括以下步驟建立一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,其中每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng),根據(jù)對(duì)關(guān)聯(lián)于接收分組的套接字所進(jìn)行的第一散列計(jì)算來識(shí)別一個(gè)會(huì)話,根據(jù)對(duì)關(guān)聯(lián)于接收分組的部分套接字所進(jìn)行的第二散列計(jì)算來識(shí)別一個(gè)漏洞會(huì)話,從會(huì)話數(shù)據(jù)庫中讀取會(huì)話數(shù)據(jù),其中會(huì)話數(shù)據(jù)與所識(shí)別的會(huì)話或所識(shí)別的漏洞會(huì)話中的一個(gè)相關(guān)聯(lián),追蹤會(huì)話的連接狀態(tài)并且依照多個(gè)規(guī)則來檢查所述狀態(tài),由此確定是否允許或拒絕所述接收分組,并且把經(jīng)過更新的會(huì)話數(shù)據(jù)回寫到會(huì)話數(shù)據(jù)庫中。
根據(jù)本發(fā)明,還提供了一種用于過濾輸入分組流的動(dòng)態(tài)過濾器,其中包括一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,其中每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng),一個(gè)會(huì)話識(shí)別模塊,它適于在會(huì)話數(shù)據(jù)庫中搜索一個(gè)相關(guān)套接字與接收分組套接字相匹配的會(huì)話,一個(gè)適于維護(hù)會(huì)話數(shù)據(jù)庫的會(huì)話管理模塊,所述維護(hù)包括了添加、刪除和修改會(huì)話數(shù)據(jù)庫中的會(huì)話,以及一個(gè)主過濾模塊,所述模塊可以進(jìn)行操作,以便追蹤一個(gè)對(duì)應(yīng)于接收分組的會(huì)話連接狀態(tài),并且依照多個(gè)規(guī)則來檢查連接狀態(tài),由此確定是否允許或拒絕所述接收分組。
根據(jù)本發(fā)明,還提供了一種數(shù)字計(jì)算設(shè)備,其中包括適于將設(shè)備連接到廣域網(wǎng)(WAN)的通信裝置,由易失和非易失存儲(chǔ)器組成的存儲(chǔ)裝置,其中非易失存儲(chǔ)器適于保存一個(gè)或多個(gè)應(yīng)用程序,一個(gè)耦合到存儲(chǔ)裝置和通信裝置以便執(zhí)行一個(gè)或多個(gè)應(yīng)用程序的處理器,以及一個(gè)對(duì)輸入分組流進(jìn)行過濾的動(dòng)態(tài)過濾器,其中包括一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng),一個(gè)會(huì)話識(shí)別模塊,它適于在會(huì)話數(shù)據(jù)庫中搜索相關(guān)套接字與接收分組套接字相匹配的會(huì)話,一個(gè)適于維護(hù)會(huì)話數(shù)據(jù)庫的會(huì)話管理模塊,所述維護(hù)包括了添加、刪除和修改會(huì)話數(shù)據(jù)庫中的會(huì)話,以及一個(gè)主過濾模塊,所述模塊進(jìn)行操作以便追蹤一個(gè)與接收分組相對(duì)應(yīng)的會(huì)話的連接狀態(tài),并且依照多個(gè)規(guī)則來檢查連接狀態(tài),由此確定是否允許或拒絕所述接收分組。
根據(jù)本發(fā)明,進(jìn)一步提供了一種在其上嵌入了包含計(jì)算機(jī)程序的計(jì)算機(jī)可讀介質(zhì),當(dāng)在恰當(dāng)編程的系統(tǒng)上執(zhí)行這個(gè)程序的時(shí)候,所述程序通過執(zhí)行以下操作而使該系統(tǒng)搜索多個(gè)字符串建立一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,其中每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng),一旦接收到一個(gè)先前并未保存在會(huì)話數(shù)據(jù)庫中的套接字,則打開一個(gè)新的會(huì)話,根據(jù)接收分組的相關(guān)套接字來識(shí)別一個(gè)與之相關(guān)聯(lián)的會(huì)話,根據(jù)多個(gè)預(yù)定規(guī)則來處理對(duì)應(yīng)于接收分組的會(huì)話數(shù)據(jù),由此產(chǎn)生處理結(jié)果,并且根據(jù)處理結(jié)果來判定是否允許或拒絕所述接收分組。
在這里參考附圖來對(duì)僅僅作為實(shí)例的本發(fā)明進(jìn)行描述,其中圖1是對(duì)WAN或因特網(wǎng)環(huán)境中的本發(fā)明的動(dòng)態(tài)分組過濾器的若干實(shí)例應(yīng)用進(jìn)行描述的框圖;圖2是更為詳細(xì)描述本發(fā)明的動(dòng)態(tài)分組過濾器的框圖;圖3是描述本發(fā)明的主過濾器處理器方法的流程圖;圖4是對(duì)發(fā)現(xiàn)匹配時(shí)的本發(fā)明的主過濾器處理器方法進(jìn)行描述的狀態(tài)轉(zhuǎn)移圖;圖5是對(duì)沒有發(fā)現(xiàn)匹配時(shí)的本發(fā)明的主過濾器處理器方法進(jìn)行描述的狀態(tài)轉(zhuǎn)移圖;圖6是一個(gè)描述了對(duì)關(guān)聯(lián)于輸入分組的會(huì)話進(jìn)行判定的散列技術(shù)的圖示;圖7是對(duì)本發(fā)明的會(huì)話識(shí)別處理的散列方法進(jìn)行描述的流程圖;圖8是對(duì)本發(fā)明的會(huì)話識(shí)別處理的漏洞搜索(hole search)方法進(jìn)行描述的流程圖;圖9是對(duì)TCP會(huì)話的分組流進(jìn)行描述的圖示。
圖10是對(duì)開啟TCP會(huì)話時(shí)的三次握手進(jìn)行描述的狀態(tài)轉(zhuǎn)移圖;
圖11A和11B是對(duì)關(guān)閉TCP會(huì)話時(shí)的四次握手進(jìn)行描述的狀態(tài)轉(zhuǎn)移圖;圖12是一個(gè)描述ARP會(huì)話分組流的圖示;圖13是一個(gè)描述ICMP回聲會(huì)話分組流的圖示;圖14是一個(gè)描述ICMP消息/差錯(cuò)會(huì)話分組流的圖示;圖15是對(duì)主過濾處理器在規(guī)則檢查中執(zhí)行的序列號(hào)窗口追蹤進(jìn)行描述的圖示;圖16是對(duì)主過濾處理器在規(guī)則檢查中執(zhí)行的應(yīng)答序列號(hào)窗口追蹤進(jìn)行描述的圖示;圖17是對(duì)用于追蹤會(huì)話陳舊的最近最少使用鏈表結(jié)構(gòu)進(jìn)行描述的圖示;圖18是一個(gè)對(duì)在識(shí)別到與輸入分組相關(guān)聯(lián)的會(huì)話時(shí)的更新LRU鏈表的方法進(jìn)行描述的流程圖;圖19是描述本發(fā)明的會(huì)話管理模塊處理的流程圖;圖20是描述本發(fā)明的會(huì)話管理模塊所執(zhí)行的打開會(huì)話處理的流程圖;圖21是描述本發(fā)明的會(huì)話管理模塊所執(zhí)行的關(guān)閉會(huì)話處理的流程圖;圖22是對(duì)用于會(huì)話的族指針(family pointer)進(jìn)行描述的圖示;圖23是對(duì)多個(gè)會(huì)話之間的實(shí)例性族關(guān)系進(jìn)行描述的圖示;以及圖24是對(duì)一個(gè)實(shí)例性計(jì)算機(jī)處理系統(tǒng)進(jìn)行描述的框圖,所述系統(tǒng)充當(dāng)一個(gè)適于執(zhí)行結(jié)合了本發(fā)明的會(huì)話追蹤方法的動(dòng)態(tài)分組過濾的平臺(tái)。
具體實(shí)施例方式
自始至終使用的符號(hào)以下符號(hào)在整個(gè)文檔中被使用。
術(shù)語 定義ADSL非對(duì)稱數(shù)字用戶線ARP 地址解析協(xié)議ASIC專用集成電路CPU 中央處理器DAT 數(shù)字音頻磁帶DSL 數(shù)字用戶線DSP 數(shù)字信號(hào)處理器DVD 數(shù)字多用盤EEPROM 電可擦可編程只讀存儲(chǔ)器EEROM 電可擦只讀存儲(chǔ)器EPROM 可擦可編程只讀存儲(chǔ)器FPGA現(xiàn)場可編程門陣列FTP 文件傳輸協(xié)議HDSL高比特率數(shù)字用戶線HTML超文本標(biāo)記語言IAB 因特網(wǎng)架構(gòu)委員會(huì)ICMP網(wǎng)際控制報(bào)文協(xié)議IP 網(wǎng)際協(xié)議ISP 因特網(wǎng)服務(wù)提供商LAN 局域網(wǎng)LRU 最近最少使用NIC 網(wǎng)絡(luò)接口卡OSI 開放式系統(tǒng)互連PC 個(gè)人計(jì)算機(jī)PDA 個(gè)人數(shù)字助理PDU 協(xié)議數(shù)據(jù)單元RAM 隨機(jī)存取存儲(chǔ)器ROM 只讀存儲(chǔ)器TCP 傳輸控制協(xié)議UDP 用戶數(shù)據(jù)報(bào)協(xié)議VDSL甚高比特率數(shù)字用戶線WAN 廣域網(wǎng)WWW 萬維網(wǎng)本發(fā)明提供了一種新穎和有益的動(dòng)態(tài)分組過濾器,它可以在硬件、軟件或者硬件與軟件的組合中實(shí)現(xiàn)。本發(fā)明可以引入到一個(gè)基于硬件并且適于在便攜計(jì)算設(shè)備中使用的防火墻之中,所述便攜計(jì)算設(shè)備是諸如蜂窩電話和無線連接的PDA這類適于連接到因特網(wǎng)的設(shè)備。
本發(fā)明對(duì)經(jīng)由輸入分組流接收的分組執(zhí)行動(dòng)態(tài)分組過濾。優(yōu)選地,本發(fā)明位于WAN(即因特網(wǎng))與本地LAN之間。在這種情況下,動(dòng)態(tài)分組過濾器可以進(jìn)行操作,以便過濾從WAN到LAN的入站分組以及從LAN到WAN的出站分組。需要注意的是,動(dòng)態(tài)過濾對(duì)檢查動(dòng)態(tài)協(xié)議行為有效,而不是協(xié)議的靜態(tài)規(guī)則。本發(fā)明通過創(chuàng)建會(huì)話來追蹤源與目的地之間的通信狀態(tài),由此實(shí)現(xiàn)了這個(gè)目的。
需要注意的是,輸入流可以根據(jù)特定應(yīng)用而包含任何類型的輸入數(shù)據(jù),例如幀、分組、字節(jié)、PDU等等。在這里僅僅是出于說明目的而把輸入數(shù)據(jù)流當(dāng)作是分組序列。
應(yīng)該指出的是,所描述的動(dòng)態(tài)分組過濾器僅僅是作為實(shí)例給出的,它并不意欲對(duì)本發(fā)明的范圍加以限制。電子領(lǐng)域的技術(shù)人員可以通過硬件、軟件或者兩者結(jié)合的方式來構(gòu)造其他的動(dòng)態(tài)分組過濾器,由此在不脫離本發(fā)明范圍的情況下,使用這里描述的發(fā)明原理來執(zhí)行動(dòng)態(tài)分組過濾。
本發(fā)明的動(dòng)態(tài)過濾器可以進(jìn)行操作來維護(hù)一個(gè)名為會(huì)話數(shù)據(jù)庫的鏈表,以便監(jiān)視通信會(huì)話的狀態(tài)。如果新會(huì)話通過了一個(gè)靜態(tài)安全策略規(guī)則,那么這個(gè)新會(huì)話將會(huì)添加到會(huì)話數(shù)據(jù)庫中。一旦創(chuàng)建了會(huì)話,則根據(jù)關(guān)聯(lián)于分組的特定協(xié)議的會(huì)話狀態(tài)來檢查對(duì)應(yīng)于這個(gè)會(huì)話的后續(xù)分組。只有在分組符合特定協(xié)議規(guī)范的情況下,所述分組才是允許的。
本發(fā)明的動(dòng)態(tài)過濾器在許多不同類型的系統(tǒng)都具有廣泛的應(yīng)用。圖1顯示的是對(duì)本發(fā)明的動(dòng)態(tài)分組過濾器在WAN或因特網(wǎng)環(huán)境中的若干實(shí)例應(yīng)用進(jìn)行描述的框圖。如這里顯示的三個(gè)實(shí)例中的每一個(gè)實(shí)例所示,動(dòng)態(tài)過濾器通常是作為防火墻的一部分來構(gòu)造的,所述防火墻則用于防止對(duì)受到保護(hù)的網(wǎng)絡(luò)進(jìn)行非授權(quán)訪問。
在第一實(shí)例中,動(dòng)態(tài)過濾器16是防火墻14中的一個(gè)組件,所述防火墻是以某種個(gè)人計(jì)算設(shè)備12的形式來實(shí)施的,該設(shè)備與WAN或因特網(wǎng)這類網(wǎng)絡(luò)10進(jìn)行有線或無線通信。個(gè)人計(jì)算設(shè)備可以包括任何設(shè)備,例如手持Palm這類個(gè)人數(shù)字助理(PDA)、蜂窩電話、無線手機(jī)等等。在這個(gè)實(shí)例中,動(dòng)態(tài)過濾器/防火墻的功能是對(duì)因特網(wǎng)與設(shè)備之間的分組進(jìn)行雙向過濾。
在第二個(gè)實(shí)例中,動(dòng)態(tài)過濾器22是防火墻20的一個(gè)組件,所述防火墻是在一個(gè)與WAN或因特網(wǎng)10進(jìn)行有線或無線通信的電纜插頭適配器18中實(shí)現(xiàn)的。設(shè)備18位于因特網(wǎng)與寬帶調(diào)制解調(diào)器24之間,其功能是將LAN 26連接到因特網(wǎng)。電纜插頭轉(zhuǎn)接器中的動(dòng)態(tài)過濾器的功能是過濾那些從因特網(wǎng)發(fā)送到LAN的分組,反之亦然。寬帶調(diào)制解調(diào)器適于對(duì)寬帶信號(hào)進(jìn)行調(diào)制和解調(diào),所述寬帶信號(hào)可以是諸如ADSL、HDSL、VDSL等等的xDSL,衛(wèi)星,陸基RF、微波等等。
在第三實(shí)例中,動(dòng)態(tài)過濾器30是防火墻28的一個(gè)組件,所述防火墻是在個(gè)人計(jì)算機(jī)(PC)這種與WAN或因特網(wǎng)進(jìn)行有線或無線通信的獨(dú)立計(jì)算機(jī)31上實(shí)現(xiàn)的。包含防火墻的計(jì)算機(jī)位于因特網(wǎng)與所保護(hù)的LAN 32之間。防火墻中的動(dòng)態(tài)過濾器的功能是過濾那些從因特網(wǎng)發(fā)送到LAN的分組,反之亦然。
現(xiàn)在將對(duì)動(dòng)態(tài)過濾器進(jìn)行更為詳細(xì)的描述。圖2顯示的是一個(gè)對(duì)本發(fā)明的動(dòng)態(tài)分組過濾器進(jìn)行更詳細(xì)描述的框圖。通常標(biāo)注為40的動(dòng)態(tài)過濾器包括總線接48、緩存器/寄存器50、會(huì)話識(shí)別模塊52、主過濾處理模塊54、會(huì)話管理模塊56、散列表60、漏洞表62以及會(huì)話數(shù)據(jù)庫64。動(dòng)態(tài)過濾器經(jīng)由總線接口并且通過總線47而與主機(jī)設(shè)備/CPU 42、報(bào)頭解碼器46、靜態(tài)過濾51以及內(nèi)容搜索單元53進(jìn)行通信。
需要指出的是,在整篇文檔中假設(shè)動(dòng)態(tài)過濾器位于WAN與LAN之間并且所述動(dòng)態(tài)過濾器進(jìn)行操作來過濾兩個(gè)方向上的分組。入站分組涉及那些來源于WAN朝向LAN的分組,而出站分組則涉及那些來源于從LAN朝向WAN的分組。因此,輸入分組流可以包括入站分組和出站分組。
輸入分組流44來源于CPU,其內(nèi)容轉(zhuǎn)發(fā)到報(bào)頭解碼器,所述解碼器的功能是對(duì)分組報(bào)頭部分進(jìn)行解碼(或解析)。報(bào)頭解碼器執(zhí)行操作來提取那些由動(dòng)態(tài)過濾器使用的受關(guān)注字段。報(bào)頭解碼器提取的數(shù)據(jù)經(jīng)由總線轉(zhuǎn)發(fā)到動(dòng)態(tài)過濾器。所述數(shù)據(jù)包括一個(gè)散列值(如果由CPU計(jì)算),104個(gè)比特套接字?jǐn)?shù)據(jù),其中包括32比特的源和目的地IP地址、16比特的源和目的地端口以及8比特的協(xié)議,指示第4層分組類型的動(dòng)態(tài)功能值,對(duì)于TCP協(xié)議而言,其中包括了例如ICMP、ARP、TCP、UDP等等,此外,該數(shù)據(jù)還包括32比特的序列號(hào),32比特的應(yīng)答,11比特的有效負(fù)載長度以及16比特的窗口長度。應(yīng)該指出的是,根據(jù)執(zhí)行過程,報(bào)頭解碼器既可作為外部模件構(gòu)造,也可以與動(dòng)態(tài)過濾器相整合。
第四層分組的各種類型是由不同的動(dòng)態(tài)功能值來表示的。這個(gè)值由動(dòng)態(tài)過濾器使用,以便在處理接收分組的時(shí)候選用恰當(dāng)?shù)挠布O(shè)備來追蹤會(huì)話狀態(tài)并驗(yàn)證其合法性。報(bào)頭解碼器對(duì)有效負(fù)載長度進(jìn)行計(jì)算并將其轉(zhuǎn)發(fā)到動(dòng)態(tài)過濾器。所述長度是通過從IP分組的總長度字段中減去IP報(bào)頭與TCP報(bào)頭長度之和來計(jì)算的。
主過濾器處理器包括CPU接口58并且充當(dāng)動(dòng)態(tài)過濾器的主要處理部件。它打開新的會(huì)話,處理現(xiàn)有會(huì)話并且追蹤會(huì)話狀態(tài),同時(shí)根據(jù)特定協(xié)議來驗(yàn)證合法的狀態(tài)改變,也就是允許的狀態(tài)改變。會(huì)話識(shí)別模塊的功能是接收套接字并且在會(huì)話數(shù)據(jù)庫中搜索匹配于所述套接字的開啟會(huì)話。會(huì)話管理模塊的功能是維護(hù)一個(gè)散列鏈表和一個(gè)最近最少使用(LRU)鏈表,由此向列表中添加會(huì)話或是從中刪除會(huì)話。會(huì)話數(shù)據(jù)庫的功能是保存套接字以及包括會(huì)話狀態(tài)和當(dāng)前狀態(tài)在內(nèi)的其他會(huì)話相關(guān)數(shù)據(jù),以供動(dòng)態(tài)過濾器的不同處理模塊使用。散列和漏洞表則用于加速會(huì)話識(shí)別。下文將會(huì)更為詳細(xì)地描述這些組件。
主過濾器處理現(xiàn)在將對(duì)主過濾器處理進(jìn)行更詳細(xì)的描述。圖3顯示的是對(duì)本發(fā)明的主過濾器處理器方法進(jìn)行描述的流程圖。在這里將動(dòng)態(tài)過濾器構(gòu)造成了采用三個(gè)階段的方式來處理分組數(shù)據(jù),其中,與分組相關(guān)聯(lián)的會(huì)話數(shù)據(jù)是在一個(gè)階段中從會(huì)話數(shù)據(jù)庫中讀取的,然后在第二階段對(duì)數(shù)據(jù)進(jìn)行處理,并且在第三階段將處理結(jié)果回寫到會(huì)話數(shù)據(jù)庫中。在處理階段中,會(huì)話狀態(tài)是按照預(yù)定規(guī)則來追蹤的,并且對(duì)于是否允許或拒絕分組做出了判定。
首先執(zhí)行的是會(huì)話識(shí)別(步驟70),由此對(duì)會(huì)話數(shù)據(jù)庫進(jìn)行搜索,以便尋找一個(gè)與接收分組套接字相匹配的套接字。識(shí)別結(jié)果則返回給主過濾器處理器(步驟72)。如果并未發(fā)現(xiàn)匹配(步驟74),則使用一個(gè)靜態(tài)過濾器來執(zhí)行靜態(tài)規(guī)則檢查(步驟76)。靜態(tài)過濾器既可以是動(dòng)態(tài)過濾器的一部分,也可以不是動(dòng)態(tài)過濾器的一部分,其功能是根據(jù)與不同協(xié)議相對(duì)應(yīng)的一組靜態(tài)規(guī)則來對(duì)接收分組進(jìn)行靜態(tài)檢查。在通信領(lǐng)域中,分組靜態(tài)規(guī)則檢查是眾所周知的,因此在這里不再進(jìn)行詳細(xì)說明。
如果靜態(tài)規(guī)則檢查的結(jié)果是拒絕分組,也就是說,分組違反了一條或多條協(xié)議規(guī)則(步驟78),則濾除所述分組(步驟96)。如果靜態(tài)規(guī)則檢查的結(jié)果是允許分組,則檢查所述分組是否是一個(gè)會(huì)話開啟者(步驟80)。如果它是一個(gè)可以在邏輯上打開會(huì)話的分組,那么該分組即為會(huì)話開啟者。舉例來說,應(yīng)答分組無法打開會(huì)話,而TCP分組則必須是SYN分組才能打開會(huì)話等等。如果分組不是會(huì)話開啟者,則濾除所述分組(步驟96)。
如果分組是一個(gè)有效的會(huì)話開啟者,則創(chuàng)建一個(gè)新會(huì)話(步驟82)。將會(huì)話相關(guān)數(shù)據(jù)和參數(shù)保存在會(huì)話數(shù)據(jù)庫中(步驟84)。然后,對(duì)指向新會(huì)話的散列指針進(jìn)行計(jì)算,并將其保存在散列表中(步驟86)。在識(shí)別階段,所述散列指針被用于快速尋找所述會(huì)話。
如果發(fā)現(xiàn)了一個(gè)套接字匹配于接收分組套接字的會(huì)話(步驟74),則從會(huì)話數(shù)據(jù)庫中讀取會(huì)話數(shù)據(jù)(步驟88),然后對(duì)會(huì)話數(shù)據(jù)進(jìn)行處理(步驟90)。此外還檢查與特定分組協(xié)議相關(guān)聯(lián)的動(dòng)態(tài)規(guī)則并且判定是否允許或拒絕所述分組。對(duì)會(huì)話狀態(tài)進(jìn)行追蹤并且依照關(guān)于特定協(xié)議的允許行為來對(duì)其進(jìn)行檢查。根據(jù)本發(fā)明,動(dòng)態(tài)規(guī)則檢查是在硬件而不是軟件中執(zhí)行的。作為選擇,也可以借助軟件裝置來檢查動(dòng)態(tài)規(guī)則。
如果拒絕分組(步驟92),則分組將被濾除(步驟96)。如果允許分組,則會(huì)把具有更新會(huì)話追蹤狀態(tài)的更新會(huì)話數(shù)據(jù)回寫到會(huì)話數(shù)據(jù)庫中(步驟94)。
在會(huì)話開啟者、濾除分組或允許分組中的任何一個(gè)之后,一個(gè)或多個(gè)狀態(tài)寄存器將被寫入,并且將會(huì)產(chǎn)生一個(gè)中斷,以便使用信號(hào)來向CPU或其它主機(jī)設(shè)備告知主過濾器處理結(jié)束(步驟98)。
圖4顯示的是對(duì)發(fā)現(xiàn)匹配時(shí)的本發(fā)明的主過濾器處理器方法進(jìn)行描述的狀態(tài)轉(zhuǎn)移圖。通常標(biāo)注為290的狀態(tài)轉(zhuǎn)移圖包括多個(gè)轉(zhuǎn)移和狀態(tài),在發(fā)現(xiàn)匹配時(shí),這些轉(zhuǎn)移和狀態(tài)執(zhí)行主過濾處理邏輯。所述處理始于匹配狀態(tài)292并且移至取指針和狀態(tài)這個(gè)狀態(tài)294。在這種狀態(tài)中將會(huì)取得與會(huì)話相關(guān)聯(lián)的指針和狀態(tài)數(shù)據(jù)。
如果會(huì)話是一個(gè)TCP會(huì)話,則從會(huì)話數(shù)據(jù)庫中獲取TCP相關(guān)數(shù)據(jù)(狀態(tài)297)。然后,所述處理移至TCP處理狀態(tài)298。所執(zhí)行的處理包括追蹤TCP會(huì)話狀態(tài)和檢查會(huì)話行為是否合法,下文將會(huì)對(duì)此進(jìn)行更為詳細(xì)的描述。分組可以被濾除(狀態(tài)302)也可以得到允許,其中所述處理將會(huì)繼續(xù)等待靜態(tài)過濾檢查的結(jié)束(狀態(tài)304)。靜態(tài)過濾是使用任何公知的靜態(tài)過濾技術(shù)而在動(dòng)態(tài)過濾器外部執(zhí)行的。靜態(tài)過濾器檢查可以濾除分組(狀態(tài)302),也可以允許分組,由此所述處理將會(huì)等待內(nèi)容設(shè)備結(jié)束在有效負(fù)載中搜索有效字符串并且等待校驗(yàn)和驗(yàn)證的結(jié)束(狀態(tài)306)。如果通過了校驗(yàn)和驗(yàn)證并且發(fā)現(xiàn)一個(gè)有效字符串,則更新TCP參數(shù)并將其保存在會(huì)話數(shù)據(jù)庫中(狀態(tài)310)。然后將會(huì)更新會(huì)話指針(狀態(tài)312)并且允許所述分組(狀態(tài)314)。如果校驗(yàn)和的驗(yàn)證返回一個(gè)校驗(yàn)和錯(cuò)誤,或者內(nèi)容設(shè)備發(fā)現(xiàn)了一個(gè)無效字符串,則濾除所述分組(狀態(tài)302)。無效字符串包括那些由內(nèi)容設(shè)備發(fā)現(xiàn)的字符串,這些字符串因?yàn)橐粋€(gè)或多個(gè)原因而沒有得到允許,例如它們指示存在一種病毒以及FTPDELETE命令這種沒有得到許可的命令等等。有效字符串包括允許的字符串或是不匹配的字符串。在2001年2月21日提交、序列號(hào)為X并且名為“Apparatus for and Method of Multiple Parallel StringSearching”的美國申請(qǐng)中更詳細(xì)地描述了一種適于結(jié)合本發(fā)明使用的內(nèi)容設(shè)備,該申請(qǐng)?jiān)诖艘胱鳛閰⒖肌?br>
相似的處理是為不同于TCP的協(xié)議執(zhí)行的。如果所述協(xié)議是一個(gè)非TCP會(huì)話(例如UDP、ARP、ICMP等等)那么將會(huì)進(jìn)入其他協(xié)議處理狀態(tài)296。然后,如下文中更為詳細(xì)描述的那樣,所執(zhí)行的處理包括追蹤連接狀態(tài)以及檢查關(guān)于特定協(xié)議的會(huì)話行為是否合法。所述分組可以濾除(狀態(tài)302),也可以得到許可,其中所述處理將會(huì)繼續(xù)等待靜態(tài)過濾檢查結(jié)束(狀態(tài)300)。靜態(tài)過濾器檢查可以濾除分組(狀態(tài)302),也可以允許分組,由此所述處理將會(huì)等待內(nèi)容設(shè)備結(jié)束有效負(fù)載的搜索,并且等待校驗(yàn)和驗(yàn)證的結(jié)束(狀態(tài)306)。如果通過了校驗(yàn)和驗(yàn)證并且發(fā)現(xiàn)了一個(gè)有效字符串,則更新特定協(xié)議參數(shù)并將其保存在會(huì)話數(shù)據(jù)庫中(狀態(tài)308)。然后更新會(huì)話指針(狀態(tài)312)并且允許分組(狀態(tài)314)。如果校驗(yàn)和驗(yàn)證返回一個(gè)校驗(yàn)和錯(cuò)誤或者內(nèi)容設(shè)備發(fā)現(xiàn)了一個(gè)無效字符串,則濾除所述分組(狀態(tài)302)。
圖5顯示的是對(duì)沒有發(fā)現(xiàn)匹配時(shí)的本發(fā)明主過濾器處理器方法進(jìn)行描述的狀態(tài)轉(zhuǎn)移圖。通常標(biāo)注為320的狀態(tài)轉(zhuǎn)移圖包括多個(gè)轉(zhuǎn)移和狀態(tài),在并未發(fā)現(xiàn)匹配的時(shí)候,這些轉(zhuǎn)移和狀態(tài)執(zhí)行主過濾處理邏輯。所述處理在并未發(fā)現(xiàn)匹配的狀態(tài)322中開始,如果所述會(huì)話是一個(gè)會(huì)話開啟者,則所述處理移至等待靜態(tài)過濾器判定的狀態(tài)326。如果所述會(huì)話不是一個(gè)會(huì)話開啟者,則濾除所述分組(狀態(tài)324)。
如果靜態(tài)過濾器允許分組,那么所述處理將會(huì)等待內(nèi)容設(shè)備并且等待校驗(yàn)和驗(yàn)證器結(jié)束檢查(狀態(tài)328),否則將會(huì)濾除所述分組(狀態(tài)324)。如果內(nèi)容設(shè)備檢查發(fā)現(xiàn)了一個(gè)無效字符串或者校驗(yàn)和驗(yàn)證顯示出一個(gè)校驗(yàn)和錯(cuò)誤,則濾除所述分組(狀態(tài)324)。如果在沒有出現(xiàn)錯(cuò)誤的情況下完成了校驗(yàn)和驗(yàn)證以及內(nèi)容設(shè)備搜索,則打開一個(gè)會(huì)話并將套接字?jǐn)?shù)據(jù)保存在會(huì)話數(shù)據(jù)庫中(狀態(tài)330)。此外,狀態(tài)、時(shí)戳以及連接狀態(tài)也保存在會(huì)話數(shù)據(jù)庫中(狀態(tài)332)。如果會(huì)話是一個(gè)非TCP會(huì)話,則允許所述分組(狀態(tài)336)。在TCP會(huì)話的情況下,TCP會(huì)話將被打開(狀態(tài)334),然后則允許所述分組(狀態(tài)336)。
根據(jù)本發(fā)明,動(dòng)態(tài)過濾器適于在那些適合為所支持的所有協(xié)議并行執(zhí)行會(huì)話追蹤處理的硬件中實(shí)施。如果套接字匹配,那么,在取得會(huì)話數(shù)據(jù)的過程中,預(yù)先得到的數(shù)據(jù)是并行處理的。一旦取得數(shù)據(jù),則不同協(xié)議的所有會(huì)話檢查都是在單個(gè)時(shí)鐘周期執(zhí)行的。因此,本發(fā)明的硬件執(zhí)行過程極大加快了分組過濾處理。
會(huì)話識(shí)別現(xiàn)在對(duì)會(huì)話識(shí)別處理進(jìn)行更為詳細(xì)的描述。圖6顯示的是一個(gè)描述了對(duì)關(guān)聯(lián)于輸入分組的會(huì)話進(jìn)行判定的散列技術(shù)的圖示。每個(gè)會(huì)話都對(duì)應(yīng)于一個(gè)唯一的套接字。會(huì)話是通過對(duì)接收分組套接字以及會(huì)話數(shù)據(jù)庫中保存的關(guān)聯(lián)于先前打開會(huì)話的套接字進(jìn)行比較來識(shí)別的。為了加速會(huì)話識(shí)別,在這里使用了一個(gè)散列表,其中保存了指向會(huì)話數(shù)據(jù)庫中會(huì)話記錄的散列指針,并且散列表允許快速查找對(duì)應(yīng)于接收套接字的會(huì)話。
新的會(huì)話保存在會(huì)話數(shù)據(jù)庫中,并且由動(dòng)態(tài)過濾器或CPU來計(jì)算套接字上的一個(gè)散列。散列指針則保存在散列表60(圖2)中由散列結(jié)果指示的一個(gè)位置。如果將一個(gè)以上的會(huì)話保存在這個(gè)位置,則將所述會(huì)話添加到一個(gè)鏈表之中。應(yīng)該指出的是,散列表中的每個(gè)條目最初都會(huì)初始化為NULL。
一旦接收到分組,則將套接字100輸入散列計(jì)算器102,該計(jì)算器的功能是產(chǎn)生和輸出一個(gè)散列結(jié)果104。散列結(jié)果被用作散列表106的索引,其中散列表106包含多個(gè)條目108,每個(gè)條目都包含一個(gè)散列指針。散列指針指向會(huì)話數(shù)據(jù)庫中會(huì)話110的一個(gè)鏈表。會(huì)話數(shù)據(jù)庫中的每個(gè)會(huì)話都包含了先前指針114以及下一個(gè)指針112,由此實(shí)現(xiàn)了一個(gè)雙向鏈表。如果偶然發(fā)現(xiàn)出現(xiàn)了套接字,那么必須檢查鏈表中的各個(gè)會(huì)話是否匹配于接收分組的套接字。
優(yōu)選地,散列函數(shù)將被選擇,以便產(chǎn)生一個(gè)盡可能橫跨散列表的散列結(jié)果。散列函數(shù)可以是任何適當(dāng)?shù)暮瘮?shù),例如XOR函數(shù)或CRC。在一個(gè)實(shí)施例中,根據(jù)以下等式而在計(jì)算散列結(jié)果的過程中使用了一個(gè)隨機(jī)矢量,由此可以借助一個(gè)簡單的XOR散列函數(shù)來改善性能。
SOCK1SOCK2SOCK3···SOCKN1×N⊗RV1RV2RV3···RVNRV2RV3RV4···RVN-1RV3RV4RV5···RVN-2···············RVRRVR+1RVR+2···RVR+N-1N×ROUT1OUT2OUT3···OUTR1×R----(1)]]>其中操作符是如下定義的OUTi=(RVi1AND SOCK1)(RVi2AND SOCK2)…(RViNAND SOCKN)(2)并且OUTi表示輸出矩陣的第i個(gè)字節(jié);SOCKk表示輸入矩陣的第k個(gè)字節(jié);RVik表示隨機(jī)矢量矩陣的第i,k字節(jié);表示XOR函數(shù);由此通過使用隨機(jī)矢量以及輸入套接字?jǐn)?shù)據(jù)來產(chǎn)生輸入套接字?jǐn)?shù)據(jù)。
圖7顯示的是對(duì)本發(fā)明的會(huì)話識(shí)別處理的散列方法進(jìn)行描述的流程圖。第一個(gè)步驟是使用上述方式來從接收分組的套接字中計(jì)算一個(gè)散列值(步驟120)。R字節(jié)的散列結(jié)果用作進(jìn)入散列表的索引,以便檢索對(duì)應(yīng)于所述套接字的散列指針(步驟122)。如果散列指針指向NULL(步驟124),則不存在會(huì)話,并且將會(huì)把“未發(fā)現(xiàn)會(huì)話”返回給主過濾器處理(步驟126)。
如果散列指針不是NULL,則從會(huì)話數(shù)據(jù)庫中讀取會(huì)話套接字(步驟128),并且將其與接收分組中的套接字進(jìn)行比較(步驟130)。如果套接字匹配(步驟132),則發(fā)現(xiàn)一個(gè)會(huì)話匹配(步驟134)并將其報(bào)告給主過濾器處理。如果套接字不匹配(步驟132),則從鏈表中讀取下一個(gè)散列指針(步驟136),并且本方法將會(huì)從步驟124開始重復(fù)進(jìn)行,直到最后一個(gè)散列指針指向NULL或是發(fā)現(xiàn)一個(gè)匹配。
應(yīng)該注意的是,即使鏈表中只保存了一個(gè)會(huì)話,也總是對(duì)套接字執(zhí)行完整比較。并且還應(yīng)該注意的是,本發(fā)明的范圍并不局限于由動(dòng)態(tài)過濾器或CPU中的哪一個(gè)實(shí)體來更新和維護(hù)鏈接表。散列表的深度可以是任何理想值。然而,所述深度通常是根據(jù)同時(shí)追蹤的會(huì)話數(shù)目來設(shè)定的。優(yōu)選地,散列條目的數(shù)目是會(huì)話數(shù)目的二或四倍,這是因?yàn)?,由于進(jìn)行完整套接字比較的費(fèi)時(shí)特性,因此,具有很多副本將會(huì)變得不甚理想。
根據(jù)本發(fā)明,會(huì)話識(shí)別模塊包含了使用部分套接字?jǐn)?shù)據(jù)來搜索會(huì)話的能力。名為“漏洞”的部分套接字?jǐn)?shù)據(jù)包含了缺少一個(gè)或多個(gè)信息項(xiàng)的任何套接字,也就是構(gòu)成一個(gè)套接字的五個(gè)成分(源和目的地IP地址、源和目的地端口以及協(xié)議)中的一個(gè)或多個(gè)成分的任何組合。漏洞則是指在防火墻/動(dòng)態(tài)過濾器中產(chǎn)生而允許后續(xù)分組穿過的一個(gè)開口,即使那些后續(xù)分組并未通過靜態(tài)過濾器規(guī)則庫。與一個(gè)漏洞相關(guān)聯(lián)的分組可以具有其關(guān)聯(lián)套接字中遺漏的零個(gè)或更多參數(shù)。具有一個(gè)或多個(gè)遺漏參數(shù)的套接字放置在一個(gè)漏洞表中,并且將會(huì)執(zhí)行一個(gè)漏洞搜索。
漏洞搜索方法是一種輔助搜索方法,所述方法是在響應(yīng)于使用結(jié)合圖7所述的完整套接字匹配方法并未發(fā)現(xiàn)會(huì)話匹配的情況下,由會(huì)話識(shí)別模塊來執(zhí)行的。這些漏洞并不合乎需要,一旦建立了漏洞,那么,在接收到一個(gè)產(chǎn)生部分套接字匹配的第一分組時(shí),CPU和動(dòng)態(tài)過濾器將會(huì)嘗試對(duì)其進(jìn)行“填充”。
漏洞表62(圖2)用于保存那些通常由處理層5和更高層軟件提供的漏洞信息。在套接字包含5個(gè)數(shù)據(jù)項(xiàng)的情況下,漏洞表包含32個(gè)記錄(0到31)。舉例來說,在處理FTP分組、IP電話相關(guān)分組及其他分組的過程中,一開始,來自套接字的一個(gè)或多個(gè)參數(shù)并不是已知的。在這些情況下,CPU將會(huì)打開一個(gè)漏洞,在漏洞表中,所述漏洞處于一個(gè)與遺漏參數(shù)相對(duì)應(yīng)的位置。
應(yīng)該注意的是,由于漏洞表中的條目31(也就是全1)并未描述遺漏參數(shù),因此未曾使用這個(gè)條目。漏洞表中的各個(gè)條目都具有表1列舉的下列字段。
表1漏洞表的字段字段描述LAN 預(yù)期從LAN側(cè)關(guān)閉的漏洞,也就是說,假設(shè)一個(gè)來自LAN的分組與這個(gè)漏洞類型相匹配。
WAN 預(yù)期從WAN側(cè)關(guān)閉的漏洞,也就是說,假設(shè)一個(gè)來自WAN的分組與這個(gè)漏洞類型相匹配。
EH現(xiàn)有漏洞。這個(gè)字段中的數(shù)目表示當(dāng)前打開并具有這種類型的現(xiàn)有漏洞數(shù)目。
PEHT 先前存在的漏洞類型。指向現(xiàn)有漏洞雙向鏈表中的先前漏洞類型的指針。
NEHT 其次存在的漏洞類型。指向現(xiàn)有漏洞雙向鏈表中的下一個(gè)漏洞類型的指針。
在這里所提供的實(shí)施例中,將漏洞類型定義成了與五種可能的遺漏參數(shù)相對(duì)應(yīng)的五個(gè)比特比特4-協(xié)議;比特3-遠(yuǎn)程端口;比特2-本地端口;比特1-遠(yuǎn)程IP;比特0-本地IP。因此,漏洞類型‘11011’對(duì)應(yīng)于缺少本地端口參數(shù)。
為了產(chǎn)生散列值,上述散列法需要完整的套接字信息。如果接收分組是一個(gè)應(yīng)該 ‘填充’漏洞的分組,那么,使用散列法(圖7)的會(huì)話識(shí)別將會(huì)導(dǎo)致未曾發(fā)現(xiàn)匹配并且無法填充漏洞。無法發(fā)現(xiàn)‘漏洞’是因?yàn)樯⒘卸际腔诮邮辗纸M的完整套接字來計(jì)算的,而散列表中指向漏洞會(huì)話的條目則是基于部分預(yù)知的套接字來計(jì)算的。
漏洞表是通過保存那些由CPU寫入并由動(dòng)態(tài)過濾器讀取的漏洞信息來解決這個(gè)問題的。漏洞是一個(gè)由外部處理打開的會(huì)話,所述處理在應(yīng)用層上執(zhí)行動(dòng)態(tài)過濾。應(yīng)該注意的是,由于CPU是最先檢測漏洞存在的實(shí)體,因此,CPU適于在一開始對(duì)部分散列值進(jìn)行計(jì)算,并且將其保存在散列表中。由于可以從所述接收分組中確定遺漏參數(shù),因此,部分套接字與數(shù)據(jù)庫的套接字相匹配的第一分組將會(huì)關(guān)閉漏洞。漏洞表包含32個(gè)條目,每一個(gè)條目都與一個(gè)或多個(gè)遺漏參數(shù)的唯一組合相對(duì)應(yīng),其中,每個(gè)‘比特’都代表了構(gòu)成套接字的五個(gè)參數(shù)中的一個(gè)參數(shù)。
每個(gè)條目都保存了一個(gè)指示特定類型的漏洞數(shù)目的字段以及指向其他條目的下一個(gè)或先前指針。因此,下一個(gè)指針和先前指針構(gòu)成了漏洞的一個(gè)鏈表。第一有效條目(first_valid_entry)寄存器中保存了一個(gè)指向列表中的第一條目的指針。在這個(gè)寄存器中,NULL表示的是會(huì)話數(shù)據(jù)庫中并未保存漏洞。最后一個(gè)條目保存的是一個(gè)用于表示列表末端的NULL指針。
圖8顯示的是對(duì)本發(fā)明的會(huì)話識(shí)別處理的漏洞搜索方法進(jìn)行描述的流程圖。第一個(gè)步驟是使用第一有效條目寄存器的內(nèi)容來讀取第一漏洞條目(步驟140)。如果寄存器中的漏洞指針指向NULL(步驟142),則沒有發(fā)現(xiàn)漏洞并且將會(huì)報(bào)告這個(gè)結(jié)果(步驟144),而本方法則會(huì)返回。
如果寄存器中的漏洞指針并未指向NULL(步驟142),則根據(jù)漏洞碼來計(jì)算一個(gè)散列值(步驟146)。漏洞碼是漏洞表中由漏洞指針指向的條目所指示的遺漏參數(shù)的五比特表示。而所述遺漏參數(shù)不是在散列計(jì)算中未曾使用,就是由0或1中的某個(gè)值所取代。
然后,如上所述使用生成的散列結(jié)果,以便將散列結(jié)果用作索引而從散列表60(圖2)中檢索散列指針(步驟148)。如果散列指針指向NULL(步驟150),則從漏洞鏈表中讀取下一個(gè)漏洞指針(步驟164),本方法則繼續(xù)進(jìn)行步驟142。如果散列指針并未指向NULL(步驟150),則從會(huì)話數(shù)據(jù)庫中與所述散列指針相對(duì)應(yīng)的條目中讀取部分套接字信息(步驟152)。
從會(huì)話數(shù)據(jù)庫條目中讀取的部分套接字與分組中接收的部分套接字進(jìn)行比較(步驟154)。如果部分套接字匹配(步驟156),則宣告發(fā)現(xiàn)了一個(gè)會(huì)話匹配(步驟158)。如果部分套接字不匹配,則從鏈表中讀取下一個(gè)散列指針(步驟160),如果散列指針并未指向NULL(步驟162),則本發(fā)明繼續(xù)進(jìn)行步驟152,并且檢查下一個(gè)會(huì)話中的部分套接字。否則,如果下一個(gè)散列指針指向NULL(步驟162),則從漏洞鏈表中讀取下一個(gè)漏洞指針(步驟164),本方法則繼續(xù)進(jìn)行步驟142。
一旦使用漏洞搜索方法識(shí)別了一個(gè)會(huì)話,則像完整套接字搜索那樣來進(jìn)行分組和會(huì)話數(shù)據(jù)處理。因此,根據(jù)本發(fā)明,可以使用完整或部分套接字信息來進(jìn)行會(huì)話識(shí)別。由于信息是從后續(xù)接收的分組中提取的,因此將會(huì)填充任何打開的漏洞。
會(huì)話數(shù)據(jù)庫現(xiàn)在對(duì)會(huì)話數(shù)據(jù)庫64(圖2)進(jìn)行更為詳細(xì)的描述。如上文所述,會(huì)話數(shù)據(jù)庫的功能是為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)。會(huì)話數(shù)據(jù)庫的大小可以根據(jù)執(zhí)行過程以及系統(tǒng)需求而變化。以下在表2中列舉了構(gòu)成數(shù)據(jù)庫各個(gè)記錄的字段。
表2會(huì)話數(shù)據(jù)庫的記錄字段字段編號(hào) 字段描述 長度(比特)1本地IP地址 322遠(yuǎn)程IP地址 323協(xié)議 84本地端口/ICMP序列號(hào)/IP標(biāo)識(shí) 165遠(yuǎn)程端口/類型和編碼/NULL 166下一個(gè)散列指針 167先前散列指針 168下一個(gè)LRU指針169先前的LRU指針1610子女?dāng)?shù) 1611會(huì)話狀態(tài) 1612本地MAC地址 4813LAN ACK的上變化 814LAN序列的上變化 815WAN ACK的上變化 816WAN序列的上變化 817LAN ACK的下變化 818LAN序列的下變化 819WAN ACK的下變化 820WAN序列的下變化 821LAN序列和ACK變化閾值 3222WAN序列和ACK變化閾值 3223預(yù)期的LAN ACK3224預(yù)期的WAN ACK3225最大LAN序列 3226最大WAN序列 3227最大LAN窗口長度 3228最大WAN窗口長度 3229連接狀態(tài) 3230時(shí)戳 3231LAN初始序列 3232WAN初始序列 3233雙親會(huì)話指針 1634第一子指針 1635下一個(gè)兄弟指針 1636先前兄弟指針 16
第一組字段1-5表示的是用于識(shí)別會(huì)話的套接字。編號(hào)為4和5的字段適于保存依賴于協(xié)議的不同數(shù)據(jù)。舉例來說,本地和遠(yuǎn)程端口數(shù)據(jù)是為TCP和UDP分組保存的,ICMP序列號(hào)、類型和代碼數(shù)據(jù)則是為ICMP回聲會(huì)話相關(guān)分組保存的。
字段6和7保存的是上述散列鏈表內(nèi)部的下一個(gè)和先前散列指針。散列鏈表在分組的會(huì)話識(shí)別過程中得到使用。字段8和9保存的是LRU鏈表中按照陳舊程度來對(duì)會(huì)話進(jìn)行排序的下一個(gè)和先前LRU指針。下文將對(duì)LRU鏈表操作進(jìn)行更詳細(xì)的描述。字段10保存的是子女?dāng)?shù)目。這個(gè)字段是在與會(huì)話相關(guān)聯(lián)的應(yīng)用需要開啟附加會(huì)話的情況中使用的。打開的各個(gè)會(huì)話(也就是子女會(huì)話)都會(huì)遞增所述子女?dāng)?shù)目。
動(dòng)態(tài)過濾器還包括一個(gè)用于傳送往返于CPU的狀態(tài)相關(guān)信息的會(huì)話狀態(tài)寄存器。所述會(huì)話狀態(tài)包括表3所示的多個(gè)比特。
表3會(huì)話狀態(tài)比特比特名稱 描述USD 指示是否能夠使用會(huì)話記錄(也就是有效或無效)STR 指示由LAN或WAN中的哪一方來發(fā)起會(huì)話HSH 指示這個(gè)會(huì)話是散列鏈表中的第一個(gè)會(huì)話NAT 指示這個(gè)會(huì)話是不是一個(gè)網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)會(huì)話ARP 指示地址解析協(xié)議(ARP)NAT會(huì)話FRG 指示會(huì)話是一個(gè)分段的IP會(huì)話UCM 指示會(huì)話是由CPU標(biāo)記的;所述CPU是基于歸屬于這個(gè)標(biāo)記會(huì)話的各個(gè)比特而由一個(gè)狀態(tài)比特進(jìn)行通知的FRE 指示存在族關(guān)系HLD 指示無論是超時(shí)及其他原因,都不能關(guān)閉會(huì)話PSV 指示被動(dòng)會(huì)話,即沒有時(shí)戳進(jìn)行更新,不允許分組經(jīng)過這個(gè)會(huì)話NOC 指示關(guān)于關(guān)閉會(huì)話的通知,即產(chǎn)生中斷SBP 指示會(huì)話支路,即沒有進(jìn)行動(dòng)態(tài)過濾,只有時(shí)戳進(jìn)行了更新CSH 指示停止關(guān)于這個(gè)會(huì)話的所有業(yè)務(wù)(例如,如果HLD標(biāo)記置位的話),同時(shí)保持會(huì)話有效(即基于輸入分組來更新LRU和時(shí)戳,但是不允許所述分組)需要注意的是,以下標(biāo)志由CPU設(shè)置并由動(dòng)態(tài)過濾器使用UCM、FRE、HLD、PSV、NOC、SBP、CSH。
字段12到22被用于網(wǎng)絡(luò)地址轉(zhuǎn)換。字段23到28以及31到32都是TCP相關(guān)字段,它們?cè)谔幚砗妥粉橳CP分組的過程中得到使用。字段29保存的是所有協(xié)議類型的連接狀態(tài)。連接狀態(tài)參數(shù)是一個(gè)代表了當(dāng)前連接狀態(tài)的數(shù)值。不同的值被用于不同的協(xié)議。作為說明性實(shí)例,以下在表4中列舉了用于若干協(xié)議的連接狀態(tài)。
表4連接狀態(tài)協(xié)議 狀態(tài)TCP LanRequestedTCPConnectionWanRequestedTCPConnectionLanAcceptedTCPConnectionWanAcceptedTCPConnectionOpenTCPConnectionCloseTCPByLanRstCloseTCPByWanRstCloseTCPByFinWanSentFin_LanSentFinWanSentFinWanAckedLanFinWanAckedLanFin_WanSentFinLanSentFinLanAckedWanFinLanAckedWanFin_LanSentFin通用HoleLanToWanHoleWanToLanHoleBothSidesUDP OpenUDPConnectionARP OpenARPConnectionICMP(回聲) OpenICMPConnectionIP OpenIPConnectionNULLNullStateICMP差錯(cuò)ClosebyLanICMPErrorClosebyWanICMPError字段30保存的是用于老化會(huì)話的時(shí)戳。根據(jù)特定協(xié)議,時(shí)間是在16個(gè)比特中加以表示的,并且作為時(shí)間差或增量(delta)而被保存。CPU周期性地指示會(huì)話管理模塊對(duì)會(huì)話進(jìn)行老化,由此關(guān)閉那些已經(jīng)極度老化的會(huì)話。
字段33-36被用于保存那些指向與該會(huì)話相關(guān)聯(lián)的會(huì)話的指針。不同的族信息保存在數(shù)據(jù)庫中,其中包括兄弟、子女和雙親信息。
會(huì)話追蹤實(shí)例打開/關(guān)閉TCP會(huì)話如上文所述,主過濾器處理是這樣一種實(shí)體,一旦識(shí)別出會(huì)話并從會(huì)話數(shù)據(jù)庫中讀取了關(guān)聯(lián)于接收分組的會(huì)話數(shù)據(jù),那么它就會(huì)執(zhí)行規(guī)則檢查。根據(jù)本發(fā)明的一種硬件實(shí)施,為所要檢查的各個(gè)協(xié)議動(dòng)態(tài)提供了一個(gè)獨(dú)立電路,其中TCP是最復(fù)雜的。軟件實(shí)施則使用應(yīng)用碼來執(zhí)行動(dòng)態(tài)規(guī)則檢查。
舉例來說,對(duì)于打開和關(guān)閉TCP會(huì)話的處理而言,需要使用硬件電路而為TCP協(xié)議執(zhí)行的處理是以狀態(tài)轉(zhuǎn)移圖的形式來描述的。應(yīng)該指出,電子領(lǐng)域的技術(shù)人員可以使用這里公開的狀態(tài)轉(zhuǎn)移圖來構(gòu)造一個(gè)電路,以便執(zhí)行所述狀態(tài)轉(zhuǎn)移圖中顯示的相同功能。
圖9顯示的是一個(gè)描述TCP會(huì)話的分組流的圖示。這里描述的分組流在通信領(lǐng)域是眾所周知的,它是作為理解以下關(guān)于3次和4次握手的狀態(tài)轉(zhuǎn)移圖的輔助手段來顯示的。在兩臺(tái)主機(jī)A和B之間,通過借助于包含SYN標(biāo)記的分組來請(qǐng)求同步序列號(hào),由此打開TCP會(huì)話。一旦打開,則如ACK分組所示,數(shù)據(jù)是在兩個(gè)主機(jī)之間流動(dòng)的。TCP會(huì)話是通過雙方發(fā)送包含有FIN標(biāo)記的分組來關(guān)閉的,所述標(biāo)記指示的是發(fā)送者不再具有要進(jìn)行發(fā)送的數(shù)據(jù)。FIN分組的確認(rèn)將會(huì)關(guān)閉會(huì)話。
應(yīng)該注意的是,在握手過程中,從接收分組中提取的應(yīng)答數(shù)目是相對(duì)于會(huì)話數(shù)據(jù)庫中保存的預(yù)期應(yīng)答數(shù)目來驗(yàn)證的。在打開會(huì)話追蹤的過程中,如下文所述,將會(huì)對(duì)所述序列和應(yīng)答號(hào)處于窗口內(nèi)部加以驗(yàn)證。如果RST分組(就是在TCP報(bào)頭中聲明了RESET標(biāo)記的分組)到達(dá),則關(guān)閉所述會(huì)話。
圖10顯示的是對(duì)打開TCP會(huì)話時(shí)的3次握手進(jìn)行描述的狀態(tài)轉(zhuǎn)移圖??赡艿妮斎敕纸M包括RX/TX SYN、RX/TX SYN ACK或RX/TX ACK分組。通常標(biāo)注為170的狀態(tài)轉(zhuǎn)移圖包含了多個(gè)有效(也就是合法)狀態(tài)和相關(guān)轉(zhuǎn)移。應(yīng)該注意的是,TX指示的是從LAN到WAN的方向,而RX指示的則是從WAN到LAN的方向。
一旦檢測到打開了一個(gè)TCP會(huì)話,則進(jìn)入NULL狀態(tài)172。在這個(gè)狀態(tài)中,將會(huì)在會(huì)話數(shù)據(jù)庫中打開一個(gè)新會(huì)話,并且將會(huì)產(chǎn)生以下字段以及將所述字段保存在會(huì)話記錄中接收序列號(hào)、時(shí)戳、指示NULL狀態(tài)的連接狀態(tài)、最大窗口尺度、最大序列號(hào)和預(yù)期應(yīng)答號(hào)。下一個(gè)狀態(tài)則取決于接收分組的是LAN或WAN中的哪一方。如果接收到RX SYN分組,則下一個(gè)狀態(tài)包括WAN Requested TCPConnection狀態(tài)176。否則將會(huì)進(jìn)入LAN Requested TCPConnection狀態(tài)184。在這個(gè)狀態(tài)中,如在所有其他狀態(tài)中執(zhí)行的那樣,從接收分組中得到的與所識(shí)別會(huì)話相對(duì)應(yīng)的數(shù)據(jù)也是從會(huì)話數(shù)據(jù)庫中讀取的。此外還會(huì)為一個(gè)或多個(gè)字段檢查合法性,更新一個(gè)或多個(gè)字段,以及將會(huì)話數(shù)據(jù)回寫到會(huì)話數(shù)據(jù)庫中。
狀態(tài)176中執(zhí)行的主要檢查包括檢查應(yīng)答號(hào)是否與預(yù)期應(yīng)答號(hào)相互關(guān)聯(lián)。對(duì)于最后一部分握手而言,連接狀態(tài)、LAN初始序列號(hào)、LAN最大序列號(hào)、LAN窗口尺度以及預(yù)期LAN應(yīng)答都會(huì)更新。RX SYN和TX SYN的接收都是合法的,這種接收不會(huì)導(dǎo)致狀態(tài)改變。
TX SYN ACK的接收將把會(huì)話移入LAN Accepted TCPConnection狀態(tài)178,同時(shí)RX SYN ACK的接收把會(huì)話移入WANaccepts TCP Connection狀態(tài)186。RX SYN、TX SYN、RX SYNACK以及TX SYN是合法的,它們不會(huì)導(dǎo)致狀態(tài)改變。在這兩種狀態(tài)中將會(huì)執(zhí)行相似的會(huì)話參數(shù)檢查。一旦結(jié)束了檢查和更新,則把那些經(jīng)過更新的參數(shù)回寫到會(huì)話數(shù)據(jù)庫中。
處于狀態(tài)178時(shí)的RX ACK接收或者處于狀態(tài)186時(shí)的TXACK接收將把會(huì)話移入Open TCP Connection狀態(tài)180。RX SYNACK、TX SYN、RX ACK或TX ACK的接收是合法的,它們不會(huì)引起狀態(tài)上的改變。這代表了打開的TCP會(huì)話狀態(tài),由此會(huì)檢查為這個(gè)會(huì)話接收的各個(gè)后續(xù)TCP分組的合法性,例如對(duì)序列號(hào)和應(yīng)答進(jìn)行追蹤。對(duì)LAN或WAN而言,最大序列號(hào)字段同樣會(huì)根據(jù)分組方向而被更新。
由此將會(huì)追蹤用于打開TCP會(huì)話的三次握手的各個(gè)步驟,并且將會(huì)刪除那些嘗試進(jìn)行非法轉(zhuǎn)移的分組。這樣一來,只有那些完全符合TCP協(xié)議的分組才會(huì)允許通過。
圖11A和11B顯示的是對(duì)關(guān)閉TCP會(huì)話時(shí)發(fā)生的4次握手進(jìn)行描述的狀態(tài)轉(zhuǎn)移圖。在這個(gè)圖示中,通常標(biāo)注為190的可能輸入包括RX/TX ACK、RX/TX FIN ACK、RX/TX FIN ACK(FIN)或RX/TX ACK(FIN)。應(yīng)該注意的是,TX/RX ACK描述的是常規(guī)應(yīng)答分組,而ACK(FIN)描述的是FIN分組的應(yīng)答。
在這個(gè)圖示中,開始狀態(tài)是Open Connection狀態(tài)192。RXACK或TX ACK分組的接收不會(huì)引起狀態(tài)方面的改變。TX FINACK的接收將會(huì)導(dǎo)致會(huì)話移至LAN Sent FIN狀態(tài)194,而RX FINACK的接收則會(huì)導(dǎo)致會(huì)話移至WAN Sent FIN狀態(tài)204。在處于狀態(tài)194時(shí)進(jìn)行的RX FIN ACK接收或是處于狀態(tài)204時(shí)TX FINACK的接收都會(huì)導(dǎo)致會(huì)話移至WAN Sent FIN/LAN Sent FIN狀態(tài)202。而RX/TX FIN或RX/TX ACK分組的接收不會(huì)導(dǎo)致狀態(tài)改變。
在處于狀態(tài)194時(shí),RX ACK(FIN)分組的接收會(huì)使會(huì)話移至WAN ACKed LAN FIN狀態(tài)196。而RX/TX ACK、RX ACK(FIN)或TX FIN ACK分組的接收不會(huì)導(dǎo)致狀態(tài)改變。在處于狀態(tài)204時(shí),TX ACK(FIN)分組的接收會(huì)使會(huì)話移至LAN ACKedLAN FIN狀態(tài)206。而RX/TX ACK、TX ACK(FIN)或RX FINACK分組的接收不會(huì)導(dǎo)致狀態(tài)改變。
在處于狀態(tài)196時(shí),RX FIN ACK或RX FIN ACK(FIN)分組的接收會(huì)使會(huì)話移至WAN ACKed LAN FIN/WAN Sent FIN狀態(tài)198。而RX/TX ACK、RX ACK(FIN)、RX FIN ACK(FIN)以及RX/TX FIN分組不會(huì)導(dǎo)致狀態(tài)改變。在處于狀態(tài)206時(shí),TX FINACK或TX FIN ACK(FIN)分組的接收會(huì)使會(huì)話移至WANACKed LAN FIN/WAN Sent FIN狀態(tài)210。RX/TX ACK、TX ACK(FIN)、TX FIN ACK(FIN)以及RX/TX FIN分組不會(huì)導(dǎo)致狀態(tài)改變。
在處于狀態(tài)194時(shí),RX FIN ACK(FIN)分組的接收會(huì)使會(huì)話直接移動(dòng)到WAN ACKed LAN FIN/WAN Sent FIN狀態(tài)198。在處于狀態(tài)204時(shí),TX FIN ACK(FIN)分組的接收會(huì)使會(huì)話直接移動(dòng)到LAN ACKed WAN FIN/LAN Sent FIN狀態(tài)210。
在處于狀態(tài)198時(shí),TX ACK(FIN)或TX FIN ACK(FIN)分組的接收以及在處于狀態(tài)210時(shí)RX ACK(FIN)或RX FIN ACK(FIN)分組的接收會(huì)使會(huì)話移至Close TCP By FIN狀態(tài)200。而RX/TX FIN、RX/TX ACK、TX FIN以及RX/TX ACK(FIN)分組不會(huì)導(dǎo)致狀態(tài)方面的改變。
因此,對(duì)用于關(guān)閉TCP會(huì)話的4次握手的各個(gè)步驟都進(jìn)行動(dòng)態(tài)追蹤,并且濾除那些嘗試進(jìn)行非法轉(zhuǎn)移的分組。這樣,只有那些完全符合TCP協(xié)議的分組才會(huì)允許通過。
本發(fā)明還包含了用于其他協(xié)議的會(huì)話追蹤。圖12顯示的是描述ARP會(huì)話分組流的圖示。在這里假設(shè)存在兩個(gè)主機(jī)A和B,并且ARP會(huì)話追蹤包括在接收到ARP請(qǐng)求分組的時(shí)候打開一個(gè)會(huì)話。具有相同套接字的后續(xù)ARP請(qǐng)求/應(yīng)答分組是允許的(其中包括重傳)。由于打開的ARP會(huì)話不應(yīng)該在一段延長的持續(xù)時(shí)間中保持打開,因此最好在ARP應(yīng)答之后指定短的增量超時(shí)。ARP應(yīng)答將會(huì)關(guān)閉所述會(huì)話。
圖13顯示的是一個(gè)描述ICMP回聲會(huì)話分組流的圖示。假定存在兩個(gè)主機(jī)A和B,并且ICMP回聲請(qǐng)求打開了一個(gè)ICMP回聲會(huì)話。一旦打開會(huì)話,則只有一個(gè)具有相同套接字的ICMP回聲應(yīng)答是允許的。由于回聲重傳使用了不同的序列ID號(hào),也就是不同的套接字,因此不允許進(jìn)行重傳。而ICMP回聲應(yīng)答將會(huì)關(guān)閉所述會(huì)話。
圖14顯示的是一個(gè)描述ICMP消息/差錯(cuò)會(huì)話分組流的圖示。ICMP消息/差錯(cuò)分組包括IP報(bào)頭字段、ICMP報(bào)頭、IP報(bào)頭以及64比特的TCP報(bào)頭。除了64比特的TCP報(bào)頭之外,ICMP消息/差錯(cuò)還封裝了初始分組的IP報(bào)頭。ICMP消息/差錯(cuò)分組必須得到安全策略規(guī)則數(shù)據(jù)庫(也就是外部靜態(tài)過濾器)的許可,否則它會(huì)由主過濾器處理自動(dòng)濾除。動(dòng)態(tài)過濾器僅僅處理那些經(jīng)過封裝的部分分組(也就是根據(jù)封裝套接字來識(shí)別的會(huì)話)。如果靜態(tài)過濾器允許并且在會(huì)話識(shí)別過程中發(fā)現(xiàn)了會(huì)話,那么(1)ICMP消息分組將會(huì)得到許可并且僅僅修改會(huì)話的時(shí)戳字段,(2)ICMP錯(cuò)誤分組將會(huì)得到許可并且連接狀態(tài)將會(huì)變成‘由LAN/WAN ICMP ERROR來關(guān)閉’,屬于這個(gè)會(huì)話的后續(xù)分組將會(huì)因?yàn)檫@個(gè)錯(cuò)誤而被濾除。外部配置(例如經(jīng)由CPU)確定將哪種ICMP(ICMP TYPE/CODE)當(dāng)作消息以及將哪種ICMP當(dāng)作是錯(cuò)誤。具有安全問題的ICMP分組應(yīng)該根據(jù)安全策略規(guī)則數(shù)據(jù)庫而被預(yù)先濾除。
序列/應(yīng)答號(hào)追蹤根據(jù)本發(fā)明,主過濾器處理適于追蹤TCP/IP會(huì)話序列號(hào)。圖15顯示的是對(duì)主過濾器處理器在規(guī)則檢查中執(zhí)行的序列號(hào)窗口追蹤進(jìn)行描述的圖示。在處于Open TCP Connection狀態(tài)180時(shí),序列號(hào)追蹤是由主過濾器處理使用TCP報(bào)頭中的緩存器大小字段來執(zhí)行的。假定X軸代表LAN序列號(hào),如垂直虛線所示,以字節(jié)為單位的最大WAN窗口尺度240將被減去,并且添加到最大LAN序列號(hào)中。在X軸的左端指示了初始LAN序列號(hào)。并且指示了所允許的序列范圍242。
對(duì)各個(gè)分組而言,其下限是通過初始LAN序列號(hào)或最大LAN序列中較高的一個(gè)減去最大WAN窗口尺度來計(jì)算的。上限則是最大LAN序列號(hào)與最大WAN窗口尺度之和。如果發(fā)送分組序列號(hào)落在下限和上限之間,則允許所述分組。否則將會(huì)濾除所述分組。那些序列號(hào)處于許可序列范圍之外的分組將被濾除。應(yīng)該注意的是,接收分組序列號(hào)是結(jié)合了作為以上描述中的LAN與WAN實(shí)體對(duì)換的差別而以相同方式來追蹤的。
圖16顯示的是對(duì)主過濾器處理器在規(guī)則檢查中執(zhí)行的應(yīng)答序列號(hào)窗口追蹤進(jìn)行描述的圖示。在Open TCP Connection狀態(tài)180中,應(yīng)答號(hào)追蹤是由主過濾器處理使用TCP報(bào)頭中的緩存器大小字段來執(zhí)行的。假定X軸代表WAN序列號(hào),如垂直虛線所示,以字節(jié)為單位的最大LAN窗口尺度250將被減去,并且添加到最大WAN序列號(hào)中。在X軸的左端指示了初始LAN序列號(hào)。并且指示了所允許的序列范圍252。為應(yīng)答號(hào)進(jìn)行的規(guī)則檢查類似于序列號(hào)規(guī)則檢查,其中所述序列號(hào)規(guī)則檢查依賴于分組是由WAN還是LAN來進(jìn)行發(fā)送或接收而得到描述的。
需要注意的是,根據(jù)本發(fā)明,主過濾器處理模塊進(jìn)行操作來動(dòng)態(tài)檢查那些與其它協(xié)議相關(guān)聯(lián)的規(guī)則,其中包括而不局限于UDP、包含回聲請(qǐng)求/應(yīng)答的ICMP、控制與差錯(cuò)消息、ARP、ICMP分段以及IP。
會(huì)話管理模塊根據(jù)本發(fā)明,會(huì)話管理模塊進(jìn)行操作來維護(hù)鏈表,以便以最近最少使用的順序來保存會(huì)話。會(huì)話管理模塊執(zhí)行了若干個(gè)涉及會(huì)話數(shù)據(jù)庫維護(hù)與控制的功能。會(huì)話管理模塊的功能是在從CPU接收到命令的時(shí)候檢查會(huì)話數(shù)據(jù)庫中所保存的會(huì)話的時(shí)戳有效性(也就是老化)。在接收到執(zhí)行老化的命令的時(shí)候,對(duì)會(huì)話數(shù)據(jù)庫中各個(gè)記錄的時(shí)戳字段進(jìn)行檢查,并且關(guān)閉那些時(shí)限已經(jīng)到期的記錄。老化在會(huì)話上執(zhí)行,以便沖洗那些變得陳舊以及因?yàn)槟撤N原因而沒有正常關(guān)閉的會(huì)話。舉例來說,如果會(huì)話對(duì)應(yīng)于一個(gè)違反規(guī)則的分組,那么該會(huì)話有可能已經(jīng)極度老化。
會(huì)話管理模塊的功能是基于請(qǐng)求來向CPU或主過濾器處理54(圖2)提供一個(gè)并未使用的(也就是空的和可用的)會(huì)話。在操作中,CPU/主過濾器處理請(qǐng)求一個(gè)新會(huì)話,會(huì)話管理模塊搜索一個(gè)會(huì)話,并且將索引分別返回給CPU/主過濾器處理。同樣,會(huì)話管理模塊還在需要的時(shí)候適度斷連一個(gè)正在使用的會(huì)話,其中所述需要的時(shí)候即為老化、CPU發(fā)出請(qǐng)求、主過濾器處理發(fā)出請(qǐng)求等等的時(shí)候。會(huì)話管理模塊還打開新的會(huì)話,其中將會(huì)更新散列表中的LRU指針、散列指針以及會(huì)話數(shù)據(jù)庫。
圖17顯示的是用于對(duì)會(huì)話應(yīng)用進(jìn)行追蹤的最近最少使用的(LRU)鏈表結(jié)構(gòu)。在每次識(shí)別出會(huì)話(例如被訪問)以及主過濾器處理允許相應(yīng)分組的時(shí)候,所述會(huì)話都位于LRU鏈表尾部。通常標(biāo)注為220的雙向鏈表包括多個(gè)會(huì)話226,其中每個(gè)會(huì)話226都具有下一個(gè)指針222以及先前指針224。tail_LRU_index_reg寄存器228的內(nèi)容針對(duì)的是處于LRU鏈表尾部的會(huì)話。這個(gè)寄存器所針對(duì)的會(huì)話代表了最近最多使用的會(huì)話。head_LRU_index_reg寄存器227的內(nèi)容針對(duì)的則是處于LRU鏈表開頭的會(huì)話。
如下文更為詳細(xì)描述的那樣,會(huì)話管理模塊還在結(jié)束會(huì)話的時(shí)候更新和維護(hù)族關(guān)系。
如果已經(jīng)填滿了會(huì)話數(shù)據(jù)庫,則使用LRU鏈表來確定添加新會(huì)話時(shí)刪除了哪個(gè)會(huì)話。在這種情況下將會(huì)關(guān)閉最近最少使用的會(huì)話,所述記錄則被用于保存新的會(huì)話。
圖18顯示的是一個(gè)對(duì)基于關(guān)聯(lián)于輸入分組的會(huì)話識(shí)別的LRU鏈表更新方法進(jìn)行描述的流程圖。所述更新方法是在每次訪問一個(gè)匹配會(huì)話并且允許相應(yīng)分組的時(shí)候執(zhí)行的。特別地,參考圖17,對(duì)標(biāo)記了先前會(huì)話、匹配會(huì)話以及下一個(gè)會(huì)話的會(huì)話而言,匹配會(huì)話從它在列表中的位置移動(dòng)到尾部,以便成為最近最多使用的會(huì)話。匹配會(huì)話是通過以下操作來刪除的(1)將先前會(huì)話的下一個(gè)LRU指針設(shè)定為匹配會(huì)話的下一個(gè)LRU指針,以及(2)將下一個(gè)會(huì)話的先前LRU指針設(shè)定為匹配會(huì)話的先前LRU指針(步驟230)。
然后通過以下操作來進(jìn)行匹配會(huì)話(1)將匹配會(huì)話的下一個(gè)LRU指針設(shè)定為NULL,(2)將匹配會(huì)話的先前LRU指針設(shè)定為tail_LRU_index_reg寄存器的內(nèi)容,以及(3)將tail_LRU_index_reg寄存器設(shè)定為匹配會(huì)話的索引(步驟232)。
圖19顯示的是對(duì)本發(fā)明的會(huì)話管理模塊處理進(jìn)行描述的流程圖。會(huì)話管理處理是在空閑步驟342中開始的,它根據(jù)事件移動(dòng)到下一個(gè)步驟。在從CPU或主過濾器處理器中獲取了“get unused”指令的情況下,將會(huì)取得最近最少使用的會(huì)話狀態(tài)(步驟344)。如果正在使用會(huì)話(步驟350),則關(guān)閉所述會(huì)話(步驟348)。如果并未使用會(huì)話,則將head_LRU_index_reg設(shè)定為最近最少使用會(huì)話的下一個(gè)LRU指針,并且將下一個(gè)(先前LRU指針)指針設(shè)定為NULL(步驟352)。然后,將所刪除的會(huì)話的下一個(gè)和先前LRU指針設(shè)定為NULL,由此從LRU鏈表中刪除最近最少使用的會(huì)話(步驟354)。變量unused_ses將被設(shè)定給正好斷連的會(huì)話,由此將一個(gè)向CPU或主過濾器處理發(fā)出通知的標(biāo)記設(shè)定為‘1’(步驟356)。然后所述處理返回到空閑(步驟358)。
來自CPU的‘檢查超時(shí)’命令使得會(huì)話管理器開始檢查會(huì)話超時(shí)。索引計(jì)數(shù)器將會(huì)遞增(步驟362)并會(huì)取出會(huì)話狀態(tài)(也就是索引計(jì)數(shù)器)(步驟364)。如果當(dāng)前正在使用會(huì)話(步驟366),則取出會(huì)話時(shí)戳(步驟372)。如果時(shí)戳大于實(shí)際時(shí)間(也就是說,會(huì)話已經(jīng)極度老化)(步驟374),則關(guān)閉所述會(huì)話(步驟376)。
如果并未使用會(huì)話或者會(huì)話并未老化,則檢查索引計(jì)數(shù)器是否小于上一個(gè)索引(步驟368)。如果小于,則遞增所述索引計(jì)數(shù)器(步驟370)并且所述方法繼續(xù)進(jìn)行步驟364。如果并不小于,則完成所述超時(shí)檢查,并且通知主過濾器處理(步驟360),所述方法則返回到空閑(步驟358)。
圖21顯示的是對(duì)本發(fā)明的會(huì)話管理模塊所執(zhí)行的打開會(huì)話處理進(jìn)行描述的流程圖。在打開一個(gè)會(huì)話時(shí),所述會(huì)話將會(huì)位于LRU鏈表尾部(步驟380)。并且所述會(huì)話還置于散列鏈表中的恰當(dāng)位置(步驟382)。然后,該方法將會(huì)返回到空閑狀態(tài)(步驟384)。
圖21顯示的是對(duì)本發(fā)明的會(huì)話管理模塊所執(zhí)行的關(guān)閉會(huì)話處理進(jìn)行描述的流程圖。如果如HLD標(biāo)記所指示的那樣,所述會(huì)話可以關(guān)閉(步驟390),則會(huì)在不修改LRU指針的情況下清除所述會(huì)話(步驟392)。然后,所述方法將會(huì)返回到空閑狀態(tài)(步驟404)。
如果無法關(guān)閉會(huì)話(步驟390),并且所述關(guān)閉請(qǐng)求是由于超時(shí)檢查(步驟394),則不關(guān)閉所述會(huì)話(步驟396)并且所述方法返回到空閑狀態(tài)(步驟404)。如果關(guān)閉請(qǐng)求并不起因于超時(shí)檢查,則讀取最近最少使用的會(huì)話所指示的下一個(gè)會(huì)話(步驟398)。如果無法關(guān)閉這個(gè)會(huì)話(步驟400),則所述方法繼續(xù)進(jìn)行步驟398,并且所述處理將會(huì)重復(fù)進(jìn)行,直到發(fā)現(xiàn)一個(gè)可以關(guān)閉的會(huì)話。如果發(fā)現(xiàn)一個(gè)可以關(guān)閉的會(huì)話(步驟400),則將所述會(huì)話配置為LRU(步驟401)。然后,除了LRU指針之外,所述會(huì)話將被清除(步驟402),而所述方法則返回到空閑狀態(tài)(步驟404)。
如上所述,會(huì)話管理模塊還在會(huì)話數(shù)據(jù)庫中保持了四個(gè)族關(guān)系指針,其中會(huì)話數(shù)據(jù)庫定義了會(huì)話的族關(guān)系。一旦關(guān)閉了會(huì)話,則更新族關(guān)系指針。圖22顯示的是對(duì)用于一個(gè)會(huì)話的族指針進(jìn)行描述的圖示。每個(gè)會(huì)話都可以具有一個(gè)指向雙親會(huì)話的雙親指針,一個(gè)從其雙親指向其第一個(gè)子女的第一子女指針,以及在具有相同雙親的會(huì)話之間執(zhí)行雙向鏈表的下一個(gè)/先前兄弟指針。
會(huì)話數(shù)據(jù)庫中的字段33-36被用于保存族關(guān)系指針信息。族關(guān)系自身是由CPU來確定的。如果會(huì)話管理器關(guān)閉一個(gè)會(huì)話(也就是說,由于超時(shí)檢查或者為新會(huì)話讓出空間),那么會(huì)話管理器將會(huì)執(zhí)行操作來更新族指針。
根據(jù)本發(fā)明,族指針被用于在屬于相同應(yīng)用的會(huì)話之間進(jìn)行邏輯上的連接。舉例來說,F(xiàn)TP服務(wù)打開兩個(gè)不同的TCP/IP會(huì)話端口21的控制會(huì)話以及端口20的數(shù)據(jù)會(huì)話。FTP控制是雙親會(huì)話,而FTP數(shù)據(jù)則是子會(huì)話。通常,在結(jié)合子女字段(10)的數(shù)目來使用4個(gè)族指針的情況下,任何族關(guān)系都是可行的,也就是說,任何嵌套的雙親/子女應(yīng)用都是得到支持的。在借助LRU/超時(shí)機(jī)制來關(guān)閉雙親會(huì)話的時(shí)候,會(huì)話管理器使用族指針來關(guān)閉那些歸屬于所述族的所有后續(xù)創(chuàng)建的會(huì)話。
有時(shí),并未所有連接都是同時(shí)使用的。舉例來說,在一段時(shí)間,所述應(yīng)用有可能僅僅使用子會(huì)話來進(jìn)行連接。為了避免LRU/超時(shí)機(jī)制關(guān)閉雙親控制會(huì)話,CPU會(huì)在雙親會(huì)話中設(shè)定HLD比特。會(huì)話管理器不會(huì)關(guān)閉一個(gè)具有打開的子會(huì)話(也就是說,子會(huì)話數(shù)目>0)并且已經(jīng)聲明了HLD比特的會(huì)話。在關(guān)閉其中一個(gè)會(huì)話的時(shí)候,會(huì)話管理器將會(huì)進(jìn)行操作來保持所有族指針,也就是說,關(guān)閉所有子女會(huì)話(如果存在的話),更新族兄弟會(huì)話雙向鏈表(如果存在的話),遞減雙親會(huì)話的子會(huì)話數(shù)(如果存在的話),以及更新雙親/第一子女雙向鏈表。
圖23顯示的是對(duì)多個(gè)會(huì)話之間的實(shí)例性族關(guān)系進(jìn)行描述的圖示。在這個(gè)實(shí)例中,雙親會(huì)話涉及一個(gè)子女會(huì)話,所述子女會(huì)話轉(zhuǎn)而涉及兩個(gè)兄弟會(huì)話。第一子女會(huì)話也是一個(gè)具有子女會(huì)話的雙親會(huì)話,所述子女會(huì)話是上級(jí)雙親會(huì)話的第三代(grandchild)。
計(jì)算機(jī)實(shí)施例在另一個(gè)實(shí)施例中,一臺(tái)計(jì)算機(jī)進(jìn)行操作來執(zhí)行那些適于實(shí)施本發(fā)明的動(dòng)態(tài)分組過濾器方法的軟件。圖24顯示的是一個(gè)對(duì)實(shí)例性計(jì)算機(jī)處理系統(tǒng)進(jìn)行描述的框圖,所述系統(tǒng)適于作為執(zhí)行結(jié)合了本發(fā)明的會(huì)話追蹤方法的動(dòng)態(tài)分組過濾的平臺(tái)。所述系統(tǒng)可以引入到通信設(shè)備內(nèi)部,例如PDA、蜂窩電話、電纜調(diào)制解調(diào)器、寬帶調(diào)制解調(diào)器、膝上計(jì)算機(jī)、PC、網(wǎng)絡(luò)傳輸或交換器材、網(wǎng)絡(luò)設(shè)備或任何其它有線或無線通信設(shè)備。該設(shè)備可以使用硬件和/或軟件的任何組合來構(gòu)造。
通常標(biāo)記為260的計(jì)算機(jī)系統(tǒng)包括一個(gè)處理器264,它可以作為微型控制器、微處理器、微型計(jì)算機(jī)、ASIC核心、FPGA核心、中央處理器(CPU)或數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)。該系統(tǒng)還包括靜態(tài)只讀存儲(chǔ)器(ROM)266和動(dòng)態(tài)主存儲(chǔ)器(例如RAM)270,所有這些設(shè)備都與處理器進(jìn)行通信。此外,處理器還經(jīng)由總線262而與多個(gè)外圍設(shè)備進(jìn)行通信,這些設(shè)備也包含在計(jì)算機(jī)系統(tǒng)中。
所述設(shè)備經(jīng)由WAN接口272而與因特網(wǎng)這類WAN 280相連。所述接口包括連接到一個(gè)或多個(gè)WAN通信信道的有線和/或無線接口。通信I/O處理272在WAN接口與處理器之間傳遞數(shù)據(jù)。根據(jù)執(zhí)行過程,計(jì)算機(jī)系統(tǒng)還經(jīng)由網(wǎng)絡(luò)接口卡(NIC)271而與LAN 273相連。在操作中,計(jì)算機(jī)系統(tǒng)進(jìn)行操作,以便如上所述對(duì)從WAN到LAN的入站分組以及從LAN到WAN的出站分組進(jìn)行動(dòng)態(tài)過濾。
可選用戶接口276對(duì)用戶輸入做出響應(yīng),并且提供反饋和其他狀態(tài)信息。主機(jī)接口278把主機(jī)計(jì)算設(shè)備282連接到所述系統(tǒng)。該主機(jī)適于配置、控制和維護(hù)系統(tǒng)操作。系統(tǒng)還包含了用于保存應(yīng)用程序和數(shù)據(jù)的磁存儲(chǔ)器268。所述系統(tǒng)包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括任何適當(dāng)?shù)拇鎯?chǔ)裝置,其中包括而非局限于磁存儲(chǔ)器、光存儲(chǔ)器、CD-ROM驅(qū)動(dòng)器、ZIP驅(qū)動(dòng)器、DVD驅(qū)動(dòng)器、DAT磁帶、半導(dǎo)體易失或非易失存儲(chǔ)器、生物存儲(chǔ)設(shè)備或其他任何記憶存儲(chǔ)設(shè)備。
那些經(jīng)過更新來執(zhí)行本發(fā)明的動(dòng)態(tài)過濾器功能的軟件適于駐留在計(jì)算機(jī)可讀介質(zhì)中,例如磁盤驅(qū)動(dòng)器單元內(nèi)部的磁盤。作為選擇,計(jì)算機(jī)可讀介質(zhì)可以包括軟盤、閃速存儲(chǔ)卡、EPROM、EEROM、基于EEPROM的存儲(chǔ)器、磁泡存儲(chǔ)器、ROM存儲(chǔ)器等等。所述軟件適于執(zhí)行本發(fā)明的動(dòng)態(tài)分組過濾方法,它也可以部分或全部位于計(jì)算機(jī)系統(tǒng)的處理器內(nèi)部的靜態(tài)或動(dòng)態(tài)主存儲(chǔ)器或固件中(也就是微型控制器、微處理器、微型計(jì)算機(jī)、DSP等等內(nèi)部存儲(chǔ)器的內(nèi)部)。
在替換實(shí)施例中,本發(fā)明的方法適于在集成電路、現(xiàn)場可編程門陣列(FPGA)、芯片組或?qū)S眉呻娐?ASIC)、無線實(shí)施及其他通信系統(tǒng)產(chǎn)品中實(shí)施本發(fā)明。
附加權(quán)利要求意欲覆蓋所有這些落入本發(fā)明的實(shí)質(zhì)和范圍的特征和優(yōu)點(diǎn)。由于本領(lǐng)域技術(shù)人員很容易想到眾多修改和變化,因此本發(fā)明并不意欲局限于這里所描述的數(shù)量有限的實(shí)施例。因此,應(yīng)該了解的是,可以采用的所有的恰當(dāng)變化、修改和等價(jià)物都落入本發(fā)明的實(shí)質(zhì)和范圍以內(nèi)。
權(quán)利要求
1.一種過濾輸入分組流的方法,所述方法包括以下步驟建立一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,其中每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng);一旦接收到一個(gè)先前并未保存在所述會(huì)話數(shù)據(jù)庫中的套接字,則打開一個(gè)新的會(huì)話;根據(jù)接收分組的相關(guān)套接字來識(shí)別一個(gè)與之相關(guān)的會(huì)話;根據(jù)多個(gè)預(yù)定規(guī)則來處理對(duì)應(yīng)于所述接收分組的會(huì)話數(shù)據(jù),以便產(chǎn)生處理結(jié)果;以及根據(jù)處理結(jié)果來判定是否允許或拒絕所述接收分組。
2.根據(jù)權(quán)利要求1的方法,還包括根據(jù)所述處理結(jié)果來更新所述會(huì)話數(shù)據(jù)庫的內(nèi)容的步驟。
3.根據(jù)權(quán)利要求1的方法,其中所述判定步驟包括如果所述接收分組并未違反所述多個(gè)預(yù)定規(guī)則中的任何一個(gè)規(guī)則,則允許所述接收分組。
4.根據(jù)權(quán)利要求1的方法,其中所述判定步驟包括如果所述接收分組違反了所述多個(gè)預(yù)定規(guī)則中的任何一個(gè)規(guī)則,則拒絕所述接收分組。
5.根據(jù)權(quán)利要求1的方法,還包括從所述會(huì)話數(shù)據(jù)庫中刪除未使用會(huì)話的步驟。
6.根據(jù)權(quán)利要求1的方法,還包括建立和維護(hù)一個(gè)最近最少使用(LRU)的雙向鏈表的步驟,所述鏈表具有一個(gè)頭部和一個(gè)尾部,其中最近最多使用的會(huì)話保存在尾部,最近最少使用的會(huì)話則保存在頭部。
7.根據(jù)權(quán)利要求6的方法,其中,在所述LRU列表充滿的情況下,處于頭部的會(huì)話將被刪除,并且會(huì)向尾部添加一個(gè)新的會(huì)話。
8.根據(jù)權(quán)利要求1的方法,還包括刪除那些相關(guān)時(shí)戳已經(jīng)超出預(yù)定閾值的會(huì)話的步驟。
9.根據(jù)權(quán)利要求1的方法,還包括建立一個(gè)漏洞表的步驟,所述漏洞表包含了多個(gè)記錄,其中每一個(gè)記錄都表示了不完整的套接字信息的一個(gè)唯一子集。
10.根據(jù)權(quán)利要求1的方法,其中所述打開新會(huì)話的步驟包括以下步驟將涉及所述新會(huì)話的會(huì)話數(shù)據(jù)保存在所述會(huì)話數(shù)據(jù)庫中;基于與所述新會(huì)話相關(guān)聯(lián)的套接字來計(jì)算一個(gè)散列值;以及將所述散列值保存在散列表中。
11.根據(jù)權(quán)利要求1的方法,其中所述識(shí)別會(huì)話的步驟包括以下步驟基于與所識(shí)別會(huì)話相關(guān)的套接字來計(jì)算一個(gè)散列值;使用散列結(jié)果作為索引而在散列表中查找一個(gè)散列指針;根據(jù)所述散列指針而從所述會(huì)話數(shù)據(jù)庫中檢索套接字?jǐn)?shù)據(jù);以及如果檢索得到的套接字匹配于與接收會(huì)話相關(guān)聯(lián)的套接字,則識(shí)別所述會(huì)話。
12.根據(jù)權(quán)利要求1的方法,其中所述處理會(huì)話數(shù)據(jù)的步驟包括如果會(huì)話包括一個(gè)TCP打開會(huì)話,則對(duì)傳輸控制協(xié)議(TCP)的打開握手狀態(tài)進(jìn)行追蹤。
13.根據(jù)權(quán)利要求1的方法,其中所述處理會(huì)話數(shù)據(jù)的步驟包括如果會(huì)話包括一個(gè)TCP關(guān)閉會(huì)話,則對(duì)傳輸控制協(xié)議(TCP)的關(guān)閉握手狀態(tài)進(jìn)行追蹤。
14.根據(jù)權(quán)利要求1的方法,其中所述處理會(huì)話數(shù)據(jù)的步驟包括如果所述會(huì)話包含一個(gè)傳輸控制協(xié)議(TCP)會(huì)話,則依照一個(gè)窗口來對(duì)所述會(huì)話的序列和應(yīng)答進(jìn)行追蹤、
15.一種監(jiān)視通信會(huì)話狀態(tài)的方法,所述方法包括步驟建立一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,其中每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng);根據(jù)對(duì)關(guān)聯(lián)于一個(gè)接收分組的套接字所進(jìn)行的第一散列計(jì)算來識(shí)別一個(gè)會(huì)話;根據(jù)對(duì)關(guān)聯(lián)于所述接收分組的部分套接字所進(jìn)行的第二散列計(jì)算來識(shí)別一個(gè)漏洞會(huì)話;從所述會(huì)話數(shù)據(jù)庫中讀取會(huì)話數(shù)據(jù),所述會(huì)話數(shù)據(jù)與所識(shí)別的會(huì)話或所識(shí)別的漏洞會(huì)話中的一個(gè)會(huì)話相關(guān)聯(lián);追蹤所述會(huì)話的連接狀態(tài)并且依照多個(gè)規(guī)則來檢查所述狀態(tài),由此確定是否允許或拒絕所述接收分組;以及把經(jīng)過更新的會(huì)話數(shù)據(jù)回寫到所述會(huì)話數(shù)據(jù)庫中。
16.根據(jù)權(quán)利要求15的方法,其中所述確定允許或拒絕的步驟包括如果所述接收分組并未違反所述多個(gè)規(guī)則中的任何一個(gè),則允許所述接收分組。
17.根據(jù)權(quán)利要求15的方法,其中所述確定允許或拒絕的步驟包括如果所述接收分組違反了所述多個(gè)規(guī)則中的任何一個(gè),則拒絕所述接收分組。
18.根據(jù)權(quán)利要求15的方法,還包括從所述會(huì)話數(shù)據(jù)庫中刪除未使用會(huì)話的步驟。
19.根據(jù)權(quán)利要求15的方法,還包括建立和維護(hù)一個(gè)最近最少使用(LRU)雙向鏈表的步驟,所述鏈表具有一個(gè)頭部和一個(gè)尾部,其中最近最多使用的會(huì)話保存在尾部,而最近最少使用的會(huì)話則保存在頭部。
20.根據(jù)權(quán)利要求15的方法,還包括刪除那些關(guān)聯(lián)時(shí)戳已經(jīng)超于了預(yù)定閾值的會(huì)話的步驟。
21.根據(jù)權(quán)利要求15的方法,其中所述打開新會(huì)話的步驟包括將涉及所述新會(huì)話的會(huì)話數(shù)據(jù)保存在所述會(huì)話數(shù)據(jù)庫中;基于與所述新會(huì)話相關(guān)聯(lián)的套接字來計(jì)算一個(gè)散列值;以及將所述散列值保存在一個(gè)散列表中。
22.根據(jù)權(quán)利要求15的方法,其中所述識(shí)別會(huì)話的步驟包括以下步驟基于與要識(shí)別會(huì)話相關(guān)聯(lián)的套接字來計(jì)算所述第一散列值;使用所述第一散列結(jié)果作為索引而在一個(gè)散列表中查找一個(gè)散列指針;根據(jù)所述散列指針而從所述會(huì)話數(shù)據(jù)庫中檢索套接字?jǐn)?shù)據(jù);以及如果檢索得到的套接字匹配于與所接收會(huì)話相關(guān)聯(lián)的套接字,則識(shí)別所述會(huì)話。
23.根據(jù)權(quán)利要求15的方法,其中所述識(shí)別漏洞會(huì)話的步驟包括以下步驟基于所述與要識(shí)別會(huì)話相關(guān)聯(lián)的部分套接字來計(jì)算所述第二散列值;使用所述第二散列結(jié)果作為索引而在一個(gè)散列表中查找一個(gè)散列指針;根據(jù)所述散列指針而從所述會(huì)話數(shù)據(jù)庫中檢索部分套接字?jǐn)?shù)據(jù);以及如果檢索得到的部分套接字匹配于與接收會(huì)話相關(guān)聯(lián)的部分套接字,則識(shí)別所述漏洞會(huì)話。
24.根據(jù)權(quán)利要求15的方法,其中所述追蹤所述連接狀態(tài)的步驟包括如果所述會(huì)話包含一個(gè)TCP打開會(huì)話,則追蹤傳輸控制協(xié)議(TCP)的打開握手。
25.根據(jù)權(quán)利要求15的方法,其中所述追蹤所述連接狀態(tài)的步驟包括如果所述會(huì)話包含一個(gè)TCP關(guān)閉會(huì)話,則追蹤傳輸控制協(xié)議(TCP)的關(guān)閉握手。
26.根據(jù)權(quán)利要求15的方法,其中所述追蹤所述連接狀態(tài)的步驟包括如果所述會(huì)話包含一個(gè)傳輸控制協(xié)議(TCP)會(huì)話,則按照一個(gè)窗口來追蹤所述會(huì)話的序列和應(yīng)答。
27.一種用于過濾輸入分組流的動(dòng)態(tài)過濾器,包括一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,其中每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng);一個(gè)會(huì)話識(shí)別模塊,它適于在所述會(huì)話數(shù)據(jù)庫中搜索一個(gè)會(huì)話,其中所述會(huì)話的相關(guān)套接字與接收分組套接字相匹配;一個(gè)適于維護(hù)所述會(huì)話數(shù)據(jù)庫的會(huì)話管理模塊,所述維護(hù)包括了添加、刪除和修改所述會(huì)話數(shù)據(jù)庫中的會(huì)話,以及一個(gè)主過濾器模塊,它可以進(jìn)行操作,以便追蹤一個(gè)對(duì)應(yīng)于接收分組的會(huì)話連接狀態(tài),并且依照多個(gè)規(guī)則來檢查所述連接狀態(tài),由此確定是否允許或拒絕所述接收分組。
28.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述主過濾器適于在確定了是否允許或拒絕所述接收分組之后,將經(jīng)過修改的會(huì)話數(shù)據(jù)回寫到所述會(huì)話數(shù)據(jù)庫中。
29.根據(jù)權(quán)利要求27的方法,其中所述主過濾器適于在所述接收分組并不違反所述多個(gè)規(guī)則中的任何一個(gè)規(guī)則的情況下,允許所述接收分組。
30.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述主過濾器適于在所述接收分組違反所述多個(gè)規(guī)則中的任何一個(gè)規(guī)則的情況下,拒絕所述接收分組。
31.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述會(huì)話管理模塊適于從所述會(huì)話數(shù)據(jù)庫中刪除未使用的會(huì)話。
32.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述會(huì)話管理模塊適于建立和維護(hù)一個(gè)最近最少使用(LRU)的雙向鏈表,所述鏈表具有一個(gè)頭部和一個(gè)尾部,其中最近最多使用的會(huì)話保存在尾部,最近最少使用的會(huì)話則保存在頭部。
33.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述會(huì)話管理模塊適于刪除那些相關(guān)時(shí)戳已經(jīng)超出了一個(gè)預(yù)定閾值的會(huì)話。
34.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,還包括一個(gè)漏洞表,其中包括多個(gè)記錄,每個(gè)記錄都對(duì)應(yīng)于不完整套接字的一個(gè)唯一子集。
35.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述會(huì)話管理模塊包括會(huì)話打開裝置,所述裝置適于將涉及所述新會(huì)話的會(huì)話數(shù)據(jù)保存在所述會(huì)話數(shù)據(jù)庫中;基于與所述新會(huì)話相關(guān)聯(lián)的套接字來計(jì)算一個(gè)散列值;以及將所述散列值保存在一個(gè)散列表中。
36.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述會(huì)話識(shí)別模塊包括裝置,所述裝置適于基于與要識(shí)別會(huì)話相關(guān)聯(lián)的套接字來計(jì)算一個(gè)散列值;使用散列結(jié)果作為索引而在散列表中查詢一個(gè)散列指針;根據(jù)所述散列指針,而從所述會(huì)話數(shù)據(jù)庫中檢索套接字?jǐn)?shù)據(jù);以及如果檢索得到的套接字匹配于與接收分組相關(guān)聯(lián)的套接字,則識(shí)別所述會(huì)話。
37.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述主過濾器包括用于在會(huì)話包含一個(gè)TCP打開會(huì)話的情況下追蹤傳輸控制協(xié)議(TCP)打開握手的狀態(tài)的裝置。
38.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述主過濾器包括用于在會(huì)話包含一個(gè)TCP關(guān)閉會(huì)話的情況下追蹤傳輸控制協(xié)議(TCP)關(guān)閉握手的狀態(tài)的裝置。
39.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述主過濾器包括用于在所述會(huì)話包含一個(gè)傳輸控制協(xié)議(TCP)會(huì)話的情況下,依照一個(gè)窗口來追蹤所述會(huì)話的序列和應(yīng)答的裝置。
40.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述動(dòng)態(tài)過濾器是在一個(gè)現(xiàn)場可編程門陣列(FPGA)中實(shí)現(xiàn)的。
41.根據(jù)權(quán)利要求27的動(dòng)態(tài)過濾器,其中所述動(dòng)態(tài)過濾器是在一個(gè)專用集成電路(ASIC)中實(shí)現(xiàn)的。
42.一種數(shù)字計(jì)算設(shè)備,包括適于將所述設(shè)備連接到廣域網(wǎng)(WAN)的通信裝置;由易失和非易失存儲(chǔ)器組成的存儲(chǔ)裝置,其中所述非易失存儲(chǔ)器適于保存一個(gè)或多個(gè)應(yīng)用程序;一個(gè)處理器,所述處理器耦合到所述存儲(chǔ)裝置和所述通信裝置,以便執(zhí)行所述一個(gè)或多個(gè)應(yīng)用程序;以及一個(gè)用于對(duì)輸入分組流進(jìn)行過濾的動(dòng)態(tài)過濾器,其中包括一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,其中每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng);一個(gè)會(huì)話識(shí)別模塊,它適于在所述會(huì)話數(shù)據(jù)庫中搜索相關(guān)套接字與接收分組套接字相匹配的會(huì)話;一個(gè)適于維護(hù)會(huì)話數(shù)據(jù)庫的會(huì)話管理模塊,所述維護(hù)包括了添加、刪除和修改所述會(huì)話數(shù)據(jù)庫中的會(huì)話,以及一個(gè)主過濾器模塊,所述模塊進(jìn)行操作,以便追蹤一個(gè)與接收分組相對(duì)應(yīng)的會(huì)話的連接狀態(tài),并且依照多個(gè)規(guī)則來檢查連接狀態(tài),由此確定是否允許或拒絕所述接收分組。
43.一種包含在其上嵌入了計(jì)算機(jī)程序的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),當(dāng)在恰當(dāng)編程的系統(tǒng)上執(zhí)行這個(gè)程序的時(shí)候,所述程序通過執(zhí)行以下步驟而使該系統(tǒng)搜索多個(gè)字符串建立一個(gè)適于為多個(gè)會(huì)話保存會(huì)話相關(guān)數(shù)據(jù)的會(huì)話數(shù)據(jù)庫,其中每個(gè)會(huì)話都與一個(gè)套接字相對(duì)應(yīng);一旦接收到一個(gè)先前并未保存在所述會(huì)話數(shù)據(jù)庫中的套接字,則打開一個(gè)新的會(huì)話;根據(jù)接收分組的相關(guān)套接字來識(shí)別一個(gè)與之相關(guān)聯(lián)的會(huì)話;根據(jù)多個(gè)預(yù)定規(guī)則來處理對(duì)應(yīng)于所述接收分組的會(huì)話數(shù)據(jù),由此產(chǎn)生處理結(jié)果;以及根據(jù)所述處理結(jié)果來判定是否允許或拒絕所述接收分組。
全文摘要
本發(fā)明公開了一種新穎和有益的動(dòng)態(tài)分組過濾器,它可以引入一個(gè)基于硬件并且適合在便攜計(jì)算設(shè)備中使用的防火墻之中,其中所述便攜計(jì)算設(shè)備是諸如蜂窩電話和無線連接的PDA這類適于連接到因特網(wǎng)的設(shè)備。本發(fā)明對(duì)經(jīng)由輸入分組流接收的分組進(jìn)行動(dòng)態(tài)分組過濾。動(dòng)態(tài)過濾器使用從接收分組中提取的信息來檢查動(dòng)態(tài)協(xié)議行為。會(huì)話將被創(chuàng)建并且保存在一個(gè)會(huì)話數(shù)據(jù)庫中,以便追蹤源和目的地之間的通信狀態(tài)。并且使用散列表來快速確定會(huì)話數(shù)據(jù)庫中的相應(yīng)會(huì)話記錄,以便加速會(huì)話識(shí)別。會(huì)話相關(guān)數(shù)據(jù)則是從會(huì)話數(shù)據(jù)庫中讀取的,并且依照一組規(guī)則來對(duì)接收分組進(jìn)行檢查,以便確定是否允許或拒絕分組。
文檔編號(hào)H04L29/06GK1518823SQ02809505
公開日2004年8月4日 申請(qǐng)日期2002年5月10日 優(yōu)先權(quán)日2001年5月9日
發(fā)明者羅內(nèi)·歌德伯格, 加蒂·丹內(nèi)利, 莫什·澤扎克, 卓利·肖哈特, 丹內(nèi)利, 澤扎克, 羅內(nèi) 歌德伯格, 肖哈特 申請(qǐng)人:意大利電信股份公司