Comment configurer et se connecter à un serveur OpenVPN privé sur FreeBSD 10.1
Introduction
OpenVPN est une application serveur/client de réseau privé virtuel (VPN) open-source qui vous permet de rejoindre un réseau virtuel (similaire à un LAN) en toute sécurité.
Ce tutoriel explique comment installer et configurer un serveur OpenVPN sur une machine FreeBSD 10.1 avec NAT et routage IPv4. Il comprend de brèves explications sur les différentes options de configuration.
À la fin de ce didacticiel, vous exécuterez votre propre serveur OpenVPN et disposerez d'un fichier de configuration client prêt à être téléchargé pour vous connecter à ce réseau.
Conditions préalables
- Une gouttelette FreeBSD 10.1. La taille des gouttelettes dépend du nombre de clients que vous avez l'intention de connecter au VPN ; 519 Mo suffisent pour quelques clients
- Accès racine. sudo est pré-installé sur DigitalOcean, il n'y a donc rien de plus à faire
Ce didacticiel nécessite un accès root. Sur DigitalOcean, accédez au serveur en tant qu'utilisateur freebsd par défaut, puis accédez au shell root :
sudo tcsh
Étape 1 - Installation d'OpenVPN
L'installation d'OpenVPN avec le système pkg
est assez simple. Exécutez simplement ces commandes pour mettre à jour les listes de packages et installer le logiciel VPN :
pkg update pkg install openvpn
Cela devrait également installer le package easy-rsa
, qui sera utilisé pour générer les paires de clés SSL.
Étape 2 - Configuration du serveur OpenVPN
Pour ce tutoriel, nous baserons notre fichier de configuration sur l'exemple fourni par OpenVPN. Nous allons créer un dossier de configuration pour OpenVPN :
mkdir /usr/local/etc/openvpn
Copiez le fichier d'exemple server.conf
dans le nouveau répertoire.
cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server.conf
Installez nano
ou votre éditeur de texte préféré :
pkg install nano
Ouvrez le fichier de configuration pour le modifier :
nano /usr/local/etc/openvpn/server.conf
Remarque : Le format de fichier de configuration OpenVPN préfixe les commentaires avec des points-virgules (
;
) ou des hachages (#
). Dans l'exemple, les points-virgules sont utilisés pour commenter (désactiver) les options de configuration et les hachages sont utilisés pour les commentaires.
Si vous savez quelles options de configuration vous souhaitez modifier, vous pouvez le faire à ce stade.
- Optionnel
port
: The default port is 1194, but you can change this to anything you like - Optionnel
proto
: Choose eithertcp
orudp
; the default is fine user
etgroup
: réglez-les surnobody
en décommentant les lignes. Cela fera fonctionner OpenVPN avec moins de privilèges, pour des raisons de sécurité
user nobody group nobody
Remarque : Chaque configuration ne peut exécuter qu'un seul port et protocole à la fois.
Enfin, n'oubliez pas d'enregistrer vos modifications.
Étape 3 - Génération de certificats et de clés de serveur
easy-rsa
simplifie la génération de certificats et de clés.
Tout d'abord, copiez le programme dans votre répertoire de configuration, puisque vous modifierez des valeurs.
cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa
Ouvrez le fichier vars
pour le modifier :
nano /usr/local/etc/openvpn/easy-rsa/vars
Changez la taille de la clé en modifiant cette ligne :
export KEY_SIZE=2048
De nos jours, la norme est les clés de 2048 bits, bien que vous puissiez également utiliser 4096 bits, ce qui est plus sûr mais ralentit la négociation.
Si vous le souhaitez, vous pouvez également définir le certificat par défaut et les valeurs de clé dans ce fichier afin de ne pas avoir à les saisir ultérieurement.
Étant donné que le shell que nous utilisons est tcsh
, les lignes export
doivent être remplacées par setenv
. Cela se fait avec sed
avant le source
. Accédez à notre répertoire easy-rsa
(obligatoire).
cd /usr/local/etc/openvpn/easy-rsa/
Remplacez les lignes :
cat ./vars | sed -e 's/export /setenv /g' -e 's/=/ /g' | source /dev/stdin
Toujours à partir de notre répertoire /usr/local/etc/openvpn/easy-rsa/
, nettoyez d'abord le répertoire, puis créez l'autorité de certification (CA).
./clean-all ./build-ca
Vous serez invité à définir les options CA. Remplissez-les avec vos coordonnées :
Country Name (2 letter code) [US]:GB State or Province Name (full name) [CA]:Somerset Locality Name (eg, city) [SanFrancisco]:Bath Organization Name (eg, company) [Fort-Funston]:Callum Organizational Unit Name (eg, section) [changeme]:VPN Common Name (eg, your name or your server's hostname) [changeme]:vpn.example.com Name [changeme]:Callum's VPN CA Email Address [[email protected]]:[email protected]
Construisez maintenant la clé du serveur :
./build-key-server server
Encore une fois, définissez les options. Vous n'avez pas besoin d'un mot de passe ou d'un nom d'entreprise facultatif.
Saisissez y
pour signer et valider la clé :
Country Name (2 letter code) [US]:GB State or Province Name (full name) [CA]:Somerset Locality Name (eg, city) [SanFrancisco]:Bath Organization Name (eg, company) [Fort-Funston]:Callum Organizational Unit Name (eg, section) [changeme]:VPN Common Name (eg, your name or your server's hostname) [server]:vpn.example.com Name [changeme]:Callum's VPN Server Email Address [[email protected]]:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ENTER An optional company name []: ENTER Certificate is to be certified until Feb 5 14:40:15 2025 GMT (3650 days) Sign the certificate? [y/n]: y 1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated
Enfin, la clé Diffie-Hellman doit être générée. Cela peut prendre un certain temps en fonction de la taille de la clé :
./build-dh
Maintenant que toutes les clés et certificats de serveur sont générés, ils doivent être copiés dans notre répertoire de configuration OpenVPN.
cd /usr/local/etc/openvpn/easy-rsa/keys/ cp dh*.pem ca.crt server.crt server.key /usr/local/etc/openvpn/
Vous avez terminé avec les certificats de serveur ! Passons maintenant au certificat client.
Étape 4 - Génération de certificats client
Chaque client aura également besoin d'un certificat et d'une clé pour s'authentifier et se connecter au VPN. Assurez-vous d'être dans le répertoire /usr/local/etc/openvpn/easy-rsa/
.
cd /usr/local/etc/openvpn/easy-rsa/
Exécutez la commande suivante, où clientName
est le nom que vous souhaitez utiliser pour ce certificat client particulier.
./build-key clientName
Vous serez invité à entrer le nom du pays, le nom de la ville, etc. de nouveau. Le processus est le même que pour la génération de la clé du serveur. Ceci est destiné à être l'information du client, mais rien de tout cela n'a vraiment d'importance.
Vous n'avez pas besoin d'une phrase de passe ou d'un nom d'entreprise. Saisissez y
pour signer et valider le certificat.
Remarque : Il est recommandé d'utiliser un certificat différent pour chaque client, et cela est appliqué par défaut par OpenVPN. Cependant, si nécessaire, cela peut être désactivé dans la configuration OpenVPN (expliqué plus loin).
Si vous avez utilisé une taille de clé différente de 2048
, vous devrez modifier la configuration OpenVPN pour qu'elle corresponde au nom de fichier de la taille de clé que vous avez utilisée. Si vous ne vous en souvenez pas, vous pouvez afficher le nom de fichier correct du fichier dh
avec cette commande :
ls /usr/local/etc/openvpn/easy-rsa/keys/dh*.pem
Modifiez le server.conf
:
nano /usr/local/etc/openvpn/server.conf
Remplacez la ligne dh dh2048.pem
par :
dh dhSIZE.pem
Si vous avez suivi notre recommandation pour la clé 2048 bits plus tôt, vous n'avez pas à apporter de modifications.
Répétez cette section pour chaque certificat client distinct que vous souhaitez créer.
Étape 5 - Configuration du routage NAT IPv4
FreeBSD inclut natd
dans le cadre du pare-feu ipfw
qui permet le routage NAT et peut être utilisé pour OpenVPN. Pour l'utiliser, éditez /etc/rc.conf
:
nano /etc/rc.conf
Ajoutez ces contenus en bas :
firewall_enable="YES" firewall_type="open" gateway_enable="YES" natd_enable="YES" natd_interface="vtnet0" natd_flags="-dynamic -m"
firewall_enable
active le pare-feuipfw
qui est nécessaire pournatd
firewall_type="open"
permet au pare-feu d'autoriser le trafic par défautgateway_enable
définitnet.inet.ip.forwarding
sur1
, ce qui permet le routage IPv4 sur le systèmenatd_enable
active le routeur NAT réelnatd_interface
est l'interface externe vers Internet ;vtnet0
est utilisé pour DigitalOceannatd_flags
rend le NAT dynamique et-m
préserve les numéros de port
Redémarrez maintenant votre serveur pour charger ipfw
et natd
:
reboot
Connectez-vous à nouveau. Après le redémarrage, n'oubliez pas d'exécuter à nouveau sudo tcsh
pour devenir root si vous ne l'êtes pas déjà.
Étape 6 - Configuration de la configuration de routage OpenVPN et du DNS
Par défaut, OpenVPN n'est pas configuré pour indiquer au client d'acheminer le trafic Internet via le VPN. Nous nous assurerons qu'il achemine le trafic via OpenVPN en décommentant certaines lignes dans /usr/local/etc/openvpn/server.conf
:
nano /usr/local/etc/openvpn/server.conf
Localisez et décommentez ces trois lignes :
push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Les serveurs DNS prédéfinis sont pour OpenDNS mais vous pouvez les définir sur le DNS de votre choix (tel que Google DNS avec 8.8.8.8
et 8.8.4.4
).
Paramètres facultatifs :
Vous pouvez également autoriser les clients à communiquer directement entre eux en décommentant :
client-to-client
Si, comme mentionné précédemment, vous souhaitez utiliser les mêmes clés et certificats pour plusieurs clients (ce qui est légèrement moins sécurisé), décommentez cette ligne :
duplicate-cn
La compression peut être activée et désactivée avec cette ligne :
comp-lzo
Votre chiffrement peut être défini manuellement en décommentant l'une de ces lignes :
cipher BF-CBC # Blowfish (default) cipher AES-128-CBC # AES cipher DES-EDE3-CBC # Triple-DES
Remarque : Le chiffrement que vous utilisez doit également être défini dans le fichier de configuration client que nous créerons plus tard.
Des chiffrements supplémentaires sont également disponibles, tels que aes-256-cbc
.
Étape 7 - Démarrage d'OpenVPN
Activez OpenVPN pour charger au démarrage et chargez avec la commande service
en ajoutant la ligne suivante à /etc/rc.conf
:
nano /etc/rc.conf
Ajoutez ces lignes en bas du fichier :
openvpn_enable="YES" openvpn_configfile="/usr/local/etc/openvpn/server.conf"
Le serveur OpenVPN est maintenant entièrement configuré et se chargera au démarrage.
Démarrez le serveur manuellement avec :
service openvpn start
Production attendue:
add net 10.8.0.0: gateway 10.8.0.2
Votre serveur OpenVPN est maintenant en cours d'exécution.
Étape 8 - Configuration du fichier client
Sur le serveur, nous allons créer le fichier de configuration pour chaque client.
Tout d'abord, créez un dossier dans lequel travailler :
mkdir -p /usr/local/etc/openvpn/clients/clientName
Faites de clientName
le nom du client que nous avons défini précédemment lors de la génération des certificats. (Peu importe comment vous le définissez précisément, car il ne s'agit que d'un répertoire de travail.)
Déplacez-vous vers le nouveau répertoire :
cd /usr/local/etc/openvpn/clients/clientName/
Copiez la clé client et le certificat que nous avons générés avec easy-rsa
, et l'exemple de fichier client.conf
. Assurez-vous de remplacer le clientName
par le nom que vous avez utilisé précédemment pour les fichiers .key
et .crt
:
cp /usr/local/etc/openvpn/easy-rsa/keys/clientName.crt /usr/local/etc/openvpn/easy-rsa/keys/clientName.key ./ cp /usr/local/share/examples/openvpn/sample-config-files/client.conf ./client.conf cp /usr/local/etc/openvpn/ca.crt ./
Encore une fois, clientName
était ce que nous avons utilisé plus tôt.
Modifiez le fichier client.conf
:
nano ./client.conf
Mettez à jour la ligne remote
pour inclure l'adresse IP de votre Droplet (qui peut être obtenue avec ifconfig
) et le numéro de port ; 1194
est la valeur par défaut :
remote your_server_ip 1194
Remarque : Si vous avez modifié les paramètres
cipher
oucomp-lzo
du serveur, cela doit être reflété dans le fichierclient.conf
. Utilisez les mêmes paramètres que précédemment ; par exemple:cipher aes-256-cbc ;comp-lzoCe paramètre utilise le chiffrement
aes-256-cbc
et désactive la compression.Si vous avez modifié la ligne
proto
dans la configuration du serveur, cela doit également être reflété dans le client.Assurez-vous que ces lignes correspondent à ce que vous avez défini précédemment ; si vous n'avez rien changé côté serveur, ne les changez pas ici.
Maintenant un peu de ménage; nous intégrerons les certificats et la clé dans le fichier de configuration unique. Cela facilite le transfert aux clients individuels. Alternativement, vous pouvez télécharger le fichier de configuration et la clé et les deux fichiers de certificat sur le client séparément.
Dans le même fichier client.conf
, commentez les noms de fichier de certificat et de clé :
;ca ca.crt ;cert client.crt ;key client.key
Enregistrez vos modifications.
Enfin, nous devons intégrer les fichiers ca.crt
, clientName.crt
et clientName.key
dans le fichier de configuration. Vous pouvez copier et coller le contenu en utilisant cat
ou nano
ou tout ce avec quoi vous êtes le plus à l'aise, et les variables appropriées pour OpenVPN, ou vous pouvez utiliser le script d'une ligne ci-dessous.
Exécutez ce script et entrez votre clientName
lorsque vous y êtes invité. Le script ajoute votre certificat et vos fichiers de clé au fichier client.conf
, avec les noms de variable appropriés et les retours à la ligne attendus par OpenVPN :
echo "Enter clientName:" && set CLIENTNAME = $< && printf "\n<ca>\n" >> ./client.conf && cat ./ca.crt >> ./client.conf && printf "</ca>\n" >> ./client.conf && printf "\n<cert>" >> ./client.conf && grep -v '^ ' ./$CLIENTNAME.crt | grep -v 'Certificate' >> ./client.conf && printf "</cert>\n" >> ./client.conf && printf "\n<key>\n" >> ./client.conf && cat ./$CLIENTNAME.key >> ./client.conf && printf "</key>\n" >> ./client.conf
Assurez-vous de faire défiler tout le chemin vers la droite, car il s'agit d'une longue commande.
Jetez un œil au fichier client.conf
terminé avec nano
ou cat
. Vous devriez voir la clé et les certificats ajoutés au fichier en bas.
Vous avez terminé! Il ne reste plus qu'à distribuer le fichier client.conf
à votre client. La plupart des clients préfèrent l'extension .ovpn
à .conf
, vous devrez donc renommer le fichier localement en my_digitalocean_vpn.ovpn ou quelque chose de similaire.
Répétez cette section pour chaque client. Utilisez des certificats distincts par défaut ou utilisez le même certificat client sur chaque client si vous préférez.
Conclusion et configuration du client
Vous devriez maintenant avoir un serveur OpenVPN fonctionnel !
Téléchargez le fichier de configuration client que vous avez créé à la dernière étape (/usr/local/etc/openvpn/clients/clientName/client.conf
) sur votre machine locale. Utilisez une méthode sécurisée pour télécharger le fichier, telle que SCP ou SFTP.
Également sur votre machine locale, installez un client OpenVPN. Tunnelblick fonctionne bien sur Mac OS X, et OpenVPN a un client Windows.
Assurez-vous que votre fichier de configuration client est nommé comme prévu ; il s'agit généralement d'un nom comme my_digitalocean_vpn.ovpn
.
Double-cliquez sur le fichier ou déplacez-le dans le répertoire attendu de votre client.
Démarrez votre client et connectez-vous au serveur OpenVPN approprié.
Pour vous assurer que votre VPN fonctionne, utilisez un vérificateur d'adresse IP tel que http://www.whatismyip.com/. Votre IP affichée doit correspondre à l'IP de votre serveur OpenVPN.
Toutes nos félicitations! Vous êtes connecté à votre nouveau serveur OpenVPN.