DNS.EXE 立即分配 5000+ 个端口

Nim*_*oud 17 domain-name-system windows-server-2008

此命令通过 DNS.EXE 清除所有打开的 UDP 端口

net stop dns
Run Code Online (Sandbox Code Playgroud)

重新启动 DNS 服务后,DNS.EXE 分配了 5000 多个端口。

net start dns
Run Code Online (Sandbox Code Playgroud)

它不会消耗大量内存或 CPU。但是,由于超时,我注意到/警告到服务器的许多 http/smtp/pop3 连接问题。我刚刚通过 DNS.EXE 检查并发现了大量开放端口。Currports 显示 UDP 本地端口从 50000 到 56000,本地地址为 ::,远程地址为空。netstat 的最后几行 - 命令如下:

UDP    [::]:55976             *:*   
UDP    [::]:55977             *:*   
UDP    [::]:55978             *:*     
UDP    [::]:55979             *:*     
UDP    [::]:55980             *:*     
UDP    [::]:55981             *:*     
UDP    [::]:55982             *:*    
Run Code Online (Sandbox Code Playgroud)

我之前没有注意到这些端口,所以我不确定它是否可以。你怎么认为?我确实重新启动了服务器,并且监控/警报邮件没有继续。

Mat*_*sen 26

这是一个公知的 效果分配到地址的修复程序MS08-037,由于修补程序被用于减少用于DNS响应的端口可预测性。

您可以通过定义较低的套接字池大小来限制使用的端口数量,如本文所述

使用dnscmd.exe

  • 打开提升的命令提示符(以管理员身份运行...)
  • 问题dnscmd /Config /SocketPoolSize <value>where<value>是 0 到 10000 之间的数字

使用 regedit.exe

  • 打开regedit.exe并扩展HKLM蜂巢
  • 导航 SYSTEM\CurrentControlSet\services\DNS\Parameters
  • 如果尚未存在,则创建一个DWORD名为的新值SocketPoolSize
  • 设置 0 到 10000 之间的十进制值
  • 重新启动 DNS 服务器服务: net stop dns && net start dns

请注意,将值设置得太低,有效地破坏了 MS08-037 的目的

如果您使用的是 Windows Server 2008 R2 并且只想确保 DNS 不使用多个单独的 UDP 端点,您还可以指定要排除 DNS 使用的端口范围列表:

dnscmd /Config /SocketPoolExcludedPortRanges <start>-<end>
Run Code Online (Sandbox Code Playgroud)