强化路由器管理安全
2021-01-06河南刘景云
■ 河南 刘景云
编者按:网络管理人员经常使用到路由器或交换机进行网络管理,这就会涉及到许多相关的管理协议,例如Telnet、SSH、基于HTTP/HTTPS 的Web 访问以及SNMP 等。网络设备之所以可以接收和执行管理人员发出的指令,其主要是在管理层面发挥作用。在路由器等设备中,管理层面运行在进程级别,即其需要占用设备的CPU 和内存资源。这些设备在高效处理网络数据的同时,也会面临一系列的安全风险。
和设备管理相关的安全威胁
在管理层面会面临一些不可忽视的安全威胁,例如滥用路由器等设备的可用功能。
在默认情况下,网络设备会经常开启一些网管服务,但是管理员对安全性认识不足,没有为其配置必要的安全认证以及授权操作,导致任何用户都可以连接上来,进入网络设备的管理界面,进而随意执行各种操作。这对于网络安全威胁很大。
解决的方法是采取一些强有力的认证方式,以及使用RDBC(基于策略和规则的访问控制)等技术,对设备管理进行授权。这样,当有人试图对目标网络设备进行管理时,当连接请求发送到设备上后,设备就会对其进行安全认证,只有通过认证获得授权后,该用户才可以访问该设备,否则其将会被拒之门外。
值得说明的是,RDBC 还可以针对特定的管理命令(例如Enable 等)进行授权,只允许访问者使用许可范围的命令,对于之外的命令则禁止使用,这可以进一步保护设备的安全。
对于网络设备管理会话的欺骗,同样是不可忽视的安全威胁。当某个合法的用户访问目标设备时,在会话建立之后,必然会向该设备发送相关的操作指令。在此期间,如果有不法用户进行中间人攻击的话,这些指令就会被其拦截下来。该不法用户对这些指令进行恶意修改后,再发送给目标设备,实现渗透攻击的目的。这就是该种攻击的原理。
解决的方式是对该会话进行加密处理来进行保护。当然,也可以对访问行为进行过滤,将不安全的用户设备排除在外。
提高管理安全性的方法
针对管理层面的安全威胁,可以采取相应的技术手段进行防御。例如,部署管理层面的访问控制(即MPP),其原理是通过访问控制列表,只允许安全的源来接入网络设备,并进行网络管理。部署RBAC 基于规则的访问控制,在网络设备上部署安全的SNMP(例如SNMP v3 等)管理机制,针对思科的IOS镜像进行数字签名,部署设备中CPU 和内存的阈值等,都可以有效提高管理层面的安全。
在具体部署管理层面安全特性时,需要考虑必要的条件。例如,在设备上允许运行哪些网络协议,限制哪些不必要的协议,即在设备上运行尽可能少的管理协议,来降低安全风险。
例如,出于安全考虑,最好使用SSH 连接来访问设备,禁用安全性较差的Telnet访问。对管理流量进行控制,即允许尽可能少的源对设备进行管理。对管理设备的源会话进行控制,只允许特定的设备访问网络设备,禁止无关的设备接入。对用户的角色进行控制,即不同的用户扮演不同的角色,拥有不同的管理权限,诸如哪些用户可以使用哪些管理权限等。部署强有力的管理认证措施,当用户连接上来后,必须输入复杂的密码。
在分配用户访问权限时,应该本着权限最小化的原则,为它们分配尽可能小的权限,满足实际工作需要即可。
例如,可以按照需要规划不同的管理级别,将不同的用户划入对应的级别中,实现权限的区分操作。通过对IOS 镜像进行签名,只有被签名的IOS 才是被授权的ISO,防范黑客在IOS 镜像中嵌入木马设置后门等。
相关安全控制技术的特点
下面就在思科的IOS 软件环境下,分析如何配置管理层面的安全控制策略。
说到安全访问控制技术,就涉及到一些控制的方法,例如,可以使用基于端口的访问控制列表,让合法的流量可以顺利通过,丢弃非法的流量,即通过访问控制列表对管理层面的访问进行过滤。其优点是可以管控任何服务,限制访问本设备的任何流量,缺点是当接口数量较多时部署起来比较麻烦。
当然,也可以使用访问控制列表进行进程级别的访问控制,部署针对特殊服务的访问控制列表。例如,可以针对SSH 部署访问控制策略,当有流量试图访问目标设备的SSH 服务时,如果该访问流量的源位于访问列表之内,则允许其访问否则拒绝。其优点是配置简单便于管理,缺点是其无法限制所有的服务。
通过控制层面的保护技术,来限制管理层面的一些访问控制。控制层面和管理层面是紧密相关的,不同的网络设备之间要运行路由协议,必须通过控制层面的一些数据来进行交互。
这些数据的发送之前,必须在设备上针对相关的协议进行管理操作(例如设置相关参数等),之后才通过控制层面发送出去。其优点是管理和配置都比较容易,也可以限制任意服务,缺点是并非所有平台都对其支持,其对设备和软件的要求都很高,对于较老版本的设备无法对其提供支持。使用管理层面保护技术(MPP),优点是配置简单,并支持OOB(带外管理)访问控制,缺点是设备需要支持OOB。
搭建所需的网络环境
这里以一个简单的网络来说明如何实现以上保护技术。当然,基于端口的访问控制即使比较简单,这里就不再赘述。
在一台交换机上连接了R1、R2 和R3 三台路由器,R1 的F0/0 接口和交换机的F0/1 端口连接,R2 的F0/0接口和交换机的F0/20 端口连接,f0/1 接口和交换机的F0/21 端口连接,R3 的F0/0接口和交换机的F0/3 号端口连接。在交换机上执行“cdp neighbors”命令,可以查看连接的端口信息。
在交换机上执行“conf t”命令,进入全局配置模式,执行“vlan 10” “name luyou1”,创建VLAN10,并为其设置名称。执行“vlan 20” “name luyou2”命令,创建VLAN 20,并为其设置名称。执行:
将F0/1,F0/22 设置为Access 接口,加入到VLAN 10 中,并让其收敛的更快速。
执行以下命令:
将F0/3,F0/21 设置为Access 接口,加入到VLAN 10 中,并让其收敛的更快速。
这样,就将上述不同的端口规划到不同的VALN,实现了逻辑上分隔。在R1 上进入全局配置模式,执行以下命令,设置f0/0 端口的IP:
执行“ip route 0.0.0.0 0.0.0.0 10.1.1.2”命令,设置其默认路径,指定下一条的地址。同样地,在R2 上执行以下命令,分别设置两个端口的IP:
在R3 上执行以下命令:
设置这些端口的地址以及默认路由信息。
针对特殊服务,配置管控规则
组建好了所需的网络环境后,在R2 的全局配置模式下执行“line vty 0 15” 和“end”命令,开启VTY 访问接口。
执 行“username user1 password mima1”命令,为其设置访问的账户名和密码。执行“line vty 0 10”“login local” “end”命令,完成VTY 的配置操作。
在R2 上执行“ip domain name xxx.com”命令,创建一个域名。然后执行“crypt key generate rsa modulus 1024”命令,产生开启SSH 服务所需的密码。之后可以通过VTY 访问R2。
例如,可以在R1 上执行“telnet 10.1.1.2”命令,并输入上述账户名和密码,可以进入R2 管理界面。或者在R1 执行“ssh -l user1 10.1.1.2”命令,输入密码后,通过SSH 方式进入R2 管理界面。当然,在R3 上也可以执行同样的登录操作。
为了提高安全性,只允许特定的流量通过SSH 和SNMP对R2 进行管理。为此,我们可以在R2 上执行:
可以创建名为“100”的访问控制列表,并且只允许指定的IP 范围执行访问操作,对于非法的访问弹出Log信息。
执行“line vty 0 10”“access-class 100 in tran sport input ssh”命令,只允许上述ACL 列表中指定的范围的IP 访问,其余的流量将被禁止。
这样就只能在R1 上通过SSH 访问R2 的管理界面,在R3 上则禁止访问。因为R1的地址设置符合要求,这样即使有人知道了连接密码,在R3 上也无法对R2 进行管理,这有效提高了管理的安全性。
在R2 全局模式下执行“snmp-server community xxxxxx ro 100”命令,这样只有该ACL 指定的流量才可以通过SNMP 对R2 进行访问。其中的“xxxxxx”为具体的团体名。
使用控制层面保护,实现安全访问
除了针对特殊服务配置安全访问规则外,还可以使用控制层面的保护机制来实现安全访问。
首先在R2 上执行“no access -list 100” “line vty 0 10” “transport input all” “no access-class 100 in”等命令,清除上面的规则。然后执行“ip accesslist extended kzcaq”命令,来创建名为“kzcaq”的扩展控制列表。执行“deny tcp 10.1.1.0 0.0.0.255 any eq 22” “deny tcp 10.1.1.1.0 0.0.0.255 any eq 23”命令,禁止指定的IP 范围访问本机的TCP 22 和23 端口,即将这些流量排除在外。执行“permit tcp any any eq 22” “permit tcp any any eq 23” “exit”命令,允许其余的任意地址访问本机的TCP 222 和23 端口。
这样,只有符合要求的流量才可以访问。执行“classmap routecpp”命令,创建名为“routecpp”的Class-MAP。执行“match accessgroup name kzcaq”命令,将上述指定的流量匹配过来。执行“exit” “policymap xycpp1”命令,创建名为“xycpp1”的Policy-MAP。执行“class routecpp”“drop” “exit” “controlplane host” “servicepolicy input xycpp1” “end”命令,将上述许可的流量丢弃。对于上述禁止的流量来说,则允许其访问R2 上的SSH 和Telnet 服务。这是因为使用了“drop”命令的缘故。从R1 的地址发起的连接所产生的流量位于非丢弃的范围,所以可以从R1 上使用Telnet 或者SSH 连接,对R2 进行管理。
使用MPP 实现安全访问
使用管理层面安全控制,需要指定路由器上一个接口作为OOB 控制之用。其实现方法与上述基本相同,所不同的在于最后的指令。即将其中的“service-policy input xycpp1”指令进行修改,并替换为“managementinterface f0/0 allow snmp ssh”命令,也就是将“f0/0”接口设置为带外网管接口,只允许SNMP 和SSH 进行连接。当然,还可以设置其他的访问方式,包括FTP、HTTP、HTTPS、TFTP 以及Telnet 等。
其余的命令和上例基本相同。由于没有使用Telnet服务,所以可以将上述“deny tcp 10.1.1.0 0.0.0.255 any eq 23”改为“deny udp 10.1.1.0 0.0.0.255 any eq 161”,来允许SNMP 服务。之后在R2 上执行“show mana gement-interface”命令,显示管理接口以及允许的访问协议。
这样,R1 就可以通过SSH或者SNMP 方式顺利访问R2,而R3 则无法访问。
注意,如果要删除上述命令,建议使用“no manage ment-interface f0/0 allow”命令来实现。