J'ai la question exacte il y a quelques mois, mais en plus, je voulais avoir une connexion IPv6 si possible. Vous pourriez être intéressé par mes questions sur Serverfault:
Je n'avais qu'une seule carte réseau ("interface réseau") sur mon serveur pour l'utiliser. Dans ma configuration, NetworkManager n'était pas suffisant car je dois exécuter un script personnalisé pour prendre en charge IPv6. Pour plus de simplicité cependant, je vais utiliser NetworkManager ici et omettre le support IPv6.
Tout d'abord, prenez une décision sur la méthode d'authentification. J'utiliserai la méthode du certificat plus sûr qui fonctionne comme SSL: pendant la prise de contact, 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éparer
Tout d'abord, installez le serveur openvpn. C'est aussi simple que cela sudo apt-get install openvpn
. La partie difficile est de le configurer. 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 récupérés auprès d'une autorité de certification (autorité commune). La création des certificats et des clés privées associées peut être effectuée sur n'importe quelle machine, elle n'a pas à être effectuée 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, sauf si la clé privée de votre autorité de certification a été compromise. Dans ce cas, des certificats valides peuvent être créés qui seront acceptés par le serveur, entraînant une faille de sécurité.
La documentation officielle suggère de faire l'administration en /etc/openvpn
. Je ne suis pas un grand fan de tout exécuter en tant que root, donc 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
vars
selon vos besoins, par exemple en définissant KEY_SIZE=2048
votre position paranoïaque.
Chargez les variables et créez le répertoire clé en exécutant:
. vars
Si vous obtenez une erreur qui No ... openssl.cnf file could be found
Further invocations will fail
s'exécute ln -s openssl-1.0.0.cnf openssl.cnf
, puis à . vars
nouveau.
Si c'est la première fois que vous utilisez cette autorité de certification, 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 que vous souhaitez, mais notez que ces informations seront visibles dans les fichiers journaux lorsque les clients se connecteront au serveur. Cela va créer les fichiers ca.key
et ca.crt
dans le sous-dossier keys
. Gardez le ca.key
fichier secret en toutes circonstances . Ne pas le faire permettra à toute personne possédant la clé de se connecter à votre serveur.
- Si vous avez un certificat précédent perdu ou expiré, 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, sauf si vous êtes prêt à entrer le mot de passe à chaque démarrage du serveur (non recommandé). Confirmez en signant le certificat et en le validant. Deux nouveaux fichiers apparaîtront dans le répertoire keys
: server.key
et server.crt
.
DH et utilisez prepare for tls-auth
Générez des paramètres Diffie-Hellman en utilisant:
./build-dh
Par pointes de durcissement , utilisez tls-auth
. Pour cela, générez la clé secrète partagée 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 CA et votre certificat de serveur:
cd ~/openvpn-admin/easy-rsa
Si vous avez ignoré l'étape de création de l'autorité de certification parce que vous en avez déjà une, vous devez d'abord charger les variables:
. vars
- Si vous créez de nouveaux certificats parce que 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éez le certificat clients 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 de certificats de serveur, confirmez la signature du certificat et la validation des modifications.
3. Configurez le service OpenVPN
Par défaut, OpenVPN s'exécute en tant que root lors de l'acceptation des connexions. Ce n'est pas une bonne idée si le service est accessible à partir du mal Internet.
Créez un utilisateur dédié pour OpenVPN, par exemple 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 clé) à partir du répertoire des clés dans /etc/openvpn
. Une autorisation de 400 (lecture seule pour le propriétaire) est très bien.
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-y 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 configuration:
sudo chmod 640 /etc/openvpn/server.conf
4. Fin du serveur
Si vous avez créé les certificats sur le serveur, c'est une bonne idée de le chiffrer ou de le déplacer hors du serveur. Dans tous les cas, ne perdez pas le ca.key
et server.key
. Dans le premier cas, d'autres pourront se connecter à votre serveur. Dans ce dernier, 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 durcir la sécurité
you.crt
: s'identifier au serveur
you.key
: c'est comme votre mot de passe, les autorisations de fichiers devraient être 400 (lecture seule pour le propriétaire)
1. Installation
Installez OpenVPN et le plugin NetworkManager (adapté à KDE et Gnome):
sudo apt-get install openvpn network-manager-openvpn
network-manager-openvpn
est dans le référentiel de l'univers.
2. Configuration
Dans le panneau de configuration, utilisez les détails suivants:
- Passerelle: l'adresse IP du serveur
- Type: "Certificats (TLS)" (Gnome) ou "Certificat X.509" (KDE)
- Certificat CA: chemin vers
ca.crt
- Certificat utilisateur: chemin vers
you.crt
- Clé privée: chemin vers
you.key
Chez Advanced :
- Port de passerelle: automatique (1194) (n'a pas besoin d'être modifié)
- Utiliser la compression de données LZO: activé
- Utiliser la connexion TCP: désactivé
- Utiliser l'appareil TAP: activé
- Chiffrement: par défaut
- Authentification HMAC: par défaut
- Utiliser l'authentification TLS: activé
Spécifiez le chemin d'accès au fichier clé ta.key
et définissez "Direction 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 plugin 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
, ...) /etc/openvpn
et créez le fichier /etc/openvpn/client.conf
fichier:
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, modifiez /etc/default/openvpn
et décommentez 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