Sur Linux, afin d’accéder à votre serveur vous utilisez votre client SSH habituel à destination du serveur SSH (SSHd pour Secure Shell deamon) de votre machine.

Dans ce tutoriel, vous allez affiner les paramètres de votre serveur SSH afin de le rendre plus fiable et donc moins vulnérable aux différentes attaques.

Vous allez modifier les paramètres de votre serveur SSH, il est recommandé de vérifier à chaque étape le bon fonctionnement du fichier de configuration et de tester la connexion SSH à votre serveur depuis un nouveau terminal sans jamais clôturer celui d’origine. Ceci vous permettra en cas d’erreur de ne pas perdre la main.

Statut et sauvegarde de la configuration existante

Avant toute chose, il est impératif de prendre connaissance de l’état actuel de votre service SSHd et de sauvegarder la configuration :

Il y a deux informations importantes à relever :

  • Le programme est bien exécuté au démarrage de votre serveur
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
  • Le programme est bien en cours d’exécution
Active: active (running) since Tue 2019-06-25 09:35:53 UTC; 22h ago

Vous allez modifier la configuration du serveur SSH :

  • Vous allez de fait devoir relancer le service (systemctl restart sshd.service). Par mesure de précaution il est important de vérifier que la configuration actuelle ne présente aucun problème :
sshd -t

Cette commande ne devrait rien retourner si la configuration est correcte. En cas de présence d’un mauvais paramètre, la commande va retourner précisément la ligne et le mauvais paramètre concerné :

/etc/ssh/sshd_config line 53: Bad yes/no argument: mauvaisparametre
  • Sauvegarde du fichier de configuration (cette commande permets de copier le fichier en y ajoutant la date du jour dans le nom) :
cp /etc/ssh/sshd_config /etc/ssh/sshd_config-$(date +%F)

  • Le fichier de configuration par défaut comporte de nombreux paramètres commentés. Ceci ne veut pas dire qu’ils ne sont pas actifs, mais tout simplement que ce sera la valeur par défaut qui sera appliqué. Afin de vérifier tous les paramètres et les arguments associés qui sont en cours d’exécution :
sshd -T

Extrait :

L’affichage est en minuscule contrairement aux paramètres contenu dans le fichier sshd_config

2.    Paramètres de sécurité

Changer le port d’écoute :

Par défaut, le port d’écoute est le 22. Il peut être intéressant de le changer afin de limiter certains types d’attaque :

  • Attaque automatisée : utile car le port par défaut est ciblé
  • Attaque ciblée : inutile car en plus du port par défaut, ce type d’attaque scan les ports ouverts de la machine ciblée ce qui rend le changement de port inefficace.

Dans une mesure de prévention, le changement du port d’écoute ne peut être que bénéfique.

Exemple :

Port 2233

X11Forwarding :

Cette option autorise ou non la possibilité de faire du déport d’affichage au travers d’SSH. De cette manière, une application exécutée sur un serveur peut être affiché sur un poste client. SI cette option n’est pas utile pour vous, il n’est pas nécessaire de la laisser activée (par défaut c’est le cas)

X11Forwarding no

Nombre maximal de tentatives d’authentification :

Par défaut, la configuration permet jusqu’à 6 tentatives de connexion. Afin de limiter l’impact d’une attaque par brute-force il est recommandé de réduire ce nombre.

MaxAuthTries 3

Ne pas autoriser les connexions pour l’utilisateur « root » :

Il est fortement recommandé de ne jamais utiliser l’utilisateur « root ». En effet, la plupart des attaques se concentrent généralement sur cet utilisateur. Il est donc conseillé de créer un utilisateur dédié disposant des droits sudo.

PermitRootLogin no

Utiliser une liste autorisée d’utilisateurs et/ou groupe :

Afin de restreindre un peu plus les risques de connexion malicieuse, il est possible de lister précisément quel(s) utilisateur(s) ou groupe(s) sont autorisé(s) à se connecter (il est également possible de ne pas autoriser certains utilisateurs et/ou groupes à se connecter en SSH).

Il suffit pour cela d’utiliser l’un et/ou l’autre de ces variables :

AllowUsers/DenyUsers utilisateur1

AllowGroups/DenyGroups groupe1

Le serveur SSH va procéder à une vérification suivant cet ordre afin d’autoriser ou non une connexion : DenyUsers, AllowUsers, DenyGroups, AllowGroups.

TCP Wrappers :

Vous avez la possibilité de lister les IPs autorisées à se connecter en SSH en les renseignant dans le fichier /etc/hosts.allow

Exemple :

sshd : 192.168.1.2 172.16.23.12

Protection SSH par Fail2ban :

Vous pouvez consulter notre tutoriel sur la mise en place de Fail2ban afin de mettre en place une protection pour SSH

 Authentification par clef SSH :

Vous pouvez consulter notre tutoriel sur la mise en place d’une clef SSH