■ 河南 劉建臣
編者按:使用FPM(即Flexible Packet Matching,靈活的包匹配技術(shù))可以對數(shù)據(jù)包進(jìn)行匹配,之后對其采取所需的安全控制措施。FPM也被稱為下一代的訪問控制列表,普通的ACL只能對傳輸層中的源地址和目的地址,網(wǎng)絡(luò)層中的源IP、目的IP以及協(xié)議號(hào)等對象進(jìn)行安全控制。但是,ACL所能控制的內(nèi)容對于整個(gè)數(shù)據(jù)流來說,范圍其實(shí)是很小的。使用FPM技術(shù)則可以針對整個(gè)數(shù)據(jù)流進(jìn)行深度控制。
本例中存在R1、R2和R3三臺(tái)路由器, R1通過F0/0接口和R2的F0/0接口連接,IP分別為192.168.1.11/24和 192.168.1.12/24。R2通過F0/1接口和R3的F0/0接口連接,IP分別為172.16.1.12和172.16.1.13/24。
在R1上存在IP為1.1.1.1/24的環(huán)回口,在R2上存在IP為2.2.2.2/24的環(huán)回口,R3上存在IP為3.3.3.3的環(huán)回口。通過合理配置路由信息,讓三臺(tái)路由器可以正常通訊。在R1上可以通過Telnet對R3進(jìn)行訪問,但是當(dāng)R3返回給R1時(shí),必然要經(jīng)過R2,通過使用FPM技術(shù),在R2上捕獲并丟棄這些返回的數(shù)據(jù)包。
這樣,當(dāng)R1訪問R3的Telnet時(shí),按照正常的情況,R3會(huì)返回相應(yīng)的數(shù)據(jù)包后,在R1上才會(huì)顯示輸入賬戶名和密碼的提示信息,因?yàn)樵赗2上已經(jīng)捕獲并丟棄了這些數(shù)據(jù)包,在R1上自然無法顯示這些信息。這樣,就可以防止其他用戶通過R1對R3進(jìn)行Telnet訪問,從而保護(hù)了R3的安全。
在具體實(shí)現(xiàn)時(shí),三臺(tái)路由器需要連接在某臺(tái)交換機(jī)上,R1連接到交換機(jī)的Fas 0/3接口,R2分別連接到交換機(jī)的Fas 0/21和Fas 0/20接口,R3連接到交換機(jī)的Fas 0/4接口。在該交換機(jī)的管理界面執(zhí)行“conf t”命令,進(jìn)入全局配置模式,執(zhí)行“vlan 10”、“name xn1”命令,創(chuàng)建名為“xn1”的VLAN。執(zhí)行“vlan 20”、“name xn2”命令,創(chuàng)建名為“xn2”的VLAN。
執(zhí) 行“intrangf0/3,f0/20”、“switchport mode access vlan 10”、“spanning-tree portfast”命 令,將 f0/3和f0/20加入VLAN10,并打開生成樹的Fastport接口。執(zhí)行“int rang f0/4,f0/21”、“switchport mode access vlan 20”、“spanning-tree portfast”命令,將f0/4和f0/21加入到VLAN 20 中。
在R1上執(zhí)行“conft”命令,在全局配置模式中執(zhí)行“inl0”、“ipadd1.1.1.1255.255.255.0”、“interf0/0”、“ipadd192.168.1.11255.255.255.0”、“noshut”、“iproute0.0.0.00.0.0.0192.168.1.12”命令,設(shè)置R1的環(huán)回口以及F0/0接口的IP,閉關(guān)設(shè)置默認(rèn)路由,下一條指向R2的F0/0接口。
在R2上執(zhí)行“intl0”、“ipadd2.2.2.2255.255.255.0”、“intf0/0”、“ipadd192.168.1.12255.255.255.0”、“noshut”命令,設(shè)置環(huán)回口IP和f0/0接口IP。執(zhí)行“intf0/1”、“ipadd192.168.1.12255.255.255.0”、“noshut”、“iproute1.1.1.1255.255.255.0192.168.1.11”、“iproute3.3.3.3255.255.255.0172.16.1.13”指令,設(shè)置f0/1接口IP,并設(shè)置兩條靜態(tài)路由,分別指向R1和R3。
在R3上執(zhí)行“inl0”、“ipadd3.3.3.3255.255.255.0”、“intf0/0”、“ipadd23.1.1.1.3255.255.255.0”、“noshut”、“iproute0.0.0.00.0.0.0172.16.1.12”命令,設(shè)置其環(huán)回口和f0/0接口的IP,并設(shè)置一條默認(rèn)路由,將下一跳指向R2的f0/1接口。
這樣,R1、R2和R3之間就可以正常通訊了。在R3上進(jìn)入全局配置模式,執(zhí)行“usernameuser1password123456”命令,創(chuàng)建一個(gè)名稱為“user1”,密碼為“123456”的賬戶。分別執(zhí)行“l(fā)inevty04”、“l(fā)oginlocal”、“end”命令,開啟Telnet訪問功能。
在R2上 執(zhí) 行“more system:fpm/?”命令,可以查看FPM的目錄信息。執(zhí)行“more system:fpm/phdf/?”命令,顯示已經(jīng)集成的所有的PHDF文件,例如“ip.phdf”、“tcp.phdf”、“udp.phdf”等。執(zhí)行“more system:fpm/phdf/ip.phdf”命令,可以查看“ip.phdf”內(nèi)容,執(zhí)行“conf t”命令,在全局配置模式下執(zhí)行“l(fā)oad fpm”命令,可以加載所有的PHDF文件,當(dāng)然,可以根據(jù)需要加載所需的PHDF文件??梢詧?zhí)行“l(fā)oadprotocolsystem:fpm/phdf/ip.phdf”命令,僅僅加載“ip.phdf”文件。
同理,可以加載所需的其他PHDF文件(例如“tcp.phdf”)。當(dāng)R1對R3進(jìn)行Telnet訪問時(shí),在返回的信息中會(huì)顯示“UserAccessVerification”字符串。如果在R2上過濾并丟棄包含該內(nèi)容的數(shù)據(jù)包,那么R1就無法得到R3的響應(yīng),就會(huì)造成R1無法進(jìn)行之后的認(rèn)證操作,自然無法對R3進(jìn)行Telnet訪問了。通過對Telnet連接的數(shù)據(jù)包進(jìn)行分析,發(fā)現(xiàn)該字符串位于“TransmissionControProtocol”字段后面的4個(gè)字節(jié)的偏移量處。在R2上執(zhí)行“class-maptypestackmatch-allclass1”命令,創(chuàng)建名為“class1”的針對協(xié)議頭部的堆棧Class-Map,用來指定捕獲的數(shù)據(jù)包的協(xié)議類型。
執(zhí) 行“match field ipprotocoleq0x6 next tcp”命令,進(jìn)一步匹配了IP協(xié)議下面的協(xié)議號(hào)6的TCP類型。 執(zhí) 行“exit”、“classmap access-control matchall class”命令,創(chuàng)建名為“class2”的Access Control的Class-Map。執(zhí)行“match start tcp payloadstart offset 4 size 100 string “User Access Verification”命令,從數(shù)據(jù) 包 中 的“transmission Control Protocol”字段的四個(gè)字節(jié)的偏移量處開始匹配,并且檢測其中的100個(gè)字節(jié),如果其中包含“User Access Verification”字符串則匹配成功。執(zhí)行“conf t”、“policy-map type access-control policy1”命令,創(chuàng)建名為“policy1”的Policy-Map。執(zhí)行“class class2”、“drop” 命 令,對Class2進(jìn)行調(diào)用,并丟棄合乎上述條件的數(shù)據(jù)包。
執(zhí) 行“exit”、“policymap type access-control policy2”、“class class1”、“service-policy policy1”、“end”命 令,創(chuàng) 建 名 為“policy2”的 Policy-Map,并調(diào)用Class1將其和Policy1進(jìn)行關(guān)聯(lián)。這樣對于Class1來說,匹配了一些協(xié)議,對于Class2來說則匹配了數(shù)據(jù)包中的一些字段。通過Policy1調(diào)用Class2中匹配的字段并將對應(yīng)的數(shù)據(jù)包丟棄,通過Policy2調(diào)用Class1值,只要是匹配這些協(xié)議中的內(nèi)容,全部都執(zhí)行Policy1策略,實(shí)現(xiàn)層次化的關(guān)聯(lián)體系。因?yàn)閷τ赗2來說,其接收R3返回給R1的數(shù)據(jù)包的接口是F0/1,所以需要將上述策略綁定到該接口。
執(zhí) 行“conf t”、“int f0/1”、“service-policy type access-control input policy2”、“end” 命 令,將Policy2策略綁定到該接口,對進(jìn)入的指定流量進(jìn)行控制。這樣當(dāng)在R1上對R3進(jìn)行Telnet訪問時(shí),因返回的數(shù)據(jù)包被R2丟棄,所以R1是無法對R3進(jìn)行Telnet連接的。
從以上簡單的測試可以看出,F(xiàn)PM技術(shù)對于保護(hù)網(wǎng)絡(luò)連接的安全是很重要的,可以針對數(shù)據(jù)流中的某些數(shù)據(jù)包進(jìn)行深度檢測,將數(shù)據(jù)包中的某些字段匹配出來,并進(jìn)行Drop之類的操作,將惡意數(shù)據(jù)包丟棄。
當(dāng)然,使用FPM技術(shù)可以針對所有程序產(chǎn)生的數(shù)據(jù)流進(jìn)行控制。例如對于常用的某款聊天工具來說,也可以使用FPM控制。對于一般的內(nèi)網(wǎng)來說,必然會(huì)在內(nèi)網(wǎng)客戶端和處于外網(wǎng)的該聊天工具服務(wù)器之間產(chǎn)生特定流量信息。使用專用抓包分析工具進(jìn)行嗅探后,可以了解該聊天軟件數(shù)據(jù)包的內(nèi)容。
因?yàn)樵摿奶燔浖腔赨DP協(xié)議運(yùn)作的,所以在這些數(shù)據(jù)包中會(huì)顯示UDP信息,包括客戶機(jī)的IP和端口以及該聊天軟件服務(wù)器的IP和端口信息。緊隨其后的信息是該聊天軟件獨(dú)有的內(nèi)容,例如數(shù)據(jù)包頭、版本標(biāo)識(shí)、命令、順序號(hào)、加密數(shù)據(jù)、數(shù)據(jù)包尾等內(nèi)容。例如在其中的“Command”字段中如果顯示186字樣,說明該數(shù)據(jù)包和登錄行為有關(guān)。
在實(shí)際網(wǎng)絡(luò)管理中,有時(shí)并不希望內(nèi)網(wǎng)用戶隨意使用該聊天軟件,那么只需要在路由器上使用FPM技術(shù),對包含該特征信息的數(shù)據(jù)包進(jìn)行攔截,內(nèi)網(wǎng)客戶端因?yàn)椴荒芎驮摿奶燔浖?wù)器之間傳遞登錄令牌,所以無法進(jìn)行登錄操作。
這里仍然在上述R2路由器上進(jìn)行操作,因?yàn)樯婕暗経DP協(xié)議,所以需要執(zhí)行“conf t”、“l(fā)oad protocol system:fpm/phdf/udp.phdf”命 令,加 載UDP的PHDF文 件。 執(zhí) 行“classmap type stack matchall ltclass1”命令,創(chuàng)建名為“l(fā)tclass1”的針對協(xié)議頭部的堆棧Class-Map,用來指定捕獲的數(shù)據(jù)包協(xié)議類型。執(zhí)行“match field ip protocol eq 0x11 next udp”命令,進(jìn)一步匹配了udp協(xié)議下面的協(xié)議號(hào)11的數(shù)據(jù)包類型。執(zhí)行“exit”,“class-map access-control match-all ltclass2”命令,創(chuàng)建名為“l(fā)tclass2”的Access Control的 Class-Map。
執(zhí)行“match start udp payload-start offset 3 size 2 eq 0xBA命令,在該聊天軟件數(shù)據(jù)包中的UDP協(xié)議字段之后偏移3個(gè)字節(jié)。因?yàn)樵摿奶燔浖?shù)據(jù)包中的命令字段占用了2個(gè)字節(jié),內(nèi)容是十六進(jìn)制的186(即 0x00ba),所 以 尺 寸 需要精確設(shè)定,這需要根據(jù)捕獲的數(shù)據(jù)包的情況來決定。執(zhí) 行“conf t”,“policymap type access-control ltpolicy1”命令,創(chuàng)建名為“l(fā)tpolicy1”的 Policy-Map。執(zhí) 行“class ltclass2”,“drop”命令,對ltClass2進(jìn)行調(diào)用,并丟棄合乎上述條件的數(shù)據(jù)包。
執(zhí) 行“exit”、“policymap type access-control ltpolicy2”、“class ltclass1”、“servicepolicy ltpolicy1”、“end”命令,創(chuàng)建名為“l(fā)tpolicy2”的Policy-Map,并 調(diào) 用ltclass1將其和ltpolicy1進(jìn)行關(guān)聯(lián)。之后按照上述方法將該策略綁定特定的網(wǎng)絡(luò)接口上,讓其針對進(jìn)入或發(fā)出的數(shù)據(jù)包進(jìn)行控制。當(dāng)然,這里僅僅列舉了簡單的例子來說明FPM的控制方法。因?yàn)樵摿奶燔浖卸喾N登錄方法,即使UDP數(shù)據(jù)包被丟去,其還會(huì)采用HTTP方式進(jìn)行登錄,當(dāng)然對該類登錄方式進(jìn)行控制,采用的方法是類似的,這里不再贅述。