Rôle d'un reverse proxy
Un reverse proxy agit comme un intermédiaire sécurisé entre un client frontend (navigateur ou application) et un serveur backend (une base de données, un service ou une API). C'est le point d’entrée unique du réseau applicatif en terminant la connexion TLS, en redirigeant et filtrant le trafic web, et surtout en cachant l'infrastructure interne des services.
Un reverse proxy permet d'organiser de manière encore plus sécurisée la sécurité TLS et les communications entre les différents services lesquels sont basés sur les certificats.
Il existe plusieurs programmes pouvant remplir les fonctions de reverse proxy comme Traefik, Nginx, ou HAProxy.
Les contratines de sécurité du CNRS rendent obligatoires l'accès au CLE et aux services sécurisés uniquement par VPN. Voici les étapes optionnelles pour la réalisation d'un revserse proxy avec TRAEFIK.
Organisation pour la prodcution avec Traefik
La VM Linux est dans un VLAN fermé depuis l’extérieur et accessible uniquement par VPN. Pour cela, il faut installer les services Docker et SSH. Dans notre cas, la configuration du service se fera avec un certificat auto-signé.
Dès que l'on place un reverse proxy devant une application, le certificat serveur public (X.509) ne se trouve plus sur l’application backend, mais bien sur la VM comportant le reverse proxy. Le frontend client établit la connexion TLS avec Traefik lequel déchiffre la communication Puis, soit Trefik communique avec le backend en clair et en HTTP, soit il communique en TLS interne, et HTTPS entre le proxy et le backend.
Les différentes étapes :
1.Création d'un certificat auto-signé
La VM etant dans un VLAN privé, il n'est pas possible d'utiliser Let's encrypt. Il faudra passer par un certificat auto-signé.
apt install mkcert
# Création d'une autorité de confiance local dans /root...
/root/.local/share/mkcert
mkcert -install
mkdir ./certs
mkcert -cert-file ./certs/cle-cert.pem -key-file ./certs/cle-key.pem "cle- mondomaine.fr"
# Verification
openssl verify -CAfile /root/.local/share/mkcert/rootCA.pem cle-cert.pem
2.Installation de Traefik
L'installation est réalisé avec 3 fichiers - 1- docker-compose.yml qui contient la configuration générale - 2- . /conf/traefik.yml qui contient le chemin des certificats - 3- ./conf/elabftw_cle.yml contenant les chemins
Le fichier docker-compose.yml (3.6 a verifier)
services:
traefik:
image: traefik:v3.6
container_name: traefik
restart : always
networks:
- traefik_web
ports:
# the http port
- "80:80"
- "443:443"
# the web ui (enabled by --api.insecure=true)
- "8080:8080"
volumes:
- /etc/localtime:/etc/localtime:ro
# so that traefik can listen to the docker events
- /var/run/docker.sock:/var/run/docker.sock
- ./conf/:/etc/traefik/
- ./certs:/etc/ssl/my_certs
networks:
traefik_web:
Le fichier ./conf/traefik.yml
# ./traefik/traefik.yml
global:
sendAnonymousUsage: false
log:
level: "DEBUG"
format: "common"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
watch: true
exposedByDefault: true
file:
directory: "/etc/traefik/"
watch: true
tls:
certificates:
- certFile: "/etc/ssl/my_certs/cle-cert.pem"
keyFile: "/etc/ssl/my_certs/cle-key.pem"
options:
intermediate:
minVersion: "VersionTLS12"
cipherSuites:
- "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
- "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
- "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
- "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
- "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305"
- "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305"
api:
dashboard: true
debug: true
insecure: true
entryPoints:
insecure:
address: ":80"
forwardedHeaders:
insecure: true
http:
redirections:
entryPoint:
to: "secure"
scheme: https
secure:
address: ":443"
forwardedHeaders:
insecure: true
#Pour éviter l'erreur 500 Internal Server Error' caused by: x509: cannot validate certificate for
serversTransport:
insecureSkipVerify: true
Le fichier ./conf/elabftw_cle.yml
http:
routers:
elabftw_cnrs:
tls: {}
entryPoints: \["secure", "insecure"\]
service: "service-cle"
priority: 50
rule: "Host(`cle-mondomaine.fr`)"
services:
service-cle:
loadBalancer:
servers:
- url: "https://X.Y.W.Y"
docker-compose up -d
docker exec -it traefik sh
3.Vérification du bon fonctionnement du proxy
Le site Web du CLE Il faut penser à mettre le nom de l'URL dans votre DNS car on y accède uniquement par le nom https://cle-mondomaine.fr
Le dashboard de Traefic http://cle-modomaine.fr:8080
Quelques références et liens internet
La référence de base est la documentation interne établie par Henri Valeins.
Voici d'autres références :