9.11 安全管理

如果希望网络是安全的,那么就要求路由器必须是安全的。密码是一种控制对路由器进行访问的方法,可以在路由器上配置密码,也可以使用TACACS+或RADIUS服务器。除了密码保护之外,还要将对路由器的交互式访问局限到必需的协议和用户,即仅启用让路由器正常工作和管理的必要协议,并且仅允许那些被确认安全的IP子网访问路由器。即便部署了访问控制机制,仍会有一些恶作剧的网络用户试图阻止路由器正常工作。接下来的几个小节将详细讨论为路由器提供安全和正常工作所需的路由器配置参数。

9.11.1 密码类型和加密

应通过某种认证机制来控制对路由器的访问行为,如果无法使用TACACS+或RADIUS,那么也应该利用enable secret来保护拥有特权的EXEC路由器访问模式。需要注意的是,不要使用早期的enable password,因为该命令的加密算法比较弱,而命令enable secret password通过使用一直不可逆的加密函数来存储启用秘密密码(enable secret password),因而可以提供更好的安全性。当配置文件(因而也包含密码)需要穿越网络或被存储在TFTP服务器上时,这种由安全加密所提供的额外保护层是非常有用的。利用命令service password-encryption来加密各种密码(包括用户名密码、认证密钥密码、特权命令密码、控制台和虚拟终端行访问密码及BGP邻居密码),可以避免在显示路由器配置时被旁观者看见密码的内容。

9.11.2 控制交互式访问

需要控制对路由器的交互式访问行为,可以利用下述命令来限制访问特定的网络号。

access-class access-list_1-199_or_1300-2699 {in | out}

其中,变量access-list的作用是指定被允许连接到线路上的源网络号(带有关键字in),或者指定允许有连接的网络号(带有关键字out)。

为了确保不存在访问漏洞,可以仅允许所期望的远程接入协议,命令如下。

transport input telnet ssh

可以列出所有被允许的远程接入协议,其他任何协议都将被拒绝。

此外,除了需要在控制台端口和辅助端口上使用密码保护之外,还应该使用密码来保护所有连接到路由器上的调制解调器。

如果调制解调器仅被用于拨号接入(这样一来,网络管理员就可以在家中访问路由器),那么就应该禁用反向Telnet功能,以免从网络连接到调制解调器并拨出到其他网络位置。利用反向Telnet,通过指定一个端口号和IP地址,就可以连接到远程设备(该设备连接在路由器的异步端口上)上。通过在调制解调器所连接的线路上使用命令transport input none,即可在任何连接了异步终端或调制解调器(这些设备不应该被用作拨出设备)的接口上禁用反向Telnet。

例9-36的路由器配置中演示了上面讨论的所有访问控制方法。

例9-36:控制路由器上的交互式访问。

img560

从上例可以看出,仅允许Telnet和Secure Shell(安全外壳)这两种远程访问协议,并且仅允许源地址位于172.16.0.0/16范围之内的用户使用这些协议来访问路由器。

9.11.3 最小化DoS攻击的风险

DoS(Denial-of-service,拒绝服务)攻击会导致对某些网络资源的拒绝访问,虽然攻击者可以以多种方式来实施DoS攻击,但仍可以采取一定的措施来最小化针对路由器的DoS攻击所造成的风险。

路由器上的vty端口都有一定的数量限制,一旦这些端口都被占用,那么该路由器就无法建立其他远程会话,从而导致了DoS攻击的潜在威胁,攻击者可以阻塞所有的vty端口,从而拒绝网络管理员的访问要求。为此,可以在最后一个vty端口上配置一个约束性极强的命令access-class,仅允许指定的管理站访问该端口,这样至少可以保证有一个vty端口可用。此外,还要配置 exec-timeout以防止空闲会话无限制地消耗vty端口。为了防止恶意攻击和因远程系统崩溃而产生的“孤立”会话,可以利用命令service tcp-keepalives-in在入站连接上配置TCP保持激活消息。

