Configurer le MaxStartups de SSH
Limiter le débit des connexions SSH simultanées non authentifiées avec MaxStartups réglé sur 10:30:60.
Vérifié sur l’état résolu en cours d’exécution (ex. sshd -T, sysctl, systemctl show), attrape les drop-ins et Include qu’une lecture de fichier raterait. Réserve : runtime ≠ persistance ; une valeur correcte maintenant peut ne pas survivre à un redémarrage.
Pavois vérifie la configuration effective, l’état résolu et réellement appliqué, pas un fichier. Les scanners basés fichier (OVAL/SCAP, Lynis) ratent les Include, drop-ins et défauts runtime ; ce check voit ce qui est réellement en vigueur.
Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.
Pourquoi cette règle
MaxStartups limite le débit des connexions simultanées non authentifiées à sshd, c'est-à-dire les sockets semi-ouverts entre la connexion TCP et l'authentification réussie. La forme 10:30:60 signifie : accepter jusqu'à 10 connexions en attente, puis rejeter aléatoirement les nouvelles avec une probabilité de 30 %, et toutes les refuser une fois 60 en attente. Cela atténue le déni de service par inondation de connexions au stade de la connexion et limite le nombre de créneaux de force brute qu'un attaquant peut mobiliser, préservant la disponibilité des connexions légitimes.
Ce que vérifie Pavois
Pavois vérifie que la sortie effective de sshd -T rapporte maxstartups 10:30:60. Lire le démon en cours d'exécution reflète la valeur après fusion de tous les Include et des drop-ins de /etc/ssh/sshd_config.d/, un scan de fichiers peut manquer une surcharge et signaler un faux résultat.
describe command('sshd -T') do
its('stdout') { should match(/^maxstartups\s+10:30:60$/i) }
endComment vérifier qu’elle est appliquée
Exécuter sshd -T | grep -i maxstartups. Sortie attendue :
maxstartups 10:30:60
Inspecter et investiguer
Les connexions en attente rejetées sont journalisées dans /var/log/auth.log (Debian/Ubuntu) ou via journalctl -u ssh / journalctl -u sshd (famille RHEL) sous la forme drop connection #N from ... une fois le seuil atteint.
Remédiation
Le plan de durcissement de Pavois règle la ressource sshd_setting pour la directive maxstartups sur 10:30:60, valide la configuration candidate avec sshd -t, puis déclenche un reload du service ssh. À appliquer avec pavois harden apply.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| directive | maxstartups |
|---|---|
| notify | action: reload, service: ssh.service |
| resource | sshd_setting |
| value | 10:30:60 |
| verify | sshd -t -f %{path} |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Sur des bastions ou hôtes de CI très sollicités qui ouvrent légitimement de nombreuses connexions SSH simultanées, un seuil trop strict peut provoquer des erreurs sporadiques Connection refused/drop connection lors des pics. Dimensionnez les valeurs selon votre pic de concurrence réel (augmentez les seuils de début/plein si nécessaire), échelonnez les tâches automatisées, gardez une seconde session ouverte, et appuyez-vous sur la validation intégrée sshd -t pour qu'une coquille ne casse jamais le service en écoute.
Mapping des normes
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| CIS | 2.2.6, 5.1.18, 5.1.17, 5.1.20 | direct | per OS, see the benchmark table | haute |
| PCI DSS | 2.2.6 | support | 4.0.1 | moyenne |
Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.