Greboca  

Suport technique et veille technologique

Aujourd’hui, les grandes entreprises et administrations publiques hésitent entre continuer à utiliser des logiciels propriétaires ou basculer vers les Logiciels Libres. Pourtant, la plupart des logiciels libres sont capables de bien traiter les données issues des logiciels propriétaire, et parfois avec une meilleur compatibilité.

C’est alors la barrière de la prise en main qui fait peur, et pourtant...

Les logiciels libres

L’aspect « Logiciel Libre » permet une évolution rapide et une plus grande participation des utilisateurs. Les aides et tutoriels foisonnent sur Internet ou sont directement inclus dans le logiciel lui-même.

Enfin, les concepteurs sont plus proches des utilisateurs, ce qui rend les logiciels libres plus agréable à utiliser et conviviaux.

Grâce à la disponibilité des logiciels libres, vous trouverez facilement des services de support techniques et la licence n’est plus un frein à l’utilisation de ces logiciels par votre personnel.

Notre support technique concerne essentiellement les logiciels libres, que ce soit sous forme de services ponctuels ou de tutoriels.

LinuxFr.org : les journaux  -  Dédier une clé SSH au rebond sur un serveur

 -  Décembre 2023 - 

Sommaire

Bonjour nal,

Pour du développement, j'ai besoin d'administrer en SSH un serveur cible accessible depuis un serveur bastion. Dans ce document, j'explique comment dédier une clé SSH pour se connecter au bastion sans que cette clé ne puisse servir à rien d'autre qu'à rebondir vers d'autres serveurs.

On va parler de plein d'autres choses avant d'arriver au résultat.

Rebondir avec ProxyJump

On connaît l'option -J de SSH (ou ProxyJump dans ~/.ssh/config) qui permet de faire ça simplement :

ssh -J bastion cible

Ça ouvre une connexion SSH sur bastion et, à travers cette connexion, on ouvre une connexion SSH depuis mon PC vers la cible.

Parenthèse : Je rappelle au passage que l'idée alternative, consistant à utiliser ForwardAgent pour rendre accessible l'agent SSH qui tourne sur mon poste au programme SSH qui tourne sur bastion pour accéder à la clé privée permettant d'ouvrir la connexion vers cible est une très mauvaise idée : elle permet à celui qui administre le bastion d'utiliser toutes vos clés privées SSH pour se connecter à tout ce qu'il veut (c'est ce qui est arrivé à Matrix.org en avril 2019). On fait les choses bien, on utilise ProxyJump (qui est un wrapper autour de ProxyCommand, et voici comment fonctionne ProxyCommand), fin de la parenthèse.

Séparer les clés par niveau de sécurité

Je distingue mes clés SSH par niveau de sécurité :
- peu sécurisée : des clés sous forme de fichiers à plat (~/.ssh/id_...) sans mot de passe. Attaque: pour accéder à ma clé, le programme malveillant a juste besoin d'avoir accès en lecture au fichier.
- mieux sécurisée : des clés sous forme de fichiers à plat (~/.ssh/id_...), simplement protégées par mot de passe et chargées dans l'agent SSH pour ne pas avoir à retaper le mot de passe à chaque fois. Attaque: pour accéder à ma clé, le programme malveillant doit exécuter du code dans mon contexte et parler à mon agent SSH. Il ne peut pas extraire la clé mais peut l'utiliser pour se connecter sans mon accord. Il peut aussi essayer de trouver mon mot de passe en remplaçant la commande ssh-agent.
- mieux sécurisée (bis) : des clés dont la partie privée est non extractible car stockée sur un périphérique matériel dédié, par exemple sur un TPM ou une smartcard GPG ou x509. Attaque: idem.
- très sécurisée : une clé dont la partie privée est non extractible car stockée sur une yubikey qui me demande de confirmer chaque connexion par un appui tactile. Attaque: pour utiliser ma clé, le programme malveillant doit tenter d'ouvrir une connexion juste avant moi, attendre que je clique sur le bouton et faire ses dégâts sur le serveur distant avant que je ne réalise que mon appui ne m'a pas permis d'ouvrir la connexion que je voulais.

Se connecter à la cible est une opération plus ou moins sensible, selon ce qui est hébergé sur ce serveur (données de tests ou données de production, données triviales ou données sensibles …). Je choisis le niveau de sécurité de la clé en fonction de ce niveau de sensibilité.

