En cybersécurité, un Bastion Host, également appelé serveur bastion, est un serveur spécialement sécurisé servant de point d'accès contrôlé à des systèmes ou ressources sensibles. Il permet de centraliser, limiter et surveiller les connexions administratives vers des machines situées dans un réseau privé, sans exposer directement ces dernières à Internet.
1. À propos du Bastion Host en cybersécurité
Un Bastion Host est une machine renforcée sur le plan de la sécurité, conçue pour servir de point d'entrée vers une infrastructure informatique protégée.
Dans une architecture classique, les administrateurs ne se connectent pas directement aux serveurs internes depuis Internet. Ils passent d'abord par un serveur bastion, qui contrôle et, selon sa configuration, journalise les accès.
Pourquoi utiliser un Bastion Host ?
Un serveur bastion permet notamment de :
- Réduire la surface d'attaque des serveurs internes.
- Centraliser les accès administratifs à une infrastructure.
- Limiter les connexions aux utilisateurs et appareils autorisés.
- Renforcer l'authentification des administrateurs.
- Surveiller les connexions et faciliter les audits.
- Isoler les ressources sensibles des réseaux non fiables.
- Appliquer le principe du moindre privilège.
Exemple d'utilisation
Une entreprise possède trois serveurs internes :
- Un serveur Web à l'adresse 10.0.1.10.
- Un serveur de base de données à l'adresse 10.0.1.20.
- Un serveur de sauvegarde à l'adresse 10.0.1.30.
Ces serveurs ne doivent pas être directement accessibles depuis Internet.
L'entreprise déploie un serveur bastion disposant d'un point d'accès administratif contrôlé et d'une connexion au réseau interne.
Les administrateurs autorisés passent par ce bastion pour atteindre les machines internes.
Bastion Host et Jump Server
Un Jump Server, ou serveur de rebond, est une machine permettant d'accéder à d'autres systèmes.
Les termes Bastion Host et Jump Server sont souvent utilisés de manière interchangeable dans les architectures d'administration.
Le terme Bastion Host insiste particulièrement sur le durcissement de sécurité d'un système exposé ou placé à une frontière de confiance.
Bastion Host et VPN
Un VPN établit un canal de communication protégé entre des réseaux ou des appareils.
Un Bastion Host constitue un point d'accès contrôlé vers des ressources précises.
Ces deux technologies peuvent être combinées : un administrateur peut d'abord se connecter à un VPN, puis accéder à un serveur bastion.
Bastion Host et pare-feu
Un pare-feu filtre les communications réseau selon des règles de sécurité.
Un Bastion Host est un système d'accès administratif renforcé. Il ne remplace pas le pare-feu, mais fonctionne généralement avec celui-ci.
2. Architecture et fonctionnement d'un Bastion Host
Le fonctionnement d'un serveur bastion repose sur la séparation entre un réseau d'administration et les ressources internes à protéger.
Architecture générale
Une architecture simplifiée peut être représentée de la manière suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Administrateur | | Connexion SSH ou RDP autorisée | v +----------------------+ | BASTION HOST | | Authentification | | Contrôle des accès | | Journalisation | +----------------------+ | | Réseau privé | +----------+-----------+ | | | v v v Serveur Web Serveur DB Serveur Backup 10.0.1.10 10.0.1.20 10.0.1.30 |
Dans cette architecture, les serveurs internes n'acceptent les connexions administratives que depuis des sources explicitement autorisées, notamment le bastion.
Étape 1 : connexion de l'administrateur
L'administrateur établit une connexion vers le bastion à l'aide d'un protocole autorisé, comme SSH ou une solution d'accès distant sécurisée.
Étape 2 : authentification
Le système vérifie l'identité de l'administrateur.
L'authentification peut utiliser des clés SSH, des certificats ou une authentification multifacteur.
Étape 3 : autorisation
Le bastion ou la plateforme d'accès associée détermine les ressources auxquelles l'administrateur est autorisé à accéder.
Une authentification réussie ne doit pas automatiquement donner accès à tous les serveurs internes.
Étape 4 : connexion vers le serveur cible
Après les contrôles nécessaires, l'administrateur accède au serveur interne autorisé.
Le protocole utilisé peut être SSH, RDP ou un autre protocole d'administration pris en charge par l'architecture.
Étape 5 : journalisation
Les événements de connexion peuvent être enregistrés afin de faciliter la surveillance et l'analyse des incidents.
La journalisation des commandes ou l'enregistrement des sessions nécessite des mécanismes spécifiques : un serveur SSH classique ne réalise pas automatiquement un enregistrement complet des activités.
Étape 6 : fermeture de session
Lorsque l'opération administrative est terminée, la session doit être fermée correctement.
Placement du bastion dans le réseau
Un bastion peut être placé dans une DMZ, un sous-réseau d'administration ou un segment privé accessible uniquement par VPN ou par un service d'accès contrôlé.
Son emplacement dépend de l'architecture et des exigences de sécurité.
Principe de segmentation réseau
La segmentation réseau consiste à séparer les ressources en zones distinctes et à limiter les communications entre elles.
Elle contribue à empêcher qu'une compromission d'un composant donne automatiquement accès à toute l'infrastructure.
3. Types de bastions et technologies utilisées
Les Bastion Hosts peuvent être classés selon les protocoles d'administration, leur environnement d'hébergement ou leur mode de fonctionnement.
Bastion SSH
Un bastion SSH permet aux administrateurs d'accéder à des serveurs Linux ou Unix à travers une connexion sécurisée.
Il peut être utilisé avec le mécanisme ProxyJump d'OpenSSH.
Bastion RDP
Un bastion RDP permet d'organiser l'accès administratif à des serveurs Windows au moyen du protocole Remote Desktop Protocol.
Il peut s'appuyer sur des solutions de passerelle ou de gestion des sessions distantes.
Bastion Cloud
Un Cloud Bastion permet d'administrer des ressources situées dans une infrastructure Cloud.
Il peut prendre la forme d'une machine virtuelle renforcée ou d'un service administré.
Azure Bastion
Azure Bastion est un service de Microsoft Azure permettant d'établir des connexions administratives vers des machines virtuelles selon les fonctionnalités et les configurations prises en charge.
Il contribue à éviter l'exposition directe des ports d'administration des machines virtuelles sur Internet.
AWS et les accès administratifs
Dans Amazon Web Services, un bastion peut être déployé sur une instance EC2.
Des solutions comme AWS Systems Manager Session Manager permettent également d'organiser certains accès administratifs sans imposer le déploiement d'un bastion SSH traditionnel.
Bastion avec gestion des accès privilégiés
Une solution de PAM, ou Privileged Access Management, peut intégrer des fonctions de contrôle des accès privilégiés, d'approbation, de traçabilité et de gestion des sessions.
Bastion et Zero Trust
Une architecture Zero Trust repose sur la vérification explicite des accès et la limitation des privilèges.
Un bastion peut participer à cette approche, mais ne constitue pas à lui seul une architecture Zero Trust complète.
Tableau comparatif
| Type | Technologie principale | Utilisation |
|---|---|---|
| Bastion SSH | SSH, OpenSSH | Administration Linux et Unix |
| Bastion RDP | RDP, passerelle distante | Administration Windows |
| Bastion Cloud | Services Cloud | Administration de ressources virtuelles |
| Bastion PAM | Gestion des accès privilégiés | Contrôle des sessions sensibles |
| Bastion privé | VPN et réseau interne | Administration sans exposition publique directe |
4. Installation, configuration et sécurisation d'un bastion
La mise en place d'un Bastion Host nécessite une configuration rigoureuse du système, des comptes, des protocoles d'accès et des règles réseau.
Choisir un système d'exploitation adapté
Un bastion peut être déployé sur un système Linux ou Windows selon les besoins de l'organisation.
Le système doit bénéficier de mises à jour de sécurité et être administré selon une politique de durcissement.
Réduire les services installés
Le Hardening, ou durcissement, consiste à réduire les fonctionnalités inutiles et à renforcer les paramètres de sécurité.
Un bastion doit exécuter uniquement les services nécessaires à sa mission.
Configurer l'authentification SSH
Dans un environnement Linux, l'utilisation de clés SSH permet de renforcer l'authentification des administrateurs.
Les clés privées doivent être protégées, et les clés publiques autorisées doivent être gérées avec rigueur.
Éviter les connexions administratives directes
Il est généralement recommandé de limiter les connexions directes au compte root et d'utiliser des comptes administratifs nominatifs avec des mécanismes d'élévation de privilèges contrôlés.
Activer l'authentification multifacteur
Une MFA peut renforcer la sécurité des accès au bastion.
Elle doit être mise en œuvre au niveau approprié de l'architecture d'authentification.
Configurer le pare-feu
Le pare-feu doit limiter les connexions entrantes aux sources autorisées et les connexions sortantes aux destinations nécessaires.
Les serveurs internes doivent également appliquer leurs propres règles de filtrage.
Limiter les utilisateurs autorisés
Seuls les administrateurs ayant un besoin légitime doivent disposer d'un accès au bastion.
Mettre en place la journalisation
Les connexions, les échecs d'authentification et les modifications importantes doivent être enregistrés.
Lorsque cela est possible, les journaux doivent être transmis à une infrastructure de collecte indépendante.
Maintenir les logiciels à jour
Le système d'exploitation, le serveur SSH et les autres composants doivent être régulièrement mis à jour.
Exemple d'architecture SSH avec ProxyJump
Dans une architecture autorisée, un administrateur peut utiliser la fonctionnalité ProxyJump pour établir une connexion SSH vers un serveur interne en passant par un bastion.
La connexion conserve les contrôles d'authentification du serveur cible, en plus de ceux du bastion.
Cette fonctionnalité ne doit pas être confondue avec un mécanisme permettant de contourner les permissions des serveurs internes.
Protéger les clés privées
Les clés privées ne doivent pas être copiées inutilement sur le bastion.
Les mécanismes de transfert d'authentification doivent être configurés avec précaution, notamment lorsqu'ils impliquent un agent SSH.
Prévoir une procédure de secours
Une panne du bastion peut empêcher l'administration des serveurs internes.
Une organisation doit donc prévoir des procédures de récupération et d'accès d'urgence sécurisées.
5. Simulation et contrôle d'accès avec Python
Python permet de simuler les mécanismes de contrôle d'accès, de journalisation et de vérification des configurations associés à un Bastion Host.
Les exemples suivants utilisent des données fictives et ne nécessitent pas de serveur bastion réel.
Exemple 1 : vérifier si un utilisateur est autorisé
Le programme suivant utilise une liste d'administrateurs autorisés. Il vérifie si un utilisateur peut accéder au bastion.
1 2 3 4 5 6 | administrateurs = ["alice", "bob", "admin"] utilisateur = "alice" if utilisateur in administrateurs: print("Accès au bastion autorisé") else: print("Accès au bastion refusé") |
Output :
1 | Accès au bastion autorisé |
Cette simulation représente uniquement une vérification d'autorisation. Dans un système réel, l'identité de l'utilisateur doit d'abord être authentifiée de manière fiable.
Exemple 2 : vérifier une adresse IP autorisée
Le programme suivant utilise le module standard ipaddress pour déterminer si une adresse IP appartient à un réseau d'administration autorisé.
1 2 3 4 5 6 7 | import ipaddress reseau_autorise = ipaddress.ip_network("192.0.2.0/24") ip_client = ipaddress.ip_address("192.0.2.15") if ip_client in reseau_autorise: print("Adresse IP autorisée") else: print("Adresse IP refusée") |
Output :
1 | Adresse IP autorisée |
Les adresses utilisées sont réservées à la documentation. Dans une infrastructure réelle, le réseau autorisé doit correspondre à un segment d'administration de confiance.
Exemple 3 : contrôler les accès aux serveurs internes
Le programme suivant associe chaque administrateur à une liste de serveurs autorisés. Il vérifie si l'utilisateur possède la permission d'accéder au serveur demandé.
1 2 3 4 5 6 7 8 9 10 11 | permissions = { "alice": ["serveur_web", "serveur_db"], "bob": ["serveur_web"], "admin": ["serveur_web", "serveur_db", "serveur_backup"] } utilisateur = "bob" serveur = "serveur_db" if serveur in permissions.get(utilisateur, []): print("Connexion au serveur autorisée") else: print("Connexion au serveur refusée") |
Output :
1 | Connexion au serveur refusée |
Exemple 4 : appliquer le principe du moindre privilège
Le programme suivant vérifie si un administrateur possède le droit d'effectuer une opération donnée. Il illustre le principe du moindre privilège.
1 2 3 4 5 6 7 8 9 10 11 | droits = { "alice": ["lecture", "maintenance"], "bob": ["lecture"], "admin": ["lecture", "maintenance", "configuration"] } utilisateur = "bob" operation = "configuration" if operation in droits.get(utilisateur, []): print("Opération autorisée") else: print("Opération interdite") |
Output :
1 | Opération interdite |
Exemple 5 : enregistrer les événements de connexion
Le programme suivant utilise le module logging pour enregistrer les tentatives de connexion dans un fichier local. Il illustre le principe de journalisation des accès administratifs.
1 2 3 4 5 6 7 8 9 | import logging logging.basicConfig( filename="bastion.log", level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" ) utilisateur = "alice" logging.info("Connexion autorisée : %s", utilisateur) print("Événement enregistré dans bastion.log") |
Output :
1 | Événement enregistré dans bastion.log |
Le fichier contient un événement horodaté. Dans une infrastructure réelle, les journaux doivent être protégés contre les modifications non autorisées.
Exemple 6 : détecter plusieurs échecs de connexion
Le programme suivant analyse des tentatives de connexion fictives et signale les utilisateurs ayant atteint un seuil de trois échecs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | tentatives = [ ("alice", "succes"), ("bob", "echec"), ("bob", "echec"), ("bob", "echec"), ("admin", "succes") ] echecs = {} for utilisateur, resultat in tentatives: if resultat == "echec": echecs[utilisateur] = echecs.get(utilisateur, 0) + 1 for utilisateur, nombre in echecs.items(): if nombre >= 3: print("Alerte :", utilisateur, "-", nombre, "échecs") |
Output :
1 | Alerte : bob - 3 échecs |
Un système professionnel doit également prendre en compte les périodes d'observation, les adresses sources et les mécanismes de détection des faux positifs.
Exemple 7 : vérifier les ports administratifs autorisés
Le programme suivant examine une liste fictive de ports ouverts et signale ceux qui ne figurent pas dans la politique de sécurité du bastion.
1 2 3 4 5 | ports_autorises = [22] ports_observes = [22, 80, 3306] for port in ports_observes: if port not in ports_autorises: print("Port à examiner :", port) |
Output :
1 2 | Port à examiner : 80 Port à examiner : 3306 |
Cette simulation ne réalise aucun scan réseau. Elle compare uniquement deux listes de ports.
Exemple 8 : vérifier une plage horaire d'administration
Le programme suivant vérifie si une connexion administrative intervient pendant une plage horaire autorisée. Cette règle peut constituer un contrôle complémentaire selon les besoins de l'organisation.
1 2 3 4 5 6 7 | heure_connexion = 22 debut = 8 fin = 18 if debut <= heure_connexion < fin: print("Accès autorisé pendant les heures prévues") else: print("Accès hors plage horaire : vérification nécessaire") |
Output :
1 | Accès hors plage horaire : vérification nécessaire |
Exemple 9 : simuler une authentification multifacteur
Le programme suivant représente une vérification logique de deux facteurs d'authentification déjà validés. Il n'implémente pas un protocole MFA réel.
1 2 3 4 5 6 | premier_facteur_valide = True second_facteur_valide = False if premier_facteur_valide and second_facteur_valide: print("Authentification MFA réussie") else: print("Accès refusé : authentification incomplète") |
Output :
1 | Accès refusé : authentification incomplète |
Exemple 10 : auditer une configuration fictive de bastion
Le programme suivant examine plusieurs paramètres de sécurité d'un bastion fictif. Il signale les contrôles qui ne sont pas activés.
1 2 3 4 5 6 7 8 9 10 | configuration = { "mfa_active": True, "journalisation_active": True, "connexion_root_interdite": False, "pare_feu_actif": True, "mises_a_jour_activees": False } for parametre, actif in configuration.items(): if not actif: print("Contrôle à renforcer :", parametre) |
Output :
1 2 | Contrôle à renforcer : connexion_root_interdite Contrôle à renforcer : mises_a_jour_activees |
Ce programme illustre le principe d'un audit de configuration. Une vérification réelle doit analyser les paramètres effectifs du système et les comparer à une politique de sécurité documentée.
6. Risques, surveillance et bonnes pratiques
Un Bastion Host représente un composant sensible de l'infrastructure. Sa compromission peut avoir des conséquences importantes sur les systèmes auxquels il permet d'accéder.
Risque de compromission du bastion
Un attaquant qui compromet un bastion peut tenter d'utiliser les accès et les communications autorisés vers les serveurs internes.
Le bastion doit donc faire l'objet d'une surveillance renforcée.
Risque de concentration des accès
La centralisation des accès facilite le contrôle, mais peut également créer un point critique de l'infrastructure.
Une panne ou une mauvaise configuration peut perturber les opérations administratives.
Appliquer le principe du moindre privilège
Les comptes administratifs doivent disposer uniquement des permissions nécessaires à leurs missions.
Utiliser des comptes individuels
Les comptes partagés doivent être évités lorsque cela est possible afin de faciliter la traçabilité des actions.
Renforcer l'authentification
L'utilisation de clés SSH, de certificats et de MFA contribue à protéger les accès.
Limiter les connexions réseau
Les règles de pare-feu doivent limiter les sources autorisées à accéder au bastion et les destinations internes auxquelles celui-ci peut se connecter.
Éviter le stockage des secrets
Les mots de passe, les clés privées et les autres secrets sensibles ne doivent pas être stockés inutilement sur le bastion.
Surveiller les journaux
Les événements d'authentification, les connexions administratives et les modifications de configuration doivent être analysés.
Centraliser les événements de sécurité
Une plateforme SIEM peut centraliser et corréler les journaux provenant du bastion et des serveurs internes.
Maintenir les systèmes à jour
Les correctifs de sécurité doivent être appliqués selon une procédure de maintenance appropriée.
Effectuer des audits réguliers
Les comptes autorisés, les permissions, les services actifs et les règles réseau doivent être vérifiés régulièrement.
Protéger les sessions administratives
Les sessions doivent utiliser des protocoles sécurisés et être limitées selon les besoins.
Prévoir une haute disponibilité
Dans les infrastructures critiques, plusieurs bastions ou des mécanismes de redondance peuvent réduire les risques d'indisponibilité.
Prévoir un accès d'urgence sécurisé
Les procédures de Break Glass permettent d'organiser un accès exceptionnel en cas d'incident, avec des contrôles et une traçabilité adaptés.
Utiliser une gestion centralisée des accès privilégiés
Une solution PAM peut renforcer le contrôle des comptes privilégiés et la surveillance des sessions.
Intégrer le bastion dans une stratégie Zero Trust
Le bastion doit être associé à des contrôles d'identité, d'autorisation, de segmentation et de surveillance.
Défense en profondeur
Un Bastion Host constitue un élément de la défense en profondeur, mais ne remplace pas les pare-feu, les contrôles d'accès, la protection des terminaux et les autres mesures de sécurité.
7. À retenir
Un Bastion Host, ou serveur bastion, est un serveur fortement sécurisé servant de point d'accès contrôlé à des systèmes sensibles.
Il permet de centraliser les accès administratifs, de réduire l'exposition des serveurs internes et de renforcer la surveillance des connexions.
Un bastion peut utiliser des technologies comme SSH, RDP, les services Cloud et les plateformes de gestion des accès privilégiés.
Les notions de Jump Server, de DMZ et de segmentation réseau sont étroitement liées à son architecture.
Le fonctionnement d'un bastion repose sur l'authentification, l'autorisation, le contrôle des communications et la journalisation.
Python permet de simuler des politiques d'accès, de vérifier les permissions, d'analyser les échecs de connexion et d'auditer certaines configurations.
La sécurisation d'un bastion nécessite le durcissement du système, l'application du moindre privilège, l'utilisation de la MFA et une surveillance régulière.
La compromission d'un bastion peut présenter des risques importants pour les serveurs internes, ce qui justifie des mesures de protection renforcées.
Enfin, un Bastion Host doit être intégré dans une architecture globale de défense en profondeur et, lorsque cela est pertinent, dans une approche Zero Trust.
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/



