NMAP自从在红帽Linux中出现后,就迅速流传开来,成为Linux网络工程师与系统管理员不可缺少的工具之一。通过这个工具可以用来判断网络布局、主机打开的端口与服务等等。而这些信息的话对于管理员提高系统的安全性又具有至关重要的作用。NMAP为建立使用安全服务和停运不被使用能够服务的政策奠定了良好的基础。
如上图就是NMAP运行的命令结果。他可以通过对特定主机进行扫描,以发现其所采用的操作系统、所打开的端口与采用的服务等等。不过SMAP是在shell下运行的一个命令其没有直观的界面。为此对于不少Linux系统管理员来说这是一个难以跨越的障碍。我刚开始的时候也特别不习惯,很羡慕Windows下面的一些局域网扫描工具,如流光扫描等等。这些工具都提供了友好的图形化操作界面。不过后来我用惯了这个命令之后,反而离不开这个NMAP命令了。因为经过多次使用,我发现了很多其他扫描工具难以实现的功能。只要灵活使用这个命令,相比其他扫描工具来说,系统管理员会有更大的收获。废话就不说了,我转入正题,谈谈如何巧用NMAP来收集局域网中的主机信息。
、扫描一批主机。
若你正在负责你们公司局域网的安全,那么就需要知道企业局域网中哪些主机开启了不需要的服务与端口。这会为局域网的安全埋下安全隐患。为此就需要对局域网的主机进行扫描,以收集开发的端口与启用的服务信息。
NMAP命令就可以实现这个目的。因为NMAP命令支持CIDR风格的地址。如系统管理员可以采用192.168.0.0/24的形式来表示一串IP地址。这是一种通过子网掩码来表示IP地址串的一种方法。但是很显然,CIDR命名方法虽然比较简单但是不够灵活。如现在企业中192.168.0.4是一台文件服务器。在扫描的时候,系统管理员不希望NMAP命令扫描这台主机,以免信息外漏给攻击者提供方便。为此在实际工作中对局域网主机进行扫描的时侯,往往需要过滤某些特定的主机。另外也不希望对192.168.0.0等特殊的地址进行扫描,因为这些是广播地址,不对标特定的主机。现在市面上的扫描软件基本上都支持CIDR风格的IP地址。但是NMAP却可以把某些特定的IP地址过滤掉,或者只收集一些特定IP地址主机的信息。
如NMAP命令后面可以利用逗号来分隔多个IP地址,还可以通过范围列表来选定特定IP地址的主机。不过当需要扫描的主机比较多时,通过手工输入的方式将会很麻烦。而NMAP命令最值得我推荐的就是可以从一个列表中制定需要扫描的IP地址信息。也就是说,系统管理员可以预先把需要收集信息的主机的IP地址保存在一个文件中。然后让NMAP命令从这个文件中读取IP地址信息。这即省去了输入的麻烦,提高了工作效率;而且这个文件还可以重复使用。如利用“nmap –iL 文件名”的方式即可。我现在在企业中是利用DHCP服务器来管理IP地址的。IP地址分配即有动态的、又有静态的。我会定期对局域网内的主机进行扫描,以防止用户打开了不安全的端口。在扫描的时候如果主机比较多,需要花费比较多的时间。为此我是采用循环扫描的方式,如一次扫描50台主机等等,一个月刚好循环一次。为了达到这个目的,我就从DHCP服务器中导出了所有在用的IP地址列表,然后制作成一个文本文件。注意NMAP命令不支持EXCEL格式的文件,所以需要把这个列表转换成文本格式的文件。然后我就可以利用“nmap –iL 文件名”命令来扫描文件中规定IP地址的主机,收集有用的信息,以保障局域网内主机的安全。
二、过滤特定的主机。
在企业网络中,有些IP地址对应着特殊的服务。无论是出于安全考虑还是性能方面的考虑,都不希望NMAP命令对这些IP地址所对应的主机进行扫描。如192.168.0.2可能是企业局域网中的一台网络打印机。对这个IP地址进行扫描往往没有多大实际的价值,除了浪费时间就是增加系统管理员的阅读量。为此系统管理员希望在使用这个命令进行扫描的时候,能够过滤一些特定的主机,以缩短扫描的时间、简化扫描的结果。NMAP命令支持用户的这种需求。
如系统管理员可以通过exclued参数来排除不需要收集信息的主机。如nmap exclude 192.168.0.2,192.168.0.3就表示用户不需要对这两个IP地址的主机进行扫描。也就是说如果扫描范围内有一些主机不需要扫描,则可以利用逗号把它们分开,并通过Exclued参数来实现过滤。这个参数后面不但可以接IP地址,而且还可以接主机名、CIDR格式的IP地址名等等。通常情况下扫描的网络中如果包含正在执行关键任务的服务器、对端口扫描反应强烈的应用程序,这功能通常很有用。
但是当过滤的主机比较多时,如果采用一个个的输入IP地址来实现,也是非常不方便的。如果系统管理员正在这么做的话,那对于这个命令可能还只是一知半解。其实这个Exclued参数还有一个同父异母的兄弟,即excludefile。顾名思义,这个参数后面可以接一个文本文件。在这个文本文件中包含的IP地址都将会被过滤掉。它的实际作用,跟Exclued参数一样,只是其所排除的目标主机信息是从一个文件中取得的,而不是在命令行中输入的。这个文件中的IP地址或者主机名字可以用换行符、空格、或者制表符分隔。显然通过文件的形式来保存需要过滤的主机信息,不但可以提高扫描的效率,而且在下次扫描时还可以重复利用。
我现在特别喜欢使用NMAP命令来收集相关的主机信息,最主要的就是看中这个功能。可以让NMAP命令从特定的文件中读取IP地址或者主机名字信息,然后通过参数选项来实现从列表中收集主机信息或者过滤某些特定的主机。这可以在很大程度上提高我们的工作效率,提高NMAP命令的灵活性。
三、随机选择目标主机收集信息。
有时候出于研究或者测试的需要,要随即的选择IP地址进行扫描,并收集端口、服务等相关信息。Nmap命令也支持对网络上的主机进行随即扫描。这主要是借助于iR选项,这个选项后面需要跟一个整数类型的数字。若是0的话,则表示永无休止的扫描。由于扫描不但会引起用户的反感,而且也会影响本机的性能,为此这个永无休止的扫描最好不要用。若跟着是其他数字的话,则表示需要随机生成多少个IP地址进行扫绝。注意这里生成的IP地址是随机的,而不是从小到大或者从大到小。只有如此这个命令收集起来的信息才具有参考的价值。另外值得称道的是,使用者选项的时候,如果其生成的主机地址中包含了组播或者未分配的IP地址的话,则这个命令会自动略过。显然这是一个很人性化的设计。
再次强调一下,对网络上的主机进行扫描的话,会一件“害人害己”的事情。因为有些操作系统或者应用程序对于网络扫描很敏感,扫描可能会影响他们的正常运行。另外扫描也需要耗费本机的大量资源。为此及时采用SMAP命令进行扫描的话,一次性扫描的主机也不宜过多,而且频率也不要台过于频繁。如果企业网络中客户端比较多的话,那么分次批量扫描收集信息是比较合理的选择。
另外NMAP命令虽然是一个在Linux操作系统上运行的开源扫描工具。但是其不仅可以扫描Linux的客户端,而且还可以扫描包括Windows操作系统在内的客户端。他通过一些标示符来区分是什么类型的操作系统。而且,即使客户端时一台网络打印机,NMAP命令也可以扫描并收集相关重要的信息。上面这张截图中所收集的信息就是一台网络打印机的启用的端口与服务信息。这就可以帮助系统管理员把企业网络中的设备一网打尽。
故我认为NMAP命令要比其他的一些图形化界面的扫描工具具有更大的优势。
CIO之家 www.ciozj.com 公众号:imciow