Comment configurer et se connecter à un serveur OpenVPN privé sur FreeBSD 10.1

De Get Docs
Aller à :navigation, rechercher

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 either tcp or udp; the default is fine
  • user et group : réglez-les sur nobody 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-feu ipfw qui est nécessaire pour natd
  • firewall_type="open" permet au pare-feu d'autoriser le trafic par défaut
  • gateway_enable définit net.inet.ip.forwarding sur 1, ce qui permet le routage IPv4 sur le système
  • natd_enable active le routeur NAT réel
  • natd_interface est l'interface externe vers Internet ; vtnet0 est utilisé pour DigitalOcean
  • natd_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 ou comp-lzo du serveur, cela doit être reflété dans le fichier client.conf. Utilisez les mêmes paramètres que précédemment ; par exemple:

cipher aes-256-cbc
;comp-lzo

Ce 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.