SSH c’est cool. Le premier S correspond à Secure. Mais certains vous affirmeront que ce n’est pas assez sécurisé et qu’il faut en plus rajouter de la double auth, avec Google Authenticator, Authy, Duo … Pas moi.

Mais pourquoi pas, si tout le monde le fait ?

Le but même de la double auth’, c’est d’avoir Quelque chose que vous connaissez (un indice ? votre mot de passe, la passphrase de votre clé privée…) et Quelque chose que vous possédez (votre empreinte, un téléphone, une boîte mail, une clé de sécurité…).

Et oui, votre clé privée EST une clé de sécurité. C’est quelque chose que vous possédez. Si vous rajoutez de la double authentification avec votre mobile, vous devez en permanence avoir avec vous votre mobile ET votre clé privée. Personnellement, je trouve ça lourd, pour un gain nul (bonne chance pour deviner ma clé privée).

Critiquer c’est bien, mais proposer des alternatives c’est bien++. Vous tenez à votre double authentification, vraiment ? Faites la bien :-) Avec quelque chose que vous connaissez et quelque chose que vous possédez.

La base, c’est de mettre une passphrase sur votre clé privée. Un bon début, surtout si celle-ci est en ed25519 : la sécurité contre le bruteforcing est accrue (The new format uses a bcrypt-based key derivation function, et bcrypt c’est bien.). Mais il n’est pas empêché pour autant : si votre clé est mal protégée et tombe entre de mauvaises mains, le bruteforcing se fera en offline, sans limitation de vitesse. Ce n’est qu’une question de temps avant que la passphrase soit trouvée.

Une autre solution, vraiment hype, est d’utiliser un mot de passe côté SSH en plus de votre certificat. Si si c’est possible, depuis OpenSSH 6.2 (bientôt dans les bacs). L’option en question s’appelle AuthenticationMethods, et elle prend en arguments une ou plusieurs listes de méthodes autorisées parmi celles-ci (liste non exhaustive): publickey, password, hostbased, et keyboard-interactive.

La ligne est à placer n’importe où dans /etc/ssh/sshd_config (au milieu, c’est bien).

Pour autoriser une clé SSH ou un mot de passe, on indique AuthenticationMethods publickey,password.

Pour autoriser l’authentification avec deux clés SSH : AuthenticationMethods publickey publickey (Bien sûr, il faut que les deux clés soient différentes, sinon c’est de la triche).

Pour demander une clé SSH puis un mot de passe, AuthenticationMethods publickey password.

La liste des méthodes autorisées utilise pour séparateur la virgule (ou). Et au sein de chaque liste, les méthodes séparées par une espace précisent les étapes obligatoires (et), à effectuer dans l’ordre indiqué.

Voilà, avec la troisième option vous avez un mot de passe propre à la machine et qui ne peut être bruteforcé en local. En plus, vu que vous imposez la possession d’un certificat, personne ne peut vous bruteforce. Au revoir, fail2ban !