Comment bloquer votre serveur SSH

Contenu

SSH, ce qui signifie Secure Shell, pas très sûr par défaut, opter pour l'authentification par mot de passe de base sans autres limites. Si vous voulez vraiment bloquer votre serveur, vous devrez faire plus de réglages.

Ne pas autoriser les connexions par mot de passe: utiliser des claves SSH

La première chose à faire est de se débarrasser complètement de l'authentification par mot de passe et de passer à l'utilisation de clés SSH. Les clés SSH sont une forme de cryptage à clé publique; vous avez une clé publique qui sert de nom d'utilisateur et une clé privée qui sert de mot de passe (sauf que ce mot de passe a 2048 personnages). Votre clé privée est stockée sur votre disque, mais il est crypté avec une phrase secrète et ssh-agent. Lorsque vous vous connectez en SSH sur un serveur, au lieu de demander votre mot de passe, l'agent ssh se connecte au serveur en utilisant ses clés.

Même si vous utilisez déjà des clés SSH, vous voudrez vous assurer que vos connexions par mot de passe sont désactivées, puisque les deux ne s'excluent pas mutuellement.

EN RELATION: Qu'est-ce que le transfert d'agent SSH et comment est-il utilisé?

Générer des clés SSH

Vous pouvez générer une nouvelle clé SSH en utilisant le ssh-keygen utilitaire, installé par défaut sur la plupart des systèmes Unix.

ssh-keygen

Cela vous demandera une phrase secrète pour chiffrer le fichier de clé local. Non utilisé pour l'authentification avec le serveur, mais il faut le garder secret.

ssh-keygen enregistrera votre clé privée dans ~/.ssh/id_rsaet il enregistrera également votre clé publique dans ~/.ssh/id_rsa.pub. La clé privée reste sur votre disque dur, mais la clé publique doit être téléchargée sur le serveur afin que le serveur puisse vérifier votre identité et vérifier que vous avez l'autorisation d'entrer sur ce serveur.

Le serveur maintient une liste d'utilisateurs autorisés, régulièrement stockés dans ~/.ssh/authorized_keys. Vous pouvez ajouter manuellement votre fichier de clé à ce fichier, ou vous pouvez utiliser le ssh-copy-id utilitaire:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

Remplacer user@host avec votre propre nom d'utilisateur et nom d'hôte du serveur. Il vous sera demandé de vous connecter une fois de plus avec votre ancien mot de passe, après quoi vous ne devriez plus être invité et vous pouvez désactiver la connexion par mot de passe.

Désactiver la connexion par mot de passe SSH

Maintenant que vous pouvez entrer dans le serveur avec vos clés, vous pouvez désactiver complètement l'authentification par mot de passe. Assurez-vous que l'authentification par clé fonctionne ou votre serveur sera bloqué.

Sur le serveur, ouvert /etc/ssh/sshd_config dans votre éditeur de texte préféré et trouvez la ligne qui commence par:

#Authentification par mot de passe

Vous voudrez décommenter ceci (supprimer le hashtag) y cambiar “Oui” une “non”:

Mot de passeAuthentification non

Ensuite, redémarrer sshd avec:

systemctl redémarrer sshd

Vous devriez être obligé de vous reconnecter et, si votre fichier de clé est erroné, vous ne serez pas invité à entrer un mot de passe.

Si vous le souhaitez, además puede forzar la autenticación basada en claves públicas, que bloqueará todos los demás métodos de autenticación. Ajoutez les lignes suivantes à /etc/ssh/sshd_config:

AuthenticationMethods publickey
PubkeyAuthentication yes

et redémarrer sshd.

EN RELATION: Qu'est-ce qu'un fichier PEM et comment est-il utilisé?

Bloquear a los atacantes con denyhosts

denyhosts es una utilidad para evitar repetidos intentos fallidos de inicio de sesión a través de SSH, equivalente a cómo su teléfono lo bloquea después de demasiados intentos. Il n'est pas installé par défaut, vous devrez donc l'installer depuis le gestionnaire de paquets de votre distribution. Pour les systèmes basés sur Debian comme Ubuntu, cela serait:

sudo apt-get install denyhosts -y

Une fois installé, l'activer avec:

sudo systemctl activer denyhosts

denyhosts devrait s'exécuter automatiquement maintenant, mais vous voudrez ajouter votre adresse IP à la liste blanche au cas où elle serait bloquée. Vous pouvez toujours réessayer à partir d'une autre adresse IP, mais cela vous évitera des soucis.

Ouvrir /etc/hosts.allow, et en bas du fichier ajouter:

sshd: votre-adresse-ip

remplacement your-ip-address avec votre adresse IP.

Par défaut, denyhosts plantera après une tentative infructueuse pour les utilisateurs root et cinq tentatives infructueuses pour les autres utilisateurs. Vous pouvez modifier ce comportement en modifiant /etc/denyhosts.conf.

