====== SSH ======
{{indexmenu>:start:securite:SSH#5}}
Voici les paramètres les plus sécurisés pour un serveur SSH adaptable à tous les systèmes *NIX. Pour les explications voir les sources:
* [[http://blog.adminrezo.fr/2016/01/comment-choisir-sa-cle-ssh-rsa-dsa-ecdsa-ed25519/|http://blog.adminrezo.fr/2016/01/comment-choisir-sa-cle-ssh-rsa-dsa-ecdsa-ed25519/]]
* [[https://www.guillaume-leduc.fr/securiser-secure-shell-ssh.html|https://www.guillaume-leduc.fr/securiser-secure-shell-ssh.html]]
* [[https://github.com/e2ma3n/sshc|https://github.com/e2ma3n/sshc]]
* [[https://www.noobunbox.net/serveur/securite/securiser-ssh-avec-sshfp|https://www.noobunbox.net/serveur/securite/securiser-ssh-avec-sshfp]]
* [[http://damiengustave.fr/ssh-blamer/|http://damiengustave.fr/ssh-blamer/]]
* [[https://medium.com/swlh/ssh-how-does-it-even-9e43586e4ffc#.gdmpwzlyl|https://medium.com/swlh/ssh-how-does-it-even-9e43586e4ffc#.gdmpwzlyl]]
* [[https://blog.nathanaelcherrier.com/2016/08/10/fabriquer-sa-cle-usb-rsa/|https://blog.nathanaelcherrier.com/2016/08/10/fabriquer-sa-cle-usb-rsa/]]
* [[https://github.com/mcginty/shoop|https://github.com/mcginty/shoop]]
* [[https://www.abyssproject.net/2016/08/regler-problemes-de-connexion-longues-ssh-debian-rhel/|https://www.abyssproject.net/2016/08/regler-problemes-de-connexion-longues-ssh-debian-rhel/]]
* [[https://www.abyssproject.net/2016/08/securiser-son-serveur-et-son-client-openssh/|https://www.abyssproject.net/2016/08/securiser-son-serveur-et-son-client-openssh/]]
* [[https://upandclear.org/2016/09/01/pac-manager-gestionnaire-ssh-ftp-telnet-etc/|https://upandclear.org/2016/09/01/pac-manager-gestionnaire-ssh-ftp-telnet-etc/]]
* [[https://code.facebook.com/posts/365787980419535/scalable-and-secure-access-with-ssh/?_fb_noscript=1|https://code.facebook.com/posts/365787980419535/scalable-and-secure-access-with-ssh/?_fb_noscript=1]]
* [[https://www.debian-fr.org/t/clipboard-configuration-ssh-securisee-key/69006|https://www.debian-fr.org/t/clipboard-configuration-ssh-securisee-key/69006]]
* [[https://wiki.openwrt.org/doc/uci/dropbear|https://wiki.openwrt.org/doc/uci/dropbear]]
* [[https://wiki.openwrt.org/oldwiki/dropbearpublickeyauthenticationhowto|https://wiki.openwrt.org/oldwiki/dropbearpublickeyauthenticationhowto]]
* [[https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/ssh-agent|https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/ssh-agent]]
* [[https://wiki.mozilla.org/Security/Guidelines/OpenSSH|https://wiki.mozilla.org/Security/Guidelines/OpenSSH]]
* [[https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/ssh-agent|https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/ssh-agent]]
* SFTP [[http://linuxfr.org/users/eaufroide/journaux/tuto-howto-sshfs-mises-en-place-et-montage|http://linuxfr.org/users/eaufroide/journaux/tuto-howto-sshfs-mises-en-place-et-montage]]
* honeypot - [[https://github.com/jaksi/sshesame|https://github.com/jaksi/sshesame]]
* change comment ending key [[http://serverfault.com/questions/309171/possible-to-change-email-address-in-keypair|http://serverfault.com/questions/309171/possible-to-change-email-address-in-keypair]]
* Controler des tunnels SSH en arrière-plan - http://damiengustave.fr/controler-des-tunnels-ssh-en-arriere-plan/
* Notification Mobile pour SSH - https://blog.genma.fr/?SSH-Notification-par-SMS-Freemobile-a-la-connexion
* MySecureShell - SFTP Better - https://ancel1.fr/2017/01/29/a-la-decouverte-de-mysecureshell/
* Connexion qui se bloque - https://wiki.debian.org/fr/SSH#SSH_se_bloque
* TCP-Wrapper pour augmenter la sécurité - http://www.dsfc.net/infrastructure/securite/renforcer-la-securite-de-vos-serveurs-ssh-avec-tcp-wrapper/
* SSH vers IPv6 - https://techoverflow.net/2018/06/09/how-to-ssh-to-an-ipv6-address/
* Rebond - https://blog.seboss666.info/2017/04/monter-un-rebond-ssh/
* Mozilla secure guide https://blog.adminrezo.fr/2017/04/serveur-openssh-bien-configure-securise/
* SFTP chroot https://memo-linux.com/sftp-ajouter-un-acces-vers-un-repertoire-en-dehors-du-chroot-de-lutilisateur/
* Fail2ban https://blog.garamotte.net/posts/2018/01/07/fr-limit-brute-force-attacks-on-the-ssh-service.html
* Paramiko http://www.paramiko.org/installing.html
* ControlMaster - https://www.blog-libre.org/2019/05/11/loption-controlmaster-de-ssh_config/
* Option Match - https://www.blog-libre.org/2015/11/21/loption-match-de-sshd_config/
* https://unix.stackexchange.com/questions/454728/can-an-ssh-config-host-have-multiple-hostname-entries
* AutoSSH & Reverse SSH:
* https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/
* https://raymii.org/s/tutorials/Autossh_persistent_tunnels.html
* https://b5.pm/fr/post/auto_reverse_ssh/
* https://gist.github.com/thomasfr/9707568
* Cyber Plumber - https://github.com/opsdisk/the_cyber_plumbers_handbook
===== Version rapide (sans configuration - OneKillerLine) =====
Aujourd’hui la clé RSA 4096 est le meilleur rapport qualité/compatibilité mais vous pouvez déjà commencer à utiliser ED25519 pour les OS récents.
__Régénération du moduli__ \\
''awk '$5> 2000' /etc/ssh/moduli> “${HOME}/moduli”; wc -l “${HOME}/moduli”; sudo mv “${HOME}/moduli” /etc/ssh/moduli'' \\
\\
__Création du moduli__ \\
''sudo ssh-keygen -G /etc/ssh/moduli.all -b 4096; sudo ssh-keygen -T /etc/ssh/moduli.safe -f /etc/ssh/moduli.all; sudo mv /etc/ssh/moduli.safe /etc/ssh/moduli; sudo rm /etc/ssh/moduli.all'' \\
\\
__Régénération des clés serveur__ \\
''cd /etc/ssh; sudo rm ssh_host_*key*; sudo ssh-keygen -t ed25519 -f ssh_host_ed25519_key
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
Et dans /etc/ssh/ssh_config :
# Github a parfois besoin de diffie-hellman-group-exchange-sha1, mais pas toujours
#Host github.com
# KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
Host *
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
Si vous choisissez d’activer le 5, ouvrez /etc/ssh/moduli s’il existe et supprimez les lignes où la cinquième colonne est inférieure à 2000 :
awk '$5> 2000' /etc/ssh/moduli> "${HOME}/moduli"
wc -l "${HOME}/moduli" # Assure-vous que le fichier généré ne soit pas vide
sudo mv "${HOME}/moduli" /etc/ssh/moduli
//**OKL:**// ''awk '$5> 2000' /etc/ssh/moduli> "${HOME}/moduli"; wc -l "${HOME}/moduli"; sudo mv "${HOME}/moduli" /etc/ssh/moduli''
Ou s’il n’existe pas, créez-le :
sudo ssh-keygen -G /etc/ssh/moduli.all -b 4096
sudo ssh-keygen -T /etc/ssh/moduli.safe -f /etc/ssh/moduli.all
sudo mv /etc/ssh/moduli.safe /etc/ssh/moduli
sudo rm /etc/ssh/moduli.all
//**OKL:**// ''sudo ssh-keygen -G /etc/ssh/moduli.all -b 4096; sudo ssh-keygen -T /etc/ssh/moduli.safe -f /etc/ssh/moduli.all; sudo mv /etc/ssh/moduli.safe /etc/ssh/moduli; sudo rm /etc/ssh/moduli.all''
Cette étape risque de prendre un peu de temps… Environ 4h sur mun petit Intel Core i3-4010U CPU @ 1.7GHz.
===== L’authentification =====
==== Authentification du serveur ====
La ligne à mettre dans /etc/ssh/sshd_config
Protocol 2
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
La configuration ci-dessus désactive aussi la v1 du protocole SSH, troué de partout et qui de toute manière ne devrait JAMAIS être activée. Nous pouvons aussi supprimer les clés inutilisées et générées par OpenSSH lors de son installation afin de regénérer des clés RSA et Ed25519 plus longues et plus robustes.
cd /etc/ssh
sudo rm ssh_host_*key*
sudo ssh-keygen -t ed25519 -f ssh_host_ed25519_key
//**OKL:**// ''cd /etc/ssh; sudo rm ssh_host_*key*; sudo ssh-keygen -t ed25519 -f ssh_host_ed25519_key
PasswordAuthentication no
ChallengeResponseAuthentication no
La configuration recommandée pour /etc/ssh/ssh_config :
Host *
PasswordAuthentication no
ChallengeResponseAuthentication no
La méthode la plus sûre et la plus répandue passe par l’utilisation d’une clé publique, tout comme l’authentification du serveur évoquée précédemment.
Côté serveur (/etc/ssh/sshd_config) cela donne :
PubkeyAuthentication yes
Et côté client (/etc/ssh/ssh_config) :
Host *
PubkeyAuthentication yes
HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
Les clés SSH peuvent être générées avec les commandes suivantes :
ssh-keygen -t ed25519 -o -a 100
ssh-keygen -t rsa -b 4096 -o -a 100
//**OLK:**// ''ssh-keygen -t ed25519 -o -a 100; ssh-keygen -t rsa -b 4096 -o -a 100''
Et le déploiement de vos nouvelles clés publique via ssh-copy-id.
ssh-copy-id -i .ssh/id_ed25519.pub utilisateur@serveur
==== Authentification de l’utilisateur ====
La directive AllowUsers dans /etc/ssh/sshd_config vous permet de spécifier quels sont les utilisateurs autorisés à se connecter via SSH. Mais cela peut s’avérer compliqué si vous avez à gérer un nombre important d’utilisateurs. D’autant plus que si vous supprimez l’un d’entre eux, celui-ci ne sera pas retiré de /etc/ssh/sshd_config, ce qui alourdit encore plus la maintenance. Une solution possible est de se tourner vers AllowGroups à la place, et d’ajouter un groupe ssh-users sur votre machine par exemple.
Ce qui donnerait dans /etc/ssh/sshd_config: '' ''
AllowGroups ssh-users
Rappels pour créer le groupe et ajouter un utilisateur dedans : '' ''
sudo groupadd ssh-users
sudo usermod -a -G ssh-users utilisateur
===== Chiffrement symétrique =====
On a donc pour /etc/ssh/sshd_config :
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
Et pour /etc/ssh/ssh_config
Host *
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
===== Codes d’authentification de message =====
L’extrait pour /etc/ssh/sshd_config :
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
Et pour /etc/ssh/ssh_config :
Host *
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com
===== Prévenir le vol de clé =====
==== Durcir son système ====
/etc/ssh/ssh_config :
Host *
UseRoaming no
==== Stockage de votre clé ====
Vous devriez utiliser un mot de passe fort pour la clé privée de votre client. Vous pouvez en plus utiliser ''ssh-keygen -o -a'' pour ralentir les tentatives de cassage en itérant la fonction de hash plusieurs fois.