Installer et configurer OpenVPN sur FreeBSD 12.0

Ce guide détaille étape par étape l’installation et la configuration d’un serveur OpenVPN basé sur certificats sur FreeBSD 12.0. Vous apprendrez à installer le paquet, générer une PKI avec easy-rsa, configurer OpenVPN, ajuster pf pour la NAT et le filtrage, activer le routage, créer le profil client et vérifier la connexion. Inclut des conseils de sécurité, un playbook de révocation et une check-list d’exploitation.
Important — Ce guide suppose un accès root/invité administrateur. Adaptez les adresses IP, interfaces et chemins à votre environnement.
Contexte et définitions rapides
OpenVPN est un logiciel open source qui crée un réseau privé virtuel (VPN) sur Internet public en chiffrant le trafic. Il utilise la bibliothèque OpenSSL pour le chiffrement et propose plusieurs mécanismes d’authentification : certificats, clés pré-partagées ou couple identifiant/mot de passe. PKI (Infrastructure à clé publique) : ensemble d’éléments (CA, certificats, clés privées et listes de révocation) pour gérer l’authentification basée sur certificats.
Prérequis
- FreeBSD 12.0 installé (minimum recommandé 512 Mo de RAM et 1 CPU) — 512 Mo → 512 Mo
- Accès root (ou sudo)
- paquet openvpn disponible via pkg
- pare-feu pf (installation et configuration de pf expliquées ci-dessous)
- connaissance de base des concepts réseau (interfaces, NAT, routes)
Ce que nous allons faire
- Installer OpenVPN sur FreeBSD 12.0
- Préparer les variables pour easy-rsa
- Générer la PKI : CA, serveur, client, DH et CRL
- Configurer OpenVPN côté serveur
- Ajuster pf pour la NAT et le filtrage
- Activer le routage / forwarding
- Créer et préparer la configuration client
- Tester la connexion et vérifier le routage
Étape 1 — Installer OpenVPN
Mettez à jour le dépôt de paquets et installez OpenVPN :
pkg update
pkg install openvpn
Après l’installation, activez le service OpenVPN au démarrage et définissez l’interface tunnel “tun” :
sysrc openvpn_enable="YES"
sysrc openvpn_if="tun"
Maintenant, le paquet OpenVPN est installé sur votre système FreeBSD 12.0.
Étape 2 — Préparer les variables pour easy-rsa
Nous allons utiliser easy-rsa fourni avec le paquet pour générer la PKI. Créez le répertoire OpenVPN et copiez easy-rsa :
mkdir -p /usr/local/etc/openvpn/
cp -R /usr/local/share/easy-rsa /usr/local/etc/openvpn/
Positionnez-vous dans le répertoire easy-rsa et éditez le fichier vars :
cd /usr/local/etc/openvpn/easy-rsa/
vim vars
Remplacez et adaptez les valeurs ci-dessous selon votre organisation ; conservez la structure. Exemple :
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "DE"
set_var EASYRSA_REQ_PROVINCE "Frankfurt"
set_var EASYRSA_REQ_CITY "Frankfurt"
set_var EASYRSA_REQ_ORG "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST "sha256"
Rendez le fichier exécutable :
chmod +x vars
Étape 3 — Générer les certificats (PKI)
Initialisez la PKI, puis créez la CA, les certificats serveur et client, le DH et la CRL.
cd /usr/local/etc/openvpn/easy-rsa/
./easyrsa.real init-pki
Générer la CA :
./easyrsa.real build-ca
Vous serez invité à entrer une phrase secrète pour la clé CA. Conservez-la dans un coffre-fort.
Générer et signer la clé serveur :
./easyrsa.real gen-req openvpn-bsd nopass
./easyrsa.real sign-req server openvpn-bsd
Saisissez la passphrase de la CA pour signer. Vérifiez la signature :
openssl verify -CAfile pki/ca.crt pki/issued/openvpn-bsd.crt
Générer et signer le certificat client (exemple client01) :
./easyrsa.real gen-req client01 nopass
./easyrsa.real sign-req client client01
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
Générez la CRL et les paramètres Diffie-Hellman :
./easyrsa.real gen-crl
./easyrsa.real gen-dh
Copiez ensuite les certificats et clés vers la structure de configuration OpenVPN :
mkdir -p /usr/local/etc/openvpn/{server,client}
cp pki/ca.crt /usr/local/etc/openvpn/server/
cp pki/issued/openvpn-bsd.crt /usr/local/etc/openvpn/server/
cp pki/private/openvpn-bsd.key /usr/local/etc/openvpn/server/
cp pki/dh.pem /usr/local/etc/openvpn/server/
cp pki/crl.pem /usr/local/etc/openvpn/server/
cp pki/ca.crt /usr/local/etc/openvpn/client/
cp pki/issued/client01.crt /usr/local/etc/openvpn/client/
cp pki/private/client01.key /usr/local/etc/openvpn/client/
Étape 4 — Configurer le serveur OpenVPN
Créez le fichier de configuration serveur :
cd /usr/local/etc/openvpn/
vim openvpn.conf
Exemple de configuration serveur recommandée :
# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun
# OpenVPN Server Certificate - CA, server key and certificate
ca /usr/local/etc/openvpn/server/ca.crt
cert /usr/local/etc/openvpn/server/openvpn-bsd.crt
key /usr/local/etc/openvpn/server/openvpn-bsd.key
#DH and CRL key
dh /usr/local/etc/openvpn/server/dh.pem
crl-verify /usr/local/etc/openvpn/server/crl.pem
# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.5.0 255.255.255.0
push "redirect-gateway def1"
# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"
#Enable multiple clients to connect with the same certificate key
duplicate-cn
# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache
# Other Configuration
keepalive 20 60
explicit-exit-notify 1
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody
# OpenVPN Log
log-append /var/log/openvpn.log
verb 3
Démarrez et vérifiez le service :
service openvpn start
service openvpn status
Vérifiez le port d’écoute :
sockstat -l4
Étape 5 — Configurer pf (pare-feu)
Nous allons créer des règles pf qui font la NAT (masquerading) des adresses VPN et autorisent le trafic UDP vers le port OpenVPN. Éditez /usr/local/etc/pf.conf :
cd /usr/local/etc/
vim pf.conf
Définissez les variables d’interface. Remplacez $ext_if et $ext_ip par vos valeurs réelles :
# vpn interface
vpn_if="tun0"
vpn_net = "10.5.5.0/24"
Réassemblez les fragments sur l’interface externe :
# reassemble all fragmented packets before filtering them
scrub in on $ext_if all fragment reassemble
Définissez la NAT pour le trafic sortant du VPN :
# route traffic from VPN interface out to the internet
nat on ! $vpn_if from $vpn_net to any -> $ext_ip
Autorisez l’accès UDP vers le port 1194 et le trafic interne du tunnel :
# Allow Connection to VPN Server
pass in on $ext_if proto udp from any to ($ext_if) port 1194 keep state
# Pass all connection on the VPN Interface
pass in on $vpn_if from any to any
Vérifiez et rechargez pf :
service pf check
service pf reload
pfctl -sr
pfctl -sn
Conseil d’exploitation : conservez une session SSH active avant de recharger pf pour éviter de vous verrouiller hors du serveur.
Étape 6 — Activer le routage et le forwarding
Autorisez le routage IPv4 et IPv6 en modifiant /etc/sysctl.conf :
vim /etc/sysctl.conf
Ajoutez :
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
Appliquez la configuration :
sysctl -f /etc/sysctl.conf
Activez la fonctionnalité de gateway au démarrage :
sysrc gateway_enable="YES"
Puis redémarrez si nécessaire :
reboot
Étape 7 — Préparer le client
Créez le fichier client .ovpn et rapatriez-y le certificat, la clé et la CA :
cd /usr/local/etc/openvpn/client/
vim client01.ovpn
Exemple de configuration client :
client
dev tun
proto udp
remote xxx.xxx.xxx.xxx 1194
ca ca.crt
cert client01.crt
key client01.key
cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
Téléchargez sur la machine cliente : ca.crt, client01.crt, client01.key et client01.ovpn.
Étape 8 — Tests de connexion
Sur la machine cliente, lancez :
openvpn --config client01.ovpn
En parallèle, vérifiez l’interface tun côté client :
ifconfig tun0
Pinger le serveur interne :
ping -c3 10.5.5.1
Contrôlez l’adresse IP publique vue depuis le client via le tunnel :
curl ipinfo.io
Si tout fonctionne, vous devez pouvoir atteindre des ressources internes et naviguer sur Internet via l’IP publique du serveur.
Sécurité et durcissement recommandés
- Désactiver duplicate-cn en production pour lier un certificat à un seul client.
- Utiliser au minimum RSA 2048 ou préférer des clés ECC si votre version d’OpenSSL et d’OpenVPN les supporte.
- Stocker les clés CA dans un coffre (Vault, HSM, ou clé USB sécurisée hors ligne).
- Activer tls-auth ou tls-crypt pour protéger la phase TLS contre certaines attaques et réduire l’empreinte des scans.
- Surveiller /var/log/openvpn.log et configurer une rotation des logs.
- Restreindre les règles pf au minimum requis et limiter les sources autorisées si possible.
- Renouveler les certificats selon un cycle (ex : 1 an) et automatiser la révocation dans la CRL.
Playbook rapide : révoquer un client et mettre à jour la CRL
- Sur le serveur PKI :
cd /usr/local/etc/openvpn/easy-rsa/
./easyrsa.real revoke client01
./easyrsa.real gen-crl
cp pki/crl.pem /usr/local/etc/openvpn/server/crl.pem
service openvpn restart
- Vérifiez que client01 ne peut plus se connecter. Gardez la CRL sauvegardée et horodatée.
Checklist d’administration (rôles)
Admin système — avant déploiement :
- Vérifier accès console et SSH
- Sauvegarder configuration pf et openvpn
- Préparer coffre pour la CA
- Planifier fenêtres de maintenance
Opérateur réseau — mise en service :
- Valider routage et NAT
- Tester latence et bande passante via VPN
- Vérifier logs et métriques
Utilisateur final — client :
- Disposer de ca.crt, client.crt, client.key et client.ovpn
- Vérifier heure système et DNS
- Tester accès aux ressources internes
Dépannage courant
Symptômes et vérifications :
- Pas d’établissement de connexion TLS : vérifier l’heure système, la correspondance CN et les chemins des certificats.
- Pas de routage internet via VPN : vérifier sysctl net.inet.ip.forwarding, règles pf et NAT.
- Erreurs CRL : s’assurer que crl-verify pointe vers le bon fichier et que la CRL est lisible par l’utilisateur openvpn.
- Port occupé : utiliser sockstat -l4 pour voir quel service écoute et ajuster.
Commandes utiles :
service openvpn status
tail -f /var/log/openvpn.log
pfctl -s all
sockstat -l4
ifconfig tun0
tcpdump -i tun0
Alternatives et choix d’architecture
- WireGuard : protocole moderne, plus simple et souvent plus performant, mais attention au modèle de clés différent et à la maturité en production selon les besoins.
- OpenVPN over TCP : utile si UDP est bloqué par des proxys, mais plus de latence.
- Authentification multi-facteurs : intégration possible via scripts ou plugins pour renforcer l’authentification.
Modèle mental rapide
Pensez à votre VPN comme à un tunnel sécurisé :
- Authentification = qui peut ouvrir le tunnel (certificats)
- Chiffrement = confidentialité du contenu (OpenSSL)
- Routage/NAT = comment le trafic traverse le réseau (pf + sysctl)
- Revocation = liste noire des certificats compromis (CRL)
Critères de réussite (tests d’acceptation)
- Le service OpenVPN démarre sans erreur et écoute sur le port configuré.
- Un client authentifié obtient une IP 10.5.5.x et peut ping 10.5.5.1.
- Le client passe le trafic internet via l’IP publique du serveur (vérifié avec ipinfo.io).
- Un certificat révoqué est refusé après mise à jour de la CRL.
Petite boîte de faits utiles
- Port par défaut OpenVPN : 1194/UDP
- Sous-réseau d’exemple utilisé : 10.5.5.0/24
- Taille de clé recommandée : 2048 bits (RSA) minimum
- Algorithme de hachage montré : SHA-512
Glossaire en une ligne
- CA : Autorité de certification qui signe les certificats.
- PKI : Infrastructure de gestion des certificats (CA, certificats, CRL).
- CRL : Liste de révocation de certificats.
- DH : Paramètres Diffie-Hellman pour l’échange de clé.
FAQ
Puis-je utiliser le même certificat pour plusieurs appareils ?
Non recommandé en production. duplicate-cn permet plusieurs connexions avec la même paire clé/certificat, mais réduit l’auditabilité et la sécurité.
Que faire si je perds la clé CA ?
Si la clé privée de la CA est compromise ou perdue, la seule option sûre est de créer une nouvelle CA et de réémettre tous les certificats.
OpenVPN fonctionne-t-il sur IPv6 ?
Oui, OpenVPN supporte IPv6 mais la configuration pf et le routage doivent être adaptés pour IPv6.
Résumé
Ce guide vous a montré comment installer et configurer un serveur OpenVPN sur FreeBSD 12.0 en utilisant easy-rsa pour une authentification par certificats. Il couvre la préparation de la PKI, la configuration serveur et client, la configuration du pare-feu pf, l’activation du routage, les tests, ainsi que des recommandations de sécurité et des procédures d’exploitation et de révocation.
Notes importantes
- Adaptez tous les exemples d’IP et d’interfaces à votre infrastructure.
- Sauvegardez la clé privée de la CA hors ligne.
Références
Matériaux similaires

Réparer YouTube Vanced : l'app s'arrête

Donner la puissance de votre PC avec BOINC

Partager mot de passe Wi‑Fi par QR code

Désactiver User OOBE Broker sur Windows

5G absente du réseau préféré sur Android — Corriger
