← Toutes les règles
SOCLE-CLD-SSH-011// SSHfaibleruntime effectif

Désactiver TCPKeepAlive dans SSH (utiliser ClientAlive à la place)

Désactive le keepalive au niveau TCP (TCPKeepAlive no) afin que la vivacité d'une session ne dépende que des sondes ClientAliveInterval / ClientAliveCountMax. Les keepalives TCP circulent hors du canal chiffré et sont falsifiables : un attaquant sur le chemin peut les forger pour maintenir une session morte ou détournée comme étant vivante.

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.

Un PASS prouve✓ actif maintenant✓ sur disque✓ survit au rebootle verdict qualifié →
Debian 12CIS 1.1.0Debian 13CIS 1.0.0FedoraRHEL 10 / Rocky 10 / AlmaLinux 10RHEL 8 / Rocky 8 / AlmaLinux 8CIS 4.0.0RHEL 9 / Rocky 9 / AlmaLinux 9CIS 2.0.0Ubuntu 24.04CIS 1.0.0Ubuntu 26.04

Ce que vérifie Pavois

Pavois exécute sshd -T et exige la ligne résolue tcpkeepalive no. sshd -T affiche la configuration effective du démon, après toutes les directives Include et tous les drop-ins de /etc/ssh/sshd_config.d/, de sorte qu'un drop-in ultérieur rétablissant la valeur par défaut yes est détecté. Un contrôle basé sur le fichier /etc/ssh/sshd_config le manquerait.

describe command('sshd -T') do
  its('stdout') { should match(/^tcpkeepalive\s+no$/i) }
end

Comment vérifier qu’elle est appliquée

Exécutez sshd -T | grep -iE '^(tcpkeepalive|clientalive)' en root. Sortie attendue, tcpkeepalive désactivé et les sondes chiffrées prenant le relais :

tcpkeepalive no
clientaliveinterval 300
clientalivecountmax 3

Les valeurs clientalive* relèvent de leurs propres règles Pavois ; cette règle n'exige que la première ligne.

Inspecter et investiguer

La directive elle-même ne produit aucune entrée de journal. Ce qui devient visible, c'est la fermeture pilotée par ClientAlive : lorsqu'un client cesse de répondre aux sondes chiffrées, sshd journalise dans /var/log/auth.log (ou journalctl -u ssh) :

sshd[1234]: Timeout, client not responding from user alice 203.0.113.10 port 51234

Avec TCPKeepAlive yes et sans sondes ClientAlive, cette même session morte subsisterait, silencieusement.

Remédiation

Le plan de durcissement Pavois utilise la ressource sshd_setting pour positionner la directive tcpkeepalive à no dans le drop-in Pavois sous /etc/ssh/sshd_config.d/. Le fichier est validé par sshd -t -f <fichier> avant d'être conservé, et tout changement déclenche un reload de ssh.service.

Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :

directivetcpkeepalive
notifyaction: reload, service: ssh.service
resourcesshd_setting
valueno
verifysshd -t -f %{path}
pavois harden plan local

où la cible est local, un alias SSH user@hôte, ou un conteneur , Docs

Impact & précautions

Désactiver les keepalives TCP supprime les paquets qui maintiennent chaudes les entrées de NAT et de pare-feu à états. Si ClientAliveInterval n'est pas défini (ou dépasse le délai d'inactivité du pare-feu), de longues sessions inactives peuvent être coupées silencieusement par un équipement intermédiaire : réglez ClientAliveInterval en dessous de ce délai, ou faites utiliser ServerAliveInterval aux clients. À l'inverse, ne désactivez pas TCPKeepAlive en laissant ClientAlive inactif : le serveur ne détecterait alors jamais un pair mort et accumulerait des sessions orphelines. Le changement est appliqué par un reload : les sessions en cours ne sont pas affectées.

Sources & références