某些DoS攻击使用定向广播机制,利用伪造的源地址向定向广播地址发送ICMP包,LAN上的所有主机都要做出回应,并向伪造的源地址发送大量的流量流,从而使得真正拥有该源地址的实际节点收到大量数据。只要在所有的LAN接口上都配置命令no ip directed-broadcast即可阻止该类攻击,IOS 12.0及以后版本都默认启用该命令。

携带选项source-route的IP包可以指定该数据包在源和目的地之间必须穿越的路由器,返回包也必须穿越这些指定的路由器。但是,由于源路由包中伪造的源地址会让某个节点旁路路由表,并将数据发送到伪造地址,因而几乎无法有效使用源路由包,这样就可以利用全局命令no ip source-route让路由器丢弃携带选项source-route的数据包。

快速数据包泛洪会导致路由器花费大量时间响应来自接口的中断(interrupt)要求,从而无暇处理其他工作。命令scheduler interval milliseconds的作用是让路由器停止处理这些中断要求,并按照常规间隔处理其他商业事务。更新的平台则可以使用命令scheduler allocate interrupt-time process-time。

其中,变量interrupt-time是路由器在任一个网络中断上下文(network-interrupt context)中进行快速交换所花费的最大毫秒数。变量process-time是禁用网络中断时,路由器在进程级(process level)所花费的最小毫秒数。

路由器可以运行各种小型服务程序进行故障诊断,不过在现实环境中很少使用。TCP服务有Echo、Chargen、Discard和Daytime,UDP服务有Echo、Chargen和Discard。攻击者可以向这些服务泛洪流量,从而影响路由器的路由能力。下述命令可以禁用这些服务。

no service tcp-small-servers

no service udp-small-servers

Cisco IOS Software Release 12.0及以后版本在默认情况下都禁用这些服务。

在不被使用的情况下,应该被禁用的服务还有Finger和Async Line BOOTP Server(异步线路引导服务器),命令如下。

no service finger

no ip bootp server

Finger服务允许Finger协议向路由器发送请求,Finger协议请求等同于发起一个远程show user命令,可以显示路由器上的活动线路信息。

路由器可以向连接到异步线路上的主机提供BOOTP服务,使用命令no ip bootp server可以禁用这些BOOTP服务。

例9-37演示了利用前面所讨论的命令来最小化DoS攻击风险的配置方式。

例9-37:最小化DoS攻击。

img562

为了进一步保证路由器的安全性,可以配置一台远程认证和授权服务器(如TACACS+)。

9.11.4 TACACS+

TACACS+(Terminal Access Controller Access Control System Plus,终端访问控制器访问控制系统+)可以对试图访问路由器或网络接入服务器的用户进行集中验证。TACACS+应用程序驻留在服务器上,以守护进程的方式运行,并将接入权限信息存储在数据库中。当用户登录到配置了TACACS+的路由器时,路由器上的TACACS+客户和TACACS+守护进程将进行通信,向用户发送登录和密码提示符,并交换认证和授权信息。路由器也会向TACACS+守护进程发送记账信息,需要注意的是,用户与路由器之间的通信内容可能不会被加密,但路由器与TACACS+守护进程之间的所有通信内容都会被加密。

TACACS+可以提供认证、授权和记账信息,如下所示。

• TACACS+认证需要用户输入登录ID和密码,认证服务还可以向已登录用户发送各种消息,如要求用户更改密码等。

• TACACS+授权可以精细化地控制已登录用户的访问权限,授权在用户登录之后可立即自动执行,以提供访问控制或限制会话持续时间等功能。此外,授权机制还能限制用户在登录到路由器之后可以执行哪些命令。

• TACACS+记账机制负责收集相关信息以用于计费、审计、报告并发送给TACACS+服务器,记账记录包括用户身份、起始和停止时间、所执行的命令、数据包数和字节数等信息,这些信息对安全审计和计费来说非常有用。当利用TACACS+来控制用户对网络接入服务器(允许用户使用网络上的服务)的访问时,可能会非常希望获得计费信息。

1.TACACS+认证配置

