Présentation
Minimiser les vulnérabilités de votre protocole Secure Shell (SSH) est essentiel pour garantir la sécurité de votre environnement Linux.
Dans cet article, nous couvrons la sécurité Linux SSH la plus courante. mesures que vous pouvez prendre pour rendre vos serveurs plus sûrs. En modifiant le port SSH par défaut, en utilisant des paires de clés et en suivant les autres bonnes pratiques recommandées, vous pouvez améliorer considérablement la sécurité globale de votre système.
Qu'est-ce que SSH ?
Le protocole Secure Shell (SSH) permet une administration système à distance protégée par chiffrement et des transferts de fichiers sur des réseaux non sécurisés. À l'aide de plusieurs méthodes de chiffrement, SSH sécurise la connexion entre un client et un serveur en protégeant les commandes, l'authentification et la sortie des utilisateurs contre les accès non autorisés et les attaques.
Le protocole SSH est désormais largement utilisé dans les centres de données et par presque toutes les grandes entreprises exécutant l'une des variantes UNIX.
Lorsqu'il s'agit de mesures de sécurité, il est essentiel de les combiner, de les appliquer par couches, et de ne pas en choisir une seule et se fier uniquement à cette solution.
Pour en savoir plus sur les connexions SSH, consultez notre article sur le fonctionnement de SSH.
1. Changer le port SSH par défaut
L'utilisation d'un port non standard pour la connexion SSH permet d'éviter les attaques automatisées sur votre serveur. Cela aide également à réduire les chances qu'il apparaisse sur le radar d'un pirate informatique et en fait une cible moins évidente.
Remarque :La majorité des hackers qui recherchent des serveurs OpenSSH viseront le port SSH par défaut 22 .
Dans ce cas, les scripts qu'ils utilisent rechercheront les adresses IP uniquement sur le port 22. Si votre serveur appartient à ce groupe, chaque attaque automatisée de ce type aura un impact sur vos fichiers journaux. Par conséquent, la charge sur votre serveur peut augmenter considérablement car de nombreux exploits de serveur SSH fonctionnent 24 heures sur 24 et frappent à la porte de chaque serveur.
Il est important de noter que la modification du port SSH par défaut n'améliore pas la sécurité de votre serveur. Cependant, cela aide à éloigner les attaques automatisées.
Comment changer le numéro de port
Avant de commencer, vous devez décider quel port vous utiliserez à la place du port 22 par défaut. Avant de prendre une décision, vous devez tenir compte de quelques éléments :
Pour changer le port sur votre serveur Linux , suivez ces étapes :
- Connectez-vous au serveur via SSH comme vous le feriez habituellement.
- Passez à l'utilisateur root à l'aide de la commande su, qui vous invitera à entrer le mot de passe du serveur.
- Utilisez un éditeur de texte de votre choix pour modifier le fichier de configuration sshd situé dans le
etc/ssh/
annuaire. Si vous n'avez jamais utilisé d'éditeur de texte dans le terminal, il est recommandé d'utiliser Nano. Sinon, utilisez vi ou vim car ce sont les éditeurs les plus couramment utilisés aujourd'hui. Nous vous conseillons de sauvegarder le fichier d'origine avant d'apporter des modifications. - Exécutez cette commande pour modifier le fichier de configuration :
nano /etc/ssh/sshd_config
- Dans la sortie de sshd_config fichier localisez la ligne qui dit "
Port 22
."
- Remplacez le numéro de port par la valeur de votre choix. Assurez-vous qu'il n'y a pas de "
#
” au début de la ligne. - Quitter l'éditeur et confirmer que vous souhaitez enregistrer les modifications.
- Pour que les modifications prennent effet, redémarrez le service sshd avec cette commande :
service sshd restart
- Vérifiez que le SSH écoute sur le port que vous avez spécifié en vous y connectant.
Notez que vous devrez maintenant spécifier le port lors de la connexion car votre client utilisera toujours le port SSH par défaut, sauf indication contraire.
Avantages
Bien que la procédure de modification du port SSH par défaut n'augmente pas le niveau de sécurité en soi, elle vous fait sortir du radar des analyses les plus courantes. Un moyen simple de tester cela consiste à laisser votre serveur fonctionner pendant quelques jours avec sshd à l'écoute sur le port par défaut, puis à le remplacer par un port non standard. Comparez le nombre d'échecs de connexion sur votre serveur et vous le verrez diminuer considérablement.
En utilisant un port non standard pour SSH :
- Vous évitez d'être vu par des scans aléatoires.
- Il est plus difficile de trouver votre serveur. La plupart des attaques analyseront le port par défaut ou certaines variantes de celui-ci, mais continueront une fois la connexion refusée.
- Le démon SSH peut faire une pause car il ne recevra pas de demandes de connexion provenant d'attaques scriptées. La charge du serveur est réduite et le fichier journal reste propre, ce qui vous fait gagner du temps lors de son examen.
- Vous ne recevez pas autant d'alertes pour les échecs de connexion. Si vous utilisez un port non standard et que quelqu'un essaie toujours d'accéder à votre serveur, cela signifie probablement que votre serveur est spécifiquement ciblé et que l'alarme ne provient pas d'une attaque par script.
- Vous êtes moins exposé au piratage en raison de bogues dans sshd ou de clés privées faibles.
- La plupart des pirates seront repoussés s'ils voient que vous n'utilisez pas le port par défaut. Ce sera un signe que le serveur est correctement protégé et que d'autres mesures de sécurité sont probablement prises également, faisant de votre serveur une cible indésirable.
Inconvénients
Il y a quelques précautions à garder à l'esprit avant de décider de changer le port par défaut pour SSH. Les inconvénients de l'exécution d'un port non standard peuvent signifier que :
- Toute personne susceptible de se connecter à votre serveur devra être informée du changement et devra commencer à utiliser le nouveau port.
- Si vous utilisez une surveillance externalisée pour votre serveur, vous devez également l'informer du changement. Sinon, ils peuvent considérer cela comme une menace potentielle pouvant entraîner une interruption du serveur.
- Les règles de pare-feu liées au service SSH doivent être inspectées et modifiées en fonction des modifications que vous apportez.
Certains de ces inconvénients ne s'appliqueront probablement pas à votre cas d'utilisation, mais doivent être pris en considération. Les avantages de changer de port l'emportent sur les inconvénients et s'avèrent être une bonne couche de sécurité supplémentaire pour votre serveur.
2. Améliorez la sécurité Linux SSH à l'aide de paires de clés
L'une des méthodes les plus sécurisées pour authentifier les clients auprès des serveurs consiste à utiliser des paires de clés SSH . Des mots de passe forts peuvent suffire à assurer la sécurité de votre serveur, mais des attaques par force brute persistantes peuvent toujours les casser. C'est pourquoi vous avez besoin d'un renforcement SSH supplémentaire avec des paires de clés.
Les clés SSH résistent à de telles attaques et sont pratiquement impossibles à déchiffrer. Une paire de clés SSH se compose de deux longues séries de caractères, une clé privée qui est gardée secrète, et une clé publique qui peut être partagé en toute sécurité. Leur objectif est similaire à celui des mots de passe et ils vous permettent d'établir automatiquement une session SSH sans avoir besoin de saisir un mot de passe.
Comment générer une paire de clés
Pour configurer des clés SSH, vous devrez générer une paire de clés sur l'ordinateur client qui sera utilisée pour se connecter au serveur. Pour ce faire :
- Démarrez le terminal et exécutez l'utilitaire SSH keygen , disponible avec l'outil OpenSSH standard.
ssh-keygen –t rsa
- Vous obtiendrez le message "Génération d'une paire de clés RSA publique/privée". Si vous souhaitez enregistrer la clé à l'emplacement par défaut, appuyez sur
Enter
lorsque vous y êtes invité. La clé sera enregistrée dans le répertoire de l'utilisateur à domicile, dans le~/.ssh
annuaire. Pour modifier l'emplacement, saisissez simplement le nouveau chemin. La recommandation est de conserver l'emplacement par défaut, vous n'avez donc pas à apporter de modifications à votre client SSH. La clé privée ou d'identification sera enregistrée sousid_rsa
et la clé publique correspondante commeid_rsa.pub
. - Vous pouvez éventuellement insérer une phrase secrète . Si vous ne souhaitez pas en utiliser, appuyez sur
Enter
continuer. La phrase de passe fournit une couche de sécurité supplémentaire en cryptant la clé privée sur la machine locale. Pour déchiffrer la phrase secrète, un pirate devra d'abord avoir accès au système, car la clé privée n'est pas exposée sur le réseau. Même dans ce cas, il faudra du temps pour réussir, vous permettant de changer la clé utilisée avant que le pirate n'accède à d'autres serveurs. L'inconvénient est que vous devrez le saisir à chaque fois que vous essayez de vous connecter à l'aide de cette clé.
Le processus de génération d'une paire de clés est terminé.
L'écran final ressemblera à ceci :
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
8b:cd:0b:f7:38:4a:3f:ed:24:18:8d:54:34:2c:63:56 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| ..o. |
| . E.o |
| + . o |
| . = = . |
| ..S |
| = + = + |
| . o + o . |
| . + + o |
| .. |
| |
+-----------------+
Remarque : Vous pouvez rendre l'authentification/autorisation encore plus sécurisée en créant des clés plus grandes de 4096 bits au lieu des 2048 bits par défaut. Pour ce faire, ajoutez –b 4096
au ssh-keygen
commande. Cela ressemblera à ceci :
ssh-keygen -t rsa -b 4096
Copier une clé publique
Pour utiliser la paire de clés que vous avez créée sur votre machine pour l'authentification SSH, vous devez placer la clé publique sur le serveur souhaité. La façon la plus simple de le faire est d'utiliser l'outil disponible avec OpenSSH :
ssh-copy-id
La procédure est simple :
- Tapez
ssh-copy-id [email protected]_host_address
. - Si vous vous connectez pour la première fois à cet hôte, vous recevrez un message d'authenticité. Tapez
Yes
pour continuer. - Saisissez votre mot de passe lorsque demandé, et l'outil copiera le contenu de
~/.ssh/ id_rsa.pub
clé duauthorized_keys
fichier sous le~/.ssh
répertoire personnel sur le serveur.
Remarque : Aucun caractère ne sera visible pendant que vous saisissez le mot de passe pour des raisons de sécurité.
- Vous recevrez un message :
Votre clé publique a été placée sur le serveur distant et vous pouvez maintenant vous y connecter sans saisir le mot de passe du compte.
- Pour tester si l'authentification avec les clés fonctionne, connectez-vous à votre serveur avec
ssh [email protected]_host_address
. En cas de succès, vous serez automatiquement connecté. Si vous aviez précédemment configuré une phrase secrète, vous devrez d'abord la saisir avant de pouvoir accéder au serveur.
Fonctionnement des clés
Essentiellement, une clé publique n'est pas une clé. Il se comporte comme un cadenas que vous pouvez mettre sur un compte SSH sur une autre machine. Lorsque vous exécutez l'utilitaire 'ssh-keygen', vous générez à la fois le cadenas et la clé qui l'ouvre, id_rsa.pub
et id_rsa
respectivement.
Vous pouvez faire autant de copies du cadenas si nécessaire, distribuez-les à n'importe quel serveur que vous aimez, et vous seul aurez la bonne clé pour les déverrouiller tous. C'est pourquoi il est important de garder la clé privée en sécurité car elle déverrouille toutes les copies des cadenas vous avez distribué.
Peu importe où vous mettez votre clé publique tant que la clé principale n'est pas compromise. Étant donné que personne d'autre ne possède la clé privée, cette méthode d'autorisation et d'authentification est probablement la plus sûre et fortement recommandée.
3. Désactiver la connexion racine SSH au serveur
Les distributions de serveur Linux ont un accès root externe activé par défaut. Cela peut constituer une grave menace pour la sécurité, car les pirates peuvent essayer de déchiffrer le mot de passe avec des attaques par force brute. Il est recommandé de désactiver la connexion root et d'utiliser un compte normal et un su –
commande pour passer à l'utilisateur root.
Avant de désactiver la connexion root, assurez-vous que vous avez ajouté un compte pouvant obtenir un accès root. Pour ce faire, suivez les étapes ci-dessous :
- Utilisez SSH pour vous connecter au serveur en tant que root.
2. Utilisez un éditeur de texte pour ouvrir le fichier de configuration principal. Cette fois, nous utiliserons le vi éditeur.
vi /etc/ssh/sshd_config
3. Trouvez la ligne qui dit "PermitRootLogin_yes
" et changez en PermitRootLogin_no
. Vous devrez peut-être faire défiler quelques lignes pour le trouver.
4. Il est important d'ajouter le compte utilisateur vous utiliserez pour vous connecter. Ajoutez simplement une autre ligne avec le nom d'utilisateur en question :AllowUsers your_username_here
5. Enregistrez les modifications que vous avez apportées, puis quittez l'éditeur de texte.
6. Redémarrer le service SSH, mais ne le faites pas fermez encore la session racine. Pour Ubuntu et Debian, utilisez sudo service ssh restart
et pour Fedora/CentOS, utilisez le service ssh restart
commande.
Ouvrez une nouvelle fenêtre de terminal et vérifiez que vous pouvez maintenant vous connecter en tant qu'utilisateur que vous avez ajouté. Une fois que vous avez confirmé que cela fonctionne, quittez la session racine active.
4. Désactiver les connexions basées sur un mot de passe sur votre serveur
Si vous utilisez des clés SSH pour l'authentification SSH, vous pouvez désactiver complètement l'authentification par mot de passe du serveur. C'est une autre façon de protéger votre serveur contre les attaques par force brute et les tentatives de déchiffrage de votre mot de passe. Avant de continuer, vérifiez si l'authentification basée sur la clé SSH fonctionne pour le compte root sur le serveur ou pour un compte avec le sudo accès.
Lorsque vous êtes prêt, suivez ces étapes :
- Utilisez des clés SSH pour vous connecter au serveur en tant que root ou avec les privilèges sudo.
2. Utilisez un éditeur de texte pour ouvrir le sshd_config dossier. Nous utiliserons vi :
vi /etc/ssh/sshd_config
3. Recherchez la ligne indiquant PasswordAuthentication
et passez à PasswordAuthentication_no
. Assurez-vous de décommenter la ligne si le #
est présent.
4. Enregistrer les modifications que vous avez apportées, puis quittez l'éditeur de texte.
5. Redémarrer le service SSH pour appliquer les modifications. Pour Ubuntu/Debian, utilisez sudo service ssh restart
et pour Fedora/CentOS, utilisez le service ssh restart
commande.
Félicitations, vous avez désactivé avec succès l'option de connexion via SSH à l'aide des mots de passe du compte. Le démon SSH ignorera simplement toutes les demandes d'authentification qui n'incluent pas de paires de clés privées/publiques.
5. Restreindre l'accès SSH à l'aide d'iptables
Iptables est un utilitaire Linux utilisé pour configurer les règles de pare-feu et surveiller/filtrer trafic entrant et sortant vers votre serveur. Il est inclus par défaut avec la plupart des distributions Linux.
Avec iptables, vous pouvez définir des règles qui limitent ou autorisent le trafic pour différents types de services par adresse IP, port ou protocole réseau et améliorent ainsi considérablement la sécurité de votre serveur. Dans notre cas, nous allons définir des règles de pare-feu pour restreindre le trafic SSH entrant pour tout le monde sauf une adresse IP ou un sous-réseau.
De cette façon, le blocage du port 22 arrêtera non seulement l'accès non autorisé à vos serveurs, mais pourra également arrêter ou empêcher les attaques DDoS.
Lors de cette étape, vous devez vous assurer de ne pas vous verrouiller en bloquant complètement le trafic SSH. Vous n'aurez besoin d'utiliser que quelques commandes pour autoriser une adresse IP ou un sous-réseau spécifique pour les connexions SSH entrantes.
Remarque : Les commandes sont sensibles à la casse.
Cette règle ajoutera à la liste blanche l'adresse IP que vous avez saisie. Veuillez remplacer l'exemple d'adresse IP dans la commande par votre adresse IP. Vous pouvez également utiliser un sous-réseau, par exemple, 10.10.10.0/24.
sudo iptables -A INPUT -p tcp -s 123.456.78.90 -dport 22 -j ACCEPT
Vous devez enregistrer les règles pour ne pas les perdre après le redémarrage :
sudo iptables-save
Si vous souhaitez afficher la liste de toutes les règles iptables, vous pouvez utiliser le iptables
–L
commande. Pour inclure plus de détails tels que les informations sur le paquet, l'octet et la cible, ajoutez –v
à la commande ci-dessus. Ajouter -n
à tout cela et la sortie sera affichée au format numérique.
Si vous souhaitez réinitialiser toutes les règles et démarrer proprement, utilisez la commande flush iptables –F
. Cela effacera la configuration d'iptables, ce qui est utile si vous ne savez pas si tout est configuré comme vous le souhaitez.
Paramètres Iptables et définitions d'options
Voici quelques explications pour les paramètres, les options et les valeurs d'iptables utilisés dans les exemples ci-dessus, ainsi que quelques-uns non mentionnés auparavant.
Valeur | Description |
ACCEPTER | Autorise le passage des paquets |
DÉPOSER | Bloque les paquets |
RETOUR | Dit de sauter la chaîne en cours et de reprendre à la règle suivante dans la chaîne précédente (appelante) |
>Paramètre | Description |
-c | compteurs – permet de définir les compteurs de paquets et d'octets d'une règle spécifique |
-d | destination – peut être une adresse, le nom d'un hôte ou une adresse, etc. |
-f | fragment – applique la règle au second et aux fragments qui le suivent |
-g | aller à la chaîne – indique que l'action se poursuivra dans une chaîne spécifiée par l'utilisateur |
-i | dans l'interface – indique le nom de l'interface d'où proviennent les paquets |
-j | sauter – spécifie l'action si un paquet correspond à la règle |
-o | interface de sortie – le nom de l'interface d'un paquet sortant |
-p | protocole – tout protocole disponible tel que SSH, TCP, UDP et FTP |
-s | source – peut être une adresse, le nom d'un hôte ou une adresse, etc. |
Chaîne | Description |
ENTRÉE | Contrôle les paquets entrants |
AVANT | Transfère les paquets arrivant sur votre serveur mais destinés à un autre endroit |
SORTIE | Filtre les paquets sortant de votre serveur |
Option | Description |
-A | ajouter – ajoute une (ou plusieurs) règles de la chaîne sélectionnée |
-C | vérifier – recherche une règle qui correspond aux critères de la chaîne sélectionnée |
-D | supprimer – supprime une seule règle de la chaîne sélectionnée |
-F | flush – supprime tout règles iptables définies |
-je | insérer – insérer une règle dans la chaîne sélectionnée |
-L | liste – affiche les règles de la chaîne sélectionnée |
-n | numérique – affiche l'adresse IP/le nom d'hôte et la valeur de retour dans un format numérique |
-N | nouvelle chaîne |
-v | verbeux – utilisé en combinaison avec -L pour fournir des informations supplémentaires |
-X | delete-chain |
Conclusion, sécurité SSH et bonnes pratiques de renforcement
Que vous construisiez un nouveau serveur ou une machine virtuelle, il est recommandé d'implémenter plusieurs couches de sécurité dans votre environnement. Les entreprises souhaitent généralement mettre en place leur infrastructure le plus tôt possible, mais les mesures de sécurité nécessaires doivent être appliquées dès le départ.
Si vous utilisez les méthodes de sécurité Linux SSH répertoriées ci-dessus, vous devriez pouvoir éviter les menaces de sécurité courantes dans le cloud.
Faites en sorte qu'il soit difficile pour les pirates de pénétrer dans votre (vos) serveur(s) et limitez tout dommage. Assurez-vous de mettre en œuvre autant de ces meilleures pratiques que possible avant de rendre votre serveur disponible sur le réseau.
N'oubliez pas de consulter notre liste régulièrement mise à jour des meilleurs blogs sur la cybersécurité que vous devriez suivre pour vous tenir au courant de toutes les dernières tendances.