Menu Fermer

Comment sécuriser Samba

Le partage de fichiers Samba et le port 445 sont la cible de scans automatiques depuis internet.
Si vous avez configuré Samba sur un serveur accessible par internet, il convient de sécuriser Samba.

Les instructions suivantes vous aideront à protéger votre serveur Samba contre les failles de sécurité si vous ne pouvez pas (ou jusqu’à ce que vous puissiez) effectuer une mise à niveau vers la version corrigée. Même si vous effectuez la mise à niveau, vous pouvez réfléchir aux suggestions suivantes afin de bénéficier de niveaux de protection supplémentaires.

Voici un guide complet pour sécuriser Samba pour protéger des attaques, piratages.

Comment sécuriser Samba

Comment sécuriser ses partages Samba

Configurer l’interface réseau d’écoute

Par défaut, Samba acceptera les connexions sur toute interface réseau qu’il trouvera sur votre système.
Ce qui signifie que si vous exécutez une version non sécurisée de Samba sur un hôte directement connecté à Internet, vous pouvez être particulièrement vulnérable.

Il convient de réduire les interfaces d’écoutes des services Samba.
Pour cela, utilisez les directives interfaces et bind interfaces dans la section [global] de smb.conf pour configurer les interfaces réseau sur lesquelles Samba soit écouter :

interfaces = eno* lo
bind interfaces only = yes

Par exemple, ici, on autorisé à écouter sur toutes les interfaces en, soit eno1, eno2, etc et l’interface localhost.

L’option interfaces accepte aussi des adresses IP, classes d’IP ou nom d’hôte.
Plusieurs types d’écritures sont possibles
Par exemple, 192.168.10. équivaut à 192.168.10.* :

interfaces = 192.168.10. 152.12.12.12

Mais on peut spécifier le masque de sous réseau sous la forme /24 ou 255 :

interfaces = 192.168.10.0/24 152.12.12.12
interfaces = 192.168.10.0/255.255.0 152.12.12.12

Enfin redémarrez smbd avec systemctl :

systemctl restart fail2ban

Puis vérifiez les interfaces ou IP d’écoutes des services samba à l’aide de netstat :

netstat -lpn|egrep "smbd|nmbd"

ou avec la commande ss :

ss -l|egrep "microsoft|netbios"

hosts.allow et hosts.deny : Filtrer les IP et hôtes autorisés

Une autre configuration importante à effectuer pour sécuriser vos partages réseaux Samba et de filtrer les adresses IP et hôtes autoriser à se connecter.
Cette configuration peut se faire globalement dans la section [global] ou dans chaque partage réseau.
Grâce aux directives hosts.allow et hosts.deny, vous pouvez filtrer les appareils qui se connectent sur Samba ou sur chaque partage réseau.

hosts allow = 127.0.0.1 192.168.10.0/24 152.12.12.12
hosts deny = 0.0.0.0/0

Vous pouvez aussi configurer des exceptions avec except :

hosts allow = 10. except 10.0.0.12

Lorsqu’un hôte non autorisé tente de se connecter, cela est enregistré dans le journal /var/log/samba/log.smbd de la forme :

tail /var/log/samba/log.smbd
[2023/01/19 08:57:58.735217,  1] ../../source3/smbd/process.c:3880(smbd_add_connection)
  Connection denied from ipv4:109.201.109.249:58467 to ipv4:XXX:445
[2023/01/19 08:57:58.783870,  0] ../../lib/util/access.c:369(allow_access)
  Denied connection from 109.201.109.249 (109.201.109.249)
[2023/01/19 08:57:58.783923,  1] ../../source3/smbd/process.c:3880(smbd_add_connection)
  Connection denied from ipv4:109.201.109.249:58472 to ipv4:XXX:445
[2023/01/19 08:58:01.890752,  0] ../../lib/util/access.c:369(allow_access)
  Denied connection from 109.201.109.249 (109.201.109.249)
hosts.allow et hosts.deny : Filtrer les IP et hôtes autorisés

Utiliser un firewall (iptables, ufw) pour protéger Samba

Voici la partie la plus importante pour sécuriser Samba : Configurer votre pare-feu.
Si vous avez installé Samba sur un serveur accessible directement sur internet, c’est la partie la plus utile.
A titre d’exemple sur un de mes serveurs, plus de 10 000 IP différents ont tenté de se connecter au port 445 en une seule journée :

cat /var/log/messages.1|egrep "DPT=445"|egrep -Eo "SRC=([0-9]{1,3}.){3}[0-9]{1,3}"|sort -n|uniq|wc -l
10631
Utiliser un firewall (iptables, ufw) pour protéger Samba

Aidez-vous des tutoriels du site pour mettre en place le filtrage du firewall et protéger Samba :

Pour aller plus loin, vous pouvez aussi bloquer certains pays en vous aidant de ce tutoriel :

