Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows 7

วิธีตรวจสอบ เปิด หรือปิดโปรโตคอล SMB รุ่นต่างๆ ใน Windows

Server Message Block (SMB) โปรโตคอลเครือข่ายใช้สำหรับแชร์และเข้าถึงโฟลเดอร์ ไฟล์ เครื่องพิมพ์ และอุปกรณ์อื่นๆ ผ่านเครือข่าย (TCP port 445) ในบทความนี้ เราจะดูว่ามีเวอร์ชัน (Dialects) ของ SMB ใดบ้างใน Windows เวอร์ชันต่างๆ (และเกี่ยวข้องกับเวอร์ชัน Samba บน Linux อย่างไร) วิธีตรวจสอบเวอร์ชัน SMB ที่ใช้งานอยู่บนคอมพิวเตอร์ และวิธีเปิดหรือปิด Dialects ของ SMBv1, SMBv2, และ SMBv3

สารบัญ

  • เวอร์ชันโปรโตคอล SMB ใน Windows
  • วิธีตรวจสอบเวอร์ชัน SMB ใน Windows
  • ตรวจสอบ Dialects SMB ที่ใช้งานด้วย Get-SMBConnection
  • หยุดใช้โปรโตคอล SMBv1 ที่ไม่ปลอดภัย
  • วิธีเปิดและปิด SMBv1, SMBv2, และ SMBv3 ใน Windows

เวอร์ชันโปรโตคอล SMB ใน Windows

มีหลายเวอร์ชันของโปรโตคอล SMB (Dialects) ที่ปรากฏใน Windows ใหม่ๆ ตามลำดับ (และ Samba):

  • CIFS – Windows NT 4.0
  • SMB 1.0 – Windows 2000
  • SMB 2.0 – Windows Server 2008 และ Windows Vista SP1 (รองรับใน Samba 3.6)
  • SMB 2.1 – Windows Server 2008 R2 และ Windows 7 (Samba 4.0)
  • SMB 3.0 – Windows Server 2012 และ Windows 8 (Samba 4.2)
  • SMB 3.02 – Windows Server 2012 R2 และ Windows 8.1 (ไม่รองรับใน Samba)
  • SMB 3.1.1 – Windows Server 2016 และ Windows 10 (ไม่รองรับใน Samba)

Samba ใช้เพื่อนำโปรโตคอล SMB ไปใช้ใน Linux/Unix Samba 4.14 และใหม่กว่าใช้ SMB 2.1 โดยค่าเริ่มต้น

ในการสื่อสาร SMB ผ่านเครือข่าย ไคลเอนต์และเซิร์ฟเวอร์จะใช้เวอร์ชันโปรโตคอล SMB สูงสุดที่รองรับโดยทั้งไคลเอนต์และเซิร์ฟเวอร์

ตารางสรุปความเข้ากันได้ของเวอร์ชัน SMB ดูได้ดังนี้ จากตารางนี้ คุณสามารถกำหนดเวอร์ชันของโปรโตคอล SMB ที่เลือกเมื่อ Windows เวอร์ชันต่างๆ มีปฏิสัมพันธ์กัน:

Operating SystemWindows 10, Win Server 2016Windows 8.1, Win Server 2012 R2Windows 8, Server 2012Windows 7, Server 2008 R2Windows Vista, Server 2008Windows XP, Server 2003 and earlier
Windows 10, Windows Server 2016SMB 3.1.1SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 8.1, Server 2012 R2SMB 3.02SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 8, Server 2012SMB 3.0SMB 3.0SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 7, Server 2008 R2SMB 2.1SMB 2.1SMB 2.1SMB 2.1SMB 2.0SMB 1.0
Windows Vista, Server 2008SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 1.0
Windows XP, 2003 and earlierSMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0

ตัวอย่างเช่น หากไคลเอนต์ที่รัน Windows 8.1 เชื่อมต่อกับ File Server ที่รัน Windows Server 2016 จะใช้โปรโตคอล SMB 3.0.2

ตามตาราง Windows XP และ Windows Server 2003 สามารถใช้เพียง SMB 1.0 ในการเข้าถึงโฟลเดอร์และไฟล์แชร์ SMBv1 ถูกปิดใช้งานใน Windows Server รุ่นใหม่ (2012 R2/2016) ดังนั้น หากคุณยังใช้งานอุปกรณ์ Windows XP และ Windows Server 2003 บนเครือข่าย พวกเขาจะไม่สามารถเข้าถึงโฟลเดอร์แชร์บน File Server ที่รัน Windows Server 2016 ได้

หากใช้ Windows Server 2019/2016 ที่ปิด SMB v1.0 เป็น Domain Controller แล้ว ไคลเอนต์ Windows XP/Server 2003 จะไม่สามารถเข้าถึงโฟลเดอร์ SYSVOL และ NETLOGON บน Domain Controllers และยืนยันตัวตนกับ AD ได้

