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

introduction

OpenVPN est une application serveur / client de réseau privé virtuel à source ouverte (VPN) qui vous permet de rejoindre un réseau virtuel (similaire à un réseau local) en toute sécurité.

Ce tutoriel expliquera comment installer et configurer un serveur OpenVPN sur une machine FreeBSD 10.1 avec IPv4 NAT et routage. Il comprend de brèves explications sur les différentes options de configuration.

À la fin de ce didacticiel, vous utiliserez 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 souhaitez connecter au VPN. 519 Mo, c’est bien pour quelques clients

  • Accès racine. sudo est préinstallé sur DigitalOcean, il n’ya donc rien de plus à faire.

Ce tutoriel 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 - Installer OpenVPN

Installer OpenVPN avec le système + pkg + est assez simple. Il suffit d’exécuter ces commandes pour mettre à jour les listes de paquets et installer le logiciel VPN:

pkg update
pkg install openvpn

Cela devrait également installer le paquetage + 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 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 du 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 pour les commentaires. _

Si vous connaissez les options de configuration que vous souhaitez modifier, vous pouvez le faire à ce stade.

  • * Facultatif * + port +: le port par défaut est 1194, mais vous pouvez le changer en tout ce que vous voulez.

  • * Facultatif * + proto +: Choisissez soit + tcp + ou + udp +; la valeur par défaut est correcte

  • + user et` + group`: définissez-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, veillez à enregistrer vos modifications.

Étape 3 - Génération de certificats et de clés de serveur

+ easy-rsa + facilite la génération de certificats et de clés.

Commencez par copier le programme dans votre répertoire de configuration, car vous allez modifier les 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=

De nos jours, les clés standard sont 2048 bits, bien que vous puissiez également utiliser 4096 bits, ce qui est plus sécurisé 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 plus tard.

Comme le shell que nous utilisons est + tcsh in, les lignes` + export` doivent être remplacées par + setenv. Ceci est fait avec + used avant le` + source`. Déplacez-vous dans 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 dans notre répertoire + / usr / local / etc / openvpn / easy-rsa / +, nettoyez-le d’abord, puis créez l’autorité de certification.

./clean-all
./build-ca

