Comment verrouiller votre serveur SSH
SSH, qui signifie Secure Shell, n'est pas très sécurisé par défaut, optant pour l'authentification de base par mot de passe sans aucune autre limite. Si vous voulez vraiment verrouiller votre serveur, vous devrez faire plus de configuration.
Sommaire
Ne pas autoriser les connexions par mot de passe: utilisez les clés 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 des clés SSH. Les clés SSH sont une forme de chiffrement à clé publique; vous avez une clé publique qui agit comme votre nom d'utilisateur et une clé privée qui agit comme votre mot de passe (sauf que ce mot de passe est de 2 048 caractères). Votre clé privée est stockée sur votre disque, mais est chiffrée avec une phrase secrète et un agent ssh. Lorsque vous accédez à SSH sur un serveur, au lieu de demander votre mot de passe, l'agent ssh se connecte au serveur à l'aide de vos clés.
Même si vous utilisez déjà des clés SSH, vous devez toujours vous assurer que vos connexions de mot de passe sont désactivées, car les deux ne s'excluent pas mutuellement.
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 crypter le fichier de clé locale avec. Il n'est pas utilisé pour l'authentification avec le serveur, mais doit toujours rester secret.
ssh-keygen
enregistrera votre clé privée dans ~/.ssh/id_rsa
et 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 êtes autorisé à accéder à ce serveur.
Le serveur conserve une liste des utilisateurs autorisés, généralement stockés dans ~/.ssh/authorized_keys
. Vous pouvez ajouter votre fichier de clés manuellement à 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 de serveur. Il vous sera demandé de vous connecter à nouveau avec votre ancien mot de passe, après quoi vous ne devriez plus être invité à le saisir et vous pouvez désactiver la connexion par mot de passe.
Désactiver la connexion par mot de passe SSH
Maintenant que vous pouvez accéder au 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, sinon vous serez verrouillé hors de votre serveur.
Sur le serveur, ouvrez /etc/ssh/sshd_config
dans votre éditeur de texte préféré et recherchez la ligne commençant par:
#PasswordAuthentication
Vous souhaitez supprimer le commentaire (supprimer le hashtag) et remplacer «oui» par «non»:
PasswordAuthentication no
Ensuite, redémarrez sshd
avec:
systemctl restart sshd
Vous devriez être obligé de vous reconnecter, et si votre fichier de clé est incorrect, vous ne serez pas invité à entrer un mot de passe.
Si vous le souhaitez, vous pouvez également forcer l'authentification par clé publique, qui bloquera toutes les autres méthodes d'authentification. Ajoutez les lignes suivantes à /etc/ssh/sshd_config
:
AuthenticationMethods publickey PubkeyAuthentication yes
et redémarrez sshd
.
Lock Out Attackers with denyhosts
denyhosts
est un utilitaire pour empêcher les tentatives de connexion infructueuses répétées sur SSH, similaire à la façon dont votre téléphone vous verrouille après trop d'essais. Il n'est pas installé par défaut, vous devrez donc l'installer à partir du gestionnaire de packages de votre distribution. Pour les systèmes basés sur Debian comme Ubuntu, ce serait:
sudo apt-get install denyhosts -y
Une fois installé, activez-le avec:
sudo systemctl enable denyhosts
denyhosts
devrait s'exécuter automatiquement maintenant, mais vous voudrez mettre votre adresse IP en liste blanche au cas où vous seriez verrouillé. Vous pouvez toujours réessayer à partir d'une autre adresse IP, mais cela vous évitera des tracas.
S'ouvrir /etc/hosts.allow
et en bas du fichier, ajoutez:
sshd: your-ip-address
remplacer your-ip-address
avec votre adresse IP.
Par défaut, denyhosts
se verrouillera 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
.
Si vous vous êtes accidentellement enfermé, vous devrez arrêter denyhosts
et supprimez votre adresse IP de quelques 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émarrer denyhosts
et vous devriez pouvoir vous reconnecter.
Accès SSH à la liste blanche
Bien que forcer les clés SSH avec denyhosts
est probablement assez de sécurité, vous pouvez ajouter à la liste blanche des adresses IP spécifiques. La plupart des fournisseurs de serveurs fourniront des outils pour ce faire à partir d'une interface Web. Si c'est une option, vous voudrez faire une liste blanche à partir de là plutôt que du serveur SSH, car vous pourrez toujours changer l'adresse IP sur liste blanche au cas où vous seriez verrouillé.
Si ce n'est pas une option, vous devrez configurer manuellement /etc/hosts.deny
pour bloquer tout le trafic provenant d'hôtes non autorisés.
Une note importante: Si vous ajoutez votre maison à la liste blanche, votre FAI peut ne pas vous donner d’adresse IP statique et votre adresse IP peut changer à tout moment. Vous devez vous assurer que cela ne se produira pas avant de mettre sur liste noire toutes les autres adresses IP, ou d'ajouter plusieurs adresses en tant que sauvegarde, ou tout simplement ignorer cette étape.
S'ouvrir /etc/hosts.allow
et assurez-vous que votre adresse IP est dans le fichier:
sshd: your-ip-address
Si c'est le cas, vous pouvez continuer et refuser toutes les autres connexions:
echo 'sshd: ALL' >> /etc/hosts.deny
Redémarrer sshd
et vous devriez voir vos changements.
Vous pouvez également configurer un proxy devant votre serveur SSH
Si vous ne souhaitez pas exposer votre serveur SSH à Internet mais devez y accéder à partir de plusieurs adresses IP, vous pouvez configurer un proxy devant pour gérer la connexion. Cela pourrait être un autre serveur cloud ou même une boîte fonctionnant 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 une simple connexion netcat fonctionnera. Gardez à l'esprit que ce serveur proxy sera le seul point d'accès pour votre serveur SSH, donc si le proxy tombe en panne, vous serez verrouillé sauf si vous avez une adresse de sauvegarde.
Ne pas autoriser la connexion root
Au lieu de cela, créez un nouvel utilisateur et accordez à cet utilisateur le privilège sudo. En fait, c'est la même chose, mais il y a une différence majeure: les attaquants potentiels devront connaître le nom de votre compte d'utilisateur pour même commencer à attaquer votre serveur, car ce ne sera pas aussi simple que root@yourserver
.
Hormis la sécurité, c'est généralement une bonne politique Unix de ne pas être connecté en tant que root
tout le temps, car root
ne crée pas de journaux et n’invite pas lors de 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 utiliserez toujours des clés SSH, mais il est obligatoire. Idéalement, différenciez cela de votre mot de passe root.
Ajouter cet utilisateur à /etc/sudoers
pour accorder des autorisations d'administrateur:
echo 'myfancyusername ALL=(ALL) ALL' >> /etc/sudoers
Passez à cet utilisateur avec su myfancyusername
et vérifiez que vous pouvez revenir à l'utilisateur root avec sudo su
(qui ne nécessite pas de mot de passe root). Si vous le pouvez, vous avez accès à sudo.
Vous souhaitez maintenant bloquer la connexion root. Dans /etc/ssh/sshd_config
, vous voudrez changer:
#PermitRootLogin yes
Retirez le hastag et remplacez «oui» par «non»:
PermitRootLogin no
Redémarrer sshd
et votre serveur doit 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 à propos de quelqu'un qui saisit 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 Google Authenticator avec un appareil Android ou iOS, bien que SSH prenne en charge de nombreuses méthodes à deux facteurs. Avec Google Authenticator, vous recevrez un code QR que vous pouvez numériser à partir de l'application mobile Google Authenticator pour lier votre téléphone au serveur, et vous recevrez également quelques codes de sauvegarde à récupérer en cas de perte de votre téléphone . Ne stockez pas ces codes sur votre machine principale, sinon ce ne sont pas vraiment deux facteurs.