Booster son SSH

Les connexion vers vos serveurs SSH prennent du temps ? Voici quelques petites infos qui , peut être, accéléra tout cela :)

1 – Du coté du client

a – Désactivation de CheckHostIP

Lors d’une connexion SSH, le serveur essaye de faire une résolution inverse sur l’IP de l’hôte afin de détecter le DNS Spoofing. Coté sécurité c’est un +, néanmoins cette résolution peut prendre un « certain temps » et pénaliser la réactivité de la connexion SSH Pour le désactiver, éditez le fichier /etc/ssh/ssh_config et positionnez la valeur à no :

CheckHostIP no
b – Maintenir la connection active

Afin d’éviter les « Session Time Out » qui peuvent arriver soit parce que votre connexion à couper, soit parce que votre routeur est pourri, soit pour tout autre raison engendrant cet effet de bord, il existe une petite directive s’appelant  : ServerAliveInterval Pour ce faire, éditez le fichier /etc/ssh/ssh_config et positionnez la valeur à 60 seconde par exemple :

ServerAliveInterval 60
c – Activer la compression

SSH permet de compresser le flux de donnée. Cela fait un gain de bande passante, par conter, ça demande plus de ressource machine. Normal, il faut compresser à la volée puis décompresser. Pour activer cette fonction, 2 variables sont à connaitre :

  • Compression : active la fonctionnalité (yes or no).
  • CompressionLevel : Le niveau de compression pouvant aller de 1 à 9. Par defaut, le niveau de compression est à 6.

Donc éditez le fichier /etc/ssh/ssh_config et dedans, mettez-y :

Compression yes
CompressionLevel 9

(9 , oui oui j’ai un processeur puissant :p)

d – Réutiliser une connexion SSH

Lorsque qu’une session SSH est déjà établie, il est possible de réutiliser cette connexion pour ouvrir une seconde session. Cela à l’avantage d’être quasi-instantané. Par contre, si la 1ère connexion se coupe, la seconde est également coupé (normal, elles sont partagées) Pour activer cette fonction, éditez le fichier /etc/ssh/ssh_config (ou dans le fichier ~/.ssh/config) et ajoutez dedans :

    
ControlMaster auto
ControlPath /tmp/%r@%h:%p

Ensuite, lancez une première connexion, qui dure un certain temps, puis lancez une 2ème… Voyez comme elle est rapide !! :)

e – Définir des alias, ou des confs spécifiques pour un hôte

Pour définir des paramètres spécifiques pour un hôte, ou bien la compression pour toutes les connexions et surtout si vous n’avez pas la main sur le fichier /etc/ssh/ssh_config, il existe un fichier de config dans le répertoire home qui peut être utilisé. Il se trouve ici :

~/.ssh/config

Prenons un exemple : Je souhaite créer un alias pour se connecter sur mon serveur toto.tata.com avec l’utilisateur titi. En temps normal, je ferais :

ssh titi@toto.tata.com

ou bien encore :

ssh toto.tata.com -l titi

Pour créer un alias, j’édite mon fichier de config de ssh (~/.ssh/config) et dedans je mets :

Host toto
User titi
HostName toto.tata.com

Puis pour me connecter, très simple :

ssh toto

Et voilou !

2 – Du coté du serveur

a – Désactivation de la résolution DNS inverse du client

Lors d’une connexion à un serveur SSH, celui-ci essaye de faire la résolution DNS inverse de l’IP du client. Cette vérification est très longue en général. Pour désactiver cette vérification, il suffit de mettre à no le paramètre UseDNS dans le fichier /etc/ssh/sshd_config :

UseDNS no

Puis rechargez la configuration du service SSH :

/etc/init.d/sshd reload

 

b – Utilisation de cipher plus « performant »

Bon alors la il faut faire un compromis.

  • soit on utilise un algo de chiffrement moins fort et donc en général plus perfomant
  • soit on utilise un algo de chiffrement fort et les perfs se dégradent.