路由器使用AAA来启用TACACS+,命令aaa new-model的作用是启用AAA。

定义认证方法列表的命令如下。

aaa authentication login {default | list_name} group auth_type [auth_type…]

常见的认证方法有tacacs+、radius、kerberos、local、line password、enable passwordnone。

定义了认证列表之后,就可以应用到线路上,关键字default会自动将这些认证列表应用到所有线路上。首次配置认证时,建议指定一个列表名称并采用手工方式将列表应用到线路上,这样就可以在可控方式下检测自己的配置文件,而不至于将自己锁定于路由器之外。

要想将认证列表应用到线路上,需要使用以下命令。

line type number

login authentication list_name

此外,还需要指定TACACS+服务器的位置,此时就需要使用命令tacacs-server host ip_address来指定TACACS+服务器的IP地址。

例9-38示范了某路由器的TACACS+认证配置情况。

例9-38:为某路由器配置TACACS+认证。

img563a

认证列表tac首先使用地址为172.16.1.2的TACACS+服务器进行认证。如果该服务器不可达,则使用第二种认证方法——enable password认证,该认证方法允许在TACACS+服务器不可用时访问路由器。认证列表中的某种认证方法不可用时才会使用其后一种方法,而如果该认证方法返回认证失败信息则不会再使用其后一种方法。例如,TACACS+服务器失效后就使用enable password;如果TACACS+服务器有效,但用户输入的ID有误,那么将会返回一个认证失败信息,并且不允许再尝试其他认证方法。

请注意,例9-38所示的认证列表仅应用于线路vty 0和vty 1,原因是用来进行测试。这样一来,即便TACACS+配置有误,仍然可以通过其他vty线路和控制台端口访问路由器。在将认证列表应用于所有线路之前,必须确认配置文件无误且满足自己的意图。

利用命令tacacs-server key key可以定义TACACS+共享加密密钥,必须在服务器的 TACACS+配置文件中定义相同的密钥。

在进入路由器的启用模式之后也可以使用TACACS+,命令为aaa authentication enable default group auth_type [auth_type]。

如例9-39所示,将配置命令增加到路由器Seattle上,以指定启用级认证(enable-level authentication)和TACACS+共享密钥。

例9-39:在路由器Seattle上指定启用级认证和TACACS+共享密钥。

img563b

例9-40显示了与例9-39中的路由器配置一致的TACACS+服务器的配置文件。

例9-40:与例9-39中的路由器Seattle配置一致的TACACS+服务器的配置文件。

img564

上述配置文件中配置了两个常规用户agensadmin,用户$enab15$被用于启用级认证(优先等级为默认值15),但启用级认证的一个副作用就是创建了一个名为$enab15$的用户,如果有人知道该密码,就可以利用该用户ID登录到路由器中。

由例9-39可以知道,需要输入用户名和密码才能访问路由器,仅当TACACS+服务器不可达时才使用普通的路由器登录ID。某些日志消息中会包含用户名,下列日志消息就显示了用户名、用户的IP地址以及配置变更的日期和时间。

Jun 20 16:42:32 UTC: %$YS-5-CONFIG_I: Configured from console by agnes on vtyO(10.1.2.25)

上述配置是一个非常基本的配置,TACACS+还可以提供更多的功能,如定义组且根据组成员关系指定权限(利用DES加密密码或UNIX密码文件)。


注意: 参考TACACS+用户指南可以全面了解实施规范,UNIX密码文件所支持的密码文件类型是passwd(5)。


2.TACACS+授权配置

TACACS+可以控制用户在路由器上进行哪些操作,可以应用访问列表、限制命令、允许PPP和SLIP访问等。TACACS+服务器会为每个用户都建立一个简档(profile),由该简档指定用户被授权做哪些操作。用户登录到路由器之后进行的所有操作都必须符合该用户简档的授权内容。

下述命令的作用是定义授权方法列表并将该列表应用到路由器的线路上。

aaa authorization {network | exec | commands level | reverse-access} {default | list-name} [method1 [method2…]]

line type number