Configurer Fail2ban pour protéger des BruteForce et attaques DoS

Pour protéger votre serveur Samba des attaques Bruteforce ou attaques DoS, vous pouvez utiliser Fail2ban.
Cela peut aller en complément des règles de pare-feu mise en place, dans le cas par exemple, où des machines de votre réseau sont compromises et sont utilisées pour des attaques.

Dans cette configuration, Fail2ban analyse les fichiers journaux suivants :

  • /var/log/samba/log.smbd – pour détecter les IP non autorisées
  • /var/log/samba/auth_audit.log – pour détecter les bruteforce d’authentification

Voici un exemple de mise en place :

  • Tout d’abord, éditez /etc/samba/smb.conf et ajoutez dans la section [global], une directive log level pour journaliser l’authentification :
log level = 1 auth_json_audit:[email protected]/var/log/samba/auth_audit.log
  • Puis installez l’utilitaire fail2ban avec YUM ou APT :
# RedHat / RHL / Fedora
yum install fail2ban
# Debian / Ubuntu / Mint
apt-get install fail2ban
  • Ensuite créez le fichier de filtres /etc/fail2ban/filter.d/samba.conf :
[Definition]
failregex = NT_STATUS_WRONG_PASSWORD.*remoteAddress": "ipv4:<HOST>:
            Connection denied from ipv4:<HOST>
  • Puis le fichier de configuration de la prison /etc/fail2ban/jail.d/samba.conf – dans ignotreip, indiquez les hôtes à ignorer, par exemple, vos contrôleurs de domaine, serveurs WINS, DNS pour éviter tout problème
[samba-connexion]
filter = samba
enabled = true
action = iptables-multiport[name=samba, port="22,88,135,139,389,445,464,636,3328,3329", protocol=tcp]
logpath = /var/log/samba/log.smbd
maxretry = 3
findtime = 600
ignoreip = 192.168.10.0/24

[samba-auth]
filter = samba
enabled = true
action = iptables-multiport[name=samba, port="22,88,135,139,389,445,464,636,3328,3329", protocol=tcp]
logpath = /var/log/samba/auth_audit.log
maxretry = 5
findtime = 600
bantime = 600
ignoreip = 192.168.10.0/24
  • Enfin redémarrez fail2ban :
systemctl restart fail2ban

Pour vérifier les détections et ban fail2ban :

tail -1200 /var/log/fail2ban.log
Configurer Fail2ban pour protéger des BruteForce et attaques DoS

Configurer refus de partage IPC

Si les méthodes ci-dessus ne conviennent pas, vous pouvez également placer un refus plus spécifique sur le partage IPC$ qui est utilisé dans la faille de sécurité récemment découverte. Cela vous permet d’offrir l’accès à d’autres partages tout en refusant l’accès à IPC$ à partir d’hôtes potentiellement non fiables.

Pour ce faire, vous pouvez utiliser :

[ipc$]
    hosts allow = 192.168.115.0/24 127.0.0.1
    hosts deny = 0.0.0.0/0

Ceci indiquerait à Samba que les connexions IPC$ ne sont pas autorisées à partir d’autres endroits que ceux listés (localhost et un sous-réseau local). Les connexions à d’autres partages seraient toujours autorisées. Comme le partage IPC$ est le seul partage qui est toujours accessible anonymement, cela fournit un certain niveau de protection contre les attaquants qui ne connaissent pas le nom d’utilisateur/mot de passe de votre hôte.

Si vous utilisez cette méthode, les clients recevront une réponse “accès refusé” lorsqu’ils essaieront d’accéder au partage IPC$. Cela signifie que ces clients ne seront pas en mesure de parcourir les partages et qu’ils ne pourront peut-être pas accéder à d’autres ressources.

Je ne recommande pas cette méthode, sauf si vous ne pouvez pas utiliser l’une des autres méthodes énumérées ci-dessus pour une raison quelconque.

Récapitulatif des options de filtrage réseau de Samba

Ce tableau récapitule les différents options de filtrage réseau de Samba.

OptionsParamètreFonctionPar défautPortée
hosts allow (allow hosts)string (liste d’hôte)Spécifie les machines qui peuvent se connecter à SambaAucunShare
hosts deny (deny hosts)string (liste d’hôte)Spécifie les machines qui ne peuvent pas se connecter à SambaAucunShare
interfacesstring (liste d’IP/netmask)Définit les interfaces réseau auxquelles Samba répondra. Permet de corriger les valeurs par défautDépend du systèmeGlobal
bindinterfaces onlybooleanSi elle est définie sur yes, Samba se liera uniquement aux interfaces spécifiées par l’option interfacesAucunGlobal
socketaddressstring (adresse IP)Définit l’adresse IP sur laquelle écouter, pour une utilisation avec plusieurs interfaces virtuelles sur un serveurAucunGlobal
Les options de filtrage réseau de Samba