保护 Cisco 路由器访问






4.60/5 (3投票s)
配置思科 IOS 设备远程访问的一个简单最佳实践
引言
我决定发表这篇文章,即使它不涉及最新的论点和/或与编程严格相关的东西。然而,有些主题似乎是永恒的,我仍然看到“专家”们做出的糟糕配置。我也从 CP 投票中看到,除了开发之外,你们许多人还执行其他任务,如网络配置或系统配置。
本文是我在 2008 年底用意大利语撰写的原始帖子的译文,发布在 areanetworking.it。如您所知,我的工作经验和专业学习为我提供了分析、实施、优化、故障排除和文档化 LAN/WAN 网络系统的知识和技能,并拥有扎实的“实践”技术知识。然而,在那段时间我只专注于编程,并且很久没有认真配置路由器了。我的一位老客户委托我配置三台路由器,一台在主办公室,另外两台在分支机构。这对我来说是全新的挑战,因为我以前从未配置过完全网状的 VPN 连接,所以我想更进一步,更详细地配置其他方面。我检查了我以前的配置,但没有一个让我完全满意。于是我查阅了所有能找到的文档,并开始学习。以下内容就是学习的成果。
配置虚拟终端线路
让我们开始吧,我做的第一件事是将虚拟终端线路分为两组,第一组将保留用于来自外部网络的连接,而第二组将用于来自内部网络的连接。来自外部网络只能通过 SSH 连接,而来自内部网络则可以同时选择 Telnet。为了实现这一点,我使用了以下命令:line vty 0 1 line vty 2 4在这篇文章中,我不会深入探讨 SSH 协议。如果您对该协议的不同版本感兴趣,您可以通过 Google 搜索关键词找到很多信息。如果您还不了解它,它是一种连接到终端的方式,客户端和服务器之间交换的所有数据都经过编码。为了实现这一点,让我们输入以下命令:
line vty 0 1 transport input ssh line vty 2 4 transport input telnet ssh
SSH 设置
现在我们需要确保设置了主机名和域名,否则,生成加密密钥将会失败。如果设置了默认主机名,建议更改它。两者都可以通过以下命令设置:
hostname MyRouter ip domain-name majcica.com接下来的任务是生成加密密钥,SSH 连接将以此为基础进行安全保护(将用于加密数据)。
crypto key generate rsa执行此命令后,系统会要求您选择密钥大小。我建议您保留默认值 (512),这对于 99% 的情况来说已经足够了。操作完成后,您将收到消息,表示 SSH 已激活且当前版本为 1.5。不幸的是,没有 SSH 1.5,您可能会感到困惑,但这是思科指示 SSH 版本 1 已激活的方式。您始终可以通过以下命令检查当前激活的版本:
show ip ssh如果显示 1.99,则表示 SSH1 和 SSH2 都已启用;如果结果是 2.0,则表示只启用了版本 2。
设置访问列表和详细信息
为了防止访问接受 telnet 连接的虚拟终端接口,假设我们的内部网络是 10.10.10.0\24 (10.10.10.x 网络,掩码为 255.255.255.0)。因此,我们将创建一个访问列表,只接受来自内部网络的流量,并阻止来自所有其他来源的流量。为此,只需发出以下命令:
access-list 15 permit 10.10.10.0 0.0.0.255 log然后将此访问列表应用于适当的虚拟终端接口
line vty 2 4 access-class 15 in如果我们现在尝试从一个与我们内部网络不同的网络通过 Telnet 访问路由器,请求将会超时。但是,如果我们尝试从外部网络通过 SSH 访问它,路由器将会响应,我们将能够建立连接。下一步是设置超时(60 秒是一个合理的值)、启用 SSH 版本 2、设置路由器响应 SSH 请求的接口(外部接口,在我们的例子中是 ATM0.1 - ADSL 连接)以及最大身份验证重试次数。
ip ssh time-out 60 ip ssh authentication-retries 5 ip ssh source-interface ATM0.1 ip ssh version 2
日志和改进
最初我以为这已经足够了,但配置日志后,我发现,在测试期间,没有关于谁何时连接到路由器的任何痕迹。由于我认为这些信息应该被记录,我做了一些研究,找到了以下命令:
login on-failure log login on-success log第一个命令启用失败尝试的日志,而第二个命令启用成功登录的日志。到目前为止一切正常,直到几天后我查阅日志文件,发现有人试图对我的路由器进行暴力破解登录攻击。我需要一个解决这个问题的方法,而通过 ACL 限制访问不是一个选择,因为我经常通过动态获取的 IP 地址连接到路由器。最后我发现我们可以为在确定时间间隔内多次认证失败的用户设置动态阻止。基本上,如果我们想阻止用户在 30 秒内三次输错密码的情况下,在 300 秒内无法收到 SSH 服务的响应,我们需要发出以下命令:
login block-for 300 attempts 3 within 30对我来说这已经足够了,而且这似乎是一个不错的实践,但是如果你觉得偏执,你仍然可以更改默认的 SSH 端口,应用限制性 ACL 等。下面你会找到一个来自系统日志的示例,展示了暴力破解攻击和静默模式的实际效果。
2009-01-27 08:28:48 Local7.Warning 10.10.10.254 81: 000086: Jan 27 08:28:47.028 Berlin: %SEC_LOGIN-4-LOGIN_FAILED: Login failed [user: nagios] [Source: 210.192.123.204] [localport: 22] [Reason: Login Authentication Failed] at 08:28:47 Berlin Tue Jan 27 2009 2009-01-27 08:28:53 Local7.Warning 10.10.10.254 82: 000087: Jan 27 08:28:52.194 Berlin: %SEC_LOGIN-4-LOGIN_FAILED: Login failed [user: user] [Source: 210.192.123.204] [localport: 22] [Reason: Login Authentication Failed] at 08:28:52 Berlin Tue Jan 27 2009 2009-01-27 08:28:57 Local7.Warning 10.10.10.254 83: 000088: Jan 27 08:28:57.169 Berlin: %SEC_LOGIN-4-LOGIN_FAILED: Login failed [user: test] [Source: 210.192.123.204] [localport: 22] [Reason: Login Authentication Failed] at 08:28:57 Berlin Tue Jan 27 2009 2009-01-27 08:28:57 Local7.Alert 10.10.10.254 84: 000089: Jan 27 08:28:57.169 Berlin: %SEC_LOGIN-1-QUIET_MODE_ON: Still timeleft for watching failures is 19 secs, [user: test] [Source: 210.192.123.204] [localport: 22] [Reason: Login Authentication Failed] [ACL: sl_def_acl] at 08:28:57 Berlin Tue Jan 27 2009 2009-01-27 08:33:58 Local7.Notice 10.10.10.254 85: 000104: Jan 27 08:33:57.083 Berlin: %SEC_LOGIN-5-QUIET_MODE_OFF: Quiet Mode is OFF, because block period timed out at 08:33:57 Berlin Tue Jan 27 2009
结论
我没有详细介绍所有步骤,因为我假设您对思科 IOS 的操作有基本了解。我所有的信息都来自 Cisco.com。此外,这些程序在 2008 年底,也就是原始文章撰写时是有效的。然而,在最新版本的 IOS 中不应有 drastic 改变。如果有所改变,请查阅 cisco.com 上的文档,并在评论中提出您的问题。配置愉快!