Rebondir n'est pas une opération "sensible"

Mais se connecter au bastion pour rebondir ne doit pas être une opération sensible en soi : il n'y a pas de raison de taper deux fois sur ma yubikey pour parvenir à ma cible.

Sauf que, par défaut, la clé qui me sert à rebondir sert aussi à me connecter en SSH au bastion : à exécuter des commandes, à copier des fichiers, etc.

Mon soucis est donc le suivant : comment faire pour que la clé qui me sert à me connecter au bastion ne puisse pas servir à autre chose qu'à rebondir vers d'autres serveurs ?
Autrement dit, comment bloquer tous les autres usages de SSH spécifiquement pour cette clé de rebond ?

La solution : command=ssh,restrict,permit-open

Le problème semble simple, mais je n'ai trouvé nulle part la réponse. La configuration que j'ai trouvée, et que je soumets à votre sagacité, consiste à indiquer dans ~/.ssh/authorized_keys sur bastion :

command="ssh",restrict,port-forwarding ssh-rsa AAAAB3Nza......  ma-cle-peu-securisee
  • command="ssh" force l'exécution de ssh dès qu'on se connecte à la machine. Je ne comprends pas bien pourquoi ça suffit pour exécuter ssh cible , mais ça marche
  • restrict interdit a peu près tout
  • port-forwarding réautorise le passage de port entre bastion et ma machine, nécessaire pour atteindre cible

Dès lors :

  • ✅ Le rebond via -J fonctionne
  • ssh bastion -i ma-cle-peu-securisee -> PTY allocation request failed on channel 0. Connection to bastion closed.
  • scp bastion:~/.ssh/authorized_keys ./ -> scp: Connection closed (et le fichier n'est pas récupéré)

Objectif atteint.

Et si je dois administrer bastion avec une clé plus sécurisée ?

J'ai aussi une ligne dans .ssh/authorized_keys sur bastion qui m'autorise à me connecter avec ma yubikey pour l'administrer. Mais ma clé peu sécurisée est tentée la première, elle est acceptée et la connexion se ferme, sans que les clés suivantes ne soient pas tentées (contrairement à ce qui se serait passé si la clé peu sécurisée avait été rejetée d'emblée).

Pour contourner le problème, il faut exporter la clé publique SSH associée à la clé privée yubikey dans un fichier (par exemple, s'il s'agit d'une clé GPG sur la yubikey, avec gpg --export-ssh-key > ~/.ssh/yubikey.pub), puis indiquer cette identité lors de la connexion :

ssh -i ~/.ssh/yubikey.pub bastion

Voilà, comme j'ai passé un temps non nul sur ce que je pensais être assez trivial et que je n'ai pas trouvé de gens ayant documenté ça ailleurs (j'ai peut-être mal cherché), je me suis permis de partager ça ici. N'hésitez pas à corriger ou signaler des points aveugles en commentaire.

Commentaires : voir le flux Atom ouvrir dans le navigateur

par Samuel

LinuxFr.org : les journaux

LinuxFr.org : Journaux

antistress adventure in Flatpak land

 -  30 avril - 

Hello nal, ça faisait un bail !Certain (il se reconnaîtra) m'a demandé de le tenir au courant lorsque j'aurai basculé sur un usage de Firefox (...)


Téléphone sous Linux ?

 -  25 avril - 

Aujourd'hui, avoir un téléphone avec un Android libéré, c'est possible, on pense en particulier à Murena.Avoir un téléphone sous GNU/Linux, c'est (...)


Quand votre voiture vous espionne… et vous le fait payer

 -  23 avril - 

Ceci se passe aux États-Unis, pour l’instant, aucune preuve qu’une telle fuite existe en Europe. Mais… si votre assurance augmente brutalement, (...)


firefox, nouvelle fenêtre dans une session isolée

 -  15 avril - 

Les fenêtres de navigation privées de firefox partagent leurs cookies de session or je souhaitais avoir des fenêtres de navigation isolées, (qui ne (...)


Pretendo tente de déprogrammer l'obsolescence des consoles Nintendo

 -  9 avril - 

Ah Nal,Gros N vient de faire un gros doigt aux utilisateurs de ses consoles 3DS et Wii U en annonçant la fermeture des services en ligne pour (...)