VPN / Sécurité
📚 Installation OpenVPN Serveur Debian — PKI EasyRSA Guide Complet
Installation complète OpenVPN sur Debian/Ubuntu : PKI avec EasyRSA 3, certificats CA/serveur/clients, configuration server.conf, NAT, profils .ovpn et révocation de certificats.
Architecture et fonctionnement
OpenVPN est un VPN SSL/TLS open-source très répandu. Il utilise une PKI (Infrastructure à Clés Publiques) avec une Autorité de Certification (CA) pour authentifier serveurs et clients. Il fonctionne en UDP (recommandé) ou TCP sur le port de votre choix.
| Mode | Description | Usage typique |
|---|---|---|
| TUN (couche 3) | Tunnel IP — routage entre réseaux | Accès distant, site-to-site routé |
| TAP (couche 2) | Pont Ethernet — même broadcast | VoIP, LAN étendu, cas spécifiques |
| UDP 1194 | Mode par défaut — plus rapide | Recommandé pour tous les usages |
| TCP 443 | Passe les firewalls restrictifs | Contournement de restrictions réseau |
Ce guide utilise EasyRSA 3 pour gérer la PKI et OpenVPN 2.6 sur Debian/Ubuntu. La PKI peut être sur le serveur OpenVPN ou sur une machine dédiée (recommandé en production).
Étape 1 — Installation du serveur et EasyRSA
01-install-openvpn.sh
#!/bin/bash # Installation OpenVPN + EasyRSA sur Debian 12 / Ubuntu apt update apt install -y openvpn easy-rsa # Créer le répertoire de travail EasyRSA make-cadir /etc/openvpn/easy-rsa cd /etc/openvpn/easy-rsa echo "[OK] OpenVPN et EasyRSA installés"
Étape 2 — Créer la PKI et le CA
02-pki-setup.sh
cd /etc/openvpn/easy-rsa # Initialiser la PKI (crée le répertoire de structure) ./easyrsa init-pki # Créer l'Autorité de Certification (CA) # --batch évite les questions interactives ./easyrsa build-ca nopass --batch # Vérifier les fichiers créés ls pki/ # ca.crt — Certificat public du CA (à distribuer aux clients) # private/ca.key — Clé privée du CA (NE JAMAIS partager) echo "[OK] PKI et CA créés"
Étape 3 — Générer les certificats serveur et clients
03-certificates.sh
cd /etc/openvpn/easy-rsa # ── Certificat et clé du SERVEUR ───────────────────────────── ./easyrsa gen-req server nopass --batch ./easyrsa sign-req server server --batch # ── Paramètres Diffie-Hellman (échange de clés sécurisé) ───── ./easyrsa gen-dh # ── Clé TLS-Auth (protection contre les attaques DoS/replay) ─ openvpn --genkey secret pki/ta.key # ── Certificat CLIENT (répéter pour chaque client) ─────────── CLIENT="client-jean" ./easyrsa gen-req $CLIENT nopass --batch ./easyrsa sign-req client $CLIENT --batch # ── Copier les fichiers serveur dans /etc/openvpn/server/ ──── cp pki/ca.crt /etc/openvpn/server/ cp pki/issued/server.crt /etc/openvpn/server/ cp pki/private/server.key /etc/openvpn/server/ cp pki/dh.pem /etc/openvpn/server/ cp pki/ta.key /etc/openvpn/server/ chmod 600 /etc/openvpn/server/*.key chown -R root:root /etc/openvpn/server/ echo "[OK] Certificats générés et copiés"
Étape 4 — Configuration du serveur OpenVPN
/etc/openvpn/server/server.conf
# ── Réseau ──────────────────────────────────────────────────── port 1194 proto udp dev tun # ── Certificats PKI ─────────────────────────────────────────── ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem # ── Sécurité TLS ───────────────────────────────────────────── tls-auth /etc/openvpn/server/ta.key 0 tls-version-min 1.2 cipher AES-256-GCM auth SHA256 tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384 # ── Réseau VPN ─────────────────────────────────────────────── server 10.8.0.0 255.255.255.0 # Plage IP attribuée aux clients ifconfig-pool-persist /var/log/openvpn/ipp.txt # ── Pousser la route et le DNS vers les clients ─────────────── push "redirect-gateway def1 bypass-dhcp" # Tout le trafic via VPN push "dhcp-option DNS 192.168.1.10" # DNS interne push "dhcp-option DNS 8.8.8.8" push "route 192.168.1.0 255.255.255.0" # Réseau LAN entreprise # ── Maintien de connexion ───────────────────────────────────── keepalive 10 120 persist-key persist-tun # ── Sécurité (moindre privilège) ────────────────────────────── user nobody group nogroup # ── Logs ───────────────────────────────────────────────────── status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 # ── Révocation (CRL) ───────────────────────────────────────── # crl-verify /etc/openvpn/server/crl.pem
Étape 5 — Activation NAT et démarrage
05-nat-start.sh
#!/bin/bash
# ── Activer le routage IP ─────────────────────────────────────
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# ── NAT : partager la connexion internet avec les clients VPN ─
# Remplacer eth0 par votre interface WAN réelle
NIC=$(ip route | awk '/default/ {print $5; exit}')
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $NIC -j MASQUERADE
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT
# Rendre les règles persistantes
apt install -y iptables-persistent
netfilter-persistent save
# ── Créer le répertoire de logs ───────────────────────────────
mkdir -p /var/log/openvpn
# ── Démarrer et activer OpenVPN ───────────────────────────────
systemctl enable --now openvpn-server@server
systemctl status openvpn-server@server
# ── Ouvrir le port dans le firewall ──────────────────────────
ufw allow 1194/udp
ufw allow OpenSSH
echo "[OK] OpenVPN démarré sur UDP 1194"
Étape 6 — Générer un fichier .ovpn pour le client
06-gen-client-ovpn.sh
#!/bin/bash
# Script de génération de profil .ovpn client
CLIENT=${1:-"client-jean"}
EASYRSA_DIR="/etc/openvpn/easy-rsa"
SERVER_IP="vpn.entreprise.fr" # IP publique ou FQDN du serveur
OUTPUT="/root/clients/${CLIENT}.ovpn"
mkdir -p /root/clients
cat > $OUTPUT << EOF
client
dev tun
proto udp
remote $SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
verb 3
key-direction 1
<ca>
$(cat $EASYRSA_DIR/pki/ca.crt)
</ca>
<cert>
$(openssl x509 -in $EASYRSA_DIR/pki/issued/${CLIENT}.crt)
</cert>
<key>
$(cat $EASYRSA_DIR/pki/private/${CLIENT}.key)
</key>
<tls-auth>
$(cat $EASYRSA_DIR/pki/ta.key)
</tls-auth>
EOF
echo "[OK] Profil généré : $OUTPUT"
echo " Transférer ce fichier au client de manière sécurisée (SCP, chiffré)"
Révoquer un certificat client
revoke-client.sh
cd /etc/openvpn/easy-rsa # Révoquer le certificat d'un client (départ, vol de laptop...) CLIENT="client-jean" ./easyrsa revoke $CLIENT --batch # Générer la CRL (Certificate Revocation List) ./easyrsa gen-crl # Copier la CRL dans le répertoire serveur cp pki/crl.pem /etc/openvpn/server/ # Décommenter dans server.conf : # crl-verify /etc/openvpn/server/crl.pem systemctl restart openvpn-server@server echo "[OK] Certificat de $CLIENT révoqué"
Vérification et diagnostic
| Commande | Description |
|---|---|
| systemctl status openvpn-server@server | État du service OpenVPN |
| journalctl -u openvpn-server@server -f | Logs OpenVPN en temps réel |
| cat /var/log/openvpn/openvpn-status.log | Clients connectés et IPs attribuées |
| ip addr show tun0 | Interface tunnel VPN (10.8.0.1) |
| ping 10.8.0.2 | Tester la connectivité avec un client VPN |
| iptables -t nat -L -n -v | Vérifier les règles NAT |
| netstat -ulnp | grep 1194 | Vérifier que OpenVPN écoute sur UDP 1194 |
Client Windows/Mac/Linux : Installer OpenVPN Connect ou le client
openvpn, importer le fichier .ovpn et se connecter. Sur Linux : openvpn --config client.ovpn. Sur Android/iOS : application OpenVPN Connect.Ressources officielles OpenVPN
OpenVPN Community
Page officielle OpenVPN Community Edition
Documentation OpenVPN
Guide de configuration et options complètes
EasyRSA GitHub
Dernière version d'EasyRSA pour la PKI
OpenVPN manpage
Manuel complet de toutes les directives
OpenVPN Connect
Client officiel Windows/Mac/iOS/Android
Forum OpenVPN
Communauté d'entraide et support
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google