"BankSecure" - La Forteresse Numérique

Contexte et Situation
Vous travaillez pour BankSecure, une entité qui gère des données critiques. La politique de sécurité est stricte : aucun serveur de données ne doit avoir d'accès direct à Internet.
Vous devez déployer un serveur web interne hébergeant de la documentation sensible dans une zone isolée. Ce serveur a besoin d'Internet temporairement pour installer ses mises à jour, mais ne doit jamais être directement accessible depuis l'extérieur.
Votre mission est de construire une architecture bastion complète : routage NAT, isolation réseau, durcissement des services, reverse proxy sécurisé en HTTPS avec un certificat wildcard issu d'une PKI interne.
Objectifs Pédagogiques
- Configurer le routage IP (IP Forwarding) et le NAT sur Linux.
- Maîtriser la notion de passerelle par défaut et de DNS.
- Sécuriser le trafic réseau avec nftables.
- Durcir un service Nginx via les directives Systemd.
- Mettre en place une PKI interne avec un certificat wildcard.
- Configurer Nginx en Reverse Proxy HTTPS pour traverser les réseaux.
- Configurer un poste client graphique pour accéder au service sans avertissement.
Workflow
PARTIE 1 : Configuration du Réseau
Le réseau interne 192.168.50.0/24 relie srv-gateway et srv-hidden. Tout doit être configuré manuellement, sans DHCP.
Résultats attendus :
srv-gateway dispose d'une IP statique sur chaque interface.
srv-hidden dispose d'une IP statique 192.168.50.10 sur son unique interface.
Les deux machines se joignent en ping.
Ne définissez pas encore de passerelle sur srv-hidden à cette étape.
PARTIE 2 : Le Routeur Linux (NAT & Forwarding)
srv-hidden doit pouvoir accéder à Internet pour installer des paquets, mais uniquement via srv-gateway. Vous devez transformer srv-gateway en routeur NAT Linux.
Mission A : Forwarding IPv4
Le transfert de paquets entre interfaces est activé de manière persistante sur srv-gateway.
Mission B : NAT avec nftables
Configurez /etc/nftables.conf sur srv-gateway avec :
Une table inet filter : politique drop en entrée, autoriser établies, loopback, SSH, HTTP, HTTPS et le transit depuis 192.168.50.0/24.
Une table ip nat : masquerading des paquets du réseau interne vers l'interface externe.
Vérification :
nft list ruleset
Attendu : les deux tables et leurs chaînes sont visibles
Mission C — Passerelle sur srv-hidden
Ajoutez la passerelle 192.168.50.1 et les DNS sur srv-hidden.
Vérification :
Depuis srv-hidden
ping 8.8.8.8
Attendu : réponses ICMP (routage IP)
ping google.com
Attendu : réponses ICMP (DNS + routage)
Si ping google.com répond depuis srv-hidden qui n'a aucune carte réseau connectée à Internet, vous avez transformé votre Linux en routeur NAT.
PARTIE 3 : Installation et Durcissement Systemd
Toutes les actions de cette partie sont sur srv-hidden.
Mission A — Installation de Nginx
Installez Nginx et créez une page d'accueil confidentielle dans /var/www/html/index.html avec le contenu suivant :
CONFIDENTIEL - BANQUE
Documentation interne BankSecure
Accès restreint au personnel autorisé
Vérification :
curl localhost
Attendu : page CONFIDENTIEL - BANQUE
Mission B — Durcissement via Systemd Override
Sans modifier le fichier de service original, ajoutez les restrictions suivantes au service Nginx via un override Systemd :
| Directive | Effet |
| ProtectSystem=strict | Le service ne peut pas écrire dans /etc, /usr, /boot |
| PrivateTmp=true | Le service voit un /tmp privé isolé du /tmp système |
| NoNewPrivileges=true | Le service ne peut pas élever ses privilèges |
| ProtectHome=true | Le service ne peut pas accéder aux dossiers /home |
Vérifications :
L'override est bien chargé
systemctl cat nginx | grep -A10 "override"
Attendu : les 4 directives apparaissent
Tentez d'écrire dans /etc via le namespace du processus
nsenter -t [PID] --mount -- touch /etc/test_compromission
Attendu : Permission denied
PARTIE 4 : Verrouillage Réseau sur srv-hidden
srv-hidden ne doit accepter que les connexions venant de srv-gateway. Tout accès direct depuis l'extérieur doit être bloqué.
Configurez /etc/nftables.conf sur srv-hidden avec :
Politique drop en entrée par défaut.
Autoriser les connexions établies.
Autoriser le loopback.
Autoriser SSH uniquement depuis 192.168.50.1.
Autoriser HTTP (port 80) uniquement depuis 192.168.50.1.
Tout autoriser en sortie.
PARTIE 5 : PKI Interne et Certificat Wildcard
Vous allez créer une autorité de certification interne et générer un certificat wildcard *.banksecure.local qui couvre tous les sous-domaines en un seul certificat.
Un wildcard *.banksecure.local couvre docs.banksecure.local, web.banksecure.local, etc. mais pas dev.docs.banksecure.local (un seul niveau de sous-domaine).
Toutes les actions de cette partie sont sur srv-gateway.
Chaîne PKI à construire :
Étape 1 : Créer la CA BankSecure → banksecure-ca.key + banksecure-ca.crt
Étape 2 : Créer une clé + CSR wildcard → wildcard.key + wildcard.csr
Étape 3 : La CA signe le CSR → wildcard.crt
Mission A — Créer l'Autorité de Certification
Créez la structure /etc/ssl/banksecure/{ca,wildcard} et générez :
Une clé privée CA de 4096 bits, permissions 400.
Un certificat racine auto-signé valide 5 ans avec les informations suivantes :
| Champ | Valeur |
| C | FR |
| ST | IleDeFrance |
| L | Paris |
| O | BankSecure |
| OU | IT |
| CN | BankSecure Internal CA |
Vérification :
openssl x509 -in /etc/ssl/banksecure/ca/banksecure-ca.crt \
-text -noout | grep -E "Subject:|Issuer:"
Attendu : Subject et Issuer identiques (auto-signé)
Mission B — Créer la clé et le CSR Wildcard
Générez une clé privée de 2048 bits et créez le fichier de configuration /etc/ssl/banksecure/wildcard/wildcard.cnf avec :
CN : *.banksecure.local
SAN : DNS.1 = *.banksecure.local, DNS.2 = banksecure.local, IP.1 = 192.168.50.1
DNS.2 = banksecure.local est nécessaire car le wildcard ne couvre pas le domaine racine lui-même.
Vérification :
openssl req -text -noout \
-in /etc/ssl/banksecure/wildcard/wildcard.csr \
| grep -A5 "Subject Alternative"
Attendu : *.banksecure.local et banksecure.local apparaissent
Mission C — Signer le CSR avec la CA
Créez le fichier d'extensions /etc/ssl/banksecure/wildcard/wildcard_ext.cnf contenant :
authorityKeyIdentifier = keyid,issuer
basicConstraints = CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.banksecure.local
DNS.2 = banksecure.local
IP.1 = 192.168.50.1
Puis signez le CSR pour produire wildcard.crt valide 365 jours.
Vérification :
openssl verify -CAfile /etc/ssl/banksecure/ca/banksecure-ca.crt \
/etc/ssl/banksecure/wildcard/wildcard.crt
Attendu : wildcard.crt: OK
PARTIE 6 : Reverse Proxy HTTPS (srv-gateway)
Les employés accèdent à docs.banksecure.local depuis admin-station. Nginx sur srv-gateway reçoit la requête HTTPS, la déchiffre et la transmet en HTTP à srv-hidden.
Configurez le vhost /etc/nginx/sites-available/banksecure avec :
Redirection automatique HTTP → HTTPS sur le port 80.
Écoute HTTPS sur le port 443 avec le certificat wildcard.
Protocoles TLS : TLSv1.2 et TLSv1.3 uniquement.
Proxy Pass vers http://192.168.50.10 avec les headers X-Real-IP, X-Forwarded-For et X-Forwarded-Proto.
Vérifications :
Test de syntaxe
nginx -t
Attendu : syntax is ok
Test local
curl -k https://docs.banksecure.local
Attendu : page CONFIDENTIEL - BANQUE
Test de redirection HTTP
curl -I http://docs.banksecure.local
Attendu : HTTP/1.1 301 Moved Permanently
PARTIE 7 : Configuration du Poste Client (admin-station)
Mission A — Résolution DNS locale
Ajoutez la résolution de docs.banksecure.local dans /etc/hosts en pointant vers l'IP externe de srv-gateway.
Vérification :
ping docs.banksecure.local
Attendu : réponses depuis l'IP externe de srv-gateway
Mission B — Importer la CA dans Firefox
Récupérez le certificat CA depuis srv-gateway et importez-le dans Firefox :
Menu → Paramètres → Afficher les certificats → Autorités → Importer.
Cochez "Faire confiance à cette AC pour identifier des sites web".
Mission C — Tests finaux
Test 1 — Accès HTTPS sans avertissement :
Firefox → https://docs.banksecure.local
Attendu : page CONFIDENTIEL - BANQUE sans avertissement de sécurité
Test 2 — Vérification du certificat wildcard :
Cliquez sur le cadenas → Connexion sécurisée
Attendu :
- Certificat émis pour *.banksecure.local
- Signé par BankSecure Internal CA
Test 3 — Preuve de l'isolation réseau :
Depuis admin-station
curl http://192.168.50.10
Attendu : timeout — srv-hidden inaccessible depuis l'extérieur
Test 4 — Redirection HTTP :
curl -I http://docs.banksecure.local
Attendu : HTTP/1.1 301 Moved Permanently
Choix Technologiques
VM 1 (srv-gateway) : Debian 12/13.
Carte 1 : Pont/Bridge ou NAT (accès Internet).
Carte 2 : Réseau interne (nom : intranet). IP : 192.168.50.1.
VM 2 (srv-hidden) : Debian 12/13.
Carte 1 : Réseau interne intranet uniquement. IP : 192.168.50.10.
Aucun accès Internet direct.
VM 3 (admin-station) : Debian 12/13, mode graphique avec Firefox.
Carte 1 : Même réseau que la carte externe de srv-gateway.
IP : même plage que la carte externe de srv-gateway.
Domaine interne utilisé : banksecure.local
Certificat wildcard : *.banksecure.local
Schéma de l'Infrastructure

Cliquer pour agrandir
Ressources à télécharger
Aucune ressource disponible pour ce TP.