(刚翻译的,不准确的地方请勿见怪,并请指出)
调整本机可发起的 TCP 连接和可接受的 TCP 连接的方法:
适用的操作系统:
Microsoft Windows NT Workstation versions 3.5, 3.51, 4.0
Microsoft Windows NT Server versions 3.5, 3.51, 4.0
Microsoft Windows 2000 Professional
Microsoft Windows 2000 Server
Microsoft Windows 2000 Advanced Server
方法:
修改 ( 添加 ) 注册表,并重新启动系统:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services 下面:
TcpNumConnections
Key: Tcpip/Parameters
取值类型: REG_DWORD - Number
取值范围: 0 - 0xfffffe
缺省值: 0xfffffe
描述:本参数限制可以同时打开的 TCP 连接的数量
MaxUserPort
key: Tcpip/Parameters
取值类型: REG_DWORD - Number
取值范围: 5000-65534 ( 十进制 )
缺省值: 0x1388 (5000 十进制 )
描述:控制一个应用程序可以打开的最多端口数量。通常,短命的端口在 1024-5000 之间分配。
当试图发起 5000 以上端口的连接,系统将出现 WSAENOBUFS(10055) 错误:因为队列满或者系统
缺乏足够的缓冲空间。
下面是我的 IOCP TCP 服务器单机测试结果:
15:201 | | | | | | TIOCPServerCore.Dump Begin==================================>
15:201 | | | | | | Socket 线程数量 =2
15:201 | | | | | | 缓冲区尺寸 =4096
15:211 | | | | | | 空闲缓冲区数量 =3
15:211 | | | | | | 使用缓冲区数量 =16275
15:211 | | | | | | 最大空闲缓冲区数量 =500
15:221 | | | | | | 空闲 Socket 数量 =0
15:231 | | | | | | 使用 Socket 数量 =16274
15:231 | | | | | | 最大空闲 Socket 数量 =500
15:241 | | | | | | 业务处理线程数量 =1
15:241 | | | | | | 最大空闲业务处理线程数量 =2
CPU 占用率很低,内存占用 10M 左右
本机发起和接受的 TCP 连接数是 16274 ,好像是最大的可发起连接数了,如果有
别的机器可能可以更多, Microsoft 资料说可以接收 200000 个连接
服务器反应迅速
调整本机可发起的 TCP 连接和可接受的 TCP 连接的方法:
适用的操作系统:
Microsoft Windows NT Workstation versions 3.5, 3.51, 4.0
Microsoft Windows NT Server versions 3.5, 3.51, 4.0
Microsoft Windows 2000 Professional
Microsoft Windows 2000 Server
Microsoft Windows 2000 Advanced Server
方法:
修改 ( 添加 ) 注册表,并重新启动系统:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services 下面:
TcpNumConnections
Key: Tcpip/Parameters
取值类型: REG_DWORD - Number
取值范围: 0 - 0xfffffe
缺省值: 0xfffffe
描述:本参数限制可以同时打开的 TCP 连接的数量
MaxUserPort
key: Tcpip/Parameters
取值类型: REG_DWORD - Number
取值范围: 5000-65534 ( 十进制 )
缺省值: 0x1388 (5000 十进制 )
描述:控制一个应用程序可以打开的最多端口数量。通常,短命的端口在 1024-5000 之间分配。
当试图发起 5000 以上端口的连接,系统将出现 WSAENOBUFS(10055) 错误:因为队列满或者系统
缺乏足够的缓冲空间。
下面是我的 IOCP TCP 服务器单机测试结果:
15:201 | | | | | | TIOCPServerCore.Dump Begin==================================>
15:201 | | | | | | Socket 线程数量 =2
15:201 | | | | | | 缓冲区尺寸 =4096
15:211 | | | | | | 空闲缓冲区数量 =3
15:211 | | | | | | 使用缓冲区数量 =16275
15:211 | | | | | | 最大空闲缓冲区数量 =500
15:221 | | | | | | 空闲 Socket 数量 =0
15:231 | | | | | | 使用 Socket 数量 =16274
15:231 | | | | | | 最大空闲 Socket 数量 =500
15:241 | | | | | | 业务处理线程数量 =1
15:241 | | | | | | 最大空闲业务处理线程数量 =2
CPU 占用率很低,内存占用 10M 左右
本机发起和接受的 TCP 连接数是 16274 ,好像是最大的可发起连接数了,如果有
别的机器可能可以更多, Microsoft 资料说可以接收 200000 个连接
服务器反应迅速
Windows 2000 Server
的
TCP/IP
利用与对策
更新日期:
2004
年
03
月
01
日
本页内容
目标
使用本模块可以实现:
•
|
确定
Microsoft® Windows® 2000
操作系统
TCP/IP
堆栈的可能利用。
|
•
|
配置注册表是解决
Windows 2000 TCP/IP
堆栈利用的对策。
|
•
|
确定
Windows 2000 TCP/IP
堆栈利用的潜在影响和对策。
|
适用范围
本模块适用于下列产品和技术:
•
|
Windows 2000
|
•
|
Windows 2000 TCP/IP
堆栈
|
•
|
Windows 2000
注册表
|
如何使用本模块
您应通过本模块确保
Windows 2000 TCP/IP
堆栈的安全。还可以使用本模块确定
TCP/IP
堆栈利用的影响和对策。
概要
本模块着重讲述了
Windows 2000 TCP/IP
堆栈的可能利用,并详细描述了可通过配置
HKLM/System/CurrentControlSet/Services/Tcpip/Parameters/
注册表项来应用的对策。此外,模块还讲述了该配置的潜在影响。
Windows 2000 TCP/IP
堆栈潜在威胁和对策的影响
表
1
显示了
TCP/IP
堆栈的潜在利用。该表还显示了可能的对策,以及利用与对策的潜在影响。
表
1
:
TCP/IP
堆栈的潜在利用
注册表值项
|
对策潜在影响
|
潜在利用
|
EnableICMPRedirect
|
如果将路由和远程访问服务
(RRAS)
配置为自治系统边界路由器
(ASBR)
,它将无法正确导入连接接口子网路由。相反,该路由器将主机路由插入开放式最短路径优先
(OSPF)
路由中。由于
OSPF
路由器不能用作
ASBR
路由器,导入连接接口子网路由至
OSPF
将导致路由表与陌生的路由路径相互混淆。
|
Internet
控制消息协议
(ICMP)
重定向将导致堆栈探测主机路由。这些路由将覆盖
OSPF
生成的路由。
这一结果本身是预料中的行为。但问题是,由于 ICMP 重定向探测路由的超时时间是 10 分钟,这便在相关网络中形成黑洞。 |
SynAttackProtect
|
该注册表值允许
TCP
调整
SYN-ACK
的重新传输。配置了该值后,一旦发生
SYN
攻击,连接响应的超时时间更短。该值在连接指示中增加了额外的延迟,在发生
SYN
攻击时,
TCP
连接请求的超时时间很短。如果配置了该设置,每个适配器(包括初始往返时间
(RTT)
和窗口大小)套接字选项所配置的可伸缩窗口和
TCP
参数将不再起作用。
|
在
SYN Flood
攻击中,攻击者向服务器持续发送
SYN
数据包流,服务器使处于半打开状态的连接一直保持打开状态,直至被淹没在庞大的数据流中而无法响应合法的请求。
|
EnableDeadGWDetect
|
启用间隔网关检测后,如果有很多连接都存在问题,
TCP
可能要求
IP
切换到备份网关,如果该设置的值是
0
,
Windows
不再检测间隔网关,并自动切换到替换网关。
|
攻击者可强制服务器切换网关,并极有可能切换到毫无准备的网关。
|
EnablePMTUDiscovery
|
如果
EnablePMTUDiscovery
的设置是
1
,
TCP
将尝试发现远程主机路径中的最大传输单位
(MTU)
或最大数据包大小。
TCP
可通过发现路径的
MTU
并将
TCP
段限制在该值之内来在
MTU
不同的网络连接路径中消除路由器中的碎片。
碎片对 TCP 吞吐量有负面影响。如果值设置是 0 ,所有非本地子网主机的连接都将使用 576 字节的 MTU 。 |
如果值非
0
,攻击者可强制
MTU
为非常小的值,然后强制服务器分割大量的数据包,进而使堆栈超负荷工作。
|
KeepAliveTime
|
该值控制了
TCP
尝试通过发送
KeepAlive
数据包确认空闲连接是否依然毫无变化的频率。如果远程计算机仍可访问,说明数据包保持有效
(KeepAlive)
。
在默认情况下,系统不发送 KeepAlive 数据包。您可通过程序在连接中配置该值。如果减少至 5 分钟(默认值是 2 小时),表示非活动会话将很快断开。 |
能连接网络应用程序的攻击者可以通过建立大量的连接造成
DoS
。
|
DisableIPSourceRouting
|
IP
源路由这种机制允许发送者确定数据报通过网络的
IP
路由。将该值设置为
2
将导致所有传入的源路由数据包丢失。
|
攻击者使用源路由数据包隐蔽他们的身份和位置。源路由允许计算机发送数据包来指定自己使用的路由。
|
TCPMaxConnectResponseRetransmissions
|
该参数控制了在未明确
SYN
的情况下,
SYN-ACK
因响应连接请求而重新传输的次数。
如果值大于或等于 2 ,表示堆栈在内部使用 SYN-ATTACK 保护。如果值小于 2 ,表示堆栈的 SYN-ATTACK 保护根本不读取注册表值。该参数缩短了清理 TCP 连接所需的默认时间。遭受强烈攻击的站点可降低该值至 1 。设置为 0 也有效。但是,如果该参数的设置是 0 , SYN-ACK 根本不会重新传输,并在 3 秒钟后超时。如果值非常低,远端客户端的合法连接尝试也将失败。 |
在
SYN Flood
攻击中,攻击者向服务器持续发送
SYN
数据包流,服务器使处于半打开状态的连接一直保持打开状态,直至被淹没在庞大的数据流中而无法响应合法的请求。
|
TCPMaxDataRetransmissions
|
在每个传出段向下传至
IP
后,
TCP
将启动重新传输计时器。如果在计时器到期前未收到数据确认,该段最多可再重新传输三次。
|
在
SYN Flood
攻击中,攻击者向服务器持续发送
SYN
数据包流,服务器使处于半打开状态的连接一直保持打开状态,直至被淹没在庞大的数据流中而无法响应合法的请求。
|
PerformRouterDiscovery
|
设置该值可阻止
Windows 2000
(支持
Internet
路由器发现协议
(IRDP)
)自动检测并配置计算机中的默认网关地址。
|
有同一网段系统控制权的攻击者可配置网络中的计算机来模拟路由器。
之后,其他启用了 IRDP 的计算机将使自己的数据流通过该受损系统。 |
TCPMaxPortsExhausted
|
该参数控制了
SYN-ATTACK
保护的起始运行点。如果系统因连接的有效待办事项是
0
而拒绝了
TCPMaxPortsExhausted
连接请求,
SYN-ATTACK
保护便开始运行。这对尝试合法连接的服务器和系统的影响微乎其微。
|
在
SYN Flood
攻击中,攻击者向服务器持续发送
SYN
数据包流,服务器使处于半打开状态的连接一直保持打开状态,直至被淹没在庞大的数据流中而无法响应合法的请求。
|
AFD
设置:
DynamicBacklogGrowthDelta
EnableDynamicBacklog
MinimumDynamicBacklog
MaximumDynamicBacklog
|
Windows Sockets
应用程序(如
FTP
服务器和
Web
服务器)由
Afd.sys
处理连接尝试。
Afd.sys
已经过修改并支持大量的半打开连接,而且不会拒绝合法客户端的访问。
允许管理员配置动态待办事项可实现这一目标。 DynamicBacklogGrowthDelta 控制了必需其他连接时要创建的自由连接数。设置该值一定要非常小心。如果值过大,将导致自由连接分配剧增。 |
在
SYN Flood
攻击中,攻击者向服务器持续发送
SYN
数据包流,服务器使处于半打开状态的连接一直保持打开状态,直至被淹没在庞大的数据流中而无法响应合法的请求。
|