authorization {arap | exec | commands level | reverse-access} {default | list-name}

必须在TACACS+服务器上配置用户简档,前面对TACACS+认证的注意事项也同样适用于TACACS+授权,一定要测试授权配置文件,并且在使用默认授权列表(将被应用于所有的线路和接口)或将某个已命名列表应用于所有线路之前配置一个无访问权限限制的用户。输入了上述命令之后,就可以将授权应用于路由器,授权会影响到现有的连接。此外,TACACS+的配置文件在默认情况下是无任何授权的,如果在路由器上配置了TACACS+授权且应用于所有的线路,但是没有在配置文件中允许任何操作,那么将无法执行任何命令。

例9-41中的TACACS+服务器配置文件中限制了Agnes的可用命令,但未对用户Admin做任何限制。

Agnes仅被允许执行命令show,其余操作均被禁止。

为了使用例9-41中的TACACS+配置,必须对路由器做一定的配置(详见例9-42)。

例9-41:TACACS+配置文件为不同用户提供不同的限制措施。

img565a

例9-42:与例9-41中TACACS+服务器配置相关的路由器授权配置。

img565b

请注意,在完全测试之前,不要将授权列表应用于所有vty端口。

与TACACS+认证类似,TACACS+授权也能提供更多的功能,本小节仅解释了TACACS+授权机制的一些简单应用,其他功能还有应用访问列表、增强自动命令、应用Telnet约束。

TACACS+记账机制则可以显示连接到路由器上的用户正在做什么。

3.TACACS+记账配置

TACACS+记账机制被用于记录用户的连接信息,包括连接时长、所输入的命令、目的地以及出站连接的时长等,这些信息对计费和安全审计来说十分有用。只要在路由器上使用AAA记账命令并在服务器上的TACACS+配置文件中指定记账文件名,即可启用TACACS+记账功能。

下述命令定义了与己命名列表相关的记账类型。

aaa accounting {system |network | exec | connection | commands level} {default | list-name} {start-stop | wait-start | stop-only | none} [method1 [method2…]]

line type number

accounting {arap | exec | connection | commands level} {default | list-name}

系统记账(system accounting)可以提供系统级事件(如系统重启或配置了记账功能)信息。网络记账(network accounting)可以提供PPP、SLIP或ARAP会话信息(包括数据包数和字节数)。EXEC记账(exec accounting)可以提供路由器上的EXEC终端会话信息,这些信息包括用户名数据以及会话的起止时间。连接记账(connection accounting)可以提供由该路由器发起的连接信息,这里所说的连接是telnet、LAT、tn3270、PADrlogin,数据包括目的地址、协议、起止时间、用户名以及所传送的数据包数和字节数。命令记账(command accounting)可以提供所输入命令的信息,这些命令通常都是level 1~level 15的命令(level 1命令是可以在任何登录等级输入的命令,而level 15命令只能用于启用等级)。命令记账会记录实际输入的所有命令(包括配置命令在内)。

要想将记账列表应用于线路,就需要使用子命令accounting [type] list-name。

要想在TACACS+服务器上配置记账功能,需要使用命令accounting file = filename(如例9-43所示)。

例9-43:在TACACS+服务器上配置记账功能。

img566a

例9-44显示了在路由器上启用命令记账和EXEC记账功能的配置情况。

例9-44:启用命令记账和EXEC记账。

img566b

由于使用的是默认记账列表,因而不需要在该配置中使用线路vty子命令,默认列表会被自动应用于所有线路和所有接口。

例9-45显示了某记账日志中的内容。

例9-45:记账日志显示了命令和EXEC记录。

img566c

从上述记账日志中可以看到已输入的命令以及EXEC会话,路由器Agnes在6月20日、星期二的10:34:24关闭了串行接口1,并在同一天的10:34:42终结了其EXEC会话,即会话持续了73秒钟。

可以利用记账信息进行安全审计,这在需要查看哪些人在路由器进行了操作时非常有用。此外,也可以利用记账信息进行用户计费,假设这些信息来自于NAS(Network Access Server,网络接入服务器),并且用户正在通过NASCAR访问网络资源,那么这些记账数据将显示Agnes连接时长为73秒,这样就可以对这73秒钟的网络使用行为进行计费。