S'il a été verrouillé accidentellement, doit arrêter denyhosts et supprimez votre adresse IP de certains endroits:

  • /etc/hosts.deny
  • /var/lib/denyhosts/hosts
  • /var/lib/denyhosts/hosts-restricted
  • /var/lib/denyhosts/hosts-root
  • /var/lib/denyhosts/hosts-valid
  • /var/lib/denyhosts/users-hosts

Redémarrage denyhosts et devrait pouvoir se reconnecter.

Liste blanche d'accès SSH

Même en forçant les clés SSH avec denyhosts c'est probablement assez de sécurité, vous pouvez inclure des adresses IP spécifiques dans la liste blanche. La plupart des fournisseurs de serveurs fourniront des outils pour le faire à partir d'une interface Web. Si c'est une alternative, vous voudrez le mettre en liste blanche à partir de là au lieu du serveur SSH, puisque vous pourrez toujours changer l'adresse IP de la liste blanche au cas où elle serait bloquée.

  Modification des règles d'entrée.

sinon une alternative, vous devrez configurer manuellement /etc/hosts.deny pour bloquer tout le trafic provenant d'hôtes non autorisés.

Une remarque importante: Si vous incluez votre maison dans la liste blanche, votre FAI peut ne pas vous donner d'adresse IP statique et votre adresse IP peut changer à tout moment. Vous voudrez vous assurer que cela ne se produit pas avant de mettre sur liste noire toutes les autres adresses IP, ou ajouter plusieurs adresses comme sauvegarde, ou tout simplement sauter cette étape entièrement.

Ouvrir /etc/hosts.allow et assurez-vous que votre adresse IP est dans le fichier:

sshd: votre-adresse-ip

Si c'est ainsi, vous pouvez continuer et rejeter toutes les autres connexions:

echo 'sshd: TOUS' >> /etc/hosts.deny

Redémarrage sshd et tu devrais voir tes changements.

Alternativement, mettre en place un proxy devant votre serveur SSH

Si vous ne souhaitez pas exposer votre serveur SSH à Internet, mais vous devez y accéder à partir de plusieurs adresses IP, vous pouvez définir un proxy devant lui pour gérer la connexion. Cela pourrait être un autre serveur cloud ou même une boîte qui fonctionne dans votre maison..

Le serveur SSH doit être configuré pour accepter uniquement les connexions du serveur proxy, et le serveur proxy doit accepter les connexions de n'importe où. Vous pouvez configurer le serveur proxy comme vous le souhaitez, mais même un simple connexion netcat marchera. Veuillez noter que ce serveur proxy sera le seul point d'accès pour votre serveur SSH, donc si le proxy cesse de fonctionner, sera bloqué à moins que vous n'ayez une adresse de sauvegarde.

Interdire la connexion root

À sa place, créer un nouvel utilisateur et accorder à cet utilisateur le privilège sudo. effectivement, c'est pareil, mais il y a une grosse différence: les attaquants potentiels devront connaître le nom de votre compte utilisateur pour commencer à attaquer votre serveur, car ce ne sera pas aussi simple que root@yourserver.

A part la sécurité, en général, c'est une bonne politique Unix de ne pas se connecter en tant que root tout le temps, dû au fait que root ne crée pas de journaux et ne demande pas l'accès aux ressources protégées.

Créez un nouvel utilisateur sur votre serveur SSH:

adduser myfancyusername

et définissez un mot de passe pour cet utilisateur:

passwd myfancyusername

Vous ne vous connecterez pas avec ce mot de passe car vous continuerez à utiliser les clés SSH, mais c'est obligatoire. Idéalement, faites-le à part votre mot de passe root.

Ajouter cet utilisateur à /etc/sudoers accorder des autorisations d'administrateur:

echo 'myfancyusername ALL=(TOUS) TOUS' >> /etc/sudoers

Basculez vers cet utilisateur avec su myfancyusernameet vérifiez que vous pouvez revenir à l'utilisateur root avec sudo su (vous n'avez pas besoin de mot de passe root). Si vous le pouvez, avoir accès à sudo.

Maintenant, vous voulez bloquer la connexion root. Au /etc/ssh/sshd_config, tu voudras changer:

#PermitRootLogin oui

Elimina el hastag y cambia “Oui” une “non”:

PermitRootLogin non

Redémarrage sshd et votre serveur devrait bloquer toutes les demandes de connexion en tant que root.

Configurer l'authentification à deux facteurs

C'est certainement exagéré., mais si vous êtes paranoïaque à l'idée que quelqu'un s'empare de vos clés SSH privées, vous pouvez configurer votre serveur SSH pour utiliser 2FA.

La façon la plus simple de le faire est d'utiliser Authentificateur Google avec un appareil Android ou iOS, même si SSH prend en charge de nombreuses méthodes à deux facteurs. Avec l'authentificateur Google, vous recevrez un code QR que vous pourrez scanner à partir de l'application mobile Google Authenticator pour lier votre téléphone au serveur, et en outre, vous recevrez des codes de sauvegarde à récupérer en cas de perte de votre téléphone. . Ne stockez pas ces codes sur votre machine principale, cas contraire, il ne s'agit pas de deux facteurs.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.