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_rsa
et 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.
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 myfancyusername
et 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.