摘要:Telnet是网络管理人员常用的远程登陆命令,但它传送的信息是明文的,容易被窃取;SSH是一种安全的登陆方式,它传送的是加密信息。在当今网络安全日益重要的情况下,改进管理方式很有必要,本文就介绍这种技术。
关键词:网络安全 网络管理 加密 传输 UNIX
1、Telnet面临的主要安全问题
大概Telnet是每位从事网络管理和攻击者最熟悉不过的工具了。但他的安全性确实很差,比如对使用者认证方面、数据传送保密方面和防范针对telnet的攻击方面都存在很大问题。主要缺陷表现在:
• 没有口令保护,远程用户的登陆传送的帐号和密码都是明文,使用普通的sniffer都可以被截获;
• 没有强力认证过程。只是验证连接者的帐户和密码。
• 没有完整性检查。传送的数据没有办法知道是否完整的,而不是被篡改过的数据。
• 传送的数据都没有加密。
用户可以利用Telnet获得很多的关于服务主机的情况。例如服务器的操作系统的种类等。而且,Telnet不仅仅可以使用端口23,而且也可以连接到其他服务的端口。例如端口21、端口25、端口80等。下面是一个登陆到自己的端口23的例子:
FreeBSD/i386 (dns.huaxue.net.cn) (ttyp1)
Login:
我们可以看到,只是这样一条简单的再简单不过的命令就清晰地告诉你对方是用什么系统。而且只要端口是开放的,就可能发生使用Telnet获取信息的情况。甚至你可以利用Telnet向端口80发送请求,只要请求是正确的,端口80就可以得到回应,甚至是一条错误的GET指令都可以得到回应。
这是因为Telnet本身没有很好的保护机制,所以要借助其他外部的保护。相比之下SSH是一个很好的telnet安全保护系统。本文就简要介绍用SSH取代Telnet 实现安全连接。
2、SSH介绍
SSH(Secure Shell)客户端与服务器端通讯时,用户名及口令均进行了加密,有效防止了对口令的窃听。这个SSH服务,最重要的是可以使用“非明码”的方式来传送数据包,也就是说,数据在网络上传递,由于SSH采用加密传输,即使被监听而遭窃取了,该数据要经过解密也不是一件很容易的事,所以就可以比较安全的工作!此外,SSH同时也提供配合PAM的安全模块与TCPWrappers的封包限制(也就是/etc/hosts.allow与/etc/hosts.deny的机制)机制,因此安全性也就比较高一些!更便利的是,可以使用root的身份经由ssh远程登入某主机,这与Telnet的缺省方式不同!
从客户端来看,SSH提供两种级别的安全验证。第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。第二种级别(基于密钥的安全验证)需要依靠密钥,也就是你必须为自己创建一对密钥,并把公用密钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在你在该服务器的目录下寻找你的公用密钥,然后把它和你发送过来的公用密钥进行比较。如果两个密钥一致,服务器就用公用密钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密钥解密再把它发送给服务器。用这种方式,你必须知道自己密钥的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密钥)。但是整个登录的过程可能需要10秒。
如何实现将telnet改成以ssh来连接呢?
3、SSH安装和启用
1.下载最新软件包SSH,最好下载源程序软件包自己进行编译。 解压及安装:
# tar -zxvf ssh2-2.4.0.tar.gz
# cd ssh2-2.4.0
# ./configure
# make
#make install
安装完成。这一过程实际上将服务器软件包及客户端软件一起安装了,不必再次安装客户端。
已编译好的二进制软件包以rpm格式存放在ftp://ftp.ssh.com/pub/ssh/rpm目录下。它是一个给非商业用户使用的软件包,名称为:ssh-2.4.0-1.i386.rpm,其中包含了对X Window的支持,另一个不支持X Window的软件包为ssh-2.4.0-1nox.i386.rpm,下载后可以直接安装。安装程序将SSH2软件包安装在/usr/local/bin及/usr/local/sbin下。
既然启动了ssh,那么telnet自然就不需要继续存在!请记住关掉Telnet。
vi /etc/inetd.conf
找到这一行:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
将它注释掉!保存退出后,执行:
/etc/rc.d/init.d/inet restart
重新启动inet,然后以netstat -a | more核实telnet服务已经停止!
4、密钥的产生和使用
服务器端产生用户自己的加密密钥及对外公开使用的公钥。在UNIX环境下,产生密钥的方法
-keygen
要求用户输入一个长的认证字串,这个字串的功能同password相当,但是,它更长,一般是在20个字符以内。再次输入相同的字串以确认输入正确之后,系统产生一对密钥及公钥。将公钥复制到本地,以便客户端对服务器发送的信息进行解密用。如果不复制,在第一次登录时,服务器会将它的公钥自动推给客户机,以便客户机能对服务器提供的信息进行解密识别。
客户端产生用户的加密密钥及公钥。客户端产生自己的密钥及公钥的方法与服务器端相同。最后,将客户机产生的公钥复制到远程主机上用户的目录中。不同版本的SSH对公钥及密钥的文件名有特定的要求,具体情况请阅读软件包中的安装说明。
启动SSH服务器
在UNIX/Linux环境下,服务器程序放置在/usr/local/sbin目录下,启动方法
# sshd
# ps x
可以查看SSHD确认SSH已经启动。如果不希望每次重启动系统,都要手工运行启动SSHD,则可以自己写一个脚本,放置在init.d目录下,让系统启动后,自动执行SSHD服务的启动工作。或者直接在rc.local中加入一行/usr/local/sbin/sshd也可。
客户端在UNIX/Linux系统中就是SSH。其中有SSH1、SSH2、scp等客户端工具,使用SSH登录远程主机方法
host.ip.of.remote
如同使用Telnet一样,不同之处是要求用户输入认证字串,如果认证字串通过了认证,则用户直接登录成功;如果不成功,则是要求用户输入系统口令。口令认证成功后,用户也可以成功登录系统。从使用上看,与Telnet没有什么不同之处。而且有了SSH客户端软件,如果要上传文件,不必再开一个FTP窗口,再次认证,然后上传文件。使用SSH客户端自带的scp工具,就可以直接将文件上传到远端服务器上。使用方法host1:dir/filename host2:/home/abc/filename
由于种种原因,一些支持SSH的GUI客户端不一定会很好地支持以上各种服务器,用户可以自行组合以上工具,找到适合自己的工具。一般来说,在UNIX下的客户端对各种服务器的支持是最好的。通常在选择服务器及客户端软件时,最好选择同一软件商的产品,这样不会出现不兼容的问题。
5、其它安全性的设定
虽然ssh是安全的,但是并不是一定安全的!所以,用户仍然需要设定一些简单的安全防护来防止一些问题的发生!简单地就是将一些你不同意登入的 IP关掉,只开放一些可以登入的 IP!
ssh这个服务开启在port 22,可以使用ipchains或iptables防火墙工具来开放一些你允许的IP以port 22进入!
在安装的时候注意选择 --with-tcp-wrappers选项,以便使用/etc/hosts.allow去设定允许的IP连接,例如允许192.168.1.1-192.168.1.255登陆到某主机,可以这么设置:
sshd : 192.168.1.0/24: Allow
而将其他的IP都挡掉,在/etc/hosts.deny当中:
sshd : ALL : Deny
如此一来则ssh只会开放给192.168.1.1-255之间的机器!以后要再扩大开放,就再将其他的IP加到/etc/hosts.allow当中去就行了。
6、小结
经过上述改进,再也不会出现前面例子中的情况了。由于对登陆这进行了认证和限制使得入侵者范围减少很多。数据信息加密就又增添了安全性。
参考文献:《SSH权威指南》,中国电力出版社,冯锐 由渊霞,2003年4月
2、《网络安全与防火墙技术》,清华大学出版社,王睿 等,2000年10月
3、《Linux系统安全基础》,人民邮电出版社,(美)Aron Hsiao,2002年2月