灵活匹配数据包强化网络安全控制
2018-03-04河南刘建臣
■ 河南 刘建臣
编者按:使用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访问功能。
配置FPM策略 保护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技术可以针对所有程序产生的数据流进行控制。例如对于常用的某款聊天工具来说,也可以使用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方式进行登录,当然对该类登录方式进行控制,采用的方法是类似的,这里不再赘述。