某些程序,比如tcpdump和Ethereal可以记录和分析TCP报文。这类程序起到了网络分析的有用功能,它们可以截取私秘通信中的数据。在意安全通信的人士特别强调用ssh
而非Telnet登录远程主机,他们通常采用加密的VPN隧道建立自己的网络连接,用PGP/GPG对自己的邮件进行加密,所有这一切就是为了保护自己不会受到非法窥探。要不是以上那些嗅探工具的存在,想来他们也不会这么“紧张”。
为了举例说明,我们就来跟踪一个用Telnet登录到本地网络的过程,这个登录操作的用户是tcpguest ,密码是tcp,我们使用的嗅探程序叫Sniffit。以下是客户机上的实际登录会话:
bash-2.03$ telnet powerbook
Connected to powerbook.
login: tcpguest
Password:
Last login: Sun Feb 17 10:58:01 from moe
[tcpguest@powerbooktcpguest]$
图B就是Sniffit对目标主机上端口23(Telnet)的观察报告。
图B Sniffit Telnet
现在我们看看在采用ssh的情况下登录同一主机的会话过程:
bash-2.03$ sshtcpguest@powerbook
tcpguest@powerbook's password:
Last login: Sun Feb 17 11:10:00 2002 from moe
[tcpguest@powerbooktcpguest]$
图C显示结果。
图C Sniffitssh
对以上两个结果进行比较,显然你应该很清楚地认识到为什么用明文密码访问其他计算机的方法实在是太危险了!
正如你从Sniffit截屏结果中所看到的那样,IP系统(包括今天的大多数网络以及Internet)上的TCP通信都是围绕IP
地址和端口进行的。IP层从一台机器获得数据并把它传递到另一台计算机。TCP层则在特定的端口之间来回传输数据。为此,通信路径对方的计算机必须安装一定的软件负责侦听响应请求的端口。这种软件一般就是某些类型的服务器守护进程,可以执行各种任务,其中不仅包括网络服务甚至还可以对电源进行管理。就以先前的例子来说吧,我访问的这台计算机同时在运行Telnet和ssh 服务器,它们分别侦听端口 23 和 22上访问系统的请求。
安全性高的系统可能不运行任何服务器,或者只对ssh启用选定的端口以及必要的服务。服务器既可以由inetd 或 xinetd触发也可以在系统启动时独立运行,在Linux上,这些操作就是通过运行/etc/rc.d/init.d 目录下的脚本来完成的。