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