◆王 鵬 余慶豐
(61764部隊 海南 572000)
基于NetMagic的IP報文過濾器實驗
◆王 鵬 余慶豐
(61764部隊 海南 572000)
本實驗完成基于NetMagic的IP報文過濾。過濾IP通過NMAC協(xié)議向NetMagic寫入,具體實現(xiàn)是管理模塊對UM模塊的寄存器的寫操作。NetMagic在收到數(shù)據(jù)報文時,提取數(shù)據(jù)報文的源IP地址,與過濾IP地址進(jìn)行比對,若匹配則過濾,否則轉(zhuǎn)發(fā)報文。實驗結(jié)果顯示,NetMagic有效的實現(xiàn)了過濾規(guī)則寫入和IP報文過濾的功能。
NetMagic;報文過濾;NMAC協(xié)議;管理模塊
基于NetMagic平臺,進(jìn)行報文過濾的實驗,以此觀察對特定IP(特定MAC 、IP段、特定端口、端口段)的數(shù)據(jù)報文的過濾,達(dá)到有選擇訪問和進(jìn)入的目的,為探索內(nèi)部網(wǎng)絡(luò)和外部網(wǎng)絡(luò)防火墻的功效打下基礎(chǔ)。
讀取報文的IP部與設(shè)定的過濾IP進(jìn)行比對,匹配的報文就丟棄不轉(zhuǎn)發(fā)。核心機制就是規(guī)則IP的寫入和報文的處理分析。
規(guī)則IP的寫入是通過發(fā)送基于NMAC協(xié)議的規(guī)則報文,通過管理模塊對UM的寫操作;報文的處理是通過比對一般報文的源IP和規(guī)則IP,匹配的報文則丟棄不轉(zhuǎn)發(fā)。NetMagic中的UM模塊使用的轉(zhuǎn)發(fā)機制是bypass模式,報文經(jīng)由CDP轉(zhuǎn)發(fā),而不是UM轉(zhuǎn)發(fā)。因此,UM需要向CDP模塊的規(guī)則FIFO寫轉(zhuǎn)發(fā)規(guī)則,實現(xiàn)轉(zhuǎn)發(fā)或者丟包操作,轉(zhuǎn)發(fā)的報文來自CDP的數(shù)據(jù)FIFO。
(1) 軟件測試
①在發(fā)送端PC1生成指定格式的報文,收端檢測報文是否成功。
②規(guī)則報文的發(fā)送,寫入規(guī)則是否成功。
(2)硬件測試
①設(shè)定過濾IP的初始值,NetMagic能正確實現(xiàn)對特定報文的識別,對于匹配規(guī)則的報文,能正確地進(jìn)行丟棄而不轉(zhuǎn)發(fā)。對于不匹配的報文,能夠正確地進(jìn)行轉(zhuǎn)發(fā)。在接收端對收到的報文進(jìn)行抓包測試,過濾是否成功。
②接收規(guī)則報文,對特定的報文進(jìn)行識別,接收端PC2抓包測試,確定是否生成規(guī)則。
通過以上實驗和步驟,既可以對報文過濾的正確性進(jìn)行驗證,又可以分塊的實現(xiàn)功能,便于測試和調(diào)試。
硬件部分可以使用 Modlesim仿真來測試和驗證,通過查看輸出端的報文規(guī)則與相應(yīng)報文處理情況來進(jìn)行判斷。
圖1 實驗拓?fù)鋱D
說明:PC1是發(fā)送端,既可以發(fā)送一般報文,也可以發(fā)送規(guī)則報文;PC2是接收端,對過濾后的報文進(jìn)行接收。
預(yù)期NetMagic能對報文進(jìn)行正確的處理。對于指定源IP的報文能進(jìn)行過濾,對不匹配的報文能進(jìn)行正常轉(zhuǎn)發(fā)。為了便于測試,可以發(fā)送有限條匹配和不匹配的報文并在接收端進(jìn)行抓包動作。
(1)關(guān)鍵數(shù)據(jù)結(jié)構(gòu)與工作流程
軟件的功能是與硬件進(jìn)行溝通,往硬件UM部分寫入防火墻規(guī)則,并讀取相關(guān)信息。本軟件基于現(xiàn)有的nmac函數(shù)源碼,依據(jù)與硬件約定的寄存器和存儲器地址進(jìn)行編程,共分為三個部分。第一個部分是nmac函數(shù)源碼,實現(xiàn)連接硬件、輸入輸出函數(shù)、連接關(guān)閉等功能。第二個部分為規(guī)則寫入模塊,實現(xiàn)過濾器規(guī)則的界面輸入和傳輸功能。第三個模塊為過濾規(guī)則讀取模塊,實現(xiàn)過濾規(guī)則讀取與顯示功能。
下面將首先介紹過濾器規(guī)則寫入與讀取工作流程,然后再分模塊介紹。
首先需要介紹一下程序的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)——過濾規(guī)則。過濾規(guī)則是一個包含了指針的結(jié)構(gòu)體。該結(jié)構(gòu)體由源mac地址、源IP地址、源端口號、目的mac地址、目的IP地址、目的端口號、動作和指向相同結(jié)構(gòu)體的指針組成。下面是該結(jié)構(gòu)體的截圖。在controller(PC)中,可以由這樣的結(jié)構(gòu)體組成鏈表,表示一系列的規(guī)則。
此外,還需要介紹一個關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。第一個是每次與硬件溝通進(jìn)行規(guī)則配置、讀取等動作前需要寫入的數(shù)據(jù)。這個數(shù)據(jù)表明了本次是讀取規(guī)則、寫入規(guī)則還是將原有的規(guī)則清除。這個數(shù)據(jù)結(jié)構(gòu)還包含了需要寫入、讀取的規(guī)則數(shù)目。
另外,還有幾個關(guān)鍵數(shù)據(jù)需要說明。它們分別是UM模塊中過濾規(guī)則首地址、存放UM模塊中“規(guī)則數(shù)量”數(shù)據(jù)的地址以及存放上面“過濾規(guī)則包”信息說明結(jié)構(gòu)(rules_packhead)的地址。在程序中,與硬件設(shè)計人員約定好這幾個地址,并在頭文件中預(yù)定義好。
寫入規(guī)則的過程是:首先從界面中輸入規(guī)則各項信息,形成規(guī)則鏈表;寫入“過濾規(guī)則包”信息說明結(jié)構(gòu);寫入規(guī)則。讀取規(guī)則的過程是:寫入“過濾規(guī)則包”信息說明結(jié)構(gòu);讀取UM模塊中規(guī)則數(shù)量;讀取規(guī)則。清除規(guī)則的過程是:寫入“過濾規(guī)則包“信息說明結(jié)構(gòu)。
(2)過濾規(guī)則寫入過程
過濾規(guī)則通過黑屏幕寫入。程序運行后,將會提示。如果選擇輸入規(guī)則,則進(jìn)入到輸入規(guī)則的界面。進(jìn)入該界面后,需要分別輸入規(guī)則項。對于每一項,可以選擇輸入或者不輸入。如若選擇輸入,則需按照提示的格式輸入,如果選擇不輸入,則程序?qū)⒆詣由蓴?shù)據(jù),表明該項無效。規(guī)則輸入的過程如圖2所示。
圖2 規(guī)則輸入過程
輸入規(guī)則后,將會形成一個規(guī)則鏈表。寫入規(guī)則函數(shù)將這個鏈表的內(nèi)容復(fù)制到到一個緩沖區(qū)中,然后利用nmac的寫入源函數(shù)將這個緩沖區(qū)的數(shù)據(jù)寫入UM相應(yīng)位置。在寫入UM前,需要讀取UM模塊中現(xiàn)有的規(guī)則數(shù)量,通過約定好的規(guī)則首地址知道新的規(guī)則要寫入哪個地址。
(3)過濾規(guī)則讀取和清楚過程
過濾規(guī)則讀取過程相對比較簡單。首先寫入“過濾規(guī)則包”頭部,說明要讀取過濾規(guī)則。然后讀取UM模塊中的規(guī)則數(shù)量,根據(jù)約定好的規(guī)則頭部地址讀取過濾規(guī)則。讀取后用鏈表存儲,然后在屏幕上顯示即可。
UM硬件實現(xiàn)分為兩部分:(1)報文識別模塊;(2)規(guī)則寫入模塊。
3.2.1報文識別模塊
(1)信號說明
信號含義如表1和表2所示。
表1 CDP2UM的信號說明表
表2 向CDP的規(guī)則FIFO寫規(guī)則的信號
注意:因為我們采用bypass模式,故um2cdp_rule[29]=1。
(2)狀態(tài)機
L_Idle狀態(tài)UM向發(fā)送cdp2um_tx_enable,然后CDP向UM發(fā)送第一條報文,并跳到CU_FIRST狀態(tài)。
CU_FIRST狀態(tài)讀取第二條報文,其中[47:16]是源 ip,跳到下一個狀態(tài),CU_SECOND等是保留狀態(tài),以便以后對mac地址、端口等做過濾。
CU_FIFTH狀態(tài)向CDP規(guī)則FIFO寫規(guī)則CU_RULE狀態(tài)數(shù)據(jù)復(fù)位:
um2cdp_rule_valid <= 1'b0;
um2cdp_rule_wrreq <= 1'b0;
cdp2um_tx_enable <= 1'b1;
然后回到CU_IDLE狀態(tài)。
圖3 報文識別模塊狀態(tài)機
(3)時序
①CDP2UM的時序
當(dāng)UM模塊資源空閑,有能力從CDP接收一個新的報文時,則給 CDP輸入控制模塊一個發(fā)送使能信號 cdp2um_tx_enable。CDP輸入控制模塊獲得該使能信號后,同時向 UM和輸入輸出FIFO發(fā)送139位寬的報文數(shù)據(jù)cdp2um_data,并發(fā)送一個報文有效信號cdp2um_data_valid,此信號表明了報文的開始、中間和結(jié)束。UM一旦獲得了報文的頭部,就可以取消使能信號cdp2um_tx_enable,直到報文接收完畢。輸入控制模塊給 UM的報文是連續(xù)的。當(dāng)一個報文發(fā)送結(jié)束后,UM可以重新產(chǎn)生發(fā)送使能信號,進(jìn)行下一個報文的上傳。(參考NetMagic 08 UM設(shè)計規(guī)范)。
②寫rule的時序
UM接收到一個報文尾,且規(guī)則FIFO有剩余空間時,將規(guī)則寫信號 um2cdp_rule_wrreq置高一拍,同時把匹配規(guī)則發(fā)送給CDP輸出控制模塊。
3.2.2規(guī)則寫入模塊
(1)信號說明
表3 規(guī)則寫入模塊的信號
(2)狀態(tài)機
圖4 規(guī)則寫入模塊狀態(tài)機
①UM檢測到ale=1且wr=0,跳到addr狀態(tài)并采樣地址并判斷。如果為自己的地址空間則繼續(xù)往下執(zhí)行。如果不為自己的地址空間則不繼續(xù)往下執(zhí)行而是等待下一次操作;
②如果為自己的地址空間,則跳到wait狀態(tài);
③UM檢測到Cs_n=0&rd_wr=0,則跳到data狀態(tài)讀取數(shù)據(jù);
④UM檢測到片選信號為1之后(data讀取完畢),跳到了idle狀態(tài)。
(3)時序
管理模塊寫UM管理模塊把解析后的命令及數(shù)據(jù)發(fā)送給UM。UM獲得命令及數(shù)據(jù)后,對相應(yīng)的地址空間進(jìn)行讀寫操作。如果為寫操作,則UM完成寫操作后,只需返回應(yīng)答信號即可。管理模塊時序圖如圖5所示。
圖5 管理模塊時序圖
通過檢查rule的變化判斷是否過濾成功。首先,我們發(fā)的是一條理論上不被過濾的報文,我們可以看到rule從32’b0變成32’b10000000000000000000000000000010(即 30'h20000002),這代表報文正常轉(zhuǎn)發(fā);接著,我們發(fā)了一條理論上要被過濾的報文 , 我 們 可 以 看 到 rule從 32’b10000000000000000000000000000010變 成 了 32’b10001000000000000000000000000010(即 30'h22000002),這代表報文被丟棄。rule的變化過程如圖6所示。
rule第一次變化 rule第二次變化
圖6 rule變化過程
通過軟件給UM發(fā)送規(guī)則報文,寫過濾IP為 192.168.1.3,經(jīng)過發(fā)送192.168.1.3的IP報文和檢驗接收端是否收到該報文,就可以檢驗規(guī)則報文是否成功寫入和過濾功能是否實現(xiàn)。
測試時,我們設(shè)定接收端PC的IP是192.168.1.2。
注意:輸入端口是port3,輸出端口是port2。也就是說,PC1連接NM的port3,PC2連接NM的port2。注意端口不要接反了,剛開始測試的時候,因為端口接反了,造成測試不成功,及時發(fā)現(xiàn)后,改正回來就OK了。
(1)設(shè)定發(fā)送端的IP是192.168.1.1。
在發(fā)送端PINK接收端,如圖7所示,發(fā)送成功。這是因為IP 192.168.1.1不是我們要過濾的報文IP。
圖7 發(fā)送測試情況
(2)設(shè)定發(fā)送端的IP是192.168.1.3。
在發(fā)送端PINK接收端,如圖8所示,發(fā)送不成功。這是因為IP 192.168.1.3就是我們要過濾的報文IP。而且,這證明了我們的規(guī)則報文也成功寫入UM。
圖8 發(fā)送測試情況
經(jīng)過多次測試,都成功完成了寫入規(guī)則和過濾IP的目標(biāo)。
注意:輸入端口是port3,輸出端口是port2。注意port3發(fā)到port2要經(jīng)過過濾IP,port2到port3不經(jīng)過過濾IP,但是要建立通路,這個通路是很重要的,剛開始沒有建立這個通路,實驗沒成功;后來增加了這個通路后,完全達(dá)到了我們的設(shè)計目標(biāo)。
通過仿真實驗,驗證了NetMagic基于源IP的報文過濾功能。實驗表明,NetMagic能正確完成設(shè)定的功能,對于匹配規(guī)則的數(shù)據(jù)報文進(jìn)行過濾,對不匹配規(guī)則的數(shù)據(jù)報文進(jìn)行轉(zhuǎn)發(fā)。
[1] 曹成周,毛健彪,孫志剛,尹佳斌,林琦,龔小林.NetMagic平臺硬件開發(fā)方法[J].計算機工程與科學(xué),2014.
[2] 孫志剛,李韜.基于可編程實驗平臺NetMagic的路由交換原理實驗教學(xué)[J].計算機教育,2016.
[3] 楊錦,姚望.基于 NetMagic的城域網(wǎng)流量仿真研究[J].電子質(zhì)量,2012.
[4] 毛席龍,彭立宏,孫志剛,李韜.依托NetMagic平臺推動計算機網(wǎng)絡(luò)課程創(chuàng)新實踐[J].計算機教育,2013.
[5] 毛席龍,程輝.基于NetMagic的流媒體傳輸延時抖動均方差估計[J].現(xiàn)代電子技術(shù),2012.