9.11.5 RADIUS

RADIUS(Remote Access Dial-In User Service,远程访问拨号接入用户服务)可以提供与 TACACS+类似的功能(也有一些小的差异),RADIUS被设计用作对拨号接入访问某网络进行认证、授权和记账。RADIUS客户端驻留在路由器或NAS上,并与网络中的RADIUS服务器进行通信,主要的功能区别在于RADIUS无法像TACACS+那样控制用户可以在路由器上执行哪些命令。因而,在网络管理员希望严格控制不同用户所能使用的命令时,TACACS+是一种更好的路由器访问控制选择。

RADIUS由Livingston公司开发,其源代码完全公开且没有任何使用限制,目前有多种服务器实现,并且很多厂商的设备也都支持RADIUS客户端。

RADIUS在Cisco路由器上的配置方式与TACACS+一样,也是通过AAA命令。RADIUS服务器和TACACS+服务器可以共存于同一个网络中,为同一台路由器或NAS提供认证、授权和记账功能。

例如,某个设计目标可能希望使用RADIUS服务器来认证用户,在RADIUS服务器不可用时,则使用TACACS+服务器进行用户认证。例9-46显示了将RADIUS服务器设置为主用认证服务器,而将TACACS+服务器作为RADIUS服务器不可用时的备用认证服务器。

例9-46:在同一台路由器上同时启用RADIUS和TACACS+。

img567

启用RADIUS的方式与启用TACACS+的方式完全一样。

9.11.6 SSH

SSH(Secure Shell,安全外壳)可以在用户与路由器之间建立一条安全的加密连接,该连接的功能类似于入站Telnet会话。与Telnet不同的是,SSH连接属于加密连接,因而与Telnet采用明文方式在客户端与服务器(此处指的是路由器)之间传递数据(任何收集流量路径上的数据的网络分析仪都可以读取该数据)相比,SSH要远优于Telnet。如果使用Telnet访问路由器,那么就意味着,有意在路由器上加密的密码将以明文方式在网络上进行传送,而SSH可以加密该网络连接,因而不会以明文方式在客户端和路由器之间交换数据。虽然某些客户端支持RSA认证,但路由器上不支持用于SSH连接的RSA认证,SSH使用的认证方式只是用户ID和密码。

目前仅有7200、7500和12000系列路由器支持SSH,并且仅在DES和3-DES数据加密软件映像上支持SSH。此外,IOS目前仅支持SSH版本1。

要想在路由器上启用SSH,必须执行以下步骤。

• 第1步:在路由器上配置一个主机名和域名。

• 第2步:生成一个RSA密钥对。

• 第3步:启用本地或AAA认证。

• 第4步:如果使用AAA认证,那么就在控制台端口上禁用AAA认证。

• 第5步:配置可选的SSH参数。

利用以下命令即可配置主机名和域名。

hostname hostname

ip domain-name domainname

如果没有配置这些命令,那么在生成RSA密钥对的时候将会报告错误信息。

生成了RSA密钥对之后,SSH就被自动启用;当RSA密钥对被删除后,SSH也就被禁用。

命令crypto key generate rsa的作用是生成RSA密钥对并启用SSH,SSH可以使用本地认证(利用命令username),也可以使用AAA。请注意,一定要在控制台端口上禁用AAA。

SSH的参数可以修改默认的连接行为,可以修改应用于SSH协商阶段的超时值或指定认证重试次数。其中,超时值必须大于120秒,默认为120秒;认证重试次数不能大于5,默认为5。利用以下命令即可修改SSH参数。

ip ssh {[timeout seconds] | [authentication-retries integer]}

例9-47给出了一个基本的SSH配置情况。

例9-47:SSH配置。

img568

请注意,应用于控制台端口的AAA认证列表aaanone没有定义任何认证方法,而认证列表tacauth则被应用于所有的vty端口和辅助端口。