Quelle version du protocole SMB utilisez-vous ?
Sommaire
I. Présentation
Le protocole SMB est relativement ancien, mais continue d'évoluer au fil du temps, ce qui en fait un protocole très utilisé notamment pour le transfert de données par l'intermédiaire des partages réseau. Pour rappel, SMB signifie Server Message Block.
Dans ce tutoriel, on va commencer par faire un historique de ce protocole, nous verrons ensuite les compatibilités système entre les différentes versions. Enfin, on manipulera la console PowerShell pour vérifier quelle version de SMB vous utilisez.
II. Historique des versions
La première version de SMB ne s'appelle pas SMB, en fait c'est le protocole CIFS (Common Internet File System) qui représente la première version de ce protocole. Autant vous dire que ce n'est pas tout nouveau puisque ce fût créé à l'époque de Windows NT 4.0.
Par la suite, et plus précisément depuis Windows 2000 la première version du protocole SMB est arrivée. Voici un récapitulatif des versions du protocole SMB :
- SMB 1.0 : La première version portant le nom de SMB est arrivée avec Windows 2000, et fût utilisée par Windows XP, Windows Server 2003 et Windows Server 2003 R2.
- SMB 2.0 : La version utilisée dans Windows Vista (SP1 et supérieur) et son équivalent serveur à savoir Windows Server 2008.
- SMB 2.1 : La version utilisée dans Windows 7 et Windows Server 2008 R2.
- SMB 3.0 : La naissance de la v3 du protocole SMB, au lancement de Windows 8 et de Windows Server 2012.
- SMB 3.0.2 : Les premières évolutions du protocole SMB v3 profitent à Windows 8.1 et Windows Server 2012 R2 avec cette version v3.02 du SMB.
- SMB 3.1.1 : Windows Server 2016 et Windows 10 version 1607
Vous avez maintenant connaissance de l'évolution du protocole SMB dans le temps et les versions de Windows qui ont introduit ces différentes versions.
III. Négociation client/serveur : le tableau des compatibilités
Grâce à l'historique énuméré précédemment, on peut déduire le tableau de compatibilité ci-dessous. Effectivement, un serveur Windows Server 2012 R2 ne pourra pas utiliser le SMB v3.02 pour dialoguer avec une machine sous Windows XP qui ne connaît que le protocole SMB v1. De ce fait et en fonction de l'état de votre parc informatique, ce tableau est à prendre en considération.
Il est à noter qu'une machine qui supporte la version v3 du protocole SMB, sera tout à faire capable d'utiliser les versions plus anciennes si cela est nécessaire pour dialoguer avec un client spécifique. Cela requiert tout de même que les anciennes versions du protocole soient laissées actives sur la machine (c'est le cas par défaut). Si c'est bien le cas, la négociation SMB s'effectuera en toute transparence.
IV. Quelle version du SMB utilise mon serveur ?
Pour savoir quelle version de SMB utilise votre serveur, ou plutôt quelle est la version la plus récente qu'il est capable de gérer, on peut très bien se référencer au tableau vu précédemment.
Par précaution, il vaut mieux vérifier par soi-même en PowerShell. Pour ma part, je me trouve sur un poste de travail en Windows 8.1 (ce serait la même chose pour son équivalent Windows Server 2012 R2).
Pour obtenir cette information, on va simuler une connexion SMB sur la boucle locale de notre machine, tout simplement en listant le contenu du lecteur C: via SMB. Ce qui donnera :
dir \\localhost\c$
Et rapidement, vous devez enchaîner avec la commande ci-dessous avant que la session SMB se clôture.
Get-SmbConnection -ServerName localhost
Cette commande permet de lister les connexions SMB en cours sur l'hôte local (localhost). La valeur qui nous intéresse est celle de la colonne "Dialect" qui permet de savoir le numéro de version du protocole SMB utilisé pour cette connexion.
Le fait de voir "3.02" permet de déterminer que notre machine est capable d'utiliser le SMB v3.02. C'est tout l'intérêt de faire ce test sur la boucle locale, car on est à la fois le client et le serveur, ce qui permet d'obtenir un résultat cohérent.
V. Pourquoi passer à SMBv3 ?
Les changements apportés par la version v3.0 du protocole SMB sont conséquents puisqu'ils améliorent la disponibilité, les performances et la sécurité.
On retrouve notamment la possibilité de faire des snapshots VSS pour des fichiers distants, la gestion multichannel (SMB Multichannel), le chiffrement des échanges en s'appuyant sur de l'AES-CCM, le SMB Direct qui tire profit du RDMA (débit augmenté, faible latence et moins de cycles d'utilisation du processeur), etc. De plus, SMB peut être configuré et géré grâce à de nombreuses commandes PowerShell, un atout supplémentaire sans aucun doute.
Il n'y a que de bonnes raisons à vouloir passer à SMBv3, mais il faut s'assurer au préalable de la compatibilité de tous les clients potentiels, avant de passer sur un serveur capable de gérer le SMBv3. Après, vous pouvez laisser actifs SMBv1 et/ou SMBv2 pour les quelques clients incompatibles.
Je tiens à préciser que le SMBv3 est fortement recommandé pour utiliser des machines virtuelles Hyper-V stockées sur un espace de stockage accessible par le réseau.
Je terminerais cette partie en parlant des implémentations tierces du SMB, à savoir non-Windows. Il est important de préciser que sous Linux, Samba 4.1 intègre SMBv3, de la même manière qu'il existe un client Linux pour SMBv3 disponible depuis le noyau Linux 3.11. Par ailleurs, les NAS comme ceux de chez Asustor et les distributeurs de baies de stockage tels que EMC et NetApp proposent le SMBv3.
VI. Désactiver le SMBv1 et/ou SMBv2
Pour finir, et si vous êtes prêt à basculer sur du 100% SMBv3, on va voir comment désactiver le SMBv1 voir même le SMBv2, en PowerShell.
Set-SmbServerConfiguration –EnableSMB1Protocol $false
Comme son nom l'indique, la commande ci-dessus permet de modifier la configuration du SMB, en l’occurrence ici le paramètre qui sert à rendre actif ou non la version 1 du protocole SMB. Si vous souhaitez effectuer la même chose pour SMBv2, répétez l'opération en modifiant le nom du paramètre :
Set-SmbServerConfiguration –EnableSMB2Protocol $false
Avec la commande "Get-SmbServerConfiguration" on peut vérifier que les deux paramètres "EnableSMB1Protocol" et "EnableSMB2Protocol" sont bien sur l'état false.
EnableSMB1Protocol : False EnableSMB2Protocol : False
Ce tutoriel est désormais terminé, j'espère qu'il vous permettra de prendre conscience des différentes versions SMB qui existent, et de faire évoluer votre infrastructure en "migrant" vers cette nouvelle version. Il est recommandé de passer à chaque fois à la version du SMB la plus récente, pour obtenir une implémentation plus performante et plus sécurisée.
Petite question
Vous pourrez peut être me répondre
Nous avons des soucis avec la dernière version du protocole SMBv3 dans notre entreprise
Nous avons des postes clients Windows 10 avec des riverbed
Les riverbed permettant une amélioration net de nos flux WAN nous voulons les laisser actifs
Cependant nous avons des effets de bords incontestable due à l’optimisation des Flux SMB :
– Problème d’accès serveurs de fichiers
– Partage d’écran skype ne fonctionne pas
– beaucoup d’autres outils systèmes utilisant le protocole SMB ont des effets de bords (authent etc…)
Comment peut-on désactiver le SMBv3 sur notre environnement ?
Merci
Cordialement
Bonjours je voulais savoir si c’est ligne de code devais être mis dans un interprétateur de commande parce-que je sais pas du tout ou les écrire.
merci d’avance
cordialement
Bonjour,
Ces commandes sont à exécuter dans le programme « Windows PowerShell ».
Cordialement,
Florian
la commande:
dir \\localhost\c$
ne fonctionne pas dans mon Powershell Windows 10
le faire avec le rappel des commandes pour plus de rapidité. (Testé : ça marche).
Serait-il possible de faire un tuto adapté pour les Freebox qui elles ne supportent pas le SMB3 pour les environnement Linux Ubuntu/Debian …
Salut et merci pour votre tuto. Donc les echanges d’SMBv3 sont chiffré ! Ma question : J’utilise un script Xcopy ou Robocopy entre deux postes, via un LAN ou un WAN (site distant sans VPN), SMBv3 remplace t-il alors un VPN ? Merci d’avance.