环境:Window11
使用背景:勒索病毒导致445端口不安全,故而该端口在服务器端被全面禁用了,如需使用SMB服务需要换个SMB服务端口。

方法1:端口转发

  1. win+x点开管理员权限的终端:
  2. 修改群晖docker hosts tmm 修改群晖smb端口_windows

  3. 输入如下指令开启端口重定向:
netsh interface portproxy add v4tov4 listenport=445 listenaddress=127.0.0.1 connectport=新端口 connectaddress=服务器IP地址

修改群晖docker hosts tmm 修改群晖smb端口_smb_02

注1:如果有多台SMB服务需要使用,那么这个方法会影响其他连接,这种情况推荐使用 SSH 挂载,可以参考这篇文章:Windows 下使用 SSHFS 通过 SSH 协议挂载远程服务器目录。
注2connectaddress也可以接服务器的域名。

  1. 重启电脑(重要!)
  2. 打开文件资源管理器,输入\\127.0.0.1,回车。
  3. 输入账号名和密码。
  4. 右键share文件夹,点击映射网络驱动器。

OK!

如果遇到问题,可以按如下步骤排查:

  1. 运行以下指令,检查445端口占用情况:
netstat -aon | findstr "445"

若输出结果中包含如下两行:

TCP    0.0.0.0:445    0.0.0.0:0    LISTENING    4
TCP    [::]:445       [::]:0       LISTENING    4

说明445端口被pid为4的进程占用。pid为4,指系统服务。系统服务是一系列服务,不指代某一个具体的进程。按网上的说法,445端口一般被Server占用,可以直接关掉。关掉的方式见下文。

  1. win+s搜索“服务”,打开服务这个应用:
  2. 在弹出来的“服务”窗口里搜索Server并双击点开,然后将“启动类型”修改成“禁用”,按“确定”再重启电脑
  3. 重启后,再次运行以下指令,检查445端口占用情况:
netstat -aon | findstr "445"

如果还输出了那两行,说明还有其他系统服务,那种情况另行分析,或者直接尝试下一步(我占用了也成功了);
如果没有了,说明端口已经没有被占用了,可以下一步了。

  1. 如果转发成功,输入netsh interface portproxy show all后,能够观察到445端口的含义变成了服务器IP:端口号

方法2:修改注册表【不保证能用】

参考:windows 修改smb服务端口(无法通过其他端口连接smb服务)

如果您需要在Windows上修改SMB服务端口,可以按照以下步骤进行操作:

  1. 打开“注册表编辑器”(Registry Editor),并导航到以下路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  1. 在右侧窗格中,找到或创建名为“TcpPort”的DWORD值,并将其数值设置为所需的端口号(例如,8000)。

如果您想要同时启用TCP和UDP协议,请创建或找到“Tcpip6”键,并设置与“TcpPort”相同的DWORD值。

  1. 退出注册表编辑器,并打开命令提示符(Command Prompt)或PowerShell窗口。
  2. 运行以下命令以重置SMB服务的配置:
sc.exe config lanmanserver depend= bowser/mrxsmb10/nsi
  1. 重新启动计算机以使更改生效。

这样,您就可以将SMB服务端口修改为指定的值。请注意,如果您使用的是防火墙软件,则可能还需要在防火墙中添加相应的入站规则才能允许流量通过新的端口。