GNU/Linux >> Tutoriels Linux >  >> Linux

Comment améliorer la sécurité SSH sur Ubuntu 18.04

Le service SSH est le principal point d'accès à votre Serveur Cloud et, en même temps, l'un des services les plus exposés aux attaques. Ce guide vous aidera à améliorer la sécurité du service grâce à différentes astuces et techniques.

Changer le port d'écoute

Le port par défaut pour écouter la connexion SSH est le 22 :la modification de ce paramètre permettra de cloudiser le service et d'augmenter la sécurité de la connexion.

Pour éviter les interférences avec d'autres services existants sur la machine, il est recommandé de vérifier quels ports sont actuellement utilisés, à l'aide de la commande netstat :

$ netstat -n -l
    
Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address State
tcp        0 0 127.0.0.1:3306          0.0.0.0:* LISTEN
tcp        0 0 127.0.0.53:53           0.0.0.0:* LISTEN
tcp        0 0 0.0.0.0:22              0.0.0.0:* LISTEN
tcp6       0 0 :::80                   :::* LISTEN
tcp6       0 0 :::22                   :::* LISTEN
udp        0 0 127.0.0.53:53           0.0.0.0:*

Grâce au paramètre -l passé à netstat, forcez-le à imprimer toutes les connexions qui sont dans l'état LISTEN. Dans cet exemple, les ports suivants sont utilisés :

  • Service MySQL 3306

  • 22 SSH

  • 80 Apache2 / HTTP

  • 53 DNS

Pour changer de port, éditez simplement le fichier de configuration dans /etc/ssh/sshd_config, en décommentant la directive Port :

#Port 22

Ensuite, définissez une nouvelle valeur, éventuellement élevée, pour éviter qu'elle ne soit interceptée par un logiciel d'analyse automatique des ports (par exemple 2200, 5574, 1022) :

Port 5574

Pour appliquer la modification, téléchargez le service via :

$ sudo service sshd reload

. Maintenez la connexion active en utilisant le rechargement de manière à corriger toute erreur et vérifier tout nouvel accès avec un autre client SSH

Une fois la modification appliquée, connectez-vous à votre serveur en spécifiant le nouveau port. Par exemple, si vous utilisez le client SSH depuis la ligne de commande :

$ ssh [email protected]<SERVER.IP> -p 5574

Utilisation des clés pour l'authentification

Largement utilisé pour sa sécurité, l'accès via les clés RSA est une alternative à la connexion par mot de passe. Dans ce type d'authentification, le client génère une clé privée et la clé publique associée qui est installée sur la machine serveur pour authentifier sans ambiguïté le client. .

Pour installer la clé publique, le client doit d'abord générer la paire de clés à l'aide de la commande ssh-keygen :

$ ssh-keygen
Generating public/private rsa key pair.
Enter file where to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Avant de procéder à la génération, ssh-keygen demande une phrase secrète facultative pouvant être utilisée pour l'authentification. Dans cet exemple, pour faciliter l'accès, le fichier suivant a été laissé vide.

Une fois terminé, le logiciel enregistrera deux fichiers dans l'emplacement désigné :

  • id_rsa :la clé privée du client, à ne partager avec personne.

  • id_rsa.pub :la clé publique partageable .

Pour préparer l'environnement du serveur, créez un fichier nommé authorized_keys dans le dossier .ssh à l'intérieur du dossier utilisateur que vous utiliserez pour la connexion :

$ sudo mkdir ~/.ssh
$ sudo touch ~/.ssh/authorized_keys
$ sudo chmod 600 ~/.ssh/authorized_keys

Assurez-vous que le fichier dispose des autorisations ci-dessus.

Procédez ensuite en collant la clé publique préalablement préparée par la machine cliente :