Les ciphers supportés par SSH sont les suivants :

  • 3DES, un algo de chiffrement fort et éprouvé.
  • Blowfish, un algorithme de chiffrement par bloc rapide inventé par Bruce Schneier qui peut être utilisé pour des connexions nécessitant un chiffrement rapide.
  • AES, un algo de chiffrement standard développé pour remplacer DES. Il s’agit d’un algorithme de chiffrement par bloc rapide.

  • Arcfour , un algo de chiffrement de flux rapide. Il est censé être compatible avec RC4 [TM], un algorithme de chiffrement propriétaire de RSA Security Inc.

Par defaut, OpenSSH utilise aes128-ctr.

Voici pour info un résutat de bench trouvé au détour du web.

Contexte : Un fichier de 440 MB est copié entre un serveur Xeon et un serveur NAS basé sur un Atom. Ce bench montre que la famille de cipher arcfour est clairement plus rapide dans cette configuration :

cipher real time user time bandwidth
cleartext 0m4.135s 0m0.311s 106.5 MB/s
arcfour 0m9.639s 0m7.423s 45.7 MB/s
arcfour128 0m9.751s 0m7.483s 45.1 MB/s
arcfour256 0m9.856s 0m7.764s 44.7 MB/s
blowfish-cbc 0m13.093s 0m10.909s 33.6 MB/s
aes128-cbc 0m22.565s 0m20.129s 19.5 MB/s
aes128-ctr 0m25.400s 0m22.951s 17.3 MB/s
aes192-ctr 0m28.047s 0m25.771s 15.7 MB/s
3des-cbc 0m51.067s 0m48.018s 8.6 MB/s

Pour changer le cipher, 2 solutions :

  • soit modifier le cipher par defaut du serveur SSH
  • soit le spécifier avec le client grâce à l’option -c ou dans le fichier de config du client : Cipher blowfish

3 – Variable de configuration du serveur SSH

Voici un petit tableau issu du manpage en français :

