Poursuivant la série d'articles VPN, nous installons maintenant OpenVPN sur Ubuntu 16.04 Server. OpenVPN est un logiciel VPN bien connu de la société du même nom. Il est un peu plus difficile à configurer que les autres logiciels VPN, nous nous concentrerons donc sur la configuration côté serveur et sur la création de fichiers ovpn dans cet article. Ce guide est conçu pour être exécuté en tant qu'utilisateur non root. Si vous êtes connecté en tant que root, nous commençons d'abord par ajouter l'utilisateur non root.
adduser newuser
Ensuite, nous lui donnons les droits sudo et nous nous connectons en tant qu'utilisateur
usermod -aG sudo newuser
su newuser
Vous pouvez ignorer ces étapes si vous avez déjà des utilisateurs non root, et c'est très probablement le cas.
Maintenant connecté en tant que newuser ou tout autre utilisateur non root, nous allons installer openvpn
sudo apt-get install openvpn easy-rsa
Certificats serveur et client
Tout d'abord, nous devons créer un répertoire pour l'autorité de certification et modifier le fichier vars
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
nano vars
Trouvez les lignes qui contiennent export KEY_ et transformez-les comme ceci
export KEY_COUNTRY="US"
export KEY_PROVINCE="New York State"
export KEY_CITY="New York City"
export KEY_ORG="Linoxide"
export KEY_EMAIL="[email protected]"
export KEY_OU="LinuxGeeks"
Il y a aussi une ligne nommée KEY_NAME dans le même fichier, nous allons donc simplement mettre le serveur comme nom
export KEY_NAME="server"
Après avoir enregistré le fichier vars, la prochaine chose que nous tapons est :
source vars
qui devrait vous donner la note sur la commande ./clean-all. Par conséquent, tapons-le pour être sûr que nous exécutons l'environnement propre.
./clean-all
Passons maintenant à la partie création de certificat :
./build-ca
Cela vous posera quelques questions, mais puisque nous avons modifié vars, les nouvelles valeurs par défaut devraient être correctes, vous pouvez donc appuyer sur Entrée sur tous les points.
./build-key-server server
Entrez à nouveau, mais pas sur tous les plans cette fois. Lorsqu'il vous demande de mettre un mot de passe, ne le mettez pas, et à la fin, appuyez sur y pour créer un certificat. Le suivant est Diffie Hellman :
./build-dh
Cela prendra du temps, alors soyez patient. Ensuite, nous avons besoin de ta.key pour améliorer la sécurité du serveur.
openvpn --genkey --secret keys/ta.key
Et puis nous copions tous les fichiers pertinents dans le répertoire /etc/openvpn, car openvpn ne lit qu'à partir de là.
cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Nous en avons terminé avec le certificat de serveur, nous créons donc maintenant un certificat pour client100.
cd ~/openvpn-ca
source vars
./build-key client100
Les valeurs par défaut sont à nouveau correctes, il suffit donc d'appuyer sur Entrée et Y à la fin.
Configuration du serveur
Pour le point de départ, nous copions l'exemple de configuration avec la commande suivante :
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Ensuite, nous devons éditer server.conf pour rendre notre serveur fonctionnel. Vous pouvez utiliser n'importe quel éditeur mais nous allons utiliser la commande sed maintenant
sudo sed -i 's/;push "redirect-gateway def1 bypass-dhcp"/push "redirect-gateway def1 bypass-dhcp"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.222.222"/push "dhcp-option DNS 208.67.222.222"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.220.220"/push "dhcp-option DNS 208.67.220.220"/g' /etc/openvpn/server.conf
sudo sed -i 's/;user nobody/user nobody/g' /etc/openvpn/server.conf
sudo sed -i 's/;group nogroup/group nogroup/g' /etc/openvpn/server.conf
sudo sed -i 's/;log-append/log-append/g' /etc/openvpn/server.conf
Choses que nous avons faites ici :nous avons configuré tout le trafic pour qu'il passe par OpenVPN, nous avons défini le groupe et l'utilisateur sur nogroup et personne, et nous avons défini les journaux sur /etc/openvpn/openvpn.log. Ensuite, nous avons besoin d'un autre changement concernant ta.key :
sudo nano /etc/openvpn/server.conf
Et trouvez cette ligne
tls-auth ta.key 0 # This file is secret
key-direction 0
C'est à peu près tout pour server.conf, nous devons ensuite activer le transfert de paquets pour notre serveur Ubuntu
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p
les règles ufw doivent également être modifiées pour permettre le masquage, alors ajoutez ceci au début, avant * filter
rubrique
sudo nano /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
Notez que la partie eth0 que vous devez probablement modifier pour refléter le vrai nom de votre interface réseau accessible sur Internet, je l'ai donc mis en évidence. Ensuite, nous activons le transfert dans ufw comme nous l'avons fait dans sysctl :
sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
Nous configurons le pare-feu
sudo ufw allow 1194/udp
sudo ufw disable
sudo ufw enable
sudo systemctl start openvpn@server
sudo systemctl status -l openvpn
Si tout s'est bien passé, activez le démarrage d'openvpn au démarrage
sudo systemctl enable openvpn@server
Configuration client
Avec la partie configuration du client, nous utilisons des certificats que nous avons déjà créés, par exemple client100. Nous avons également besoin de fichiers de configuration client
mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Le fichier que nous avons copié est une configuration de base, il doit donc être modifié.
nano ~/client-configs/base.conf
Et puis trouvez une ligne qui dit à distance. Changez-le également en indiquant l'adresse IP de votre serveur de FQDN.
remote your.serv.ipor.fqdn 1194
Gardez cela, comme reste de l'édition, nous le ferons avec les commandes sed et echo :
sudo sed -i 's/;user nobody/user nobody/g' ~/client-configs/base.conf
sudo sed -i 's/;group nogroup/group nogroup/g' ~/client-configs/base.conf
sudo sed -i 's/ca ca.crt/#ca ca.crt/g' ~/client-configs/base.conf
sudo sed -i 's/cert client.crt/#cert client.crt/g' ~/client-configs/base.conf
sudo sed -i 's/key client.key/#key client.key/g' ~/client-configs/base.conf
sudo echo key-direction 1 >> ~/client-configs/base.conf
Alors qu'est-ce qu'on a fait ici ? Nous définissons d'abord l'utilisateur et le groupe sur personne et sur aucun groupe. Ensuite, nous avons commenté les chemins de certificat, car nous intégrerons les certificats en ligne dans le fichier .ovpn. Ensuite, nous avons ajouté le paramètre key-direction 1.
Script pour créer des configurations client
Pour intégrer la configuration du client, les clés et les certificats dans un seul fichier .ovpn pour faciliter le transfert vers les clients distants, nous allons utiliser un script simple. Allons-y
nano ~/client-configs/make_config.sh
Et puis collez ce pastebin là. Après avoir enregistré cela, nous devons ajouter le bit exécutable, alors exécutez cette commande :
chmod +x ~/client-configs/make_config.sh
Ensuite, nous pouvons facilement créer des fichiers de configuration
cd ~/client-configs
./make_config.sh client100
ls ~/client-configs/files
La syntaxe de la commande est simple, vous devez être dans le répertoire client-configs et exécuter la commande avec un argument indiquant le nom du client que vous avez créé précédemment. Si vous avez besoin de plus de clients, créez plus de certificats client avec un autre nom et réexécutez cette commande. Si tout s'est bien passé, le répertoire client-configs/files devrait contenir le ou les fichiers ovpn. Vous devez les transférer à votre ou vos clients et vous connecter. Je vais le faire avec scp, depuis mon ordinateur portable Fedora, j'ai commandé comme ça
scp [email protected]:/home/newuser/client-configs/files/client100.ovpn /home/miki/Documents/
De là, vous pouvez le charger sur un téléphone Android avec un câble USB ou via AirDroid, ou sur Windows VM, ou sur un Mac. Pour le gestionnaire de réseau Linux, vous devrez désassembler le fichier
Conclusion
Il s'agit de la configuration du serveur, ensuite nous aurions besoin de nous connecter à partir de différents clients. Pour Android, nous pouvons utiliser OpenVPN Connect, pour Mac Tunnelblick, pour Windows, il existe OpenVPN sur le site officiel et pour Linux, il existe un gestionnaire de réseau. Dans certains des articles suivants, nous couvrirons tout cela.