J'ai la question exacte il y a quelques mois, mais en plus, je souhaitais avoir une connexion IPv6 si possible. Vous pourriez être intéressé par mes questions sur Serverfault:
Je n’avais qu’un seul NIC ("interface réseau") sur mon serveur pour l’utiliser. Dans ma configuration, NetworkManager ne suffisait pas car je dois exécuter un script personnalisé pour prendre en charge IPv6. Pour plus de simplicité, je vais utiliser NetworkManager ici et omettre le support IPv6.
D'abord, prenez simplement une décision sur la méthode d'authentification. J'utiliserai la méthode du certificat plus sûr qui fonctionne comme SSL: pendant le handshake, un secret commun est choisi qui sera utilisé pour la session. Les autres méthodes sont une clé partagée; un nom d'utilisateur et un mot de passe.
Serveur
1. Préparez
D'abord, installez le serveur openvpn. C'est aussi simple que sudo apt-get install openvpn
. La partie difficile est la configuration. La configuration est présente dans /etc/openvpn
.
2. Configurer l'authentification
Le serveur a besoin de certificats pour s’identifier et identifier ses clients. Ces certificats sont extraits d'une autorité de certification (Common Authority). La création des certificats et des clés privées associées peut être effectuée sur n'importe quelle machine, cela ne doit pas être fait sur le serveur. Si vous êtes vraiment paranoïaque, vous devez le faire sur une machine qui n’est pas connectée à un réseau et utiliser une clé USB pour transférer les certificats.
Créer une autorité de certification et des certificats pour le serveur
Cette étape doit être effectuée une fois, à moins que la clé privée de votre autorité de certification ne soit compromise. Dans ce cas, des certificats valides peuvent être créés, qui seront acceptés par le serveur, entraînant une violation de la sécurité.
La documentation officielle suggère d’effectuer l’administration en /etc/openvpn
. Je ne suis pas un grand fan de tout faire en tant que root, alors je vais le mettre dans un répertoire différent.
-
Créez le répertoire d’administration et copiez-y les fichiers en exécutant:
mkdir ~/openvpn-admin
cd ~/openvpn-admin
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
cd easy-rsa
- Modifiez les valeurs par défaut dans
vars
si nécessaire, par exemple en définissant KEY_SIZE=2048
parce que vous êtes paranoïaque.
-
Chargez les variables et créez le répertoire de clés en exécutant:
. vars
-
Si vous rencontrez une erreur, No ... openssl.cnf file could be found
Further invocations will fail
, exécutez ln -s openssl-1.0.0.cnf openssl.cnf
, puis . vars
à nouveau.
-
Si vous utilisez cette autorité de certification pour la première fois, préparez l’environnement des clés. N'exécutez pas cette commande si vous souhaitez conserver votre autorité de certification précédemment créée. Pour ce faire, vous devrez déployer un nouveau ca.crt
.
./clean-all
- Créez l’autorité de certification en exécutant
./build-ca
. Vous pouvez remplir tous les détails de votre choix, mais notez que ces informations seront visibles dans les fichiers journaux lorsque le client se connecte au serveur. Cela créera les fichiers ca.key
et ca.crt
dans le sous-dossier keys
. Conservez le secret du fichier ca.key
dans toutes les circonstances . Si vous ne le faites pas, toute personne disposant de la clé pourra se connecter à votre serveur.
- Si vous avez perdu ou expiré un certificat précédent, vous devez d'abord révoquer l'ancien avec
./revoke-full server
. Sinon, vous obtenez une erreur de base de données.
-
Créez le certificat pour le serveur en exécutant:
./build-key-server server
Lorsqu'on vous demande un mot de passe, laissez-le vide à moins que vous ne souhaitiez entrer le mot de passe à chaque démarrage du serveur (non recommandé). Confirmez la signature du certificat et validez-le. Deux nouveaux fichiers apparaîtront dans le répertoire keys
: server.key
et server.crt
.
DH et utilisez prepare pour tls-auth
Génération des paramètres Diffie-Hellman à l'aide de:
./build-dh
Selon les conseils de renforcement , utilisez tls-auth
. Pour cela, générez la clé de secret partagé en utilisant:
openvpn --genkey --secret ta.key
Le fichier résultant ( ta.key
) doit également être distribué aux clients, mais vous ne devez pas le mettre en public.
Créer des certificats pour les clients
Pour chaque client, ces étapes doivent être répétées:
-
Entrez le répertoire dans lequel vous avez créé votre certificat d’autorité de certification et de serveur:
cd ~/openvpn-admin/easy-rsa
-
Si vous avez ignoré l’étape de création de l’autorité de certification car vous en avez déjà une, vous devez d’abord charger les variables:
. vars
- Si vous créez de nouveaux certificats car les anciens sont perdus ou expirés , vous devez d'abord révoquer l'ancien avec
./revoke-full you
. Sinon, vous obtenez une erreur de base de données.
-
Créer le certificat client you.key
et son certificat correspondant you.crt
:
./build-key you
Le CommonName
devrait être unique. Laissez le mot de passe vide si vous utilisez KDE car il n'est pas encore pris en charge à partir de 10.10.Comme pour la génération du certificat de serveur, confirmez la signature du certificat et validez les modifications.
3. Configurez le service OpenVPN
Par défaut, OpenVPN s'exécute en tant que root lors de l'acceptation de connexions. Ce n'est pas une bonne idée si le service est accessible depuis Internet.
-
Créez l'utilisateur dédié pour OpenVPN, dites openvpn
:
sudo useradd openvpn
-
Copiez les fichiers server.key
, server.crt
, ca.crt
et dh1024.pem
(ou dh2048.pem
si vous avez changé la taille de la clé) du répertoire keys dans /etc/openvpn
. Une autorisation de 400 (lecture seule pour le propriétaire) est correcte.
sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
-
Copiez également le fichier ta.key
:
sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
sudo chmod 400 /etc/openvpn/ta.key
-
Créez le fichier /etc/openvpn/server.conf
et insérez les lignes suivantes:
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0
# Compress data to save bandwidth
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
# Logs are useful for debugging
log-append openvpn-log
verb 3
mute 10
-
Définissez les autorisations appropriées, il n’a pas besoin d’être secret, mais je préfère ne pas divulguer les détails de la configuration pour:
sudo chmod 640 /etc/openvpn/server.conf
4. Terminer le serveur
Si vous avez créé les certificats sur le serveur, il est préférable de les chiffrer ou de les retirer du serveur. Dans tous les cas, ne perdez pas les ca.key
et server.key
. Dans le premier cas, les autres pourront se connecter à votre serveur. Dans ce dernier cas, un MITM est possible.
Client
Outre l’adresse IP du serveur, l’administrateur du serveur doit remettre les fichiers suivants:
-
ca.crt
: pour vérifier les certificats
-
server.crt
: pour vérifier le serveur et communiquer avec lui
-
ta.key
: pour renforcer la sécurité
-
you.crt
: pour vous identifier avec le serveur
-
you.key
: c'est comme votre mot de passe, les autorisations de fichier doivent être 400 (lecture seule pour le propriétaire)
1. Installation
Installez OpenVPN et le plug-in NetworkManager (adapté à KDE et Gnome):
sudo apt-get install openvpn network-manager-openvpn
network-manager-openvpn
est dans le référentiel d'univers.
2. Configuration
Dans le panneau de configuration, utilisez les informations suivantes:
- Passerelle: l’adresse IP du serveur
- Tapez: "Certificats (TLS)" (Gnome) ou "Certificat X.509" (KDE)
- Certificat CA: chemin d'accès à
ca.crt
- Certificat utilisateur: chemin d'accès à
you.crt
- Clé privée: chemin d'accès à
you.key
À Avancé :
- Port de la passerelle: Automatique (1194) (n’a pas besoin d’être modifié)
- Utiliser la compression de données LZO: activée
- Utiliser la connexion TCP: désactivé
- Utiliser le périphérique TAP: activé
- Cipher: default
- Authentification HMAC: par défaut
- Utiliser l'authentification TLS: activé
Spécifiez le chemin d'accès du fichier de clés à ta.key
et définissez "Direction de la clé" sur 1
.
- ( todo - check it out ) le serveur pousse la passerelle par défaut pour que tout le trafic passe par la connexion VPN. La dernière fois que j'ai vérifié, le plug-in network-manager-openvpn ne l'a pas fait.
Si vous ne parvenez pas à faire fonctionner NetworkManager ou si vous ne souhaitez pas l’utiliser, placez les fichiers ( ca.crt
, ...) dans /etc/openvpn
et créez le fichier /etc/openvpn/client.conf
file:
client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20
Si vous ne souhaitez pas activer ce VPN au démarrage, éditez /etc/default/openvpn
et supprimez la mise en commentaire de la ligne suivante en supprimant #
:
#AUTOSTART="none"
Pour démarrer cette connexion, exécutez:
sudo /etc/init.d/openvpn start client
client
doit être renommé si votre fichier de configuration n'est pas nommé client.conf
. Exemple: si vous avez nommé votre fichier de configuration safe.conf
, vous devez exécuter sudo /etc/init.d/openvpn start safe
.
Pour arrêter OpenVPN, vous devez exécuter:
sudo /etc/init.d/openvpn stop