Zum Inhalt springen

SMB1 auf Servern und Clients deaktivieren

Symbolbild Server

Server Message Block in der Version 1 (kurz SMB1), gilt schon seit längerem als veraltet (langsam und unsicher) und sollte daher, wenn möglich deaktiviert werden.

Worum geht es?

Server Message Block (kurz SMB) ist ein Netzwerkprotokoll für Datei-, Druck- und andere Serverdienste. Da SMB ständig weiterentwickelt wird, werden ständig neue Versionen eingeführt. Alte und neue Versionen werden aus Kompatibilitätsgründen parallel betrieben. SMB1 wurde mit Windows 2000 bzw. Windows Server 2000 ins Leben gerufen. Mit Windows 10 bzw. Windows Server 2016 wurde SMB3.1.1 eingeführt. Unix-basierte Systeme (z.B. Linux) implementieren das SMB-Protokoll über das frei erhältliche Samba-Programmpaket.

Zuletzt geriet SMB1 aufgrund des weltweit verbreiteten WannaCry-Angriffs negativ in die Schlagzeilen. Microsoft arbeitet schon seit längerem an der Abschaffung des nicht mehr zeitgemäßen Protokolls und weist auch immer wieder darauf hin. Auch im Samba-Programmpaket 4.11.0 ist SMB1 standardmäßig nur mehr deaktiviert enthalten.

Achtung: Kompatibilität!

Beispielsweise Multifunktionsgeräte (Drucker/Scanner-Kombigeräte) mit Netzwerkanbindung sind noch öfter auf SMB1 angewiesen und verwenden es meist beim Scannen auf eine Server-Dateifreigabe. Vor einer serverseitigen SMB1-Deaktivierung sollten diese Geräte also die neueste Firmware bekommen und im Anschluss die SMB-Kompatibilität geprüft/getestet werden.

Ab Windows Server 2012

Mit dem folgenden PowerShell-Script werden alle Windows Server aus der Active Directory Domäne abgerufen, der SMB1-Status ab Server-Version 2012 geprüft und ausgegeben. Optional kann das Script SMB1 auch gleich deaktivieren und den betroffenen Server zum Übernehmen der Änderung neu starten (siehe Script-Optionen). Zur Ausführung werden die AD-PowerShell-Cmdlets und Domänen-Administrator-Rechte benötigt (beides z.B. auf einem Domänencontroller vorhanden).

########################################### Optionen ###########################################
$unInstall = $false # $true für: SMB1 deinstallieren
$restart = $false   # $true für: nach Deinstallation Server neustarten um Änderung zu übernehmen
################################################################################################

# Server aus Active Directory abfragen
$servers = Get-ADComputer -Filter {(OperatingSystem -like "*Windows Server*" -and Name -notlike "*CAU*" -and Name -notlike "*CLUSTER*") -and (Enabled -eq $true)} -Properties Name, operatingSystemVersion | Sort-Object

# Server prüfen
foreach($server in $servers){

    # Server online?
    if(Test-Connection $server.Name -Count 2 -Quiet){

        # Windows Server 2012R2/2016/2019
        if($server.operatingSystemVersion -like "10.*" -or $server.operatingSystemVersion -like "6.3*"){

            # Check
            if($(Get-WindowsFeature FS-SMB1 -ComputerName $server.Name).InstallState -eq "Installed"){
                Write-Host $server.Name ": SMB1 aktiv"

                # Deinstallieren
                if($unInstall -eq $true -and $restart -eq $true){
                    Write-Host $server.Name ": SMB1 wird deinstalliert und Server neugestartet!"
                    Uninstall-WindowsFeature FS-SMB1 -ComputerName $server.Name -Restart
                } elseif($unInstall -eq $true -and $restart -eq $false){
                    Write-Host $server.Name ": SMB1 wird deinstalliert!"
                    Uninstall-WindowsFeature FS-SMB1 -ComputerName $server.Name
                }
            }

        # Windows Server 2012
        } elseif($server.operatingSystemVersion -like "6.2*"){
        
             # Check
            if($(Invoke-Command -ComputerName $server.Name -ScriptBlock { Get-SmbServerConfiguration | Select EnableSMB1Protocol }).EnableSMB1Protocol -eq "True"){
                Write-Host $server.Name ": SMB1 aktiv"

                # Deinstallieren
                if($unInstall -eq $true -and $restart -eq $true){
                    Write-Host $server.Name ": SMB1 wird deinstalliert und Server neugestartet!"
                    Invoke-Command -ComputerName $server.Name -ScriptBlock { Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force }
                    Restart-Computer -ComputerName $server.Name
                } elseif($unInstall -eq $true -and $restart -eq $false){
                    Write-Host $server.Name ": SMB1 wird deinstalliert!"
                    Invoke-Command -ComputerName $server.Name -ScriptBlock { Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force }
                }
            }
        }

    } else {

        # Server offline
        Write-Host $server.Name "offline!"

    }
}Code-Sprache: PHP (php)

Ab Windows 8.1

Auf den Clients kann der Status mit Get-WindowsOptionalFeature ermittelt werden:

Get-WindowsOptionalFeature –Online –FeatureName SMB1Protocol

Deaktiviert wird mit:

Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

SMB1 auf älteren Servern und Clients

Befehle und Infos zu älteren Servern und Clients gibt es auf Microsoft.com.

SMB1 auf Linux-Systemen

Sofern Linux-Systeme mit Samba zum Einsatz kommen, sollte SMB1 auch dort deaktiviert werden. Auf cyberciti.biz gibt es Infos dazu.

Bei dem QNAP NAS-Betriebssystem „QTS“ lässt sich SMB1 übrigens relativ einfach in den Einstellungen unter Systemsteuerung → Netzwerk- und Dateiservices → Win/Mac/NFS → Erweiterte Optionen → Niedrigste SMB-Version deaktivieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

dreizehn − sieben =