--- categories: ['OpenWRT','Système'] date: 2020-09-20T12:02:05+02:00 description: "Installer OpenSSH dans OpenWRT pour remplacer Dropbear." draft: false tags: ['OpenWRT','OpenSSH','SSH'] title: "OpenWRT : OpenSSH pour remplacer Dropbear" translationKey: "openwrt-openssh" --- ## Description Par défaut, OpenWRT est livré avec Dropbear. Bien que ce serveur SSH utilise seulement la version 2 du protocole SSH, et soit léger, il comporte quelques lacunes : * Il a un support partial du protocole SFTP ; il faut lui adjoindre le paquet **openssh-sftp-server** pour que ce soit fonctionnel. * Il n'a aucune séparation de privilège utilisateur. * Il n'a pas officiellement de support des modules cryptographiques, approuvés par la **FIPS 140-2**. *(bien que dans notre contexte particulier, ce ne soit pas une nécessité)* * Depuis, la version **2020.79**, Dropbear semble gérer l'utilisation des algorythmes à courbes Elliptiques - *ce qui n'est pas le cas des versions précédentes, incluses avant 19.07.4* - tel que : * hostkey **ed25519** * le chiffrement **chacha20-poly1305** * voire les signatures de clés au format **rsa-sha2** ## Installation ```ash # opkg update # opkg install openssh-server openssh-moduli ``` {{< note info >}} Le paquet **openssh-moduli** n'est pas strictement nécessaire. Pour rappel, le fichier `/etc/ssh/moduli` est un fichier contenant les nombres premiers et les générateurs à utiliser par le serveur SSH dans la méthode d'échange des clés de groupe {{< abbr DH "Diffie-Hellman" >}}. Préférez l'installer… {{}} ## Configuration ### Dropbear Mieux vaut laisser Dropbear sur le port par défaut. Néanmoins, vous pouvez le reconfigurer soit par l'interface LuCI, soit en mode console - *ce qui peut se faire ainsi* : ```ash # uci set dropbear.@dropbear[0].Port=xxx # uci commit dropbear # /etc/init.d/dropbear restart ``` où `xxx` est le numéro de port que vous choisirez ! puis connectez-vous au serveur sur ce nouveau numéro de port. ### OpenSSH * Fichier de configuration : `/etc/ssh/sshd_config` --- Les recommandations de bases suivantes s'appliquent ABSOLUMENT : * n'utiliser **QUE la Version 2** du protocole, * NE **PAS** permettre au compte **root** de se connecter, * **désactiver l'authentification par mot de passe**, * n'utiliser **QUE l'authentification par clés**. --- Nous allons en profitez pour durcir la configuration par défaut : * {{< inside2 a="recréation-des-clés-dhôte" l="sec/ssh/sshd-durci" t="recréons les clés d'hôtes" >}} proprement. Et tant qu'à faire, autorisons QUE les clés au format **Ed25519**.
*{{< inside2 l="sec/ssh/configuration-securisee" t="Lisez mon autre article" >}}, pour savoir comment créer de manière correcte des clés au format ed25519.* {{< note info >}}À savoir qu'au démarrage du serveur OpenSSH, il recréera les clés **ECDSA**.{{}} * autorisons QUE : * les {{< inside2 a="chiffrements" l="sec/ssh/sshd-durci" t="chiffrements" >}} forts, * les algorithmes suivants : * d'{{< inside2 a="échange-de-clés" l="sec/ssh/sshd-durci" t="échange de clés" >}}, * de {{< inside2 a="algorithmes-de-clé-hôte" l="sec/ssh/sshd-durci" t="clés d'hôtes" >}} * des {{< inside2 a="message-authentication-codes" l="sec/ssh/sshd-durci" t="codes d'authentification de messages" >}}, {{< note warning >}} Les algorithmes des clés d'hôtes **sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com** ne semblent pas être reconnus ; **NE les ajoutez PAS !** {{}} **Pour finir, ne configurez pas le service sur le port 22 ; en cas de problème, Dropbear pourra toujours vous être utile, même s'il faut le réactiver !** #### Fichier moduli Si vous avez installé le paquet **openssh-moduli**, il serait préférable de n'accepter que les échanges de clés de groupe {{< abbr DH "Diffie-Hellman" >}} supérieure ou égale à 3072 bits. Avant de le modifier, sauvegardons le fichier, au cas où… ```ash # cp /etc/ssh/moduli /etc/ssh/moduli.bckp # chmod 0400 /etc/ssh/moduli.bckp ``` Ensuite, il faut le {{< inside2 a="moduli--linux" l="sec/ssh/sshd-durci" t="recréer" >}} {{< note tip >}} Si vous avez configuré correctement un utilisateur ayant des droits {{< inside2 l="sys/openwrt/sudo" t="sudo" >}} : ```ash # sudo awk '$5 >= 3071' /etc/ssh/moduli | sudo tee /etc/ssh/moduli.safe # mv /etc/ssh/moduli.safe /etc/ssh/moduli ``` {{}} #### TL;DR Voici un exemple minimaliste du fichier de configuration du serveur : ```cfg HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ed25519_key Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org, HostKeyAlgorithms ssh-ed25519,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 MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com PermitRootLogin no MaxAuthTries 3 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no PermitEmptyPasswords no Subsystem sftp /usr/lib/sftp-server ``` {{< note warning >}} Vous avez paramétré l'option **ListenAddress** ? Oubliez ou vous buterez face à une {{< anchor "situation de compétition" "situation de compétition" >}} ! {{}} --- ## Gestion des services ### Service OpenSSH Et, voilà, maintenant, il ne vous reste plus qu'à vous connecter… après avoir testé la configuration puis activé et démarré le service : `# sshd -t`
Si la configuration est valide : ```ash # /etc/init.d/sshd enable # /etc/init.d/sshd start ``` ### Service Dropbear Vous pouvez vous connecter au service d'OpenSSH, sans soucis ?
Maintenant, vous pouvez arrêter et désactiver le service : ```ash # /etc/init.d/dropbear stop # /etc/init.d/dropbear disable ``` --- ## Sauvegarde système Normalement, le répertoire `/etc/ssh` et ce qu'il contient est inclus dans la sauvegarde système par l'outil `sysupgrade`. Pour le vérifier : `# sysupgrade -l | grep ssh` Si ce n'est pas le cas, éditez le fichier `/etc/sysupgrade.conf` et ajoutez le répertoire. ## Dépannage ### Situation de compétition ⇒ Impossible de se connecter après un redémarrage : Avez-vous paramétré l'option `ListenAdress` dans le fichier de configuration du service ? Si oui, {{< color red >}}désactivez la ligne correspondante {{}}. Du fait d'une **situation de compétition**, le démarrage du service OpenSSH ne peut pas s'effectuer. Si vous spécifiez l'option **ListenAddress**, OpenSSH s'exécutera lorsque vous le démarrerez. Néanmoins, au redémarrage de la machine, OpenSSH échouera à démarrer car il ne trouvera pas les interfaces réseau ! Donc, évitez de spécifier cette option et configurez le parefeu pour n'autoriser que sur l'interface de votre LAN. *[source](https://forum.openwrt.org/t/luci-https-not-working-after-upgrade-to-19-7-4/74352/16)* ## Documentation ### Wikipédia - {{< wp "Comparison_of_SSH_servers" en >}}, {{< wp "FIPS_140-2" en >}} - {{< wp "Situation_de_compétition" fr >}} ---