• 如何修改smb服务的默认445端口?——官方回答是无法修改,但是可以使用端口转发


    修改SMB 445端口方法


    前几天的永恒之蓝,导致把445端口封掉了,可项目中用到smb协议(默认端口是445),解决办法,把smb端口改成其他,具体如下:

    首先要关闭445端口,可以参考微软KB 301673中的方法,在注册表的
    HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/NetBT/Parameters
    中增加一个值:
            Value Name: SmbDeviceEnabled
            Type: REG_DWORD
            Value Data: 0
    然后重新启动系统。

    在注册表中增加:
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Smb]
    "SessionPort"=dword:0000022b
    "DatagramPort"=dword:0000022b
    上面的端口为16进制

     

    我这里改成了555端口,也可以改成其他。

     
    ===》这个是04年的一个文章写的,所以未必有效。。。。
     
    下面是比较新的做法:

    winserver如何修改smb服务的默认445端口? RRS feed

    • שאלה

    • 如题,比如将默认445端口修改成4455。

      以及,修改后该使用什么方式来访问,是否用“\\ip:新端口号”的方式来访问呢?


      暴躁老哥,在线发飙 Grumpy man have a cow online

      יום רביעי 30 דצמבר 2020 09:05
       

    תשובות

    • 您好,

      SMB端口445是无法更改的,但是可以使用端口转发的方式,将445端口转发到4455端口上。

      原理如下:SMB客户端—连接—>端口转发—连接—>SMB服务端。

      请问您的SMB客户端和服务器都是什么版本的?如果是server2012,windows10及以上版本,您可以遵循如下步骤进行端口转发:

      共享文件服务端口设置

      端口转发成功后,通过\\127.0.0.1的形式访问到远程服务器共享。


      Please remember to mark the replies as answers if they help.
      If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com

      通过 TCP/IP 的直接主机 SMB

      本文介绍如何通过 TCP/IP (SMB) 主机服务器消息阻止。

      适用于:  Windows Server 2012 R2
      原始 KB 编号:   204279

      摘要

      Windows TCP 上直接托管的 SMB 协议支持文件和打印机共享通信。 SMB 1.0 和较旧的 CIFS 流量支持 NetBIOS over TCP (NBT) 协议支持 UDP 传输,但从 Windows Vista 和具有 SMB 2.0.2 的 Windows Server 2008 开始,需要端口 445 上的 TCP/IP。 删除 NetBIOS 传输具有多个优点,包括:

      • 简化 SMB 流量的传输。
      • 删除 WINS 和 NetBIOS 广播作为名称解析的一种途径。
      • 在 DNS 上标准化文件和打印机共享的名称解析。
      • 删除安全性不太安全的 NetBIOS 协议作为攻击方法

      如果同时启用了直接托管接口和 NBT 接口,则同时尝试这两种方法,并且使用第一个响应方法。 此机制Windows支持 SMB 流量直接托管的操作系统正常运行。

      更多信息

      Tcp 上的 NetBIOS 通常使用下列端口:

      • NBName:137/UDP
      • NBName:137/TCP
      • NBDatagram:138/UDP
      • NBSession:139/TCP

      直接托管 的无 NetBIOS SMB 流量使用端口 445 (TCP) 。 在这种情况下,四字节标头位于 SMB 流量之前。 此标头的第一个字节始终0x00,接下来的 3 个字节是剩余数据的长度。

      使用以下步骤禁用通过 TCP/IP 的 NetBIOS。 此过程强制所有 SMB 流量直接托管 SMB 流量。 请谨慎实现此设置,因为它会导致基于 Windows 的计算机无法使用 SMB 流量与早期操作系统进行通信:

      1. 选择 "开始**",设置,** 然后选择"网络和 拨号连接"。
      2. 右键单击 "本地连接", 然后选择"属性 "。
      3. 选择 "INTERNET 协议 (TCP/IP) ", 然后选择"属性 "。
      4. 选择“高级”。
      5. 选择 WINS 选项卡,然后选择"禁用 TCP/IP 上的 NetBIOS"。

      您还可以使用 DHCP 服务器禁用 NetBIOS over TCP/IP,该服务器将 Microsoft 供应商特定的选项配置为代码 1,禁用 NetBIOS over TCP/IP。 将此选项设置为值 2 可禁用 NBT。 有关使用此方法的信息,请参阅 DHCP Server Help file in Windows。

      若要确定基于 TCP/IP 的 NetBIOS 是否Windows,在命令提示符下运行 net config redirector 或 net config server 命令。 输出显示 NetbiosSmb 设备 (它是无 NetBIOS 的传输) 和 NetBT_Tcpip 设备 (它是 NetBIOS over TCP 传输) 。 例如,以下示例输出显示绑定到适配器的直接托管传输和 NBT 传输:

      控制台
      Workstation active on
      NetbiosSmb (000000000000)
      NetBT_Tcpip_{610E2A3A-16C7-4E66-A11D-A483A5468C10} (02004C4F4F50)
      NetBT_Tcpip_{CAF8956D-99FB-46E3-B04B-D4BB1AE93982} (009027CED4C2)
      

      NetBT_Tcpip绑定到每个适配器。 系统NetBT_Tcpip绑定到的每个网络适配器显示一个网络适配器实例。 NetbiosSmb 是一种全局设备,不基于每个适配器进行绑定。 因此,除非完全禁用 Microsoft 网络的文件和打印机Windows,否则无法禁用直接托管 SMB。

       
       
      -----------------------------------------------------------------

      修改Windows SMB相关服务的默认端口

      wangyangcheng2004-08-26 05:10:51
       

      修改Windows SMB相关服务的默认端口

      作 者:于旸
      邮 件:tombkeeper[0x40]nsfocus[0x2e]com
      tombkeeper[0x40]xfocus[0x2e]org
      完成于:2004.07.22
      关键字:SMB、NetBT、NetBios、netbt.sys、默认端口


      Windows NT系列操作系统的NetBT(NetBios Over Tcpip)服务,是用来处理SMB
      (Server Message Block)相关的服务/客户操作的。

      NetBT服务对应的驱动程序文件是netbt.sys,对应的注册表项是:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT。
      微软的KB 120642和KB 314053分别描述了Windows NT、Windows 2000、Windows XP上
      该键值的部分可选参数。

      NetBT服务对应的在Windows NT 4.0上对应的端口是:

      NameservicePort 137/UDP
      DatagramPort 138/UDP
      SessionPort 139/TCP

      从Windows 2000开始,微软引入了SMB Direct Over TCP的445端口。上述的137、
      138、139 端口虽然被保留,并可正常工作,但是默认情况下,系统总是会使用445端
      口进行SMB会话,仅在445端口工作失败的情形下,才会使用139端口作为SessionPort。
      445端口默认情况下是始终开放的。如果要关闭该端口,可以参考微软KB 301673中的
      方法,在
      HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NetBT\Parameters
      中增加一个值:

      Value Name: SmbDeviceEnabled
      Type: REG_DWORD
      Value Data: 0

      然后重新启动系统。

      顺便提一下,如果要关闭139端口,可以参考微软的KB 299977:

      1、 单击开始,指向设置,然后单击网络和拨号连接。
      2、 单击您希望静态配置的本地连接,单击文件菜单中的属性。
      3、 单击 Internet 协议 (TCP/IP),单击属性,单击高级,然后单击 WINS 选项卡。
      4、 单击禁用 TCP/IP 上的 NetBIOS。
      5、 单击确定,单击确定,再次单击确定。

      修改会立即生效,不必重新启动系统。

      这个445 端口可不可以改成别的值呢?分析netbt.sys可知,服务初始化的时候,
      函数NbtReadRegistry分别调用ReadParameters和ReadSmbDeviceInfo从注册表中获取
      NetBT服务的配置信息:

      ; ------------------------------------------------------------------------
      push [ebp+Handle]
      push offset _NbtConfig
      call _ReadParameters@8 ; ReadParameters(x,x)
      push [ebp+KeyHandle]
      call _ReadSmbDeviceInfo@4 ; ReadSmbDeviceInfo(x)
      ; ------------------------------------------------------------------------

      ReadParameters读取的注册表值就在上面提到的三篇KB中基本都有相关说明,但
      是ReadSmbDeviceInfo 所获取的信息,似乎还没有现成的文档描述。下面是逆向工程
      出来的5.0.2195.6783版本netbt.sys的ReadSmbDeviceInfo函数:

      ; ------------------------------------------------------------------------
      ; __stdcall ReadSmbDeviceInfo(KeyHandle)

      KeyHandle = dword ptr 8

      push ebp
      mov ebp, esp
      lea eax, [ebp+KeyHandle]
      push esi
      push eax ; KeyHandle
      push offset aParametersSmb ; "Parameters\Smb"
      push [ebp+KeyHandle] ; int
      call _NbtOpenRegistry@12 ; NbtOpenRegistry(x,x,x)
      mov esi, eax
      test esi, esi
      jl short SetDefaultPort ;如果键不存在则转向去设置默认值
      push 1
      push 1BDh ; 默认值445
      push offset aSessionport ; "SessionPort"
      push [ebp+KeyHandle]
      call _NbtReadSingleParameter@16 ; NbtReadSingleParameter(x,x,x,x)
      push 1
      push 1BDh ; 默认值445
      push offset aDatagramport ; "DatagramPort"
      mov word_2BA88, ax
      push [ebp+KeyHandle]
      call _NbtReadSingleParameter@16 ; NbtReadSingleParameter(x,x,x,x)
      push [ebp+KeyHandle] ; Handle
      mov word_2BA8A, ax
      call ds:__imp__ZwClose@4 ; __declspec(dllimport) ZwClose(x)
      jmp short Return

      SetDefaultPort:
      mov SessionPort, 1BDh ;设置SessionPort为445
      mov DatagramPort, 1BDh ;设置DatagramPort为445

      Return:
      mov eax, esi
      pop esi
      pop ebp
      retn 4
      ; ------------------------------------------------------------------------

      显然,ReadSmbDeviceInfo会先试图打开
      HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NetBT\Parameters\Smb
      然后分别读取SessionPort 和DatagramPort,根据其中的值来设置相关端口。如果打
      开键失败,则转向 SetDefaultPort,将两个端口设置为默认的445,如果读取值失败,
      NbtReadSingleParameter的第三型参也指定了默认的返回值445。

      SessionPort 和DatagramPort分别对应TCP和UDP的端口。不过我从来没有见到过
      UDP的SMB会话,所以,还是SessionPort更加重要一些。

      然后NbtCreateAddressObjects根据这些信息,来打开端口,创建服务:

      ; ------------------------------------------------------------------------
      mov eax, [ebp+var_8]
      mov cx, SessionPort ; tcp端口值
      mov esi, offset aSmbserver ; "*SMBSERVER "
      mov [eax+1F2h], cx
      mov eax, [ebp+var_8]
      mov cx, DatagramPort ; udp端口值
      mov [eax+1F6h], cx
      mov eax, [ebp+var_8]
      mov [eax+1F4h], di
      mov eax, [ebp+var_8]
      lea edi, [eax+1F8h]
      movsd
      movsd
      movsd
      movsd
      push [ebp+var_8]
      push 0
      push 7F000001h
      call _NbtCreateAddressObjects@12 ; NbtCreateAddressObjects(x,x,x)
      ; ------------------------------------------------------------------------

      明确了流程,方法也就出来了。
      HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NetBT\Parameters\Smb
      这个项默认情况下是没有的,所以程序总是会转向SetDefaultPort,如果我们手工创
      建Smb 项和下面的两个值,系统就会按照我们创建的值来设定端口。这是最简单的办
      法。当然,如果你愿意,手工修改netbt.sys 也是可以的。下面是一个把端口设定为
      555的注册表例子:

      ; ------------------------------------------------------------------------
      Windows Registry Editor Version 5.00

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Smb]
      "SessionPort"=dword:0000022b
      "DatagramPort"=dword:0000022b
      ; ------------------------------------------------------------------------
       
  • 相关阅读:
    Javascript
    读jQuery源码
    常用正则-(各种数字,不能包括特殊字符等,后续再补充)
    SpringBoot入门教程(二) Spring Boot配置第二章
    Mybatis面试题
    HTTP和socket的连接请求的区别
    Maven有哪些优点和缺点
    @Autowired 与@Resource的区别(详细)
    spring的优点与缺点
    SpringMVC常见面试题总结
  • 原文地址:https://www.cnblogs.com/bonelee/p/16529658.html
Copyright © 2020-2023  润新知