====== OpenVPN - Installation d'un serveur VPN ====== --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2022/08/03 08:44// Un VPN (//**V**irtual **P**rivate **N**etwork//) est, comme son nom l'indique, un réseau privé virtuel. Il s'agit d'une connexion entre 2 points distants (têtes de pont) créant un liaison (tunnel ou pont) et permettant à des ordinateurs distant de partager des informations et des services comme s'ils étaient sur le même réseau privé. Le tunnel étant généralement chiffré et son accès étant assujetti à une authentification spécifique (AD, LDAP, certificat, PAM, etc...), le VPN permet de sécuriser l'accès à des services n'ayant pas d'autres systèmes de sécurisation ou de donner un accès distant à des services n'ayant pas de moyen de publication sécurisée. Niveau VPN, on trouve 2 types de tunnels : * site à site : le tunnel connecte 2 réseaux distants pour n'en former qu'un seul. Les flux sont généralement bi-directionnels. Ce tunnel utilise la plupart du temps le protocole **IPSec**. * client-server : Un poste client se connecte à un serveur en utilisant un protocole tel que **PPTP** (déconseillé car non sécurisé), **L2TP**, **SSTP**, **SSL**, etc... Le client rejoint ainsi le réseau distant. Les flux sont alors uni-directionnels, ils ne peuvent être initialisé que de puis le client. ''OpenVPN'' existe en tant que serveur et en tant que client et utilise le protocole SSL. Attention, cette procédure nécessite des droits ''root''. La plus grande prudence est donc requise. ===== Installation ===== Cette procédure nécessite un pare-feu fonctionnel. Je me baserai donc sur ''IPTables'' (Procédure d'installation trouvable [[iptables|ici]]). * En prérequis, le système doit pouvoir foire transiter les paquets. Pour cela, on modifiera le fichier ''/etc/sysctl.conf'' : sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf sysctl -p * On installe les paquets nécessaires : apt update && apt install -y openvpn easy-rsa ==== Création de l'autorité de certification ==== * ''OpenVPN'' a besoin d'un certificat serveur et d'une autorité permettant de valider les certificats clients. * On initialise le **PKI** (//**P**ublic **K**ey **I**nfrastructure//) cd /usr/share/easy-rsa/ ./easyrsa init-pki --keysize=4096 --digest=sha512 * On crée l'autorité de certification : ./easyrsa --keysize=4096 --digest=sha512 build-ca nopass * Lors de la création du certificat, le système nous demande de renseigner le nom commun du l'autorité. Cette information n'est pas obligatoire mais permet de retrouver l'objet du certificat, utile donc surtout si on a plusieurs certificats. * On crée le certificat serveur (on remplace ''server'' par le nom de notre serveur) : ./easyrsa --keysize=4096 --digest=sha512 build-server-full server nopass * On crée la clé Diffie-Hellman : ./easyrsa --keysize=4096 --digest=sha512 gen-dh * On crée la clé d'authentification TLS : openvpn --genkey secret ./pki/ta.key * On met en place un raccourci vers les certificats dans le dossier de ''OpenVPN'' ainsi qu'un raccourci pour la commande principale : ln -sf /usr/share/easy-rsa /etc/openvpn/easy-rsa ln -sf /usr/share/easy-rsa/easyrsa /bin/easyrsa ==== Configuration du serveur ==== * On copie la configuration par défaut dans notre serveur : cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/ * On édite le fichier ''/etc/openvpn/server.conf'' et on modifie/active les paramètres suivants : * **local** : adresse local d'écoute du serveur. * **port** : le port d'écoute, généralement ''1194''. * **proto** : le protocole, généralement ''udp''. * **dev** : le type d'interface, on choisira ''tun''. * **ca** : le chemin et le nom du certificat de l'autorité, donc ''easyrsa/ca.crt'' * **cert** : le chemin et le nom du certificat du serveur, donc ''easyrsa/pki/issued/server.crt'' (//server// devant être remplacé par le nom choisi précédemment). * **key** : le chemin et le nom de la clé privée correspondant au certificat serveur, donc ''easyrsa/pki/private/server.key'' (//server// devant être remplacé par le nom choisi précédemment). * **dh** : le chemin et le nom de la clé Diffie-Hellman, donc ''easyrsa/pki/dh.pem''. * **server** : la plage d'adressage du réseau VPN. Cette plage ne doit pas être présente nativement sur le réseau du serveur et du client (sinon, il y aura un conflit de routage). A noter que le serveur VPN aura automatiquement l'adresse ''.1''. * **client-config-dir** : le chemin du dossier qui contiendra les configurations des clients. On utilisera ''/etc/openvpn/ccd'' (on évitera le dossier ''client'' qui correspond plutôt au configuration d'un client openvpn qui se connecter sur un autre serveur et non aux informations des clients se connectant à ce serveur). * **keepalive** : la fréquence en secondes des ping vers le client et le timeout. * **tls-auth** : le chemin et le nom de la clé d'authentification TLS, soit ''server/ta.key''. * **cipher** : le protocole de chiffrement utilisé, par défaut ''AES-256-GCM''. * **comp-lzo** : on décommente ce paramètre pour activer la compression. * **user** : permet de réduire les droits de ''OpenVPN'' après initialisation. On choisira ''nobody''. * **group** : même raison que **user**. On choisira ''nogroup''. * **persist-key** : permet de garder la clé en mémoire pour les négociation malgré la réduction des droits de ''OpenVPN''. * **persist-tun** : pareil, pour les ressources réseaux. * **status** : le chemin et le nom du fichier de log pour le status du serveur et des clients connectés. * **log** : le chemin et le nom du fichier de log de connexions. * **verb** : la verbosité des logs, Par défaut, ce paramètre est à ''3''. * On ajoute aussi les lignes suivantes pour des besoins spécifiques : * **management 127.0.0.1 8989** : à ajouter si on souhaite ajouter une interface de gestion. * **script-security 2** : à ajouter pour activer règles de pare-feu automatiques (nécessaire pour la compatibilité des clients Linux). * **ccd-exclusive** : à ajouter pour activer règles de pare-feu automatique. * **client-connect /etc/openvpn/ovpn_connect.sh** : à ajouter pour activer règles de pare-feu automatique (le script ajoute les règles IPTables à la connexion du client). * **client-disconnect /etc/openvpn/ovpn_disconnect.sh** : à ajouter pour activer règles de pare-feu automatique (le script supprime les règles IPTables à la connexion du client). * **plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn"** : à ajouter pour utiliser la double authentification Google. * **auth-gen-token 86400** : permet de redemander une authentification des clients toutes les 24h (86400s). * **reneg-sec 86400** : limite la renégociation avec les clients à 1/jour (86400s). * On n'oublie pas de créer le dossier des configurations clientes : mkdir /etc/openvpn/ccd === Déploiement des routes communes === Si le VPN doit déployer des routes communes à tous les utilisateurs, il est préférable de les ajouter dans la configuration du serveur en ajoutant pour chaque route une entrée de type : push "route address mask" Exemple : push "route 8.8.8.8 255.255.255.255" Pour chaque route ajoutée de cette manière, il ne faudra pas oublier d'ajouter les règles de pare-feu correspondantes (voir plus bas). === Déploiement du DNS === Si chaque utilisateur du VPN doivent utiliser un serveur DNS spécifique, on peut là aussi l'ajouter directement dans la configuration serveur avec une entrée de type (on remplace //address// par l'adresse IP du serveur DNS à utiliser) : push "dhcp-option DNS address" De plus, si ce serveur DNS doit résoudre des domaines privés, il est nécessaire d'en informer les clients en ajoutant dans la configuration serveur la ligne suivantes : push "dhcp-option DOMAIN ~." ==== Pare-feu ==== * Si on a suivi la procédure d'installation de ''IPTables'', il nous faut ajouter les règles nécessaires. Dans les exemples suivants, il faudra remplacer les valeurs : * **1194** : port d'écoute. * **172.16.0.0/24** : réseau client. * **10.0.0.1** : adresse principale du serveur. * **tun0** : nom de l'interface virtuelle du tunnel (0 pour le 1er ou si il n'y en a qu'un puis +1 pour les suivant). * **ens192** : nom de l'interface réseau hébergeant l'interface virtuelle. * **172.16.0.49** : adresse du client. * **10.1.1.1** : adresse du serveur à atteindre au travers du VPN. * **10.0.0.0/8** : réseau du serveur ''OpenVPN'' * On ajoute donc le fichier ''/etc/iptables.d/40-openvpn'' dont le contenu est : *filter # Allow OpenVPN connections -A INPUT -p udp --dport 1194 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT COMMIT * On ajoute aussi le fichier de post-routing ''/etc/iptables.d/60-postrouting'' dont le contenu est : #================# # Partie serveur # #================# *nat # Source-NAT pour toutes les connexions entrantes vers OpenVPN -A POSTROUTING -o ens192 -s 172.16.0.0/24 -j SNAT --to-source 10.0.0.1 COMMIT #==========================================# # Partie clients pour chaque route commune # #==========================================# *filter # Autorisation à créer selon chaque route commune sous la forme : # -I FORWARD -i tun0 -o ens192 -s 172.16.0.0/24 -d 10.1.1.1 -j ACCEPT -m comment --comment "DNAT vers serv1" # -I FORWARD -i ens192 -o tun0 -s 10.1.1.1 -d 172.16.0.0/24 -j ACCEPT -m comment --comment "SNAT depuis serv1" #========================================================================================# # Finalisation (doit toujours se trouver à la fin, après les règles de tous les clients) # #========================================================================================# # On drop tous les flux qui ne sont pas explicitement autorisés -A FORWARD -s 172.16.0.0/24 -d 10.0.0.0/8 -j DROP COMMIT * On recharge les IPTables : service iptables restart ==== Démarrage du service ==== * Le serveur étant prêt, on peut lancer le service et ouvrir la tête de pont : service openvpn@server start Si vous avez ajouté les options pour l'interface de gestion et le 2FA, le services ne démarrera que lorsque ces modules seront installés. ===== Ajout d'une interface de gestion ===== L'interface **OVPN-ADMIN** est un projet open source sous licence Apache 2.0. Source : [[https://github.com/flant/ovpn-admin/blob/master/README.md|GitHub]] Les scripts de connexions et de déconnexions sont inspirés des travaux de **juris**. Source : [[https://gist.github.com/juris/1a3123d20afbfb12900caebf351f47f4|GitHub]] Pour ajouter l'interface de gestion, il est nécessaire d'ajouter les paramètres nécessaires dans la configuration serveur (voir au dessus). Ensuite : * On télécharge les sources : cd /tmp wget https://github.com/flant/ovpn-admin/releases/download/2.0.1/ovpn-admin-linux-amd64.tar.gz tar -xvf ovpn-admin-linux-amd64.tar.gz mv ovpn-admin /etc/openvpn/ * On crée le modèle de routage client ''/etc/openvpn/ccd.tpl'' : {{- if (ne .ClientAddress "dynamic") }} ifconfig-push {{ .ClientAddress }} 255.255.255.0 {{- end }} {{- range $route := .CustomRoutes }} push "route {{ $route.Address }} {{ $route.Mask }}" # {{ $route.Description }} {{- end }} * On crée le modèle de configuration client ''/etc/openvpn/client.conf.tpl'' # Configuration automatique via ovpn-admin client dev tun dev-node ClientVPN {{- range $server := .Hosts }} proto {{ $server.Protocol }} remote {{ $server.Host }} {{ $server.Port }} {{- end }} nobind persist-key persist-tun comp-lzo verb 4 # uncomment below lines for use with Google 2FA #auth-user-pass cipher AES-256-GCM key-direction 1 tls-client remote-cert-tls server auth-nocache explicit-exit-notify 1 reneg-sec 86400 # uncomment below lines for use with linux #script-security 2 # if you use resolved #up /etc/openvpn/update-resolv-conf #down /etc/openvpn/update-resolv-conf # if you use systemd-resolved first install openvpn-systemd-resolved package #up /etc/openvpn/update-systemd-resolved #down /etc/openvpn/update-systemd-resolved {{ .Cert -}} {{ .Key -}} {{ .CA -}} {{ .TLS -}} * On crée le script de démarrage de l'interface ''/etc/openvpn/launch_ovpn_admin.sh'' : #!/bin/bash # Variables OVPN_LISTEN_HOST=127.0.0.1 # Adresse de l'hôte OVPN_LISTEN_PORT=8088 # Port de l'hôte OVPN_NETWORK=172.16.0.0/24 # Plage réseau des clients OpenVPN OVPN_SERVER=1.2.3.4:1194:udp # Adresse, port et protocole d'écoute pour OpenVPN OVPN_MGMT=127.0.0.1:8989 # Adresse et port de l'interface de gestion OpenVPN (pour les appels API) OVPN_METRICS_PATH="/metrics" # URL pour les métriques (pour Grafana) EASYRSA_PATH="/etc/openvpn/easyrsa" # Racine pour easy-RSA OVPN_INDEX_PATH="/etc/openvpn/easyrsa/pki/index.txt" # Chemin de la base de données pour les certificats gérés OVPN_CCD_PATH="/etc/openvpn/ccd" # Stockage des configurations clientes OVPN_TEMPLATES_CC_PATH="/etc/openvpn/client.conf.tpl" # Chemin du modèle de configuration cliente OVPN_TEMPLATES_CCD_PATH="/etc/openvpn/ccd.tpl" # Chemin du modèle de routage client LOG_LEVEL="debug" # Niveau de log /etc/openvpn/ovpn-admin \ --listen.host=$OVPN_LISTEN_HOST \ --listen.port=$OVPN_LISTEN_PORT \ --log.level=$LOG_LEVEL \ --easyrsa.path=$EASYRSA_PATH \ --easyrsa.index-path=$OVPN_INDEX_PATH \ --ovpn.network=$OVPN_NETWORK \ --ovpn.server=$OVPN_SERVER \ --metrics.path=$OVPN_METRICS_PATH \ --ccd \ --ccd.path=$OVPN_CCD_PATH \ --templates.ccd-path=$OVPN_TEMPLATES_CCD_PATH \ --templates.clientconfig-path=$OVPN_TEMPLATES_CC_PATH & * On rend le script exécutable : chmod +x /etc/openvpn/launch_ovpn_admin.sh * On met en place une tâche planifiée pour s'assurer de l'exécution de l'interface : echo "# Daemon de gestion des clients OpenVPN" > /etc/cron.d/ovpn-admin echo '*/10 * * * * root [ "$(pidof -x ovpn-admin)" ] || /etc/openvpn/launch_ovpn_admin.sh &' >> /etc/cron.d/ovpn-admin * On créé le script de création automatique des règles IPTables à la connexion du client ''/etc/openvpn/ovpn_connect.sh'' : #!/bin/bash ######################################################################### # # # Script de création des règles IPTables à la connexion d'un client # # # ######################################################################### #-----------# # Variables # #-----------# # Chemin des configurations clientes CCD_DIR="/etc/openvpn/ccd" # Interface de sortie du serveur IF_OVPN="ens160" #-----------------------------------------------# # Memento des variables automatiques de OpenVPN # #-----------------------------------------------# # $common_name Identifiant du client (fichier de configuration, certificat, etc...) # $ifconfig_pool_remote_ip Adresse IP affecté au client par OpenVPN # $dev Interface réseau du tunnel OpenVPN #------------# # Traitement # #------------# # Traitement si il y a une configuration cliente if [ -f $CCD_DIR/$common_name ]; then # Configuration existante, on extrait les routes à établir grep "^push \"route" $CCD_DIR/$common_name | tr -d '"' | \ # Boucle de création des règles while read LINE; do # Extraction de l'adresse ADDRESS=$(echo $LINE | cut -f3 -d" ") # Extraction du masque NETMASK=$(echo $LINE | cut -f4 -d" ") # Mise en forme des commentaires COMMENT=$(echo $LINE | cut -d"#" -f2) DNAT_COMMENT="$common_name DNAT vers $COMMENT" SNAT_COMMENT="$common_name SNAT vers $COMMENT" # Ajout de la règle de DNAT sudo /sbin/iptables -I FORWARD -i $dev -o $IF_OVPN -s $ifconfig_pool_remote_ip/32 -d $ADDRESS/$NETMASK -j ACCEPT -m comment --comment "$DNAT_COMMENT" # Ajout de la règle de SNAT sudo /sbin/iptables -I FORWARD -i $IF_OVPN -o $dev -s $ADDRESS/$NETMASK -d $ifconfig_pool_remote_ip/32 -j ACCEPT -m comment --comment "$SNAT_COMMENT" done fi exit 0 * On créé le script de suppression automatique des règles IPTables à la déconnexion du client ''/etc/openvpn/ovpn_disconnect.sh'' : #!/bin/bash ############################################################################ # # # Script de suppression des règles IPTables à la déconnexion du client # # # ############################################################################ #-----------------------------------------------# # Memento des variables automatiques de OpenVPN # #-----------------------------------------------# # $common_name Identifiant du client (fichier de configuration, certificat, etc...) # $ifconfig_pool_remote_ip Adresse IP affecté au client par OpenVPN # $dev Interface réseau du tunnel OpenVPN #------------# # Traitement # #------------# # On vérifie la présence de règles pour le client MAX=$(sudo /sbin/iptables -nL FORWARD --line-numbers | grep -E "[[:blank:]]$common_name[[:blank:]]" | wc -l) if [[ $MAX -gt 0 ]]; then # On supprime toutes les règles de FORWARD contenant l'identifiant de l'utilisateur dans les commentaires for ((i=1;i<=$MAX;i++)); do # On récupère le numéro de la règle à supprimer RULE=$(sudo /sbin/iptables -nL FORWARD --line-numbers | grep -m 1 -E "[[:blank:]]$common_name[[:blank:]]" | awk '{print $1}') # On supprimme la règle sudo /sbin/iptables -D FORWARD $RULE done fi exit 0 * On rend ces scripts exécutables : chmod +x /etc/openvpn/ovpn_connect.sh chmod +x /etc/openvpn/ovpn_disconnect.sh L'interface est désormais disponible mais elle est accessible par n'importe qui. On va donc installer un proxy ''Apache'' devant pour ajouter une authentification de base. Du coup : * On installe les paquets nécessaires : apt install -y apache2 * On ajoute la configuration ''/etc/apache2/sites-available/ovpn-admin.conf'' : ServerAdmin mon.adresse@mail.tld ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ProxyPass / http://127.0.0.1:8088/ ProxyPassReverse / http://127.0.0.1:8088/ ProxyRequests Off AuthType Basic AuthName "Restricted Area" AuthUserFile "/etc/apache2/password.file" Require valid-user SSLEngine On SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key * On crée le mot de passe : htpasswd -c /etc/apache2/password.file ovpn-admin * On active les modules ''ssl'', ''proxy'' et ''proxy_http'' : a2enmod ssl a2enmod proxy a2enmod proxy_http * On active le site : a2ensite ovpn-admin.conf * On redémarre ''Apache'' : service apache2 restart L'interface est maintenant disponible après authentification à l'adresse https://adresse_du_serveur : {{ :linux:openvpn:ovpn_001.png |}} ===== Ajout de la double authentification Google ===== Pour activer le 2FA de Google, il faut au préalable ajouter le plugin dans la configuration serveur (voir plus haut). Ensuite : * On installe les paquets nécessaires : apt install -y libqrencode4 libpam-google-authenticator * On crée le script de création de 2FA ''/etc/openvpn/create-2fa.sh'' : #!/bin/bash # Variables SCRIPT_PATH="/etc/openvpn" CCD="$SCRIPT_PATH/ccd" # Usage get-help() { echo "Usage : ./create-2fa.sh user" echo " user doit être un nom d'utilisateur tel qu'il apparaît dans les configurations clientes de OpenVPN, dans le dossier ccd." exit 1 } # Test présence utilisateur if [ -z "$1" ]; then get-help elif [ ! -f $CCD/$1 ]; then get-help fi # Utilisateur existant, création du dossier useradd $1 -m -s /bin/bash # Création du google authenticator su -c "google-authenticator -t -f -d -r 3 -R 30 -w 17 --label=\"OpenVPN ${1}\"" $1 # Mise à jour des droits chmod 400 /home/${1}/.google_authenticator chmod 700 /home/${1} * On rend le script exécutable : chmod +x /etc/openvpn/create-2fa.sh * On modifie le service ''/lib/systemd/system/openvpn@.service'' et on le recharge : sed -i 's/ProtectHome=true/ProtectHome=false/g' /lib/systemd/system/openvpn@.service systemctl daemon-reload * On crée la configuration PAM ''/etc/pam.d/openvpn'' : cp /etc/pam.d/common-account /etc/pam.d/openvpn * On modifie cette configuration pour y ajouter en 1ère ligne : auth required pam_google_authenticator.so authtok_prompt=pin * On redémarre le service : service openvpn@server restart Pour créer un 2FA pour un utilisateur, il suffit de lancer le script ''/etc/openvpn/create-2fa.sh user'' où ''user'' est le nom de l'utilisateur tel qu'il apparaît dans le dossier ''/etc/openvpn/ccd/'' et/ou dans l'interface d'administration ''ovpn-admin''. Le script crée le compte utilisateur local affiche un QRcode qu'il faudra scanner depuis l'application mobile ''Google Authenticator''. Il demande alors un code de validation pour terminer la création. Pour la suite, lorsque l'utilisateur se connecte au VPN, il lui sera demander un code fourni par l'application mobile pour pouvoir se connecter. ===== Clients sans l'interface de gestion ===== Cette procédure devra être suivie pour chaque client devant se connecter au serveur. Chaque configuration sera donc unique. * On commence par créer le certificat client (on remplace ''client'' par l'identifiant du client, NOMPrenom par exemple) : cd /usr/share/easy-rsa ./easyrsa --keysize=4096 --digest=sha512 build-client-full client nopass * On crée le fichier client selon son poste : * Pour Windows, à mettre dans ''%USERPROFILE%/openvpn/config'' du poste client'', client.ovpn'' dont le contenu est : * **1.2.3.4 1194** : Adresse publique du serveur et port d'écoute. * **dev-node** : Remplacer ''ClientVPN'' par le nom de l'interface réseau virtuel (Interface TAP-9) client dev tun dev-node ClientVPN proto udp remote 1.2.3.4 1194 nobind persist-key persist-tun comp-lzo verb 4 # uncomment below lines for use with Google 2FA #auth-user-pass cipher AES-256-GCM key-direction 1 tls-client remote-cert-tls server auth-nocache explicit-exit-notify 1 reneg-sec 86400 # keys ca chemin_vers_le_fichier_ca.crt cert chemin_vers_le_fichier_client.crt key chemin_vers_le_fichier_client.key tls-auth chemin_vers_le_fichier_ta.key 1 * Pour Linux, à mettre dans ''/etc/openvpn/'' du poste client, ''client.conf'' dont le contenu est : client dev tun proto udp remote 1.2.3.4 1194 nobind persist-key persist-tun comp-lzo verb 4 # uncomment below lines for use with Google 2FA #auth-user-pass data-cipher AES-256-GCM key-direction 1 tls-client remote-cert-tls server auth-nocache explicit-exit-notify 1 reneg-sec 86400 # uncomment below lines for use with linux script-security 2 # if you use resolved #up /etc/openvpn/update-resolv-conf #down /etc/openvpn/update-resolv-conf # if you use systemd-resolved first install openvpn-systemd-resolved package #up /etc/openvpn/update-systemd-resolved #down /etc/openvpn/update-systemd-resolved # keys ca chemin_vers_le_fichier_ca.crt cert chemin_vers_le_fichier_client.crt key chemin_vers_le_fichier_client.key tls-auth chemin_vers_le_fichier_ta.key 1 * Il faut ensuite inscrire le client sur le serveur, dans le dossier ''/etc/openvpn/ccd/'' (on remplace ''client'' par le nom choisi précédemment) : nano /etc/openvpn/ccd/client * Le contenu de ce fichier indique : * l'adresse IP que le serveur donne au client et l'adresse de sa passerelle. A noter que pour chaque client, une plage de 4 adresses est utilisée : * **réseau** : adresse du client -1 * **client** : adresse du client * **passerelle** : adresse du client +1 * **broadcast** : adresse du client +2 * les options de DHCP (sauf si ajouté dans la partie serveur) * les options de DNS (sauf si ajouté dans la partie serveur) * les différentes routes vers les serveurs dont les accès sont autorisés * Exemple : # Configuration pour le client "client" ifconfig-push 172.16.0.5 176.16.0.6 push-reset push "dhcp-option DNS 10.0.0.1" push "dhcp-option DOMAIN ~." push "route 10.0.1.1 255.255.255.255" push "route 10.0.1.2 225.255.255.255" * Il ne manque plus qu'à rajouter dans ''/etc/iptables.d/60-postrouting'', les règles ''IPTables'' permettant le routage des flux. Dans cette exemple : * **172.16.0.5** est l'adresse du client. * Pour le serveur **10.0.1.1**, les ports HTTP(S) (80 et 443) seront autorisés. * Pour le serveur **10.0.1.2**, le port SSH (22) sera autorisé. ... # Autorisation pour client -I FORWARD -i tun0 -o ens192 -s 172.16.0.5 -d 10.0.1.1 -p tcp --dport 80 -j ACCEPT -I FORWARD -i tun0 -o ens192 -s 172.16.0.5 -d 10.0.1.1 -p tcp --dport 443 -j ACCEPT -I FORWARD -i ens192 -o tun0 -s 10.0.1.1 -d 172.16.0.49 -j ACCEPT -I FORWARD -i tun0 -o ens192 -s 172.16.0.5 -d 10.0.1.2 -p tcp --dport 22 -j ACCEPT -I FORWARD -i ens192 -o tun0 -s 10.0.1.2 -d 172.16.0.49 -j ACCEPT ... * On oublie pas de recharger les règles ''IPTables'' : service iptables restart Et voilà ! Vous disposez d'un serveur OpenVPN et d'un configuration cliente permettant de s'y connecter. ===== Clients avec l'interface de gestion ===== * On se connecte à l'interface et on clique sur ''Add user'' : {{ :linux:openvpn:ovpn_002.png |}} * Dans la fenêtre qui apparaît, on entre le nom de l'utilisateur et on clique sur ''Create'' : {{ :linux:openvpn:ovpn_003.png |}} * Le compte apparaît alors en bas de la liste. On crée sa configuration de base en cliquant sur ''Edit routes'' : {{ :linux:openvpn:ovpn_004.png |}} * Si l'utilisateur n'utilise que les routes communes, on clique directement sur ''Save'' : {{ :linux:openvpn:ovpn_005.png |}} * Si l'utilisateur utilise des routes spécifiques, on les ajoute une par une en entrant l'adresse IP, le masque et la description de la route puis en cliquant sur ''Add''. Une fois toutes les routes ajoutées, on sauvegarde en cliquant sur ''Save'' : {{ :linux:openvpn:ovpn_006.png |}} * On peut alors télécharger la configuration client en cliquant sur ''Download config'' : {{ :linux:openvpn:ovpn_007.png |}} ~~DISCUSSION~~