缩减Windows的网络服务 (www.team509.com)

来源:互联网 发布:传奇霸业勋章数据 编辑:程序博客网 时间:2024/04/27 20:30
这是翻译的文章,原文为法文,地址http://www.hsc.fr/ressources/breves/min_srv_res_win.html,英文版地址http://www.hsc.fr/ressources/breves/min_srv_res_win.en.html。

简单说来,这篇文章就是讲怎样把Windows的端口尽量全部关闭掉。




作者:      Jean-Baptiste Marchand
时间:      2002-09-02
最后更新:  2004-03-05
翻译:      doublelee
翻译日期:  2005-06-08

  这是翻译的文章,原文为法文,地址http://www.hsc.fr/ressources/breves/min_srv_res_win.html,英文版地址http://www.hsc.fr/ressources/breves/min_srv_res_win.en.html。


  ----[ 概述 ]----
  
  默认安装的Windows系统安装了多种网络服务(network services),通常不需要对外提供网络服务的情况下,停止这些服务是很有必要的。

  本文档提供一个完成这项任务的方法,技术细节可以查询《Windows network services internals》一书。该书位于http://www.hsc.fr/ressources/articles/win_net_srv/

  《Windows network services for Samba folks》的PPT可以在http://www.hsc.fr/ressources/presentations/sambaxp2003/找到,介绍了Windows核心网络服务的一些知识。

  本文所举例子都以这样两个系统为例:默认安装的Windows 2000 Server和默认安装的Windows XP(无DHCP,设置唯一的IPv4地址192.70.106.143)。当然,最好的选择是安装系统的时候就选择不去安装那些不会用到的服务,不过即使那样你还是最好按照下面的描述来重新部署你的windows。

----[ 服务查询 ]----

  找到本地运行了哪些网络服务一个快速的方法就是用 netstat 命令罗列出本地开放的TCP和UDP端口。

  在一台 Windows 2000 上,netstat -an 可能得到这样的输出:

C:WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:25             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:443            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1027           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:3372           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:4983           0.0.0.0:0              LISTENING
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1028           *:*
 UDP    0.0.0.0:1029           *:*
 UDP    0.0.0.0:3456           *:*
 UDP    192.70.106.143:137     *:*
 UDP    192.70.106.143:138     *:*
 UDP    192.70.106.143:500     *:*

  在一台 Windows XP 上, 可以加上 -o 选项以列出对应的进程ID,一个 netstat -ano 命令返回如下:

C:WINDOWS>netstat -ano

Active Connections

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       884
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       976
 TCP    0.0.0.0:5000           0.0.0.0:0              LISTENING       1160
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING       4
 UDP    0.0.0.0:135            *:*                                    884
 UDP    0.0.0.0:445            *:*                                    4
 UDP    0.0.0.0:500            *:*                                    704
 UDP    0.0.0.0:1026           *:*                                    1112
 UDP    0.0.0.0:1027           *:*                                    976
 UDP    127.0.0.1:123          *:*                                    976
 UDP    127.0.0.1:1900         *:*                                    1160
 UDP    192.70.106.143:123     *:*                                    976
 UDP    192.70.106.143:137     *:*                                    4
 UDP    192.70.106.143:138     *:*                                    4
 UDP    192.70.106.143:1900    *:*                                    1160

_警告_:

  netstat命令其实并不是报告了TCP和UDP端口的状态,实际上报告的是关于TDI传输地址和TDI连接端点的信息,而只有TDI连接端点才代表了TCP或UDP socket。

  当Windows系统向外建立连接的时候,主动打开的本地端口作为源端口被标以 LISTENING 状态。

  下面的例子中,本地系统通过1367端口和远程系统的22端口建立了TCP连接。在过滤了其他不含1367的输出后,我们看到netstat命令的输出如下:
  