Vous serez invité à définir les options de l’autorité de certification. Remplissez-les avec vos coordonnées:

Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [changeme]:
Name [changeme]:
Email Address [[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 de société facultatif.

Entrez + y + pour signer et valider la clé:

Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [server]:
Name [changeme]:
Email Address [[email protected]]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Certificate is to be certified until Feb  5 14:40:15 2025 GMT (3650 days)
Sign the certificate? [y/n]:

1 out of 1 certificate requests certified, commit? [y/n]
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 du 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 clients

Chaque client aura également besoin d’un certificat et d’une clé pour s’authentifier et se connecter au VPN. Assurez-vous de vous trouver dans le répertoire + / usr / local / etc / openvpn / easy-rsa / +.

cd /usr/local/etc/openvpn/easy-rsa/

Exécutez la commande suivante, où ++ est le nom que vous souhaitez utiliser pour ce certificat client particulier.

./build-key

Vous serez invité à entrer le nom du pays, le nom de la ville, etc. encore. Le processus est le même que pour la génération de clé de serveur. Ceci est destiné à être l’information du client mais rien de tout cela ne compte vraiment.

Vous n’avez pas besoin d’un mot de passe ou d’un nom de société. Entrez + y + pour signer et valider le certificat.

_ * Remarque: * Il est recommandé d’utiliser un certificat différent pour chaque client, ce qui est imposé par OpenVPN par défaut. Toutefois, si nécessaire, cela peut être désactivé dans la configuration OpenVPN (expliquée plus tard). _

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é 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

Editez le + server.conf +:

nano /usr/local/etc/openvpn/server.conf

Remplacez la ligne + dh dh2048.pem + par:

dh dh.pem

Si vous avez suivi notre recommandation pour la clé 2048 bits précédemment, vous n’avez pas à apporter de modification.

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 pare-feu + ipfw + qui permet le routage NAT et peut être utilisé pour OpenVPN. Pour utiliser ceci, éditez + / etc / rc.conf +:

nano /etc/rc.conf

Ajoutez ce contenu 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 "+ rend le pare-feu autoriser le trafic par défaut

  • + gateway_enable + définit + net.inet.ip.forwarding + à + ​​1 + qui permet le routage IPv4 sur le système

  • + natd_enable + active le routeur NAT actuel

  • + 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

Maintenant, redémarrez votre serveur pour charger + ipfw + et + natd +:

reboot

Connectez-vous à nouveau. Après le redémarrage, pensez à relancer + sudo tcsh + pour devenir * root * si vous ne l’êtes pas déjà.

Étape 6 - Configuration de OpenVPN Routing Config et DNS

Par défaut, OpenVPN n’est pas configuré pour indiquer au client de router le trafic Internet à travers le VPN. Nous veillerons à ce qu’il achemine le trafic via OpenVPN en supprimant la mise en commentaire de 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 configurer sur le DNS de votre choix (comme Google DNS avec + 8.8.8.8 + et + 8.8.4.4 +).

  • Paramètres optionnels: *

Vous pouvez également permettre aux clients de communiquer directement avec les adresses IP des autres en supprimant les commentaires suivants:

client-to-client

Si, comme indiqué 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é), supprimez la mise en commentaire de cette ligne:

duplicate-cn

La compression peut être activée et désactivée avec cette ligne:

comp-lzo

Votre chiffre peut être défini manuellement en supprimant la mise en commentaire de l’une des lignes suivantes:

cipher BF-CBC        # Blowfish (default)
cipher AES-128-CBC   # AES
cipher DES-EDE3-CBC  # Triple-DES

_ * Remarque: * Le chiffre que vous utilisez doit également être défini dans le fichier de configuration du client que nous créerons plus tard. _

Des chiffrements supplémentaires sont également disponibles, tels que + aes-256-cbc.

Étape 7 - Démarrer OpenVPN

Autorisez OpenVPN à se charger au démarrage et à l’aide de la commande + service en ajoutant la ligne suivante à` + / etc / rc.conf`:

nano /etc/rc.conf

Ajoutez ces lignes au 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/

Définissez ++ le nom du client défini précédemment lors de la génération des certificats. (Peu importe la manière dont vous définissez cette option car il ne s’agit que d’un répertoire de travail.)

Déplacer vers le nouveau répertoire:

cd /usr/local/etc/openvpn/clients//

Copiez la clé client et le certificat que nous avons générés avec + easy-rsa + et le fichier exemple + client.conf +. Assurez-vous de remplacer le ++ par le nom que vous avez utilisé précédemment pour les fichiers + .key et` + .crt`:

cp /usr/local/etc/openvpn/easy-rsa/keys/.crt /usr/local/etc/openvpn/easy-rsa/keys/.key ./
cp /usr/local/share/examples/openvpn/sample-config-files/client.conf ./client.conf
cp /usr/local/etc/openvpn/ca.crt ./

Encore une fois, ++ était ce que nous utilisions plus tôt.

Editez 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  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 vous avez fait 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 allons incorporer les certificats et la clé dans le fichier de configuration unique. Cela facilite le transfert à des clients individuels. Vous pouvez également télécharger séparément le fichier de configuration, la clé et deux fichiers de certificat sur le client.

Dans le même fichier + client.conf, commentez les noms du certificat et du fichier de clé:

ca ca.crt
cert client.crt
key client.key

Enregistrez vos modifications.

Enfin, nous devons incorporer les fichiers + ca.crt +, + .crt + et + .key + dans le fichier de configuration. Vous pouvez copier et coller le contenu en utilisant + cat + ou + + nano + `ou celui que vous préférez, et les variables appropriées pour OpenVPN, ou vous pouvez utiliser le script à une ligne présenté ci-dessous.

Exécutez ce script et entrez votre ++ lorsque vous y êtes invité. Le script ajoute votre certificat et vos fichiers de clé au fichier + client.conf +, avec les noms de variables et les nouvelles lignes appropriés 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 à droite, car il s’agit d’une longue commande.

Jetez un coup d’œil au fichier + client.conf terminé avec` + nano s` 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 + sur votre client. La plupart des clients préfèrent l’extension + .ovpn + à + ​​.conf +, vous voudrez 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 en état de marche!

Téléchargez le fichier de configuration client que vous avez créé à la dernière étape (+ / usr / local / etc / openvpn / clients // client.conf +) sur votre * ordinateur local *. Utilisez une méthode sécurisée pour télécharger le fichier, tel que SCP ou https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server [SFTP].

Également sur votre ordinateur local, installez un client OpenVPN. Tunnelblick fonctionne bien sous Mac OS X et OpenVPN dispose d’une fenêtre Windows. client.

Assurez-vous que le fichier de configuration de votre client est nommé comme prévu. c’est généralement 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’adresses IP tel que http://www.whatismyip.com/. Votre IP affichée doit correspondre à celle de votre serveur OpenVPN.

Toutes nos félicitations! Vous êtes connecté à votre nouveau serveur OpenVPN.