Agence web » Actualités du digital » Comment verrouiller votre serveur SSH

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.

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_rsaet 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.allowet 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 myfancyusernameet 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.

★★★★★