อาจได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามเชื่อมต่อกับโฟลเดอร์แชร์บน File Server ที่ปิด SMBv1:

The specified network name is no longer available

วิธีตรวจสอบเวอร์ชัน SMB ใน Windows

มาดูวิธีตรวจสอบว่า Dialects ต่างๆ ของโปรโตคอล SMB ไหนเปิดใช้งานอยู่บนอุปกรณ์ Windows ของคุณ

บน Windows 10/8.1 และ Windows Server 2019/2016/2012R2 สามารถตรวจสอบสถานะ Dialects ต่างๆ ของโปรโตคอล SMB ด้วย PowerShell:

Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol

วิธีตรวจสอบ เปิด หรือปิดโปรโตคอล SMB รุ่นต่างๆ ใน Windows

คำสั่งนี้คืนค่าว่าโปรโตคอล SMB1 ถูกปิดใช้งาน (EnableSMB1Protocol = False) และโปรโตคอล SMB2 และ SMB3 เปิดใช้งาน (EnableSMB2Protocol = True)

โปรดทราบว่าโปรโตคอล SMBv3 และ SMBv2 เกี่ยวข้องกันอย่างใกล้ชิด ไม่สามารถปิดหรือเปิด SMBv3 หรือ SMBv2 แยกกันได้ พวกมันจะเปิด/ปิดไปพร้อมกันเสมอ เพราะใช้ Stack เดียวกัน

บน Windows 7, Vista, และ Windows Server 2008 R2/2008:

Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}

หากไม่มีพารามิเตอร์ชื่อ SMB1 หรือ SMB2 ในคีย์รีจิสทรีนี้ แสดงว่าโปรโตคอล SMBv1 และ SMBv2 เปิดใช้งานโดยค่าเริ่มต้น

วิธีตรวจสอบ เปิด หรือปิดโปรโตคอล SMB รุ่นต่างๆ ใน Windows

ยังสามารถตรวจสอบได้ว่า Dialects ของ SMB Client ใดได้รับอนุญาตให้เชื่อมต่อกับโฮสต์ระยะไกลบน Windows เวอร์ชันเหล่านี้:

sc.exe query mrxsmb10

SERVICE_NAME: mrxsmb10 TYPE : 2 FILE_SYSTEM_DRIVER STATE : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0

sc.exe query mrxsmb20

SERVICE_NAME: mrxsmb20 TYPE : 2 FILE_SYSTEM_DRIVER STATE : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0

ในทั้งสองกรณี บริการกำลังทำงาน (STATE = 4 Running) หมายความว่าอุปกรณ์ Windows ปัจจุบันสามารถเชื่อมต่อกับโฮสต์ SMBv1 และ SMBv2 ได้

ตรวจสอบ Dialects SMB ที่ใช้งานด้วย Get-SMBConnection

เมื่อสื่อสารผ่าน SMB คอมพิวเตอร์จะใช้เวอร์ชัน SMB สูงสุดที่รองรับโดยทั้งไคลเอนต์และเซิร์ฟเวอร์ คำสั่ง PowerShell Get-SMBConnection ใช้ตรวจสอบเวอร์ชัน SMB ที่ใช้เข้าถึงคอมพิวเตอร์ระยะไกล:

วิธีตรวจสอบ เปิด หรือปิดโปรโตคอล SMB รุ่นต่างๆ ใน Windows

เวอร์ชัน SMB ที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล (ServerName) แสดงในคอลัมน์ Dialect

สามารถแสดงข้อมูลเกี่ยวกับเวอร์ชัน SMB ที่ใช้เข้าถึงเซิร์ฟเวอร์เฉพาะ:

Get-SmbConnection -ServerName srvfs01

หากต้องการแสดงว่าการเข้ารหัส SMB ใช้งานอยู่หรือไม่ (นำเข้ามาใน SMB 3.0):

Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName

บน Linux สามารถแสดงรายการการเชื่อมต่อ SMB และ Dialects ที่ใช้ใน Samba ด้วยคำสั่ง:

$ sudo smbstatus

ฝั่ง Windows SMB Server สามารถแสดงรายการเวอร์ชันโปรโตคอล SMB ที่ไคลเอนต์กำลังใช้งานอยู่ รันคำสั่ง:

Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique

วิธีตรวจสอบ เปิด หรือปิดโปรโตคอล SMB รุ่นต่างๆ ใน Windowsในตัวอย่างนี้ มีไคลเอนต์ 898 ตัวเชื่อมต่อกับเซิร์ฟเวอร์ด้วย SMB 2.1 (Windows 7/Windows 2008 R2) และ 8 ไคลเอนต์ SMB 3.02

สามารถใช้ PowerShell เปิดใช้งานการตรวจสอบ SMB versions ที่ใช้สำหรับการเชื่อมต่อ:

Set-SmbServerConfiguration –AuditSmb1Access $true

เหตุการณ์การเชื่อมต่อ SMB จึงสามารถส่งออกจาก Event Viewer logs:

Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit

หยุดใช้โปรโตคอล SMBv1 ที่ไม่ปลอดภัย

ในไม่กี่ปีที่ผ่านมา Microsoft ได้ปิดใช้งานโปรโตคอล SMB 1.0 รุ่นเก่าในผลิตภัณฑ์ทั้งหมดเพื่อเหตุผลด้านความปลอดภัย เนื่องจากช่องโหว่สำคัญจำนวนมากในโปรโตคอลนี้ (จำได้ไหมเหตุการณ์ WannaCrypt และ Petya ransomware ที่ใช้ประโยชน์จากช่องโหว่ในโปรโตคอล SMBv1) Microsoft และบริษัท IT อื่นๆ แนะนำอย่างยิ่งให้หยุดใช้ SMBv1 ในเครือข่ายของคุณ

อย่างไรก็ตาม การปิดใช้งาน SMBv1 อาจทำให้เกิดปัญหาการเข้าถึงไฟล์และโฟลเดอร์แชร์บน Windows 10 รุ่นใหม่ (Windows Server 2016/2019) จากไคลเอนต์รุ่นเก่า (Windows XP, Windows Server 2003) OS ของบุคคลที่สาม (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, Linux distros เก่า) อุปกรณ์ NAS เก่า

หากไม่มีอุปกรณ์รุ่นเก่าเหลืออยู่บนเครือข่ายที่รองรับเฉพาะ SMBv1 ให้ปิดใช้งาน Dialect SMB นี้ใน Windows แน่นอน

หากมีไคลเอนต์ที่รัน Windows XP, Windows Server 2003 หรืออุปกรณ์อื่นๆ ที่รองรับเฉพาะ SMBv1 ควรอัปเดตหรือแยกออกจากเครือข่าย

วิธีเปิดและปิด SMBv1, SMBv2, และ SMBv3 ใน Windows

มาดูวิธีเปิดและปิดเวอร์ชัน SMB ต่างๆ ใน Windows เราจะครอบคลุมการจัดการ SMB Client และ Server (เป็นคอมโพเนนต์ Windows ที่ต่างกัน)

Windows 10, 8.1, และ Windows Server 2019/2016/2012R2

ปิด SMBv1 Client และ Server:

Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol

ปิด SMBv1 Server เท่านั้น:

Set-SmbServerConfiguration -EnableSMB1Protocol $false

เปิด SMBv1 Client และ Server:

Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol

เปิด SMBv1 Server เท่านั้น:

Set-SmbServerConfiguration -EnableSMB1Protocol $true

อ่านเพิ่มเติมเกี่ยวกับโปรโตคอล SMBv1 บน Windows 10 และ Windows Server 2016/2019

ปิด SMBv2 และ SMBv3 Server:

Set-SmbServerConfiguration -EnableSMB2Protocol $false

เปิด SMBv2 และ SMBv3 Server:

Set-SmbServerConfiguration -EnableSMB2Protocol $true

วิธีตรวจสอบ เปิด หรือปิดโปรโตคอล SMB รุ่นต่างๆ ใน Windows

Windows 7, Vista, และ Windows Server 2008 R2/2008

ปิด SMBv1 Server:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force

วิธีตรวจสอบ เปิด หรือปิดโปรโตคอล SMB รุ่นต่างๆ ใน Windows

เปิด SMBv1 Server:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force

ปิด SMBv1 Client:

sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled

เปิด SMBv1 Client:

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= auto

ปิด SMBv2 Server:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force

เปิด SMBv2 Server:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 –Force

ปิด SMBv2 Client:

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled

เปิด SMBv2 Client:

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= auto

สามารถปิด SMBv1 Server บนคอมพิวเตอร์ที่เข้าร่วมโดเมนได้โดยการปรับใช้พารามิเตอร์รีจิสทรีต่อไปนี้ผ่าน GPO:

  • Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  • Name: SMB1
  • Type: REG_DWORD
  • Value: 0

ตั้งค่าพารามิเตอร์รีจิสทรี SMB2=0 เพื่อปิด SMBv2 Server

เพื่อปิด SMBv1 Client ต้องเผยแพร่การตั้งค่ารีจิสทรีต่อไปนี้:

  • Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
  • Name: Start
  • Type: REG_DWORD
  • Value: 4
เมื่อปิดใช้งาน SMB 1.0/CIFS File Sharing Support ใน Windows อาจพบข้อผิดพลาด 0x80070035 network path not found, ข้อผิดพลาดเมื่อเข้าถึงโฟลเดอร์แชร์ SMB และปัญหา Network Discovery ในกรณีนี้ ต้องใช้ Discovery Service แทน Computer Browser service