Un bastion SSH (ou "jump host") est un serveur unique, durci et surveillé, qui sert de seul point d'entrée pour accéder à d'autres serveurs au sein d'un réseau privé. Plutôt que d'exposer chaque serveur à Internet, seul le bastion est accessible de l'extérieur.
Pourquoi Utiliser un Bastion ?
- Réduction de la surface d'attaque : Au lieu de N serveurs exposés, vous n'en avez plus qu'un à sécuriser et à surveiller.
- Centralisation de l'audit : Tous les accès passent par un seul point, ce qui facilite grandement la journalisation et l'audit des connexions.
- Gestion simplifiée des accès : Vous pouvez gérer les droits d'accès au réseau privé depuis un seul endroit.
- Pas besoin de VPN : Pour un accès SSH simple, un bastion est souvent plus léger et plus simple à maintenir qu'un VPN complet.
Schéma d'une architecture avec bastion
Votre poste de travail ---> Internet ---> [Bastion SSH] ---> Réseau privé (Serveurs Web, BDD, etc.)
(Clé A) (Clé A) (Clé B)
L'utilisateur s'authentifie sur le bastion (avec la Clé A), puis depuis le bastion, il s'authentifie sur le serveur final (avec la Clé B).
Configuration
Étape 1 : Le serveur bastion
Choisissez une machine (une petite VM est souvent suffisante) et installez une distribution Linux minimale. Appliquez les meilleures pratiques de sécurité :
- Mises à jour régulières.
- Fail2ban pour contrer les attaques par force brute.
- UFW (ou autre pare-feu) pour ne autoriser que le port SSH (22) et uniquement depuis des IPs de confiance si possible.
- Configuration de
/etc/ssh/sshd_configdurcie (pas d'accès root, authentification par clé uniquement, etc.).
Étape 2 : Configuration du client SSH (votre machine)
La méthode moderne et recommandée est d'utiliser la directive ProxyJump dans votre fichier ~/.ssh/config. C'est beaucoup plus simple et sécurisé que les anciennes méthodes comme l'agent forwarding.
Modifiez ou créez le fichier ~/.ssh/config :
# Connexion au bastion
Host bastion
HostName bastion.votre-domaine.com
User admin_bastion
IdentityFile ~/.ssh/id_rsa_bastion
# Connexion aux serveurs privés via le bastion
Host serveur-privé-*
HostName %h.lan # %h est remplacé par ce que vous tapez (ex: serveur-privé-1.lan)
User admin_serveur
IdentityFile ~/.ssh/id_rsa_serveur_privé
ProxyJump bastion
Étape 3 : Connexion transparente
Grâce à cette configuration, vous pouvez maintenant vous connecter directement à votre serveur privé. OpenSSH s'occupera de la connexion intermédiaire via le bastion de manière transparente.
ssh serveur-privé-1
C'est tout ! Vous êtes connecté à serveur-privé-1 en passant par bastion.
La directive
ProxyJump gère la connexion de bout en bout sans exposer votre clé privée du serveur final au bastion, ce qui est un avantage majeur par rapport à d'autres méthodes.
Copier des fichiers avec scp
La configuration fonctionne aussi directement avec scp :
scp mon_fichier.txt serveur-privé-1:~/
-A)Évitez d'utiliser l'agent forwarding (
ssh -A) via un bastion si vous n'avez pas une confiance absolue en sa sécurité et en ses administrateurs. Si le bastion est compromis, un attaquant pourrait utiliser le socket de votre agent pour se connecter à vos serveurs privés en votre nom. ProxyJump n'a pas ce risque.
Conclusion
Mettre en place un bastion SSH est une des mesures les plus efficaces pour sécuriser une infrastructure réseau. C'est une étape fondamentale qui réduit considérablement les risques. Grâce à la fonctionnalité ProxyJump d'OpenSSH, son utilisation est devenue transparente et plus sécurisée que jamais.