Server Message Block (SMB) নেটওয়ার্ক প্রোটোকল ফোল্ডার, ফাইল, প্রিন্টার ও অন্যান্য ডিভাইস নেটওয়ার্কের মাধ্যমে (TCP পোর্ট ৪৪৫) শেয়ার ও অ্যাক্সেস করতে ব্যবহৃত হয়। এই লেখায় আমরা দেখব উইন্ডোজের বিভিন্ন সংস্করণে কোন SMB সংস্করণ (ডায়েলেক্ট) উপলব্ধ (এবং কীভাবে সেগুলো লিনাক্সের samba সংস্করণের সাথে সম্পর্কিত); আপনার কম্পিউটারে কোন SMB সংস্করণ ব্যবহার হচ্ছে তা কীভাবে চেক করবেন; এবং SMBv1, SMBv2, SMBv3 ডায়েলেক্ট কীভাবে সক্ষম বা নিষ্ক্রিয় করবেন।
উইন্ডোজে SMB প্রোটোকল সংস্করণ
SMB প্রোটোকলের বেশ কিছু সংস্করণ (ডায়েলেক্ট) আছে যা ক্রমাগত নতুন উইন্ডোজ সংস্করণে (এবং 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 প্রোটোকল বাস্তবায়নে ব্যবহার হয়। Samba 4.14 এবং নতুন সংস্করণ ডিফল্টভাবে SMB 2.1 ব্যবহার করে।
SMB নেটওয়ার্ক কমিউনিকেশনে ক্লায়েন্ট ও সার্ভার উভয়ই যেসব সর্বোচ্চ SMB প্রোটোকল সংস্করণ সমর্থন করে, সেটি ব্যবহার করে।
SMB সংস্করণ কম্প্যাটিবিলিটি সারসংক্ষেপ টেবিল নিচে দেওয়া হলো। এই টেবিল ব্যবহার করে আলাদা উইন্ডোজ সংস্করণের মধ্যকার ইন্টারঅ্যাকশনে কোন SMB প্রোটোকল সংস্করণ নির্বাচিত হবে তা নির্ধারণ করা যায়:
| অপারেটিং সিস্টেম | Windows 10, Win Server 2016 | Windows 8.1, Win Server 2012 R2 | Windows 8, Server 2012 | Windows 7, Server 2008 R2 | Windows Vista, Server 2008 | Windows XP, Server 2003 এবং পুরনো |
|---|---|---|---|---|---|---|
| Windows 10, Windows Server 2016 | SMB 3.1.1 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows 8.1, Server 2012 R2 | SMB 3.02 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows 8, Server 2012 | SMB 3.0 | SMB 3.0 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows 7, Server 2008 R2 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows Vista, Server 2008 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 1.0 |
| Windows XP, 2003 এবং পুরনো | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
উদাহরণস্বরূপ, যদি উইন্ডোজ ৮.১ ক্লায়েন্ট কম্পিউটার উইন্ডোজ সার্ভার ২০১৬ ফাইল সার্ভারের সাথে সংযুক্ত হয়, তবে SMB 3.0.2 প্রোটোকল ব্যবহার হবে।
টেবিল অনুযায়ী, উইন্ডোজ XP এবং উইন্ডোজ সার্ভার ২০০৩ শুধু SMB 1.0 ব্যবহার করে শেয়ার্ড ফোল্ডার ও ফাইল অ্যাক্সেস করতে পারে। নতুন উইন্ডোজ সার্ভার সংস্করণে (২০১২ R2/২০১৬) SMBv1 নিষ্ক্রিয় থাকে। তাই আপনার নেটওয়ার্কে যদি এখনো উইন্ডোজ XP এবং উইন্ডোজ সার্ভার ২০০৩ ডিভাইস থাকে, সেগুলো উইন্ডোজ সার্ভার ২০১৬ ফাইল সার্ভারের শেয়ার্ড ফোল্ডার অ্যাক্সেস করতে পারবে না।
যদি নিষ্ক্রিয় SMB v1.0 সহ উইন্ডোজ সার্ভার ২০১৯/২০১৬ ডোমেইন কন্ট্রোলার হিসেবে ব্যবহার করা হয়, তবে উইন্ডোজ XP/সার্ভার ২০০৩ ক্লায়েন্ট ডোমেইন কন্ট্রোলারের SYSVOL এবং NETLOGON ফোল্ডার অ্যাক্সেস করে AD-তে অথেন্টিকেট করতে পারবে না।
SMBv1 নিষ্ক্রিয় থাকা ফাইল সার্ভারের শেয়ার্ড ফোল্ডার সংযোগ করার চেষ্টায় নিচের ত্রুটি দেখা দিতে পারে:
The specified network name is no longer available
উইন্ডোজে SMB সংস্করণ চেক করার পদ্ধতি
আপনার উইন্ডোজ ডিভাইসে কোন SMB সংস্করণগুলো সক্রিয় আছে তা জানার উপায়:
উইন্ডোজ ১০/৮.১ এবং উইন্ডোজ সার্ভার ২০১৯/২০১৬/২০১২R2-এ পাওয়ারশেল দিয়ে SMB প্রোটোকলের বিভিন্ন ডায়েলেক্টের স্ট্যাটাস চেক করুন:
Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol

এই কমান্ড দেখাবে SMB1 প্রোটোকল নিষ্ক্রিয় (EnableSMB1Protocol = False), এবং SMB2 ও SMB3 প্রোটোকল সক্রিয় (EnableSMB2Protocol = True)।
নোট: SMBv3 এবং SMBv2 প্রোটোকল পরস্পর ঘনিষ্ঠভাবে জড়িত। SMBv3 বা SMBv2 আলাদা করে সক্ষম বা নিষ্ক্রিয় করা যায় না। একই স্ট্যাক শেয়ার করার কারণে সেগুলো সবসময় একসাথে সক্ষম/নিষ্ক্রিয় হয়।
উইন্ডোজ ৭, ভিস্তা, এবং উইন্ডোজ সার্ভার ২০০৮ R2/২০০৮-এ:
Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}
এই রেজিস্ট্রি কী-তে SMB1 বা SMB2 নামক প্যারামিটার না থাকলে, SMBv1 এবং SMBv2 প্রোটোকল ডিফল্টভাবে সক্রিয় থাকে।

