"BankSecure" - La Forteresse Numérique

"BankSecure" - La Forteresse Numérique
PRÉSENTATION

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

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

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

TECHNOLOGIES

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

Schéma de l'Infrastructure

Schéma réseau

Cliquer pour agrandir

Ressources à télécharger

Aucune ressource disponible pour ce TP.

Commentaires(0)
Chargement des commentaires...

Ajouter un commentaire