Paramètres Description
Port Désigne le port qu’écoute le serveur. Par défaut, c’est le port 22.
Protocol Désigne la version du protocole ssh utilisé par le serveur. Par défaut, c’est la version 2.
ListenAddress 0.0.0.0 Correspond à l’adresse locale d’écoute su serveur sshd en ipv4.
ListenAddress :: Correspond à l’adresse locale d’écoute su serveur sshd en ipv6.
AllowUsers Ce mot-clef peut être suivi d’une liste de motifs de noms d’utilisateurs, séparés par des espaces. S’il est spécifié, seuls les noms d’utilisateurs correspondant à un des motifs sont autorisés à se connecter. On peut utiliser les caractères « * » ou « ? » comme des jokers. Seuls les noms d’utilisateurs sont valides ; les identifiants d’utilisateurs (UID) ne sont pas reconnus. Par défaut, la connexion est autorisée pour tous les utilisateurs. Si le motif est de la forme UTILISATEUR@MACHINE, alors UTILISATEUR et MACHINE sont vérifiés séparément, en restreignant les connexions à des utilisateurs en particulier provenant de machines en particulier.
AllowGroups Ce mot-clef peut être suivi d’une liste de motifs de noms de groupes, séparés par des espaces. S’il est spécifié, seuls les utilisateurs dont le groupe principal ou les groupes supplémentaires correspondent à un des motifs sont autorisés à se connecter. On peut utiliser les caractères « * » ou « ? » comme jokers. Seuls les noms de groupes sont valides ; les identifiants de groupes (GID) numériques ne sont pas reconnus. Par défaut, la connexion est autorisée pour tous les groupes.
DenyUsers Ce mot-clef est suivi d’une liste de motifs de noms d’utilisateurs, séparés par des espaces. Les utilisateurs dont le nom correspond à un des motifs ne sont pas autorisés à se connecter. Dans les motifs, on peut utiliser les caractères « * » et « ? » comme des jokers. On ne spécifie que des noms d’utilisateurs ; les identifiants numériques d’utilisateurs ne sont pas autorisés. Par défaut, tous les utilisateurs sont autorisés à se connecter. Si le motif est de la forme UTILISATEUR@MACHINE, UTILISATEUR et MACHINE sont vérifiés séparément, et la connexion est restreinte à certains utilisateurs se connectant de certaines machines.
DenyGroups Ce mot-clef est suivi d’une liste de motifs de noms de groupes, séparés par des espaces. Les utilisateurs dont le groupe principal ou les groupes secondaires correspondent à un des motifs ne sont pas autorisés à se connecter. Dans les motifs, on peut utiliser les caractères « * » et « ? » comme des jokers. On ne spécifie que des noms de groupes ; les identifiants numériques de groupes ne sont pas autorisés. Par défaut, tous les groupes sont autorisés à se connecter.
HostKey Définit le chemin de la clé privée du serveur. Par défaut, /etc/ssh/ssh_host_rsa_key.
UsePrivilegeSeparation Spécifie si sshd sépare les privilèges en créant un processus fils non privilégié pour prendre en charge le trafic réseau entrant. Après une authentification réussie, un autre processus est créé avec les privilèges de l’utilisateur authentifié. Le but de la séparation de privilèges est d’éviter l’escalade de privilèges si le processus non privilégié est corrompu. Par défaut, yes.
KeyRegenerationInterval Dans la version 1 du protocole, la clef éphémère du serveur est regénérée automatiquement après ce nombre de secondes (si elle a été utilisée). Le but de la regénération est d’éviter le décryptage de sessions capturées en s’introduisant plus tard sur la machine et en volant la clef. La clef n’est jamais stockée nulle part. Si la valeur est 0, la clef n’est jamais regénérée. Par défaut 3600, (secondes).
ServerKeyBits Définit le nombre de bits de la clef éphémère pour la version 1 du protocole. La valeur minimale est 512 et la valeur par défaut est 768.
SyslogFacility Donne le code de facilité utilisé lors de l’enregistrement des messages du démon sshd Les valeurs possibles sont : DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. Par défaut, AUTH.
LogLevel Donne le niveau de verbosité utilisé lors de l’enregistrement des messages du démon sshd Les valeurs possibles sont : QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2 and DEBUG3. Par défaut INFO. DEBUG et DEBUG1 sont équivalents. DEBUG2 et DEBUG3 spécifient des niveaux plus élevés de sortie de débogage. L’enregistrement à l’aide d’un niveau DEBUG a tendance à empiéter sur la vie privée des utilisateurs et n’est pas recommandé.
LoginGraceTime Désigne la durée d’inactivité (en minutes) au bout de laquelle le serveur se déconnecte automatiquement. Si la valeur est 0 (zéro), le serveur ne se déconnecte jamais. Par défaut, 120.
PermitRootLogin Définit si oui ou non le super-utilisateur Root a l’autorisation de se connecter par ssh. L’argument est « yes », « without-password », « forced-commands-only » ou « no ». Par défaut, yes. Si cette option est réglée à « without-password », l’authentification par mot de passe est désactivée pour root. Si cette option est réglée à « forced-commands-only », les connexions de root sont autorisées avec une authentification par clef publique, mais seulement si l’option command est spécifiée (ce qui peut être utile pour effectuer des sauvegardes à distance même si les connexions de root sont normalement interdites). Toutes les autres méthodes d’authentification sont désactivées pour root. Si cette option est réglée à « no », root n’est pas autorisé à se connecter.
StrictModes Spécifie si sshd doit vérifier les modes et le propriétaire des fichiers de l’utilisateur et du répertoire de base (home directory) de l’utilisateur avant d’accepter une connexion. C’est normalement souhaitable, parce que quelquefois, les novices laissent accidentellement leur répertoire ou leurs fichiers en accès complet à tout les monde. Par défaut, yes.
RSAAuthentication Spécifie si on autorise la pure authentification RSA. Par défaut « yes ». Cette option ne s’applique qu’à la version 1 du protocole.
PubkeyAuthentication> Spécifie si on autorise l’authentification par clef publique, par opposition à l’authentification par mot de passe. Par défaut, yes. Note : Cette option ne s’applique qu’à la version 2 du protocole.
AuthorizedKeysFile Indique le chemin du fichier contenant les clés publiques des utilisateurs distants.
IgnoreRhosts RhostsRSAAuthentication Spécifie que l’on n’utilise pas les fichiers .rhosts et .shosts pour les authentification activées par les options RhostsAuthentication et RhostsRSAAuthentication ou HostbasedAuthentication. Les fichiers /etc/hosts.equiv et /etc/ssh/shosts.equiv sont néanmoins utilisés. Par défaut, yes.
HostbasedAuthentication Spécifie si on autorise une authentification par rhosts ou /etc/hosts.equiv conjointement avec une authentification de machine cliente réussie par clef publique (authentification par machines). Cette option est similaire à l’option RhostsRSAAuthentication et ne s’applique qu’à la version 2 du protocole. Par défaut, no.
IgnoreUserKnownHosts Spécifie si sshd doit ignorer le fichier $HOME/.ssh/known_hosts de l’utilisateur lors des authentifications des options RhostsRSAAuthentication ou HostbasedAuthentication. Par défaut, no.
PermitEmptyPasswords Définit si le serveur accepte la connexion à un compte utilisateur ne possédant pas de mot de passe. Par défaut, no.
ChallengeResponseAuthentication Spécifie si on autorise l’authentification par stimulation-réponse (challenge response). Toutes les formes d’authentification de login.conf5 sont gérées. Par défaut, yes.
PasswordAuthentication Permet d’autoriser l’authentification par mot de passe. Par défaut, yes.
X11Forwarding Permet de rediriger les sorties X11. Cela permet donc d’ouvrir des applications graphiques à distance par exemple. La redirection X11 est automatiquement désactivée si l’option UseLogin est activée. Par défaut, no.
X11DisplayOffset Spécifie le premier numéro d’affichage disponible pour les redirections X11 de sshd. Ceci évite à sshd d’interférer avec les vrais serveurs X11. Par défaut, 10.
PrintMotd Permet d’afficher le contenu du fichier /etc/motd (message du jour) à la connexion. Par défaut, yes
PrintLastLog Permet d’afficher la date et l’heure de la dernière connexion. Par défaut, yes.
TCPKeepAlive Permet de garder ouverte une connexion ssh existante grâce à l’envoi d’un paquet chiffré par ssh. Par défaut, yes.
UseLogin Spécifie si on utilise login pour les connexions à des sessions interactives. Par défaut, no. Note 1 : On n’utilise jamais login pour l’exécution de commandes à distance. Note 2 : Si cette option est activée, on désactive X11Forwarding parce que login ne sait pas traiter les cookies xauth. Si on spécifie l’option UsePrivilegeSeparation, elle sera désactivée après l’authentification.
MaxStartups Spécifie un nombre maximal de connexions concurrentes au démon sshd non authentifiées. Les connexions supplémentaires sont purgées si elles ne peuvent pas s’authentifier ou si le délai de grâce défini à l’aide de l’option LoginGraceTime expire pour une connexion. Par défaut 10. Par ailleurs, on peut activer une purge hâtive aléatoire en spécifiant un triplet « début:taux:total » (par exemple, « 10:30:60 »). sshd refuse les tentatives de connexion avec une probabilité de « taux/100 » (30 %) s’il y a « début » (10) connexions non authentifiées en cours. La probabilité augmente linéairement et toutes les tentatives de connexion sont refusées si le nombre de connexions non authentifiées atteint « total » (60).
Banner Pour certaines juridictions, l’envoi d’un message avant l’authentification est nécessaire pour disposer d’une protection légale. Le contenu du fichier spécifié est envoyé à l’utilisateur distant avant d’autoriser la connexion. Cette option n’est disponible qu’avec la version 2 du protocole. Par défaut, on n’affiche pas de message.
AcceptEnv Spécifie quelles variables d’environnement envoyées par le client seront copiées dans l’environnement de la session. Cette option n’est supportée que par la version 2.
Subsystem sftp Configure un sous-système externe (par exemple un démon de transfert de fichiers). Les arguments doivent être un nom de sous-système et une commande à exécuter lors d’une requête à ce sous-système. La commande sftp-server8 implémente le sous-système de transfert de fichiers « sftp ». Par défaut, aucun sous-système n’est défini. Note : Cette option ne s’applique qu’à la version 2 du protocole.

Article lu 1676 fois

Laisser un commentaire