Des articles de blogs comme celui que tu cites, il y en a des dizaines sur le web. Ce n'est pas un argument technique valable.
L’article propose des choix sans jamais les justifier. Et on peut facilement les contester :
- Refuser les login depuis le root.
⇒ cela n’améliore pas la sécurité si un utilisateur pouvant élever ses privilèges avec sudo peut se connecter. Et cela va singulièrement compliquer les tâches de maintenance automatisées à distance, notamment les sauvegardes.
- Refuser l’identification par mot de passe.
⇒ comment mes utilisateurs SFTP vont-il se connecter ? Je vais devoir leur fournir des clés et leur expliquer comment les utiliser avec leurs divers clients FTP…
- N’accepter QUE l’authentification par clé.
⇒ oui mais uniquement pour les utilisateurs autorisés à faire du SSH et qui ne sont pas
chrootés.
- Changer le port par défaut du SSH.
⇒ en écoute sur le port 61022, ce qui diminue donc la sécurité (déjà expliqué).
- On force l’usage du protocole niveau 2.
⇒ oui, bon, c'est la valeur par défaut depuis longtemps…
- On retire le support ECDSA & RSA.
⇒ cela mériterait une longue explication. Effectivement si possible il vaut mieux utiliser ED25519 pour des raisons de sécurité mais surtout de rapidité et de taille de clé. RSA avec une taille de clé suffisante reste jusqu'à présent fiable. ECDSA est écarté pour
des raisons politiques et techniques.
- Déclaration des utilisateurs systèmes pouvant se connecter via AllowUsers.
⇒ et un seul utilisateur déclaré, donc un seul administrateur qui à un accès SSH et pas de SFTP. C'est un cas d'usage extrêmement basique qui ne reflète pas la réalité de serveurs en production.
D'autre part la sécurité ne consiste pas à chercher à obtenir la meilleure note possible sur un service comme
ssh-audit ou
ssllabs. Ces services fournissent des informations intéressantes mais obtenir un A+ ne doit pas être un but en soi. En blindant à ce point la sécurité des échanges chiffrés on va généralement exclure les clients qui utilisent des logiciels un peu anciens et ne prennent donc pas en charge les algorithmes imposés : la sécurité est toujours un compromis.
D'autant que la cryptographie et les algorithmes de chiffrement sont des sujets complexes et mouvants : ce qui est blindé aujourd'hui ne le sera plus demain. De bonnes sources pour le blindage (hardening) des service avec chiffrement sont :
- pour SSH
https://infosec.mozilla.org/guidelines/openssh
- pour d'autres services web, courriel
https://ssl-config.mozilla.org/
- pour le web
https://www.ssllabs.com qui a l'avantage de montrer les clients incompatibles.
Pour résumer sur la sécurisation d'un serveur SSH :
- le changement de port est, AMHA, inutile voire contre-productif en diminuant la sécurité et en compliquant l'administration du serveur ;
- si root est autorisé à se connecter il ne peut le faire qu'avec des clés solides, idéalement ed25519, sinon rsa 4096 bits ;
- si des utilisateurs sont autorisés à se connecter par mot de passe, ceux-ci doivent être extrêmement solides et fail2ban doit être configuré pour bloquer au bout de quelques tentatives ;
- si des utilisateurs ont un accès, celui-ci doit être restreint à l'aide de directives
AlllowUser,
AllowGroup, avec
ChrootDirectory et
ForceCommand (lire le man de sshd_config)
- le blindage des échanges chiffrés ne se fait qu'en dernier recours en tenant compte des capacités des clients, ou autres serveurs, susceptibles de se connecter au serveur.
Un exemple pour illustrer :
Port 22
#AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::
HostKey /etc/ssh/ssh_host_ed25519_key
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication
LoginGraceTime 2m
PermitRootLogin prohibit-password
StrictModes yes
MaxAuthTries 3
MaxSessions 5
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys2
IgnoreRhosts yes
ChallengeResponseAuthentication no
UsePAM yes
AllowAgentForwarding no
#AllowTcpForwarding yes
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
AllowGroups sftpusers root
Match group sftpusers
PasswordAuthentication yes
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
Seul root peut se connecter en SSH et uniquement par clé. Les utilisateurs membres du groupe sftpusers peuvent faire du SFTP en se connectant par mot de passe et sont bloqués (chroot) dans leur dossier personnel.