139和445端口是危险的代名词
连接于微软网络上的电脑之间使用137和138端口取得IP地址。然后进行文件共享和打印机共享等实际通信。通信过程是通过SMB(服务器信息块)协议实现的。这里使用的是139和445端口。
图1●SMB与CIFS的区别。Windows 2000以前版本的Windows使用NetBIOS协议解决各计算机名的问题。通过向WINS服务器发送通信对象的NetBIOS名,取得IP地址。而Windows以后的版本所采用的CIFS则利用DNS解决计算机的命名问题。根据DNS服务器中的名字列表信息,寻找需要通信的对象。如果顺利地得到对象的IP地址,就可以访问共享资源
在SMB通信中,首先使用上述的计算机名解释功能,取得通信对象的IP地址,然后向通信对象发出开始通信的请求。如果对方充许进行通信,就会确立会话层(Session)。并使用它向对方发送用户名和密码信息,进行认证。如果认证成功,就可以访问对方的共享文件。在这些一连串的通信中使用的就是139端口。
Windows 2000和XP除此之外还使用445端口。文件共享功能本身与139端口相同,但该端口使用的是与SMB不同的协议。这就是在Windows 2000中最新使用的CIFS(通用因特网文件系统)协议。
CIFS和SMB解决计算机名的方法不同。SMB使用NetBIOS名的广播和WINS解决计算机名,而CIFS则使用DNS(图1)。
因此,在文件服务器和打印服务器使用Windows的公司内部网络环境中,就无法关闭139和445端口。很多情况下,文件共享和打印机共享在普通的业务中是不可缺少的功能。而客户端如果自身不公开文件,就可以关闭这两个端口。
假如是仅2000版本以后的Windows构成的网络,就可以关闭139端口。这是因为如前所述,该网络只用445端口就能够进行文件共享。由于在解决计算机名过程中使用DNS,所以也可以关闭137和138端口。不过,在目前情况下,基本上所有的网络系统都还在混合使用2000以前的Windows版本。在混合网络环境中由于必须使用139端口通过SMB协议进行通信,因此就无法关闭139端口。另外,浏览时还需要137~139端口。
公开服务器绝对应该关闭这些端口
在因特网上公开的服务器要另当别论。公开服务器打开139和445端口是一件非常危险的事情。就像本文开头所说的那样,如果有Guest帐号,而且没有设置任何密码时,就能够被人通过因特网轻松地盗看文件。如果给该帐号设置了写入权限,甚至可以轻松地篡改文件。也就是说在对外部公开的服务器中不应该打开这些端口。通过因特网使用文件服务器就等同自杀行为,因此一定要关闭139和445端口。对于利用ADSL永久性接入因特网的客户端机器可以说也是如此。
要关闭139端口,与137和138端口一样,可以选择“将NetBIOS over TCP/IP设置为无效”。而要想关闭445端口则必须进行其他工作。利用注册表编辑器在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters”中追加名为“SMBDeviceEnabled”的DWORD值,并将其设置为0,然后重新起动机器。
.NET中安全策略改变了吗?
就像在此之前所讲的那样,直接在默认设置条件下使用现有的Windows将会出现各种各样的危险。这是因为Windows是为了让初学者不需进行复杂设置就可以使用而开发的。
比如Windows 2000 Server,在安装该系统时,会自动安装IIS。而且只需起动个人电脑,IIS服务就会启动。虽然Windows NT 4.0 Server可以选择是否安装IIS,但在默认条件下该服务的复选框是有效的。与2000一样,在起动电脑时,IIS服务也会自动起动。
而Linux则在很多方面都采取的是完全不同的思路。比如,RedHat Linux 7.3在安装过程中必须让用户设置防火墙。由于防火墙有“高”、“中”、“低”三种等级,因此所拦截的信息包也各不相同。如果选择“高”将关闭53(DNS)、67和68(DHCP)以外的全部端口,如果选择“中”,尽管会打开1024以上的端口,但在一般人熟知的端口中打开的只有53、67和68三个。
安装应用程序时的作法也不同。RedHat Linux 7.3在安装时可选择“工作站”、“服务器”和“桌面”三种类型。因此即使选择“服务器”,如果用户不选择构筑兼容Windows的文件服务器“Samba”和Web服务器“Apache”等,就不会进行安装。另外,即便安装以后,也不会直接起动。如果用户明确地启动必要的服务后,没有设置利用过滤软件过滤信息包,相应端口就不会打开。
如果只考虑方便性,Windows要更好一些。这是因为即便不进行复杂的设置,系统也能够自动起动各种服务。但这样一来,就甚至极有可能起动用户不希望起动的服务,而且这些服务往往还是在用户不知晓的情况下起动的。可以这样说,如果希望安全地运行服务器,或者希望保护自己的客户端个人电脑免受危险,那么最好不要随便安装和设置。
美国微软也提出了“值得依赖的计算”(Trustworthy Computing)的计划,并计划利用定于2003年初开始上市的“Windows .NET Server”实现“默认安全”。与Windows 2000不同的是,将不再标准安装IIS服务。即便增加了IIS组件,OS起动时该服务也不会自动运行。
不过,如果只要使用测试版,135、137、138、139和445端口在默认条件下就是打开的。另外,从Windows XP开始导入的“因特网连接防火墙(ICF)”的使用在默认条件下也是无效的。要想在默认设置下实现与Linux相同等级的高安全性,可以说最稳妥的方法是将ICF设置为有效,然后用户再根据自己的需要,选择起动的服务。