在编程领域,有些主题似乎是永恒的,尽管主要的工作是编程,但也经常遇到一些“专家”配置的恐怖设置。曾在一个客户那里负责配置三个路由器,一个在主办公室,另外两个在分支机构。这是一个全新的挑战,因为之前从未配置过完全混合的VPN连接,所以希望能够更详细地配置其他方面。回顾了过去的配置,但没有一个让完全满意。因此,查阅了能找到的所有文档并开始学习。以下是学习的结果。
首先,将虚拟终端行分为两组,第一组将保留给来自外部网络的连接,而第二组将用于来自内部网络的连接。只有通过SSH才能从外部网络连接,而从内部网络也可以选择使用telnet。
line vty 0 1
line vty 2 4
在这篇文章中,不会深入讨论SSH协议,如果对协议的不同版本感兴趣,可以通过谷歌搜索关键词找到很多信息。如果还不了解它,它是一种连接到终端的方式,客户端和服务器之间交换的所有数据都是加密的。要实现这一点,让给出以下命令:
line vty 0 1
transport input ssh
line vty 2 4
transport input telnet ssh
现在需要确保设置了主机名和域名,否则生成加密密钥将会失败。如果设置了默认的主机名,建议更改它。两者都可以用以下命令设置:
hostname MyRouter
ip domain-name majcica.com
接下来的任务是生成基于SSH连接将被保护的加密密钥(将用于加密数据)。
crypto key generate rsa
一旦发出这个命令,将被要求选择密钥大小。建议保留默认值(512),这在99%的情况下已经足够了。当这个操作完成后,将收到SSH已激活的消息,并且当前版本是1.5。不幸的是,没有SSH 1.5,可能会困惑,但这是Cisco表示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等。