C:WINDOWS>netstat -anp tcp | find ":1367"
 TCP    0.0.0.0:1367           0.0.0.0:0              LISTENING
 TCP    192.70.106.142:1367    192.70.106.76:22       ESTABLISHED

  第二行表明从本地1367端口到对方22端口的连接已经建立,然而第一行却错误地报告了了1367端口处于LISTENING状态,其实这个端口并没有绑定一个服务。就像这样,任何连出的TCP连接,都会导致一个多余的行,错误显示一个侦听状态的端口。我们务必把这种情况和真正处于侦听状态的端口区分开来。

  注意:Windows Server 2003中修复了这个bug。

  一旦确认了打开的端口,我们就要给出方法来一步步地关掉它们。

  (译者注:这实际上是Windows NT,2000,XP中netstat命令长期存在的一个bug,可以参考http://support.microsoft.com/?id=331078)


----[ 禁用无用的服务 ]----

  关闭端口,首先要做的事就是禁用服务。我们将用net stop命令来停止服务。然而为了防止重新启动后服务再次启动,这些服务的启动模式必须改为手动或者禁用。有些还要特别处理,否则还会被系统“手动”地自动启动。
  
  在Windows 2000中,可以在服务管理器中调整一个服务的启动类别。

C:WINDOWS>services.msc

  服务类别(自动,手动,已禁用)可以在每个服务的属性页中修改。
  
  在Windows XP中,sc命令(Windows 2000 Resource Kit中也提供该工具)可以修改服务的启动类别,像这样:

C:WINDOWS>sc config service_name start= disabled

(start=和disabled之间必须有空格)

下面的命令

C:WINDOWS>sc config service_name start= manual

调整服务的启动类别为手动。

--[ Windows 2000 ]--

 -[ IIS 5 ]-

  在Windows 2000 Server中,默认运行了IIS 5.0,包括了SMTP服务,HTTP服务和IIS管理服务。为了关闭TCP端口25、80、443、UDP端口3456,一个IIS管理端口(在我们的例子中是4983)和两个大于1023的RPC服务端口,这些服务必须停止。
  
  停止这些服务最快捷的方法就是停止iisadmin服务(其他服务依赖于此服务):

C:WINNT>net stop iisadmin

下面的服务依赖于 IIS Admin 服务。
停止 IIS Admin 服务也会停止这些服务。

  World Wide Web Publishing Service
  Simple Mail Transport Protocol (SMTP)

是否继续此操作? (Y/N) [N]: y
World Wide Web Publishing Service 服务正在停止.
World Wide Web Publishing Service 服务已成功停止。

Simple Mail Transport Protocol (SMTP) 服务正在停止.
Simple Mail Transport Protocol (SMTP) 服务已成功停止。

...
IIS Admin Service service 服务正在停止.
IIS Admin Service service 服务已成功停止。


netstat -an 命令的输出显示,打开的端口数目已经减少:

C:WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:3372           0.0.0.0:0              LISTENING
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1029           *:*
 UDP    192.70.106.143:137     *:*
 UDP    192.70.106.143:138     *:*
 UDP    192.70.106.143:500     *:*

  最后,防止IIS服务再次随系统重新启动的最简单办法是移除IIS组件,在控制面板中选添加/删除。

-[ IPsec ]-

  IKE协议(Internet Key Exchange)使用的UDP端口500,可以通过停止IPsec服务而关闭。

C:WINNT>net stop policyagent
IPSEC Services 服务正在停止.
IPSEC Services 服务已成功停止。

  UDP 端口 500 消失在 netstat -an 的输出中:

C:WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 TCP    0.0.0.0:3372           0.0.0.0:0              LISTENING
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1029           *:*
 UDP    192.70.106.143:137     *:*
 UDP    192.70.106.143:138     *:*

-[ Distributed Transaction Coordinator ]-

  并列事务服务(Distributed Transaction Coordinator service)在 Windows 2000 server 上默认安装和启动并打开了TCP端口3372和一个大于1023的端口(我们的例子中是1025)。

  停止服务,以关闭这两个TCP端口:

C:WINNT>net stop msdtc
Distributed Transaction Coordinator 服务正在停止.
Distributed Transaction Coordinator 服务已成功停止。

  列出现在的开放端口:

C:WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1029           *:*
 UDP    192.70.106.143:137     *:*
 UDP    192.70.106.143:138     *:*


--[ Windows XP ]--

  Windows XP中容易停止的服务有:
IPsec services (PolicyAgent)
SSDP Discovery Service (SSDPSRV)
Windows Time (W32Time)

  以下命令停止这些服务:
 
C:WINDOWS>net stop policyagent

C:>WINDOWS>net stop ssdpsrv

C:>WINDOWS>net stop w32time

  netstat -ano 命令显示:TCP 5000,UDP 123、500和1900端口已经关闭。

C:WINDOWS>netstat -ano

Active Connections

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       884
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       976
 TCP    192.70.106.143:139     0.0.0.0:0              LISTENING       4
 UDP    0.0.0.0:135            *:*                                    884
 UDP    0.0.0.0:445            *:*                                    4
 UDP    0.0.0.0:1026           *:*                                    1112
 UDP    0.0.0.0:1027           *:*                                    976
 UDP    192.70.106.143:137     *:*                                    4
 UDP    192.70.106.143:138     *:*                                    4


---[ NetBIOS over TCP/IP (NetBT) ]---

  TCP/IP上的NetBIOS(NetBT),是Windows系统用来传输CIFS协议(SMB)的。CIFS协议就是用来提供资源共享服务的。(典型应用如:文件共享,打印机共享)。

  NetBT使用了UDP 137、138和TCP 139端口。要关闭这些端口,必须在所有网络适配器(Adapter)上禁用NetBT协议。

  在所有的网络适配器和所有的拨号连接上,选择属性->Internet协议 (TCP/IP)->属性->高级->WINS,禁用TCP/IP上的NetBIOS。这样就关闭了UDP137、138和TCP139端口。
  
  用来解析NetBIOS名字的lmhosts服务,也可以停止并禁用。

C:WINNT>net stop lmhosts
TCP/IP NetBIOS Helper 服务正在停止.
TCP/IP NetBIOS Helper 服务已成功停止。

  在 Windows 2000 上,开放端口列表变成:

C:WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:445            *:*
 UDP    0.0.0.0:1029           *:*

  而在Windows XP上:

C:WINDOWS>netstat -ano

Active Connections

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       884
 TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       976
 UDP    0.0.0.0:135            *:*                                    884
 UDP    0.0.0.0:445            *:*                                    4
 UDP    0.0.0.0:1026           *:*                                    1112
 UDP    0.0.0.0:1027           *:*                                    976

---[ CIFS over TCP ]---

  在Windows 2000以前,CIFS协议主要经NetBT传输,TCP 139端口。从Windows 2000开始,CIFS可以经由TCP/IP直接传输,省略了中间的NetBT层。这时,TCP 445端口被使用。(http://www.ubiqx.org/cifs/SMB.html#SMB.1.2)
  
  要关闭TCP 445端口,可以有两种方法:
  1. 禁用NetBT驱动
  2. 修改注册表以禁用TCP上的CIFS
  

-[ 禁用 NetBT 驱动 ]-

  完全在系统中禁用SMB的方法,就是说,同时禁用SMB客户端(workstation服务)和服务端(server服务)。
  首先要禁用这两个服务(以及所有依赖它们并运行着的服务)。

C:WINNT>net stop rdr
Workstation 服务正在停止.
Workstation service 服务已成功停止。

C:WINNT>net stop srv
Server 服务正在停止.
Server service 服务已成功停止。

  这两个服务停止后,就可以停止NetBT驱动了:

C:WINNT>net stop netbt
NetBios over Tcipip 服务正在停止.
NetBios over Tcipip service 服务已成功停止。

  然后,必须在注册表中修改:

Key: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNetBT
Value: Start
Type: DWORD value (REG_DWORD)
Content: 4

在 Windows XP 上, 你可以使用如下命令:

C:WINDOWS>sc config netbt start= disabled


-[ 不禁用NetBT,只禁用SMB ]-

  有时,你可能想保留NetBT,但不用它传输SMB,而用TCP 445。

  这种情况下,你可以如下设置注册表

Key: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNetBTParameters
Value: SmbDeviceEnabled
Type: DWORD value (REG_DWORD)
Content: 0 (to disable)

  重新启动,TCP 445已经不再开放。

  Windows 2000中还有下面的端口开放:

C:WINNT>netstat -an

Active Connections

 Proto  Local Address          Foreign Address        State
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
 TCP    0.0.0.0:1026           0.0.0.0:0              LISTENING
 UDP    0.0.0.0:135            *:*
 UDP    0.0.0.0:1029           *:*

  Windows XP中:

C:WINDOWS>netstat -ano

Active Connections

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       884
 TCP    0.0.0.0:1025           0.0.0.0:0              LISTENING       976
 UDP    0.0.0.0:135            *:*                                    884
 UDP    0.0.0.0:1026           *:*                                    1112
 UDP    0.0.0.0:1027           *:*                                    976


---[ RPC 服务 ]---

  剩下的端口是RPC服务所使用的(Remote Procedure Call)。RPC端口映射和COM服务控制管理器(COM SCM)都使用TCP 135端口,比1023稍大的的一个TCP端口是RPC服务所使用,可以由RPC或DCOM(ORPC)访问。因为这个端口动态打开,不固定,就需要一个端口映射服务,来给出一个指定RPC服务所使用的端口。

  如果你想区分出哪些RPC服务占用了本机哪些端口,可以使用rpcdump工具从端口影射数据库中得到已注册的RPC服务列表。(http://razor.bindview.com/tools/desc/rpctools1.0-readme.html)

-[ Windows 2000 ]-

  用rpcdump,我们检查出,在我们的测试系统中,UDP端口1029被Messenger服务所启动的RPC服务占用。禁用服务并重启系统后,该端口关闭。

  并且,UDP端口135不再开放,因为:
 -最后一个通过UDP访问的RPC服务已被禁用
 -DCOM默认不经过UDP访问,所以COM SCM不侦听UDP 135端口

  TCP端口1026被计划任务(Task Scheduler)服务启动的RPC服务占用,禁用并重新启动即可关闭该端口

  远程访问连接管理器(RasMan)也必须被禁用。

-[ Windows XP ]-

  XP系统中,UDP 1027被Messenger服务的RPC使用,TCP 1025被计划任务(Task Scheduler)的RPC占用。与Windows 2000同样,UDP 135、1027和TCP 1025可在禁用服务并重启后被关闭。

--[ Windows 2000上的接口限制 ]--

_警告_: 此处描述的接口限制技术只应用于Windows 2000(不适用于Windows XP)

  现在为止,我们已经禁用了启动RPC服务的服务,为了关闭它们动态打开的端口,有时我们还是需要先启动计划任务这样的服务。

  有些RPC服务的可以限制网络接口,更精确地说,是那些不需要特别侦听所有网络接口的RPC服务。

  有一个注册表键值可以用来控制RPC服务侦听接口的列表,这个值包括了一个整数列表,代表了相应的网络接口。

  在Windows 2000以前,这个值包含了网络设备名称,如在Microsoft Platform SDK文档中,“Configuring the Windows XP/2000/NT Registry Port Allocations and Selective Bindings”条目描述的那样。从Windows 2000开始,是一个接口序号,从1开始。
  在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices下,默认不存在Rpc和RpcLinkage目录,必须手工创建。
  增加键值:
Key: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRpcLinkage
Value: Bind
Type: REG_MULTISZ
Content: list of network interfaces indexes

  2003年4月16日,微软发布了新版本的rpccfg工具,可以列出接口和进行接口限制,可以在http://download.microsoft.com/找到。(搜索关键字: rpccfg)

  用rpccfg的 -q 选项可以给出当前接口和端口限制的状况:

C:>WINNT>rpccfg -q
RPCCFG: Listening on all interfaces (default configuration)

RPCCFG: Using default port settings

  用rpccfg的 -l 选项可以给出网络适配器和接口号码的对应关系:

C:WINNT>rpccfg -l
IF[2]: Ethernet: 3Com EtherLink PCI (Microsoft's Packet Scheduler)
IF[1]: Ethernet: MS TCP Loopback interface

  在我们的系统中,第一个号码对应一个回环接口(IPv4地址127.0.0.1)。这样,如果要限制RPC服务在这个回环接口上,我们用 -a 1 参数:

C:WINNT>rpccfg -a 1
RPCCFG: Listening on the following interfaces
IF[1]: Ethernet: MS TCP Loopback interface

  然后我们用-q选项查看到,接口限制已经被正确设置到只在回环接口上:

C:WINNT>rpccfg -q
RPCCFG: Listening on the following interfaces
IF[1]: Ethernet: MS TCP Loopback interface

RPCCFG: Using default port settings


-[ 端口映射情况 ]-

  默认地,端口映射RPC服务绑定在了所有网络接口上。
  注册表键值ListenOnInternet控制着端口映射RPC服务是否绑定在所有网络接口上,默认这个键值不存在并且被当作有值Y:

Key: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRpcSs
Value: ListenOnInternet
Type: REG_SZ
Content: "Y" or "N"

  把这个键值设为N,TCP 135端口将只开在前述Bind键值所指定的那些网络接口上。
When set to "N", TCP port 135 will only listen on interfaces specified by the
Bind value described in the previous section.

-[ 接口限制技术的局限性 ]-

  接口限制技术有某些的局限性
 -只能应用于那些不明确指定需要侦听所有接口的RPC服务。
 -这是一个全局设置,不能为每个RPC服务单独设置。
 -好象只对RPC服务的TCP传输有效。

  测试表明,Windows 2000上的接口限制技术可以应用于下列服务

RPC service of the Distributed Transaction Coordinator service
RPC service of the Task Scheduler service
RPC service of the inetinfo service

  对工作在UDP上的下列服务无效(实际上,可能根本就对UDP传输无效)

RPC service of the messenger service
RPC service of the inetinfo service


-[ RPC 动态端口范围限制 ]-

  默认地,许多TCP和UDP端口会被RPC服务动态申请并使用,范围从1025开始(1024似乎从来不会被Windows使用),这解释了为什么许多RPC服务一旦启动会侦听稍高于1023的TCP和UDP端口。

  这个动态端口范围也是可以指定的。这可以用来使得IP过滤设备的端口过滤更容易。也可以使普通动态端口(系统作为客户端时所使用的端口)和RPC的动态端口更容易区分出来。

  rpccfg的 -pi 和 -pe选项用来设置RPC服务的动态端口范围,例如设置为4000-4100:

C:WINNT>rpccfg -pi 4000-4100
The following ports/port ranges will be used for Intranet ports
4000-4100

Default port allocation is from Intranet ports


  我们检查一下接口和端口限制是否设置正确:

C:WINNT>rpccfg -q
RPCCFG: Listening on the following interfaces
IF[1]: Ethernet: MS TCP Loopback interface

The following ports/port ranges will be used for Intranet ports
4000-4100

Default port allocation is from Intranet ports

--[ DCOM ]--

  唯一剩下的端口是TCP 135了。它由远程过程调用(RpcSs)打开并且不能禁用,因为该服务包含着COM服务控制管理器,本地进程需要。

  135端口打开是为了接收远程COM组件激活请求,注册表中有一个禁用DCOM的全局设置:

Key: HKEY_LOCAL_MACHINESOFTWAREMicrosoftOle
Value: EnableDCOM
Type: REG_SZ
Content: "Y" (to enable) or "N" (to disable)

  这个键值对应着dcomcnfg工具里的“在这台计算机上启用分布式COM”选项:

C:WINDOWS>dcomcnfg

  关于这个过程现在已经写在微软知识库中了。(http://support.microsoft.com/?id=825750)。

  禁用DCOM是个不错的主意,可以使系统免遭关于DCOM的漏洞的影响,这个漏洞由 Delirium Research Group (http://www.lsd-pl.net/special.html ) 和 Xfocus team (http://www.xfocus.org/advisories/200307/4.html )发现。

  DCOM禁用后,COM组件接收到远程激活请求后会返回错误码E_ACCESSDENIED(0x80700005),利用前面所提到的漏洞的攻击就会失效。

  禁用DCOM并不能关闭端口TCP 135。要关闭这个端口,一个方法是从可能用到DCOM的列表中删除基于IP的RPC协议列。在我们的例子中,列ncacn_ip_tcp(在TCP/IP上传输)可以删除。

  最简便的方法是:用dcomcnfg工具删除“默认协议”里的“面向连接的 TCP/IP”

  在Windows 2000上,dcomcnfg的“默认协议”直接显示了本地系统的DCOM属性。在Windows XP上,dcomcnfg调用了一个MMC控制台,显示了三个结点。我的电脑->属性->“默认协议”。

  “默认协议”中显示的列表其实储存在注册表里:

Key: HKEY_LOCAL_MACHINESOFTWAREMicrosoftRpc
Value: DCOM Protocols
Type: REG_MULTI_SZ

  所以,也可以直接编辑注册表来删除ncacn_ip_tcp。

  重新启动后,除了一个Windows XP下的UDP端口,所有的端口都被关掉了。我们下一节来对付这个端口。


--[ Windows XP的缓存DNS服务 ]--

  从Windows 2000开始,Windows系统包含了一个缓存DNS服务(dnscache),用来在内存中保存DNS查询的结果。

  在Windows 2000上,这个服务用UDP发送DNS请求,每次使用不同的UDP端口。在Windows XP上则总是使用同一个端口,第一次进行DNS查询时由dnscache服务申请并在以后维护,所以只要dnscache服务开着,这个端口就一直开着。

  Windows XP上,这个UDP端口是1026,如果我们停止dnscache服务,这个端口就将被关闭。这是可以做到的,在注册表中增加如下键值:

Key: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDnscacheParameters
Value: MaxCachedSockets
Type: REG_DWORD
Content: 0

  这样设置后,Windows XP的dnscache服务将变得和Windows 2000一样,也就是说,每次DNS请求使用不同的UDP端口。

--[ 系统使用中启动的RPC服务 ]--

  某些RPC服务会随某些程序的启动而启动。例如:在Windows XP中使用组件服务会打开两个RPC端口。因此,在做完本文的所有工作后,最好再增加IP过滤机制。

----[ 小结 ]----

  缩减网络服务一般有三个步骤:
 -禁用无用的服务
 -禁用TCP/IP上的NetBIOS和TCP上的CIFS
 -缩减RPC服务

应该禁用的服务包括:
Windows 2000:
 -IIS 5:iisadmin,w3svc,smtpsvc
 -其它:messenger,msdtc,policyagent,schedule
Windows XP:
 -messenger,policyagent,schedule,ssdpsrv,w32time

  禁用TCP/IP上的NetBIOS是分别对于每个网络接口而言的。要完全禁用TCP上的CIFS(445端口),必须增加SmbDeviceEnabled注册表项并置0。

  缩减RPC服务要从禁用那些注册了RPC服务的服务着手。

  在dcomcnfg工具里移除“面向连接的 TCP/IP”协议列,可以关闭TCP 135端口。

  如果必要,可以用rpccfg工具限制Windows 2000中RPC服务的侦听接口。

----[ 结论 ]----

  默认安装的Windows系统包含了太多的服务,完全有可能并且最好尽量减少它们,只保留十分必要的。

----[ 感谢 ]----

  感谢Jacqueline J. 通读了这篇文章并给出了许多改进。
原创粉丝点击