đ Pourquoi un Bastion Host est-il essentiel dans vos architectures rĂ©seau (Cas AWS VPC)

Table of contents
- 1ïžâŁ Qu'est-ce qu'un Bastion Host ?
- 2ïžâŁ Pourquoi un Bastion Host est-il indispensable ?
- 3ïžâŁ Mise en place dĂ©taillĂ©e d'un Bastion Host sur AWS
- 4ïžâŁ Exemple pratique d'utilisation d'un Bastion Host (avec ProxyJump)
- 5ïžâŁ Bonnes pratiques et recommandations :
- 6ïžâŁ Alternatives au Bastion Host traditionnel :
- đš Conclusion :
- đšđŸâđMore About Me:

La sécurité est une priorité pour toute architecture cloud moderne. Une des pratiques fortement recommandées pour renforcer la sécurité de vos ressources cloud est l'utilisation d'un Bastion Host, particuliÚrement lorsque vous travaillez avec une approche VPC avec des sous-réseaux publics (DMZ) et privés.
Dans cet article, nous allons comprendre en détail :
Qu'est-ce qu'un Bastion Host ?
Pourquoi un Bastion Host est-il indispensable ?
Mise en place détaillée d'un Bastion Host sur AWS
Exemple pratique d'utilisation d'un Bastion Host
Bonnes pratiques et recommandations
Alternatives possibles au Bastion Host traditionnel
1ïžâŁ Qu'est-ce qu'un Bastion Host ?
Un Bastion Host (ou "Jump Server") est une instance dédiée placée dans un réseau public, servant de point unique d'accÚs sécurisé pour gérer les serveurs ou services hébergés dans un sous-réseau privé.
Le Bastion agit comme une "porte d'entrée" vers vos ressources privées, permettant aux administrateurs d'accéder à ces ressources sans les exposer directement à l'Internet public.
2ïžâŁ Pourquoi un Bastion Host est-il indispensable ?
đ SĂ©curitĂ© renforcĂ©e
Réduction des points d'entrée exposés à Internet (surface d'attaque réduite).
ContrÎle des accÚs et journalisation centralisée.
đ§ SĂ©paration claire des responsabilitĂ©s rĂ©seau
Les sous-rĂ©seaux privĂ©s ne nĂ©cessitent pas dâIP publiques.
Respect du principe de moindre privilÚge et meilleure gestion des politiques de sécurité.
đ TraçabilitĂ© et ConformitĂ©
Facilite la mise en place d'audit de sécurité.
Traçabilité améliorée des sessions SSH ou RDP grùce aux logs centralisés.
3ïžâŁ Mise en place dĂ©taillĂ©e d'un Bastion Host sur AWS
đ„ïž Architecture typique :
Une configuration typique comprend :
VPC avec au moins :
Un sous-réseau public ou DMZ (avec IP publique).
Un ou plusieurs sous-réseaux privés (sans accÚs direct à Internet).
Bastion Host placé dans le sous-réseau public.
Instances privées dans les sous-réseaux privés.
A. đ§ Ătapes concrĂštes cote AWS :
Ătape 1 : CrĂ©ez votre VPC avec sous-rĂ©seaux publics et privĂ©s.
Ătape 2 : Configurez une instance EC2 (Bastion Host) dans un sous-rĂ©seau public.
Ătape 3 : Configurez les Security Groups :
Bastion Host : Autorisez seulement les connexions SSH (port 22) depuis des IP spécifiques ou un VPN.
Instances privées : Autorisez uniquement l'accÚs SSH depuis le Bastion Host (adresse IP privée du Bastion).
Ătape 4 : Utilisez AWS Systems Manager Session Manager (ou EC2 Instance Connect) ou une solution SSH pour sĂ©curiser lâaccĂšs vers le Bastion.
B. đ§ Configurer une instance EC2 en Bastion Host :
Voici comment je procĂšde pour configurer une instance EC2 en Bastion Host sĂ©curisĂ© sur AWS. Je partage toutes les Ă©tapes, de la prĂ©paration initiale Ă lâautomatisation complĂšte avec un script.
Prends ce que tu veux, ajuste selon tes besoins, et en avantâŻ! đ
â Les prĂ©requis :
Disposer dâune instance EC2 sous Ubuntu ou Amazon Linux.
Avoir déjà configuré et téléchargé sa clé SSH privée (.pem).
đ§ Ătape 1 : La prĂ©paration initiale
Je me connecte dâabord Ă mon EC2 via SSH (je remplace les infos avec celles de mon propre setup) :
ssh -i ma-cle.pem ubuntu@mon-adresse-ip
Ensuite, je mets Ă jour le systĂšme :
sudo apt update && sudo apt upgrade -y
đĄïž Ătape 2 : SĂ©curiser lâaccĂšs SSH
JâĂ©dite le fichier /etc/ssh/sshd_config
:
sudo nano /etc/ssh/sshd_config
Et jâapplique les configurations suivantes :
# Interdire la connexion SSH en tant que root
PermitRootLogin no
# Désactiver l'authentification par mot de passe (connexion uniquement par clé)
PasswordAuthentication no
# Modifier le port SSH par défaut (optionnel, mais je le recommande)
Port 22022
# Restreindre l'accĂšs SSH Ă certains utilisateurs
AllowUsers ubuntu
Je redémarre ensuite le service SSH :
sudo systemctl restart sshd
đ§ Ătape 3 : Installer et configurer Fail2ban (anti brute-force)
Jâinstalle Fail2ban :
sudo apt install fail2ban -y
Je le configure en Ă©ditant le fichier :
sudo nano /etc/fail2ban/jail.local
Jây ajoute :
[sshd]
enabled = true
port = 22022
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
Ensuite, je redémarre Fail2ban :
sudo systemctl restart fail2ban
Pour vérifier le statut :
sudo fail2ban-client status sshd
đ Ătape 4 : Activer et configurer le firewall UFW
Jâinstalle UFW :
sudo apt install ufw -y
Puis je configure le firewall :
# Autoriser SSH (sur le port que j'ai personnalisé)
sudo ufw allow 22022/tcp
# Activer UFW
sudo ufw enable
# VĂ©rifier l'Ă©tat et les rĂšgles
sudo ufw status verbose
đ Ătape 5 : CrĂ©er un utilisateur dĂ©diĂ© pour lâaccĂšs SSH (optionnel, mais je le recommande)
Je crée un nouvel utilisateur :
sudo adduser bastionuser
Si je veux lui donner des privilĂšges sudo :
sudo usermod -aG sudo bastionuser
Jâajoute ensuite ma clĂ© publique Ă ce nouvel utilisateur :
sudo mkdir -p /home/bastionuser/.ssh
sudo nano /home/bastionuser/.ssh/authorized_keys
Jây colle ma clĂ© publique, puis je fixe les permissions :
sudo chmod 700 /home/bastionuser/.ssh
sudo chmod 600 /home/bastionuser/.ssh/authorized_keys
sudo chown -R bastionuser:bastionuser /home/bastionuser/.ssh
Je retourne dans /etc/ssh/sshd_config
pour autoriser ce nouvel utilisateur :
AllowUsers ubuntu bastionuser
Et je redémarre le service SSH :
sudo systemctl restart sshd
đ Ătape 6 : Installer une solution de Logging/Audit des sessions (Optionnel mais trĂšs utile)
Pour mieux tracer qui fait quoi sur mon Bastion, jâutilise par exemple auditd (vous pouvez essayer de trouver mieux je penseđ€):
sudo apt install auditd -y
sudo auditctl -a always,exit -F arch=b64 -S execve -k command_executions
Pour consulter les logs :
sudo ausearch -k command_executions
đ Ătape 7 : Automatiser toute la configuration avec un script
Voici un script shell complet (sur ubuntu), setup-bastion.sh
, qui enchaĂźne toutâŻ:
#!/bin/bash
set -e
# Mise Ă jour du systĂšme
sudo apt update -y && sudo apt upgrade -y
# Configuration SSH
sudo sed -i 's/#Port 22/Port 22022/' /etc/ssh/sshd_config
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
echo "AllowUsers ubuntu" | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart sshd
# Installer Fail2ban
sudo apt install fail2ban -y
echo -e "[sshd]\nenabled = true\nport = 22022\nfilter = sshd\nlogpath = /var/log/auth.log\nmaxretry = 5\nbantime = 3600" | sudo tee /etc/fail2ban/jail.local
sudo systemctl restart fail2ban
# Activer le firewall UFW
sudo apt install ufw -y
sudo ufw allow 22022/tcp
sudo ufw --force enable
# Auditd pour le logging
sudo apt install auditd -y
sudo auditctl -a always,exit -F arch=b64 -S execve -k command_executions
echo "Configuration du Bastion terminĂ©e avec succĂšs â
"
Pour lancer le script :
chmod +x setup-bastion.sh
sudo ./setup-bastion.sh
đ Important : Configuration sur AWS
Je mâassure, dans les Security Groups, de nâouvrir que le strict nĂ©cessaire :
Le port SSH (22022) nâest accessible que depuis mon IP publique ou un VPN.
Aucune autre rĂšgle superflue.
â Tests et validation
Pour tester, je me connecte depuis mon Bastion vers un autre serveur privé :
ssh -i ma-cle.pem -o ProxyCommand="ssh -W %h:%p -p 22022 ubuntu@ip-bastion" ubuntu@ip-serveur-prive
Cela illustre la technique du Jump Host en SSHâŻ: mon Bastion sert de passerelle pour joindre mes serveurs privĂ©s, sans exposer directement ces derniers sur Internet.
4ïžâŁ Exemple pratique d'utilisation d'un Bastion Host (avec ProxyJump)
Lorsqu'on utilise un Bastion Host, une des pratiques modernes les plus utilisées est le concept du ProxyJump en SSH, permettant de traverser une machine intermédiaire pour atteindre une autre ressource située dans un réseau privé inaccessible directement depuis Internet.
đ Qu'est-ce que ProxyJump ?
Le terme ProxyJump provient de la fonctionnalité introduite avec OpenSSH version 7.3, sortie en août 2016. L'option ProxyJump
(ou -J
) permet à un utilisateur d'établir une connexion SSH vers une machine distante via une ou plusieurs machines intermédiaires appelées "jump hosts" ou "bastion hosts".
ConcrÚtement, le Bastion Host sert de relais sécurisé pour atteindre une machine située dans un réseau privé.
đ SchĂ©ma de connexion via ProxyJump :
Utilisateur local (votre machine)
â
â SSH (ProxyJump - Bastion)
âŒ
âââââââââââââââââ
â Bastion Host â (IP publique)
âââââââââââââââââ
â
â SSH (rĂ©seau privĂ©)
âŒ
âââââââââââââââââ
âInstance PrivĂ©eâ (IP privĂ©e uniquement)
âââââââââââââââââ
đŻ Comment ça marche en pratique ?
Imaginons ce scénario sur AWS :
Bastion Host avec une IP publique :
3.121.52.45
(Faites vous plaisir hein câest juste une IPau PIF je sais pas Ă qui elle appartient đ)Instance privĂ©e dans le sous-rĂ©seau privĂ© sans IP publique :
10.0.2.10
Vous avez un accÚs SSH par clé privée (
ma-cle.pem
).
MĂ©thode ancienne (sans ProxyJump) :
Vous deviez auparavant faire deux commandes distinctes :
# 1. Connexion au Bastion :
ssh -i "ma-cle.pem" ec2-user@3.121.52.45
# 2. Puis connexion à l'instance privée depuis le Bastion :
ssh ec2-user@10.0.2.10
â ïž ProblĂšme : fastidieux, nĂ©cessite la prĂ©sence de clĂ©s intermĂ©diaires sur le bastion lui-mĂȘme.
MĂ©thode moderne (avec ProxyJump)
Avec ProxyJump, vous pouvez connecter votre poste directement à l'instance privée à travers le Bastion en une seule commande :
ssh -i "ma-cle.pem" -J ec2-user@3.121.52.45 ec2-user@10.0.2.10
Cette commande unique va :
Ătablir une premiĂšre connexion SSH depuis votre ordinateur vers le Bastion Host.
Ătablir une deuxiĂšme connexion SSH (Ă travers le tunnel initial sĂ©curisĂ©) depuis le Bastion vers l'instance privĂ©e.
Relayer automatiquement l'entrée/sortie entre votre machine et l'instance privée via le Bastion.
đ Utiliser le fichier config SSH (MĂ©thode recommandĂ©e)
Pour simplifier encore plus vos connexions réguliÚres, il est fortement recommandé d'utiliser le fichier de configuration SSH (~/.ssh/config
):
Exemple de configuration du fichier SSH :
Host bastion
HostName 3.121.52.45
User ec2-user
IdentityFile ~/.ssh/ma-cle.pem
Host instance-privee
HostName 10.0.2.10
User ec2-user
IdentityFile ~/.ssh/ma-cle.pem
ProxyJump bastion
Avec cette configuration, la connexion devient encore plus facile :
ssh instance-privee
SSH utilise automatiquement les configurations définies précédemment dans le fichier .ssh/config
et connecte votre poste vers lâinstance privĂ©e via le bastion en une seule commande ultra-simple.
đš Recommandations de sĂ©curitĂ© complĂ©mentaires :
Limiter lâaccĂšs SSH du Bastion Ă une IP ou plage IP prĂ©cise.
Auditer et monitorer les accĂšs SSH au Bastion (CloudWatch Logs, Prometheus/Grafana, ELK).
Renforcer le Bastion avec un IDS (Intrusion Detection System), Fail2Ban ou autres.
5ïžâŁ Bonnes pratiques et recommandations :
â Durcissement du Bastion Host :
Mettre à jour réguliÚrement.
Installation minimale des paquets.
Mise en place d'outils de détection d'intrusion (IDS/IPS).
Mettre en place Fail2Ban et autres mesures de prévention.
Appliquer les Server Hardening Automation type Dev-Sec (https://github.com/dev-sec/ansible-collection-hardening)
â Authentification sĂ©curisĂ©e :
ClĂ©s SSH obligatoires, dĂ©sactiver lâauthentification par mot de passe.
MFA pour se connecter au Bastion.
â Logging et monitoring :
Envoyez les logs vers CloudWatch Logs ou une solution centralisée (ELK, Graylog, Datadog, etc.).
Configurez des alertes sur les tentatives dâaccĂšs non autorisĂ©es.
6ïžâŁ Alternatives au Bastion Host traditionnel :
Bien que les Bastion Hosts soient trĂšs populaires, d'autres alternatives ou approches existent :
đ La Meilleure selon moi et qui nĂ©cessite un autre Article tellement je lâadore câest Teleport đ:
đ Teleport en quelques points clĂ©s :
* đ SĂ©curitĂ© des accĂšs :
* Gestion centralisée des accÚs SSH et Kubernetes.
* Authentification forte via certificats SSH dynamiques.
* MFA intégré pour une sécurité renforcée.
* đ AccĂšs universel :
* Compatible avec infrastructures Cloud, On-premise et hybrides.
* AccÚs sécurisé aux ressources (VMs, Clusters K8s, Applications Web, Bases de données).
* đ ScalabilitĂ© :
* Hautement évolutif avec support natif des grands déploiements.
* Gestion facile des environnements multi-régions et multi-cloud.
* đ Audit et conformitĂ© :
* Traçabilité complÚte avec enregistrement des sessions SSH et Kubernetes.
* Logs centralisés et visibilité totale sur les activités utilisateur.
* Conformité simplifiée avec normes PCI-DSS, HIPAA, ISO27001, etc.
* âïž FacilitĂ© d'utilisation :
* Web UI intuitive pour gérer et monitorer les accÚs.
* Interface en ligne de commande (
tsh
) pour une expérience utilisateur simplifiée.* Configuration centralisée et automatisation facile.
* đ€ Automation et IntĂ©grations :
* API robuste permettant une intégration simple aux outils CI/CD et de monitoring existants.
* Compatible avec Terraform, Ansible et autres outils dâautomatisation.
* đĄ ConnectivitĂ© Zero Trust :
* AccÚs basé sur les rÎles (RBAC), appliquant le principe du moindre privilÚge.
* Proxy inversé intégré pour accéder sans exposer directement les services à Internet.
* đ Certificats dynamiques :
* Génération et rotation automatique des certificats SSH pour éliminer les risques liés aux clés statiques.
* đ± Multi-plateformes :
* Disponible pour Linux, macOS et Windows.
* đ ïž Open Source :
* Code source ouvert et auditable avec une communauté active.
Puis nous avons:
âïž AWS Systems Manager Session Manager :
AccĂšs direct via la console AWS.
Pas besoin d'ouvrir des ports spécifiques.
đ VPN PrivĂ© :
Tunnel sécurisé vers votre réseau VPC.
Peut remplacer partiellement ou complĂštement un Bastion Host.
đ Zero Trust Network Access (ZTNA) :
- Approche moderne avec des solutions telles que Cloudflare Access, Tailscale, ou WireGuard.
đ RĂ©sumĂ© rapide :
đ ProblĂšme adressĂ© | â Solution (Bastion) | đĄ Alternative |
AccÚs sécurisé SSH | Point d'entrée unique sécurisé | AWS Systems Manager, VPN |
Exposition IP publique | RĂ©duit fortement lâexposition | ZTNA, PrivateLink, Teleport, Overlay VPN |
Logging et audits | Logs centralisés simples | CloudWatch Logs, ELK, etc |
DNS Protection (En cas dâIP Publique) | CloudFlare + Proxy sur IP Bastion | Un RP avec WAF SelfHosted sur un Provider |
Si vous avez compris comment tout ceci marche alors passez Ă lâĂ©tape suivante et faites-en un Playbook Ansible đ.
đš Conclusion :
Mettre en place un Bastion Host dans une architecture réseau AWS avec des sous-réseaux privés et publics est une pratique de sécurité éprouvée qui permet de protéger efficacement vos ressources critiques tout en assurant la traçabilité nécessaire pour les audits et la conformité. Bien maßtrisé, un Bastion Host peut devenir un pilier essentiel de votre stratégie cloud sécurisée.
đ Ressources supplĂ©mentaires :
đšđŸâđMore About Me:
LinkedIn: https://linkedin.com/in/orbitturner
WebSite: https://orbitturner.com
Twitter: https://x.com/orbitturner
Subscribe to my newsletter
Read articles from Orbit Turner directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Orbit Turner
Orbit Turner
A Creative Dreamer who has always loved going out of the box to innovate. đ I am Mohamed Gueye, better known by the pseudonym Orbit Turner, a technology, science, and art enthusiast since my early days. My journey is an exciting blend of autonomy, curiosity, and continuous learning.