Un VPN ou réseau privé virtuel est un réseau privé sécurisé sur un réseau public comme Internet. Un VPN est un tunnel sécurisé sur Internet qui protège votre trafic de données et augmente la confidentialité et la sécurité sur Internet. L'accès au VPN est limité par des méthodes d'authentification sécurisées.
OpenVPN est un logiciel open source pour créer des réseaux privés virtuels, il utilise la bibliothèque OpenSSL pour crypter les données tunnelées et prend en charge les transports UDP ou TCP. OpenVPN peut utiliser des clés pré-partagées, des mécanismes d'authentification basés sur des certificats et des noms d'utilisateur/mots de passe.
Dans ce tutoriel, je vais vous montrer comment implémenter un réseau privé virtuel en utilisant OpenVPNvpn sous le système d'exploitation Linux OpenSUSE Leap 42.1.
Prérequis
- OpenSUSE Leap 42.1 - 64 bits
- Privilèges root
- TUN/TAP activé
Étape 1 - Vérifier si TUN/TAP est activé
Si vous souhaitez créer un VPN sur votre serveur, assurez-vous que TUN/TAP est installé et activé. Vous pouvez vérifier cela avec la commande ci-dessous :
cat /dev/net/tun
Le résultat devrait être :
cat: /dev/net/tun: File descriptor in bad state
Étape 2 - Installer OpenVPN
OpenVPN est disponible dans le référentiel OpenSUSE. Vous pouvez l'installer à l'aide de la commande zypper :
zypper in openvpn
Étape 3 - Configuration Easy-RSA
Ensuite, téléchargez easy-rsa pour générer un fichier de certificat. easy-rsa est un utilitaire de gestion des certificats, vous pouvez créer l'autorité de certification racine avec lui et demander et signer des certificats.
Allez dans le répertoire OpenVPN et téléchargez easy-rsa avec la commande wget :
cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/archive/release/2.x.zip
Extrayez l'archive et déplacez le répertoire easy-rsa :
unzip 2.x.zip
mv easy-rsa-release-2.x/easy-rsa/ /etc/openvpn/
rm -rf easy-rsa-release-2.x/
Configurer la clé
Accédez au répertoire easy-rsa et modifiez le fichier vars pour configurer la clé et le certificat :
cd easy-rsa/2.0/
vim vars
Ligne 53 - Si vous êtes vraiment paranoïaque, vous pouvez augmenter la taille de la clé.
export KEY_SIZE=2048
Lignes 56 et 59 - Dans combien de jours la clé et le certificat expireront.
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
Ligne 64 - 72 - Modifiez la valeur par défaut des informations de clé et de certificat.
export KEY_COUNTRY="US"
export KEY_PROVINCE="California"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]main"
export KEY_OU="MyOrganizationalUnit"
export KEY_NAME="EasyRSA"
Enregistrez le fichier et quittez.
Initialiser la PKI
Ensuite, initialisez la PKI (Public Key Infrastructure) :
source ./vars && ./clean-all && ./build-ca
Nous allons laisser la valeur par défaut, appuyez simplement sur "Entrée".
Générer les paramètres Diffie Hellman
Exécutez la commande ci-dessous :
./build-dh
Vous verrez le résultat :
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..................................
Générer la clé privée du serveur
Générez la clé privée avec le nom "serveur":
./build-key-server server
Appuyez sur Entrée et tapez "y" pour confirmer la génération de la clé.
Générer une clé et un certificat pour le client
Générez la clé client et le certificat avec le nom "client1":
./build-key client1
Appuyez sur Entrée et tapez "y" pour confirmer la génération de la clé.
La clé et le certificat ont été générés dans le répertoire "keys". Faites maintenant une copie du répertoire "keys" et placez-la dans le répertoire "openvpn".
cp -r keys/ /etc/openvpn/
Étape 4 - Configurer OpenVPN
Dans cette étape, nous allons configurer OpenVPN pour qu'il s'exécute sur le protocole UDP, en utilisant le port 2034 pour la connexion client. Créez le nouveau fichier de configuration server.conf dans le répertoire OpenVPN.
cd /etc/openvpn/
vim server.conf
Collez la configuration ci-dessous :
#change with your port
port 2034
#You can use udp or tcp
proto udp
# "dev tun" will create a routed IP tunnel.
dev tun
#Certificate Configuration
#ca certificate
ca /etc/openvpn/keys/ca.crt
#Server Certificate
cert /etc/openvpn/keys/server.crt
#Server Key and keep this is secret
key /etc/openvpn/keys/server.key
#See the size a dh key in /etc/openvpn/keys/
dh /etc/openvpn/keys/dh2048.pem
#Internal IP will get when already connect
server 10.10.2.0 255.255.255.0
#this line will redirect all traffic through our OpenVPN
push "redirect-gateway def1"
#Provide DNS servers to the client, you can use goolge DNS
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Enable multiple client to connect with same key
duplicate-cn
keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon
#openvpn status log
status /var/log/openvpn/openvpn-status.log
#enable log
log-append /var/log/openvpn/openvpn.log
#Log Level
verb 3
Enregistrez le fichier et quittez l'éditeur.
Ensuite, créez un nouveau répertoire et fichier pour le journal openvpn :
mkdir -p /var/log/openvpn/
touch /var/log/openvpn/{openvpn,openvpn-status}.log
Étape 5 - Configurer SuSEfirewall2
SuSEfirewall2 est un script permettant de générer des règles iptables basées sur le fichier "/etc/sysconfig/SuSEfirewall2". Nous allons installer SuSEfirewall2 puis configurer le port pour accéder à OpenVPN, puis nous allons activer NAT avec un script iptables pour OpenVPN.
Installez SuSEfirewall2 avec la commande zypper :
zypper in SuSEfirewall2
Maintenant, allez dans le répertoire sysconfig et modifiez le fichier de configuration de SuSEfirewall2 :
cd /etc/sysconfig/
vim SuSEfirewall2
Ligne 134 - Activer l'itinéraire.
FW_ROUTE="yes"
Ligne 253 - Activez le port TCP 22 pour l'accès SSH depuis l'extérieur du réseau.
FW_SERVICES_EXT_UDP="22"
Ligne 267 - Activer le port udp pour l'accès client openvpn - port 2034.
FW_SERVICES_EXT_UDP="2034"
Ligne 877 - Activer les règles personnalisées SuSEfirewall2.
FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"
Enregistrez et quittez.
Modifiez ensuite les règles personnalisées de SuSEfirewall2 dans le répertoire des scripts.
cd /etc/sysconfig/scripts/
vim SuSEfirewall2-custom
Dans la directive "fw_custom_after_chain_creation", collez les nouvelles règles iptables pour OpenVPN :
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.10.2.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.10.2.0/24 -o eth0 -j MASQUERADE
Enregistrez et quittez.
Remarque :
IP 10.10.2.0/24 est le réseau du fichier de configuration openVPN server.conf.
Nous pouvons maintenant activer le transfert en ajoutant cette nouvelle ligne de configuration au fichier sysctl.conf.
vim /etc/sysctl.conf
Collez la configuration ci-dessous :
net.ipv4.ip_forward = 1
Enregistrez et quittez.
Remarque :
Si vous avez déjà la ligne dans le fichier, modifiez la valeur de "0" à "1" au lieu d'ajouter une nouvelle ligne.
Exécutez maintenant la commande ci-dessous pour appliquer la modification de configuration.
sysctl -p
Démarrez SuSEfirewall2 et le serveur OpenVPN :
systemctl start SuSEfirewall2
systemctl start [email protected]
Si vous avez une erreur, vous pouvez voir le message d'erreur détaillé dans le journal OpenVPN.
Ajouter tous les services au démarrage du système :
systemctl enable SuSEfirewall2
systemctl enable [email protected]
Étape 5 - Configurer le client
Téléchargez la clé client et le certificat du répertoire des clés sur votre ordinateur local. Vous pouvez utiliser la commande scp ou sftp, j'utilise ici scp :
Commande qui doit être exécutée sur l'ordinateur local.
scp [email protected]:~/etc/openvpn/keys/ca.crt ~/myvpn/
scp [email protected]:~/etc/openvpn/keys/client1.crt ~/myvpn/
scp [email protected]:~/etc/openvpn/keys/client1.key ~/myvpn/
Dans le répertoire myvpn, créez un nouveau fichier de configuration pour le client "client1.ovpn".
cd ~/myvpn/
vim client1.ovpn
Collez la configuration ci-dessous :
client
dev tun
proto udp
#Server IP and Port
remote SERVERIP 2034
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
Enregistrez et quittez.
Pour vous connecter à notre VPN, vous pouvez installer un client VPN ou si vous utilisez Linux, vous pouvez utiliser le "Network-Manager". Si vous souhaitez tester le VPN avec un terminal, vous pouvez utiliser la commande ci-dessous :
cd ~/myvpn/
sudo openvpn --config client1.ovpn