এছাড়া এই উইন্ডোজ সংস্করণগুলোতে কোন SMB ক্লায়েন্ট ডায়েলেক্ট রিমোট হোস্টে সংযোগ করতে পারবে তা চেক করতে পারেন:
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)। অর্থাৎ বর্তমান উইন্ডোজ ডিভাইস SMBv1 এবং SMBv2 উভয় হোস্টে সংযোগ করতে পারে।
Get-SMBConnection দিয়ে ব্যবহৃত SMB ডায়েলেক্ট চেক করা
SMB কমিউনিকেশনের সময় কম্পিউটারগুলো ক্লায়েন্ট ও সার্ভার উভয়ের সমর্থিত সর্বোচ্চ SMB সংস্করণ ব্যবহার করে। Get-SMBConnection পাওয়ারশেল কমান্ডলেট ব্যবহার করে রিমোট কম্পিউটার অ্যাক্সেসের জন্য ব্যবহৃত SMB সংস্করণ জানা যায়:

Dialect কলামে রিমোট সার্ভার (ServerName) সংযোগের জন্য ব্যবহৃত SMB সংস্করণ দেখাবে।
নির্দিষ্ট সার্ভারের SMB সংস্করণ জানতে:
Get-SmbConnection -ServerName srvfs01
SMB এনক্রিপশন ব্যবহার হচ্ছে কিনা (SMB 3.0-এ প্রবর্তিত) জানতে:
Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName
লিনাক্সে samba-তে SMB সংযোগ ও ব্যবহৃত ডায়েলেক্টের তালিকা দেখতে:
$ sudo smbstatus
উইন্ডোজ SMB সার্ভার সাইডে, ক্লায়েন্টরা বর্তমানে কোন SMB প্রোটোকল সংস্করণ ব্যবহার করছে তা দেখতে:
Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique
এই উদাহরণে ৮৯৮ ক্লায়েন্ট SMB 2.1 (Windows 7/Windows 2008 R2) এবং ৮টি SMB 3.02 ব্যবহার করে সার্ভারের সাথে সংযুক্ত।
SMB সংযোগের জন্য ব্যবহৃত SMB সংস্করণের অডিট সক্ষম করতে পাওয়ারশেল:
Set-SmbServerConfiguration –AuditSmb1Access $true
SMB সংযোগ ইভেন্ট ইভেন্ট ভিউয়ার লগ থেকে এক্সপোর্ট করুন:
Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit
অসুরক্ষিত SMBv1 প্রোটোকল ব্যবহার বন্ধ করুন
গত কয়েক বছরে মাইক্রোসফট সুরক্ষা কারণে সব প্রোডাক্টে লিগেসি SMB 1.0 প্রোটোকলอย่างظامে নিষ্ক্রিয় করেছে। এর পেছনে এই প্রোটোকলে বহু গভীর দুর্বলতা (wannacrypt এবং petya র্যানসমওয়্যার এই দুর্বলতা শোষণ করেছিল) থাকা মূল কারণ। মাইক্রোসফট এবং অন্যান্য IT কোম্পানি দৃঢ়ভাবে সুপারিশ করে আপনার নেটওয়ার্কে SMBv1 ব্যবহার বন্ধ করতে।
তবে SMBv1 নিষ্ক্রিয় করলে নতুন উইন্ডোজ ১০ (উইন্ডোজ সার্ভার ২০১৬/২০১৯) থেকে লিগেসি ক্লায়েন্ট (উইন্ডোজ XP, উইন্ডোজ সার্ভার ২০০৩), থার্ড-পার্টি OS (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, পুরনো লিনাক্স ডিস্ট্রো), পুরনো NAS ডিভাইস-এ শেয়ার্ড ফাইল ও ফোল্ডার অ্যাক্সেসে সমস্যা হতে পারে।
যদি আপনার নেটওয়ার্কে শুধু SMBv1 সমর্থনকারী লিগেসি ডিভাইস না থাকে, অবশ্যই উইন্ডোজে এই SMB ডায়েলেক্ট নিষ্ক্রিয় করুন।
যদি উইন্ডোজ XP, উইন্ডোজ সার্ভার ২০০৩, বা শুধু SMBv1 সমর্থনকারী অন্যান্য ডিভাইস থাকে, সেগুলো আপডেট করুন বা আইসোলেট করুন।
উইন্ডোজে SMBv1, SMBv2, SMBv3 সক্ষম ও নিষ্ক্রিয় করার পদ্ধতি
উইন্ডোজে বিভিন্ন SMB সংস্করণ সক্ষম ও নিষ্ক্রিয় করার উপায় দেখি। SMB ক্লায়েন্ট ও সার্ভার ম্যানেজমেন্ট আলাদা উইন্ডোজ কম্পোনেন্ট।
Windows 10, 8.1, and Windows Server 2019/2016/2012R2:
SMBv1 ক্লায়েন্ট ও সার্ভার নিষ্ক্রিয়:
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
শুধু SMBv1 সার্ভার নিষ্ক্রিয়:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
SMBv1 ক্লায়েন্ট ও সার্ভার সক্ষম:
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
শুধু SMBv1 সার্ভার সক্ষম:
Set-SmbServerConfiguration -EnableSMB1Protocol $true
উইন্ডোজ ১০ এবং উইন্ডোজ সার্ভার ২০১৬/২০১৯-এ SMBv1 প্রোটোকল সম্পর্কে আরও জানুন।
SMBv2 এবং SMBv3 সার্ভার নিষ্ক্রিয়:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
SMBv2 এবং SMBv3 সার্ভার সক্ষম:
Set-SmbServerConfiguration -EnableSMB2Protocol $true

