Windows Sunucu İleti Bloğu (SMB) - Windows Dosya ve Yazıcı Paylaşımı
Server Message Block (SMB), ağ üzerindeki bilgisayarların dosya, klasör, yazıcı ve çeşitli kaynakları paylaşmasını sağlayan istemci-sunucu mimarisine sahip bir ağ protokolüdür.
Windows işletim sistemlerinin en önemli bileşenlerinden biridir.
Bugün;
Windows Etki Alanı (Active Directory)
Dosya Sunucuları
Yazıcı Sunucuları
Hyper-V
DFS
SQL Cluster
Windows Admin Center
PowerShell Remoting
gibi birçok servis SMB'yi kullanmaktadır.
Linux sistemlerde ise SMB hizmeti Samba tarafından sağlanır.
SMB'nin Tarihçesi
| Sürüm | Yıl | Özellik |
|---|---|---|
| SMB 1.0 | 1983 | IBM tarafından geliştirildi |
| CIFS | 1996 | Microsoft genişletti |
| SMB 2.0 | Vista / Server 2008 | Performans arttı |
| SMB 2.1 | Windows 7 | Leasing, Cache |
| SMB 3.0 | Server 2012 | Encryption |
| SMB 3.02 | Server 2012 R2 | Performans |
| SMB 3.1.1 | Windows 10 / Server 2016 | AES-128 GCM, Preauthentication Integrity |
SMB Ne İşe Yarar?
SMB sayesinde;
Dosya paylaşımı
Yazıcı paylaşımı
Uzak klasör erişimi
Merkezi dosya sunucusu
Grup klasörleri
Kullanıcı profilleri
Home Folder
DFS Namespace
Cluster Shared Volumes
gibi birçok işlem gerçekleştirilir.
SMB Nasıl Çalışır?
İstemci│TCP 445│SMB İsteği│Sunucu│Kimlik Doğrulama│NTLM / Kerberos│Dosya Sistemi (NTFS)
SMB'nin Çalışma Mantığı
İstemci bağlantı ister.
TCP 445 açılır.
SMB sürümü belirlenir.
Kimlik doğrulama yapılır.
Yetki kontrol edilir.
Paylaşım açılır.
Dosya okunur/yazılır.
SMB'nin Kullanıldığı Portlar
| Port | Açıklama |
|---|---|
| TCP 445 | Modern SMB |
| TCP 139 | NetBIOS SMB |
| UDP 137 | NetBIOS Name |
| UDP 138 | NetBIOS Datagram |
Günümüzde doğrudan TCP 445 kullanılmaktadır.
SMB Mimarisi
+-----------------------+| Kullanıcı |+-----------+-----------+|Windows Explorer|SMB Redirector|TCP/IP|Ethernet|Sunucu SMB Service|NTFS
SMB Kimlik Doğrulaması
SMB;
NTLM
Kerberos
protokollerini kullanabilir.
Active Directory ortamında tercih edilen yöntem:
Kerberos
Çünkü;
Ticket tabanlıdır.
Daha güvenlidir.
Şifre ağda dolaşmaz.
SMB Paylaşımı Oluşturma
Grafik Arayüz
Klasör
↓
Properties
↓
Sharing
↓
Advanced Sharing
↓
Share this folder
↓
Permissions
PowerShell
New-SmbShare `-Name "Ortak" `-Path "D:\Ortak"
Paylaşımları Listeleme
Get-SmbShare
Paylaşımı Silme
Remove-SmbShare -Name Ortak
SMB Yetkilendirme
İki farklı izin bulunur.
Share Permission
Ağ üzerinden erişimi kontrol eder.
Örnek:
Read
Change
Full
NTFS Permission
Disk üzerindeki gerçek yetkidir.
Örnek
Read
Modify
Write
Full Control
Gerçek Yetki Nasıl Hesaplanır?
En düşük izin geçerlidir.
Örneğin;
Share:
Full
NTFS:
Read
Sonuç:
Read
Hidden Share
Sonuna "$" eklenir.
Örnek
Muhasebe$
Explorer'da görünmez.
Bağlantı:
\\SERVER\Muhasebe$
Yönetim Paylaşımları
Windows otomatik oluşturur.
C$ADMIN$IPC$PRINT$
SMB Sürümlerini Görme
Get-SmbServerConfiguration
İstemci tarafı
Get-SmbConnection
SMB 1 Devre Dışı Bırakma
Disable-WindowsOptionalFeature `-Online `-FeatureName SMB1Protocol
veya
Set-SmbServerConfiguration `-EnableSMB1Protocol $false
SMB Encryption
SMB 3 ile geldi.
Set-SmbServerConfiguration `-EncryptData $true
Belirli paylaşım için
Set-SmbShare `-Name Ortak `-EncryptData $true
SMB Signing
MITM saldırılarına karşı kullanılır.
Kontrol
Get-SmbServerConfiguration
Etkinleştirme
Set-SmbServerConfiguration `-RequireSecuritySignature $true
SMB Compression
Windows Server 2022
New-SmbShare `-CompressData $true
SMB Multichannel
Birden fazla NIC kullanır.
Avantajları
Daha yüksek hız
Yük dengeleme
Failover
Kontrol
Get-SmbMultichannelConnection
SMB Direct (RDMA)
RDMA destekli ağ kartlarında
Avantaj
Çok düşük gecikme
CPU kullanımı azalır
Dosya Kopyalama
Explorer
veya
Copy-Item
veya
robocopy
Örnek
robocopy D:\Kaynak \\SERVER\Ortak /MIR
SMB Oturumu Görüntüleme
Get-SmbSession
Açık Dosyalar
Get-SmbOpenFile
Dosyayı kapatma
Close-SmbOpenFile
SMB İstemcileri
Get-SmbSession
Örnek çıktı
ClientComputerNamePC01PC02PC03
SMB Firewall
Açık olması gereken
File and Printer Sharing
PowerShell
Enable-NetFirewallRule `-DisplayGroup "File and Printer Sharing"
Ağ Sürücüsü Bağlama
Explorer
Map Network Drive
PowerShell
New-PSDrive `-Name Z `-PSProvider FileSystem `-Root "\\SERVER\Ortak"
CMD
net use Z: \\SERVER\Ortak
Kalıcı Ağ Sürücüsü
net use Z: \\SERVER\Ortak /persistent:yes
SMB Logları
Event Viewer
Applications and Services Logs↓Microsoft↓Windows↓SMBServer
Performans Sayaçları
Performance Monitor
Sayaçlar
SMB Server Sessions
Bytes/sec
Queue Length
Avg Response
PowerShell Yönetim Komutları
| Komut | Görevi |
|---|---|
| Get-SmbShare | Paylaşımlar |
| New-SmbShare | Oluşturur |
| Remove-SmbShare | Siler |
| Set-SmbShare | Düzenler |
| Get-SmbSession | Oturumlar |
| Get-SmbOpenFile | Açık dosyalar |
| Close-SmbOpenFile | Dosya kapatır |
| Get-SmbConnection | İstemci bağlantıları |
| Get-SmbServerConfiguration | Sunucu ayarları |
Siber Güvenlik Açısından SMB
SMB, ağın en kritik servislerinden biridir ve yanlış yapılandırıldığında ciddi güvenlik riskleri oluşturabilir.
En Yaygın Tehditler
SMBv1 zafiyetleri (ör. WannaCry saldırıları)
Yetkisiz anonim erişim (Null Session)
Zayıf NTLM yapılandırmaları
Lateral Movement (yatay ağ hareketi)
Pass-the-Hash saldırıları
Relay (NTLM Relay) saldırıları
Ransomware'in ağ paylaşımlarını şifrelemesi
Hassas verilerin yanlış izinlerle paylaşılması
Güvenlik İçin En İyi Uygulamalar
SMBv1'i tamamen devre dışı bırakın.
SMB Signing'i etkinleştirin.
SMB Encryption kullanın (özellikle güvenilmeyen ağlarda).
Kerberos kimlik doğrulamasını tercih edin.
NTLM kullanımını mümkün olduğunca azaltın.
Paylaşım ve NTFS izinlerini en az yetki (Least Privilege) ilkesine göre yapılandırın.
Yönetim paylaşımlarını (C$, ADMIN$) sadece yetkili yöneticilerle sınırlandırın.
445/TCP portunu internete kesinlikle açmayın.
Windows Güvenlik Duvarı ve ağ segmentasyonu kullanın.
Olay günlüklerini düzenli olarak izleyin ve merkezi log yönetimi (ör. SIEM) ile korelasyon sağlayın.
Sorun Giderme
Paylaşım görünmüyor
net share
İstemci sunucuya erişemiyor
ping SERVER
Test-NetConnection SERVER -Port 445
Açık dosyalar nedeniyle silinemiyor
Get-SmbOpenFile
Close-SmbOpenFile
Yetki problemi
Share izinlerini kontrol edin.
NTFS izinlerini doğrulayın.
Etkin izinlerin (Effective Permissions) beklenen sonucu verdiğinden emin olun.
En Sık Kullanılan SMB Komutları (Cheat Sheet)
| Amaç | Komut |
|---|---|
| Paylaşımları listele | Get-SmbShare |
| Yeni paylaşım oluştur | New-SmbShare -Name Veri -Path D:\Veri |
| Paylaşımı sil | Remove-SmbShare -Name Veri |
| Oturumları görüntüle | Get-SmbSession |
| Açık dosyaları listele | Get-SmbOpenFile |
| Açık dosyayı kapat | Close-SmbOpenFile -FileId <ID> |
| Sunucu yapılandırmasını görüntüle | Get-SmbServerConfiguration |
| Ağ sürücüsü bağla | net use Z: \\SERVER\Veri |
| Port 445 testi | Test-NetConnection SERVER -Port 445 |
Sonuç
SMB, Windows ağlarının temel yapı taşlarından biridir. Doğru yapılandırıldığında merkezi dosya paylaşımı, yüksek performans ve güvenli erişim sağlar. Modern ortamlarda SMB 3.1.1, Kerberos, SMB Signing ve SMB Encryption birlikte kullanılarak hem performans hem de güvenlik en üst düzeye çıkarılabilir. Özellikle kurumsal ortamlarda paylaşım izinlerinin dikkatle yönetilmesi, SMBv1'in kaldırılması ve ağ erişiminin sınırlandırılması, veri güvenliğinin sağlanmasında kritik öneme sahiptir.
CMD (Command Prompt), Windows'ta SMB yönetimi için hâlâ oldukça güçlü bir araçtır. Aşağıda SMB ile ilgili en önemli CMD komutlarını açıklamalarıyla birlikte bulabilirsiniz.
Windows SMB (CMD) Komutları
1. Bilgisayardaki Paylaşımları Görüntüleme
net share
Örnek çıktı:
Share name Resource--------------------------------C$ C:\ADMIN$ C:\WindowsIPC$Ortak D:\Ortak
2. Yeni Paylaşım Oluşturma
net share Ortak=D:\Ortak
Yetki vererek:
net share Ortak=D:\Ortak /GRANT:Everyone,FULL
Sadece okuma:
net share Ortak=D:\Ortak /GRANT:Users,READ
3. Paylaşımı Silme
net share Ortak /delete
4. Ağ Paylaşımlarını Görme
Belirli sunucu:
net view \\SERVER
Yerel ağdaki bilgisayarlar:
net view
5. Sunucuya Bağlanma
Explorer yerine CMD:
dir \\SERVER\Ortak
6. Ağ Sürücüsü Bağlama
net use Z: \\SERVER\Ortak
7. Kullanıcı Adı ve Şifre ile Bağlanma
net use Z: \\SERVER\Ortak /user:Administrator *
Şifre sorulur.
Veya
net use Z: \\SERVER\Ortak /user:Administrator P@ssw0rd
Güvenlik nedeniyle şifreyi komut satırında açık yazmanız önerilmez.
8. Kalıcı Bağlantı
net use Z: \\SERVER\Ortak /persistent:yes
9. Bağlantıyı Kaldırma
Tek sürücü:
net use Z: /delete
Tüm bağlantılar:
net use * /delete
10. Aktif SMB Bağlantıları
net use
Örnek:
Status Local RemoteOK Z: \\SERVER\Ortak
11. Kullanıcı Oturumlarını Görme
net session
Örnek:
Computer User Name--------------------------------\\PC01 Ahmet\\PC02 Mehmet
Yönetici yetkisi gerektirir.
12. Oturumu Sonlandırma
net session \\PC01 /delete
13. Açık Dosyaları Görme
openfiles /query
İlk kullanım için:
openfiles /local on
Ardından sistemi yeniden başlatmanız gerekir.
14. Ağdaki Bilgisayarları Listeleme
net view
15. Belirli Bilgisayarı Görme
net view \\SERVER
16. Paylaşım Yolunu Test Etme
dir \\SERVER\Ortak
17. SMB Portunu Test Etme
CMD'de yerleşik değildir.
PowerShell kullanılır:
Test-NetConnection SERVER -Port 445
CMD üzerinden:
powershell Test-NetConnection SERVER -Port 445
18. Ağ Bağlantılarını Görme
netstat -an
SMB filtreleme:
netstat -an | find "445"
19. SMB Portunu Dinleyen Servis
netstat -ano | find "445"
PID öğrenilir.
Sonra:
tasklist /fi "PID eq 4"
Genellikle:
System
20. Bilgisayar Adını Öğrenme
hostname
21. Kullanıcı Bilgisi
whoami
22. Etki Alanı Bilgisi
echo %USERDOMAIN%
23. Paylaşıma Dosya Kopyalama
copy dosya.txt \\SERVER\Ortak
24. Klasör Kopyalama
xcopy C:\Veriler \\SERVER\Ortak /E /I
Daha gelişmiş:
robocopy C:\Veriler \\SERVER\Ortak /MIR
25. Ağ Sürücülerini Görme
wmic logicaldisk get name,providername
veya
net use
26. IP Adresini Öğrenme
ipconfig
27. Sunucuya Ping
ping SERVER
28. DNS Testi
nslookup SERVER
29. SMB Ad Çözümleme
nbtstat -A 192.168.1.10
veya
nbtstat -n
30. SMB Hizmetlerini Görme
sc query lanmanserver
İstemci servisi:
sc query lanmanworkstation
31. SMB Hizmetini Başlatma
net start lanmanserver
İstemci:
net start lanmanworkstation
32. SMB Hizmetini Durdurma
net stop lanmanserver
33. Bilgisayardaki Paylaşımları Dosyaya Kaydetme
net share > paylasimlar.txt
34. Oturumları Dosyaya Kaydetme
net session > sessions.txt
35. Ağdaki Bir Bilgisayarın Paylaşımlarını Listeleme
net view \\192.168.1.100
veya
net view \\SERVER
CMD Cheat Sheet
| Amaç | Komut |
|---|---|
| Paylaşımları listele | net share |
| Yeni paylaşım oluştur | net share Veri=D:\Veri |
| Paylaşımı sil | net share Veri /delete |
| Ağ bilgisayarlarını listele | net view |
| Sunucudaki paylaşımları listele | net view \\SERVER |
| Ağ sürücüsü bağla | net use Z: \\SERVER\Veri |
| Bağlantıları görüntüle | net use |
| Ağ sürücüsünü kaldır | net use Z: /delete |
| Aktif SMB oturumları | net session |
| Açık dosyalar | openfiles /query |
| Dosya kopyala | copy |
| Klasör kopyala | xcopy |
| Gelişmiş senkronizasyon | robocopy |
| Hizmet durumu | sc query lanmanserver |
| Hizmeti başlat | net start lanmanserver |
| Hizmeti durdur | net stop lanmanserver |
| Port 445 bağlantıları | netstat -an | find "445" |
| Bilgisayar adı | hostname |
| Kullanıcı adı | whoami |
| IP bilgisi | ipconfig |
Bu komutlar, Windows 10, Windows 11 ve Windows Server 2016/2019/2022/2025 sistemlerinde SMB paylaşımlarını ve istemci bağlantılarını CMD üzerinden yönetmek için en sık kullanılan araçlardır.
PowerShell'deki satır sonundaki ters tek tırnak (`) karakteri (backtick veya grave accent) satır devam karakteridir (line continuation character).
Yani PowerShell'e:
"Komut henüz bitmedi, bir sonraki satırdan devam ediyor."
anlamını verir.
Örneğin:
New-SmbShare `
-Name "Ortak" `
-Path "D:\Ortak"
PowerShell bunu tek satır olarak yorumlar:
New-SmbShare -Name "Ortak" -Path "D:\Ortak"
Neden Kullanılır?
Uzun komutların daha okunabilir olması için.
Tek satır:
New-SmbShare -Name "Ortak" -Path "D:\Ortak" -FullAccess "Administrators" -ReadAccess "Users"
Satırlara bölünmüş hali:
New-SmbShare `
-Name "Ortak" `
-Path "D:\Ortak" `
-FullAccess "Administrators" `
-ReadAccess "Users"
Bu yöntem özellikle:
PowerShell betikleri (.ps1)
Eğitim dokümanları
Blog yazıları
Microsoft dokümantasyonu
için okunabilirliği artırır.
Backtick (`) Kullanırken Dikkat Edilmesi Gerekenler
Backtick karakterinden sonra hiçbir karakter bulunmamalıdır.
❌ Hatalı:
New-SmbShare `
-Name "Ortak"
Yukarıdaki örnekte backtick'ten sonra bir boşluk olduğu için satır devamı çalışmayabilir.
✅ Doğru:
New-SmbShare `
-Name "Ortak"
Backtick, satırdaki en son karakter olmalıdır.
Backtick Olmadan Yazılabilir mi?
Evet. Komutu tek satırda yazabilirsiniz:
New-SmbShare -Name "Ortak" -Path "D:\Ortak"
Bu tamamen geçerlidir.
Daha Modern Yöntem
PowerShell 7 ve yeni sürümlerde, mümkün olduğunca backtick yerine doğal satır devamı tercih edilir. Örneğin, parantez veya veri yapıları kullanıldığında PowerShell satırın devam ettiğini zaten anlar:
Get-ChildItem (
"C:\Windows"
)
veya
@(
"Dosya1"
"Dosya2"
"Dosya3"
)
Bu yapılarda backtick kullanmanız gerekmez.
SMB Örneği
Tek satır:
New-SmbShare -Name "Ortak" -Path "D:\Ortak" -FullAccess "Administrators"
Çok satırlı (backtick ile):
New-SmbShare `
-Name "Ortak" `
-Path "D:\Ortak" `
-FullAccess "Administrators"
Her iki komut da aynı işlemi yapar; fark yalnızca yazım biçimidir.
İpucu: Güncel PowerShell kod yazımında, yalnızca satırı zorunlu olarak bölmeniz gerektiğinde backtick kullanın. Mümkün olduğunda komutu tek satırda yazmak veya PowerShell'in doğal satır devamı sağlayan sözdiziminden yararlanmak, kodun bakımını ve okunabilirliğini artırır.
Yorumlar