首先,我对 Windows 网络发现以及 NetBIOS 的运行方式了解甚少。我不喜欢它,并试图忽略它。我的 LAN 上有一台服务器,它(除其他功能外)充当 LAN 上客户端的文件和打印服务器 (SMB)。
当我设置它时,因为我想对开放端口等进行精细控制(尽管这只是家庭设置),我没有在控制面板中启用文件和打印机共享,而是将其禁用并制定了允许端口 445 入站的防火墙规则,用于 SMB。这很有效,我有一个正常运行的文件服务器,只打开了端口 445(而不是 137、139 等)。
最近,我设置了同一台机器,通过网络共享 USB 打印机。最初,我认为这可以通过 SMB 已在使用的端口 445 正常工作,但我刚刚发现端口 135 也处于打开状态(RPC?),关闭该端口会中断打印。显然,打印需要 135。
问题:我刚刚注意到,在我的路由器/防火墙界面中,我可以看到我的服务器计算机的名称。举HOMESERVER
个例子。这让我很疑惑,路由器是如何找到机器名称的?我确信以前路由器没有显示机器名称,只显示 IP(我的 PC 就是这种情况,它关闭了网络发现等功能),所以我不确定发生了什么变化。在\\HOMESERVER\
我的 PC 上的 Windows 资源管理器中输入内容会提示我输入登录凭据,因此不知何故,这个名称被解析为服务器的 IP。此外,\\MY-PC-NAME\
在服务器上的资源管理器中输入内容会解析为我的 PC 的 IP。
我的问题是,我的网络上的 NetBIOS 名称是如何解析的?正在使用哪些端口和服务?我真正想要做的是阻止所有这些,因此所有类型的“网络发现”都关闭,并且只打开特定端口/服务可用(例如 SMB)。我不需要 NetBIOS 名称,如果需要,将使用 DNS 来解析主机名。尽管这不是一个大问题,但我不喜欢不知道这里发生了什么,并希望了解更多信息!
编辑:启动 Wireshark 后发现许多标有“NBNS”(NetBIOS 名称服务?)的 UDP 广播数据包在端口 137 上飞来飞去。我发现如果我清除 PC 上的 NetBIOS 缓存(nbtstat /R
),然后尝试访问\\HOMESERVER\
,就会发送一个 UDP 广播查询HOMESERVER
。我的服务器使用它的 IP 地址响应该广播。然后我尝试在我的服务器上创建一个防火墙规则,专门阻止 UDP 137 入站(虽然我认为没有规则允许这样做,并且防火墙设置为默认阻止,这很奇怪),现在当重复上述测试时,发送了一个查询,而服务器没有响应。(因为传入的数据包被服务器的防火墙阻止)。但是,不知何故,我的 PC 能够解析\\HOMESERVER\
到一个 IP 并尝试连接。(尽管这次它没有将 IP 添加到 NetBIOS 缓存中)。
它是怎样做到的?
编辑2(回应以下答案):
通常,NetBIOS 与 SMBv1 的启用相关;如果在操作系统级别禁用 SMBv1,则根本无法使用 NetBIOS 功能。
这很有趣,因为我在两台机器的 Windows 中都禁用了 SMBv1,(appwiz.cpl > Turn Windows features on or off)
但 Wireshark 确实显示端口 137 上有 UDP 流量,标记为“NBNS”。不知道这是为什么...
在大多数情况下,它会从您的 DHCP 租约请求中获悉这一点。虽然我也有一个监控 NetBIOS 名称公告的路由器,但相比之下这种情况很少见,而使用 DHCP 来建立路由器的内部主机名列表在家用设备中几乎是普遍的。
情况确实如此,尽管我的服务器有一个静态 IPv4 地址,所以这里不使用 DHCP。IPv6 是自动获取的。我认为这可能与某种网络发现有关,因为直到最近,路由器似乎还不知道我的 PC、我的服务器(两者都关闭了网络发现)或我的 IP 摄像头和 NVR 盒的名称,我怀疑它们是否支持任何发现协议。然而,我知道网络上其他 PC 的名称,这些 PC 可能已打开所有发现功能等。就在最近,我注意到我的服务器的名称出现了,并想知道为什么。
我想问题是,在这一点上,Windows 中是否有任何地方可以让我禁用所有这些(在这种情况下,可能无用的)协议,例如 mDNS、LLMNR、NetBIOS 等,或者我必须手动阻止防火墙中的 5353 和 5355 等端口?
答案1
首先,我对 Windows 网络发现以及 NetBIOS 的运行方式了解甚少。我不喜欢它,而且我试图忽略它。
主要是 NetBIOS没有不再运行。如今,您只剩下 NetBIOS 的残骸,而且只有当您在 Windows 上启用了 SMBv1 支持(或在 Samba 上启用了 nmbd 服务)时才可以使用 - 否则基于 NetBIOS 的“计算机浏览”将被禁用(由 WS-Discovery 取代),NetBIOS“名称服务”也将被禁用(由 DNS/mDNS/LLMNR 取代)等。
最近,我设置了同一台机器,通过网络共享 USB 打印机。最初,我认为这可以通过 SMB 已在使用的端口 445 正常工作,但我刚刚发现端口 135 也处于打开状态(RPC?),关闭该端口会中断打印。显然,打印需要 135。
“旧式”打印完全通过特殊的 SMB 共享进行;“NT 式”打印通过 MS-RPC 进行。现在可以通过 SMB“命名管道”以及直接通过 TCP 进行传输(并且哪些基于 RPC 的服务将使用 SMB,哪些使用 TCP 非常不一致),但我似乎记得打印最近已转为使用原始 TCP为了减轻由于使用 SMB 而可能引发的多种攻击。
最好使用 Windows 防火墙中的每个服务规则而不是基于端口的规则,因为它能够限制对单个 RPC 服务的访问,即使它们共享相同的端口(即使它们通过 SMB 访问)。
问题:我刚刚注意到,在我的路由器/防火墙界面中,我可以看到我的服务器机器的名称。例如,将其称为 HOMESERVER。这让我很疑惑,路由器如何找出机器的名称?
在大多数情况下,它会从您的 DHCP 租约请求中获悉这一点。虽然我也有一个监控 NetBIOS 名称公告的路由器,但相比之下这种情况很少见,而使用 DHCP 来建立路由器的内部主机名列表在家用设备中几乎是普遍的。
在我的电脑上的 Windows 资源管理器中输入 \HOMESERVER\ 会提示我输入登录凭据,因此该名称以某种方式被解析为服务器的 IP。
正如您所说,这可能是 NetBIOS 名称服务 (UDP 137),但也可能是更现代的替代方案 - mDNS (UDP 5353) 或 LLMNR (UDP 5355)。
通常,NetBIOS 与启用 SMBv1 有关;如果在操作系统级别禁用 SMBv1,则根本不使用 NetBIOS 功能。Microsoft 最初尝试用 LLMNR 替换 NetBIOS 名称服务,但现在正在采用更通用的 mDNS(许多其他系统都支持)。
它也可以是单播 DNS,如前所述,路由器的内部 DNS 服务器会根据 DHCP 租约建立一个列表。