Windows 7, Vista, and Windows Server 2008 R2/2008:
SMBv1 সার্ভার নিষ্ক্রিয়:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force

SMBv1 সার্ভার সক্ষম:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force
SMBv1 ক্লায়েন্ট নিষ্ক্রিয়:
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled
SMBv1 ক্লায়েন্ট সক্ষম:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= auto
SMBv2 সার্ভার নিষ্ক্রিয়:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force
SMBv2 সার্ভার সক্ষম:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 –Force
SMBv2 ক্লায়েন্ট নিষ্ক্রিয়:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled
SMBv2 ক্লায়েন্ট সক্ষম:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= auto
ডোমেইন-জয়েনড কম্পিউটারে GPO দিয়ে SMBv1 সার্ভার নিষ্ক্রিয় করতে নিচের রেজিস্ট্রি প্যারামিটার ডিপ্লয় করুন:
- Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
- Name: SMB1
- Type: REG_DWORD
- Value: 0
SMBv2 সার্ভার নিষ্ক্রিয় করতে রেজিস্ট্রি প্যারামিটার SMB2=0 সেট করুন।
SMBv1 ক্লায়েন্ট নিষ্ক্রিয় করতে নিচের রেজিস্ট্রি সেটিং প্রসারিত করুন:
- Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
- Name: Start
- Type: REG_DWORD
- Value: 4
উইন্ডোজে SMB 1.0/CIFS File Sharing Support নিষ্ক্রিয় করার সময় 0x80070035 network path not found ত্রুটি, শেয়ার্ড SMB ফোল্ডার অ্যাক্সেসে সমস্যা, ও নেটওয়ার্ক ডিসকভারি সমস্যা হতে পারে। তখন Computer Browser সার্ভিসের পরিবর্তে Discovery Service ব্যবহার করতে হবে (লিংক)।