我需要在 Cisco 设备上设置启用密码吗?

网络工程 思科 安全
2021-07-25 15:22:00

我正在设置 Cisco 2901 路由器。我在控制台线路上有一个登录密码,并且 vty 线路配置为仅接受具有公钥身份验证的 ssh 连接。辅助线关闭。只有两名管理员将访问路由器,我们都有权在路由器上执行任何配置。

我不是 Cisco 设备的专家,但我认为这足以保护对路由器配置的访问。但是,我读过的每一个指南都说明我应该设置一个启用密码,而不管其他用户或线路密码如何。

启用密码还有什么我不知道的吗?除了控制台、辅助或 vty 线路,还有其他方法可以访问路由器吗?

编辑: 我在下面添加了实际配置,以便更清楚地了解我的情况。以下工作,需要一个启用密码,或username除了ip ssh pubkey-chain.

aaa new-model

ip ssh time-out 60
ip ssh authentication-retries 2
ip ssh version 2
ip ssh pubkey-chain
 username tech
  key-hash ssh-rsa [HASH]
ip scp server enable

line vty 0 4
 transport input ssh
4个回答

不,你不会——从技术上讲。但是是否可以不进入启用模式取决于您的登录方式。

这是即时满足版本:

您可以在没有启用密码的情况下通过控制台进入,但是如果您使用简单的 vty 登录密码而没有设置启用密码,您将卡在用户模式中。

这是冗长的 StackExchange 回答者版本:

Cisco 身份验证对初学者来说有点麻烦。那里有很多遗留的包袱。让我试着在现实世界的意义上分解它。

每个有任何业务登录路由器或交换机的人几乎都会直接进入特权(启用)模式。用户模式基本上是一个前厅,除了保持草稿外没有什么作用。在拥有庞大网络和同样庞大劳动力的大型组织中,有一个可以敲前门并确保有人还在的人可能是合理的。(也就是说,登录并运行最简单的命令只是为了查看设备实际上正在响应而不是着火。)但是在我曾经工作过的每个环境中,第 1 层至少有一些能力打破东西。

因此,特别是在像您这样的情况下,知道启用密码是完成任何事情的必要条件。你可以说这是第二级安全——一个密码进入设备,另一个升级到管理权限——但这对我来说似乎有点傻。

如前所述,您可以(并且很多人都这样做)使用相同的密码,如果有人通过 telnet/ssh 获得未经授权的访问,这没有多大帮助。每个人都共享静态的全局密码可以说比只需要一个令牌输入更成问题。最后,大多数其他系统(服务、设备等)不需要第二层身份验证,因此通常不会被认为是不安全的。

好的,这就是我对这个话题的看法。您必须根据自己的安全立场自行决定这是否有意义。让我们转到工作上。

思科(明智地)要求您默认设置远程访问密码。当您进入线路配置模式时...

router> enable
router# configure terminal
router(config)# line vty 0 15
router(config-line)#

...您可以告诉路由器跳过身份验证:

router(config-line)# no login

...并立即被黑客入侵,但您的攻击者最终将进入用户模式。因此,如果您设置了启用密码,则至少在一定程度上限制了可以造成的损害。(从技术上讲,如果没有启用密码,您也无法继续前进。稍后会详细介绍...)

自然,现实生活中没有人会这样做。默认情况下,根据常识,您的最低要求是设置一个简单的密码:

router(config-line)# login
router(config-line)# password cisco

现在,您将被要求输入密码,您将再次进入用户模式。如果您通过控制台进入,则只需键入enable即可访问,而无需输入其他密码。但是通过 telnet 情况有所不同,您可能会在那里得到这个:

$ telnet 10.1.1.1
Trying 10.1.1.1...
Connected to 10.1.1.1.
Escape character is '^]'.


User Access Verification

Password: *****
router> enable
% No password set
router> 

继续……您可能已经知道,默认情况下,您配置的所有密码都显示为纯文本:

router# show run | inc password
no service password-encryption
 password cisco

这是收紧安全意识括约肌的事情之一。这是否是合理的焦虑再次是您必须自己决定的事情。一方面,如果您有足够的权限查看配置,则您可能有足够的权限来更改配置。另一方面,如果您碰巧不小心将您的配置透露给自己没有手段的人,那么......好吧,现在他们确实有手段。

幸运的是,上面代码片段中的第一行no service password-encryption是改变它的关键:

router(config)# service password-encryption
router(config)# line vty 0 15
router(config-line)# password cisco

现在,当您查看配置时,您会看到:

router(config-line)# do show run | begin line vty
line vty 0 4
 password 7 01100F175804
 login
line vty 5 15
 password 7 01100F175804
 login
!
!
end

这比纯文本密码稍微好一点,因为显示的字符串不够令人难忘,无法肩冲浪。然而,解密是微不足道的——我在这里松散地使用这个词。您可以将上面的字符串直接粘贴到第一个 Google 结果页面上的十几个 JavaScript 密码破解程序中的一个中,然后立即取回原始文本。

这些所谓的“7”密码通常被认为是“混淆的”而不是“加密的”,以突出这样一个事实,即它总比没有好。

然而,事实证明,所有这些password命令都被弃用了。(或者,如果不是,则应该是。)这就是您有以下两个选择的原因:

router(config)# enable password PlainText
router(config)# enable secret Encrypted
router(config)# do show run | inc enable
enable secret 5 $1$sIwN$Vl980eEefD4mCyH7NLAHcl
enable password PlainText

秘密版本是用单向算法散列的,这意味着获取原始文本的唯一方法是通过蛮力——也就是说,尝试每个可能的输入字符串,直到您碰巧生成已知的散列。

当您在提示符下输入密码时,它会通过相同的散列算法,因此应该最终生成相同的散列,然后将其与配置文件中的进行比较。如果它们匹配,则接受您的密码。这样,路由器不知道纯文本,除非在您创建或输入密码的那一刻。注意:其他输入总是有可能产生相同的哈希值,但从统计上看,这是一个非常低(读取:可以忽略不计)的概率。

如果您自己使用上述配置,路由器将允许enable passwordenable secret线路同时存在,但密码提示中的密码将获胜。这是那些没有多大意义的思科主义之一,但它就是这样。此外,secret在行配置模式下没有等效的命令,因此您会在那里使用混淆密码。

好的,所以我们现在有一个无法从配置文件中(轻松)恢复的密码——但仍然存在一个问题。当您通过 telnet 登录时,它以纯文本形式传输。不好。我们想要 SSH。

SSH 的设计考虑到了更强大的安全性,需要一些额外的工作——以及具有特定功能集的 IOS 映像。一个很大的区别是简单的密码已经不够用了。您需要升级到基于用户的身份验证。当你在做的时候,设置一个加密密钥对:

router(config)# username admin privilege 15 secret EncryptedPassword
router(config)# line vty 0 15
router(config-line)# transport input ssh
router(config-line)# no password
router(config-line)# login local
router(config-line)# exit
router(config)# ip ssh version 2
router(config)# crypto key generate rsa modulus 1024

现在你正在用煤气做饭!请注意,此命令使用secret密码。(是的,您可以但不应该使用password)。privilege 15部分允许您完全绕过用户模式。登录后,您会直接进入特权模式:

$ ssh admin@10.1.1.1
Password: *****

router#

在这种情况下,无需使用启用密码(或机密)。

如果你还没有想,“哇......什么clusterfudge是”,请记住有一个整体的其他长篇大论后仍潜伏在后面的命令aaa new-model,你在哪里得到潜入之类的外部认证服务器(RADIUS 、TACACS+、LDAP 等)、身份验证列表(定义要使用的来源和使用顺序)、授权级别和用户活动记帐。

当您想暂时离开路由器时,请暂时保存所有这些内容。

希望有帮助!

是的,您需要将其设置为某些内容。这就是IOS的工作方式。如果需要,您可以将其设置为与您的登录密码相同。

对于多个用户,我建议您设置 AAA 身份验证,这将允许您直接进入启用模式,而无需输入其他密码。它还允许您跟踪单个管理员的活动。(但您仍然需要将启用秘密密码设置为某些内容。)

aaa new model
aaa authentication login default local
aaa authorization enable default local

username chen-li password foo privilege 15
username safar password bar privilege 15

要添加到此处的现有信息。

enable

设置enable密码的第一个选项enable password

Switch(config)#enable password passfoo
Switch#show running-config | include enable
enable password passfoo

如您所见,密码以纯文本形式存储。这很糟糕

第二个是enable secret

Switch(config)#enable secret ?
  0      Specifies an UNENCRYPTED password will follow
  5      Specifies a MD5 HASHED secret will follow
  8      Specifies a PBKDF2 HASHED secret will follow
  9      Specifies a SCRYPT HASHED secret will follow
  LINE   The UNENCRYPTED (cleartext) 'enable' secret
  level  Set exec level password
Switch(config)#enable secret passfoo
Switch#show running-config | include enable
enable secret 5 $1$cSF4$uydOsfi3J2vGT.77tuYWh1

这样更好至少我们现在有了密码的哈希值。然而,这仍然只使用盐渍的 MD5,所以它可能很容易用大单词列表和 openssl 破解。

第三个选项(也是这个答案的目的)是enable algorithm-type允许我们使用 PBKDF2 或 SCRYPT。

Switch(config)#enable algorithm-type ?
  md5     Encode the password using the MD5 algorithm
  scrypt  Encode the password using the SCRYPT hashing algorithm
  sha256  Encode the password using the PBKDF2 hashing algorithm
Switch(config)#enable algorithm-type scrypt secret ?
  LINE   The UNENCRYPTED (cleartext) 'enable' secret
  level  Set exec level password
Switch(config)#enable algorithm-type scrypt secret passfoo
Switch#show running-config | include enable
enable secret 9 $9$dXjOMeJPYKOFbl$0D4.ItXi8yrjp.A9dt7Ew6tTgr3LYmMlzD672d.LjFk

这绝对是最好的

Philip D'Ath写了一篇关于为什么选择类型 9 的很好的总结。Thomas PorninIlmari Karonen提供了更深入的信息。

它基本上是一个额外的安全层。如果您没有支持服务密码加密的 IOS 版本,则仅启用密码加密,而控制台和 VTY 密码为明文。如果有人能够获得您的配置副本(例如从备份或远程登录的无人值守计算机),加密的启用密码将使您更难以控制您的路由器,即使他们可以远程登录。

即使使用加密的 VTY 和控制台密码,您仍然应该使用不同的启用密码以确保安全并提供额外的屏障。