nmap是一个网络端口扫描程序。其主要功能是检查一组目标主机,看看在哪个TCP和UDP端口上有服务程序在监听 。因为大多数网络服务都与“众所周知的”端口号相关联,所以这项信息会告诉您有关一台机器上正在运行的软件的很多信息。
运行nmap是一种很好的方法,可以弄清楚系统在打算搞破坏的人看来是个什么样子。例如,下面是来自一台RHEL默认安装机器的报告:
在默认情况下,nmap带的-sT参数要求以正常方法尝试连接目标主机上的每个TCP端口 。一旦建立连接,nmap将立即断开,这样做虽然不礼貌,但对一个正常编写的网络服务程序来说是无害的。
从上面的例子我们可以看出,主机rhel正在运行几个可能没用到的服务程序,这几个程序在历史上就与安全性问题息息相关:portmapd(rpcbind),CUPS(ipp),可能还包括sendmail(smtp)。几条潜在的攻击路线已经相当清楚了。
nmap输出中的STATE一栏显示“open”表示端口有服务程序,“unfiltered”表示端口没有服务程序,“filtered”表示因为防火墙的干扰而无法探测到该端口。unfiltered的端口是最典型的情况,除非nmap在执行一次ACK扫描,否则通常都不显示它们。
除了直截了当的TCP和UDP探测之外,nmap还有一整套悄悄探测而不发起实际连接的方法。在大多数情况下,这些探测方法会发送看上去像是出自TCP会话中间(而不是开始)的包,然后等待诊断包被送回。这些秘密的探测方法也许能有效地绕过防火墙或避免被寻找端口扫描程序的网络安全监视器检测到。如果您的站点使用了防火墙(参见20.12节),用这些可供选择的扫描模式来探测它,看看它们能找到什么是个好主意。
nmap有一种神奇而有用的能力:通过查看一个远程系统TCP/IP实现的细节来推测该系统运行的是什么操作系统。它有时候甚至能确定一个开放端口上正在运行什么软件。-O和-sV选项分别打开这些功能。例如:
这项功能对获取本地网络的详细目录非常有用。很遗憾,它对黑客也非常有用,他们可以把攻击集中在目标操作系统已知的弱点上。
也请记住,大多数系统管理员通常不喜欢您扫描他们的网络并指出网络的薄弱之处,不论您的动机有多友好。在没有得到其他网络的系统管理员同意之前,决不要用nmap来扫描别人的网络。