$ sudo nano ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoTzd9RnqT0yioQG1klsLEK/VG9myo7CQ47aRXu7hnPit6Lgw5kAjC7vzNWYLTy2oIlsrVI7R/tvWmVNISGkWDp9U3fONbSLp+vgBKDzRUVAIqP/AIJ2THanyZxj2b8XU/4s2uzGoTLSR3ViX0JU6zTc+IkaBp1o3W3OolvO15E10/VYJCKN3TkxPsSSGE3QReXnCcnIZYAnrPf9f1DPP1Lo+VUCIzZ7IzcZajAWQ53hC71mTYNHkUgIlWxpRyEhnsRfmqEfUSFbTwpNEarv7vGlK686C4xVxlVfKbqlNa3/g2Vrae4ArVBM958JPZ6aa+7KDZfH5TDgPPtlFCIGkd [email protected]

Enregistrer le fichier et recharger le service SSH :

$ sudo service sshd reload

À ce stade, accéder au serveur sans être requis, aucun mot de passe ne devrait être possible :

$ ssh [email protected]<SERVER.IP>

Si tout fonctionne correctement, désactivez l'accès par mot de passe depuis la machine serveur en modifiant le fichier /etc/ssh/sshd_config, avec les paramètres suivants :

ChallengeResponseAuthentication no
    PasswordAuthentication no

N'oubliez pas que vous pouvez ajouter d'autres clés publiques en les enregistrant simplement à la fin du fichier ~/.ssh/authorized_keys sur la machine serveur.

Limiter les temps de disponibilité du service

Une stratégie pour réduire les accès indésirables et les attaques par force brute consiste à réduire les temps de disponibilité du service SSH. Si vous êtes sûr de ne pas avoir besoin de vous connecter au serveur à certaines heures (par exemple de 23h00 à 08h00 le lendemain), définissez un horaire automatique pour bloquer le port de connexion.

Pour ce faire, utilisez le pare-feu par défaut appelé iptables, mais, avant de procéder à la configuration, rappelez-vous qu'iptables, de par sa nature, n'enregistre pas la configuration saisie.

Pour enregistrer et charger la configuration plus rapidement, utilisez le package iptables-persistent, qui recharge la configuration enregistrée au démarrage du système.

Ensuite, continuez l'installation du package :

$ sudo apt-get install iptables-persistent

Après avoir terminé son installation, entrez une "chaîne" pour bloquer le service SSH :

$ sudo iptables -N chain-ssh
$ sudo iptables -A INPUT -p tcp --dport 22 -j chain-ssh

Ainsi, toutes les connexions destinées au port 22 (si votre service SSH utilise un autre port, modifiez cette valeur) passeront par la chaîne "chain-ssh" nouvellement créée.

Enregistrer la configuration actuelle (qui sera chargée par iptables-persistent) avec la commande :

$ sudo iptables-save > /etc/iptables/rules.v4

Créez ensuite un horaire d'entrée et de suppression de la règle sur la chaîne en modifiant la crontab comme suit :

$ sudo crontab -e
    
# m h  dom mon dow   command
0 23   * * *   iptables -A chain-ssh -j DROP
0 8    * * *   iptables -F chain-ssh

Comme vous pouvez le voir, avec la première opération une règle DROP des connexions à 23h00 est ajoutée, tandis que la deuxième opération vide la chaîne à 08h00 pour rétablir le service.

Enregistrer le fichier pour appliquer les modifications.


Linux
  1. Comment configurer la connexion SSH sans mot de passe

  2. Comment générer une paire de clés SSH (avec exemples)

  3. Comment configurer des clés SSH

  4. Comment configurer des clés SSH sur Ubuntu 16.04

  5. Comment configurer des clés SSH sur Ubuntu 18.04

Comment créer une phrase de passe de clé SSH sous Linux

Comment activer le serveur SSH sur Ubuntu 22.04

Comment changer le port SSH dans Ubuntu

Comment ajouter une clé publique SSH au serveur

Comment changer le port SSH sur Ubuntu ?

Comment installer Ansible sur Ubuntu 18.04