---
title: "SSH : Configuration Sécurisée"
date: 2017-07-27T14:26:58+01:00
description: "Comment configurer SSH pour une utilisation plus sécurisée, et une génération correcte des clés SSH."
draft: false
tags: ['SSH','harden']
---
## Description
Le propos de cet article est d'aider à comprendre ce qu'il faut configurer
pour obtenir une configuration sécurisée de votre client SSH.
Cela nécessite que votre version du client OpenSSH soit supérieure
à la version 6.5 !
## Configuration
Côté client, le plus simple est de modifier votre fichier de
configuration, dans votre home personnel, `~/.ssh/config`…
----
Cet article n'aborde que la partie concernant le client ; pour la partie
serveur, merci de lire mon autre article : {{< inside "sec/ssh/sshd-durci" >}}
### Chiffrements
Les algorithmes de **Chiffrement** à autoriser :
`Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com`
{{< note tip >}}
Néanmoins, sachez que dans certains cas, tels que Filezilla, Putty,
il vous faudra certainement ajouter l'un des trois paramètres suivants :
`aes256-ctr,aes192-ctr,aes128-ctr`
Si le serveur sur lequel vous cherchez à vous connecter est **dropbear**,
il vous sera nécessaire d'ajouter : `aes256-ctr` - *à définir dans une
configuration personnalisée…*
{{}}
À vérifier au cas par cas… regardez donc le log d'authentification
sur votre serveur !
### Échange de clés
Les **algorithmes des clés d'échange** à privilègier sont :
`KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org`
### Algorithmes de la clé d'Hôte
Les recommandations actuelles pour les **algorithmes des clés d'hôte** sont :
`HostKeyAlgorithms ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-512,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512-cert-v01@openssh.com`
Perso, je n'utilise QUE : `HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-ed25519`
{{< note tip >}}
Si le serveur sur lequel vous cherchez à vous connecter est **dropbear**,
il vous sera nécessaire d'ajouter : `ssh-rsa` - *à définir dans une
configuration personnalisée…*
{{}}
### Message Authentication Codes
Les algorithmes des **Code d'Authentification de Messages** à définir sont :
`MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com`
Perso, je n'utilise plus QUE : `MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-512`
{{< note tip >}}
Si le serveur sur lequel vous cherchez à vous connecter est **dropbear**,
il vous sera nécessaire d'ajouter : `hmac-sha2-256` - *à définir dans une
configuration personnalisée…*
{{}}
### TL;DR
Voici un exemple de configuration sécurisée minimal :
{{< file "sec-ssh-harden-minimal" cfg "~/.ssh/config" >}}
Selon le manpage officiel, les configurations personnalisées à certains
hôtes doivent être écrites avant la configuration générale `Host *` !
## Utilisation
{{< note warning >}}
{{< color red >}}ne pas utiliser les protocoles de chiffrement DSA, ECDSA{{}},
mais **utilisez {{< anchor RSA "Nouvelle clé RSA + PKBDF" >}} en forçant le nombre de bits** -
*de 4096 à 16384 -*, **ET en utilisant PKBDF**, ou mieux
**utilisez directement {{< anchor ED25519 "nouvelle-clé-ed25519" >}}, ayant déjà PKBDF**.
{{< /note >}}
Les créations suivantes sont à faire côté client, bien sûr !
### Mettre-à-jour vos clés RSA
`ssh-keygen -o -p -f id_rsa -a 64`
* L'option `-f` spécifie le fichier de clé privée à utiliser.
* L'option `-o` est celle qui utilise le durcissement PKBDF.
* et pour finir, l'option `-a` définit le nombre de tours "de moulinettes" que va effectuer la génération.
{{< note info >}}
Si cette option n'est pas spécifiée, la valeur par défaut est `16`.
Vous pouvez lui demander `1000` tours, néanmoins pour les paranoïaques
la valeur de `64` semble préférable ET suffisante.
{{< /note >}}
### Nouvelles clés
#### Nouvelle clé ED25519
{{< note info >}}
Il n'est pas nécessaire de spécifier l'usage de l'option `-o` ; en effet,
la génération des clés Ed25519 utilise toujours ce format par défaut !
{{< /note >}}
`ssh-keygen -t ed25519 -f fichier_id -a nb_tours`
Tel que, par exemple :
`ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -a 64`
#### Nouvelle clé RSA + PKBDF
`ssh-keygen -t rsa -b nb_bits -f fichier_id -o -a nb_tours`
Tel que, pour l'exemple :
`ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -o -a 64`
## Astuces
Si vous avez paramétré l'option `LoginGraceTime` sur le serveur, pensez à
**augmenter sa valeur, sinon** vous aurez **le droit à ne pas
pouvoir vous connecter, sans aucun message d'erreur** dans le log
d'authentification.
En effet, selon le nombre de tours que vous avez paramétrés pour la
génération de votre clé, ou sa mise-à-jour, le déchiffrement et la
réponse du serveur prendra plus de temps, peut-être plus que le temps
d'ouverture, de la fenêtre de connexion, autorisé.
Je mets à disposition mon [script shell de génération de
clés](https://git.framasoft.org/hucste/tools/blob/master/mng_key_ssh),
basé sur lesdites informations…
## Documentations
### Manpages
* {{< man ssh >}}, {{< man ssh_config 5 >}}
* {{< man ssh-keygen >}}
### Autres
* Quand [Martin Kleppman a écrit](https://martin.kleppmann.com/2013/05/24/improving-security-of-ssh-private-keys.html) sur le propos d'améliorer la sécurité de ses clés privées SSH…
* [Pat Regan](http://blog.patshead.com/2013/09/generating-new-more-secure-ssh-keys.html) nous fait un petit rappel historique de comment utiliser PKCS#8 pour en aboutir à la conclusion d'utiliser PKBDF…
* ou comment [Ted Unangst](http://www.tedunangst.com/flak/post/new-openssh-key-format-and-bcrypt-pbkdf) nous explique comment monter à niveau ses vieilles clés en utilisant PKBDF…
* Voici une très bonne lecture, sur le propos de [sécuriser son serveur SSH](https://stribika.github.io/2015/01/04/secure-secure-shell.html), en utilisant les bons algorithmes, et autres méthodes d'authentification… *(osbolète)*
* Voire le [référentiel de sécurité](https://www.ssi.gouv.fr/uploads/2014/01/NT_OpenSSH.pdf) de l'ANSSI à-propos des recommandations de sécurité autour de SSH. *(cf : https://www.ssi.gouv.fr/administration/guide/recommandations-pour-un-usage-securise-dopenssh/ )*
----