Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
openvpn [2023/03/08 12:33] – [Ajout de la double authentification Google] nekanopenvpn [2023/08/10 17:17] (Version actuelle) – [Ajout de la double authentification Google] nekan
Ligne 44: Ligne 44:
 <sxh bash>openvpn --genkey secret ./pki/ta.key</sxh> <sxh bash>openvpn --genkey secret ./pki/ta.key</sxh>
  
-  * On met en place un raccourci vers les certificats dans le dossier de ''OpenVPN''+  * On met en place un raccourci vers les certificats dans le dossier de ''OpenVPN'' ainsi qu'un raccourci pour la commande principale 
-<sxh bash>ln -sf /usr/share/easy-rsa /etc/openvpn/easy-rsa</sxh>+<sxh bash>ln -sf /usr/share/easy-rsa /etc/openvpn/easy-rsa 
 +ln -sf /usr/share/easy-rsa/easyrsa /bin/easyrsa</sxh>
  
 ==== Configuration du serveur ==== ==== Configuration du serveur ====
Ligne 85: Ligne 86:
     * **reneg-sec 86400** : limite la renégociation avec les clients à 1/jour (86400s).     * **reneg-sec 86400** : limite la renégociation avec les clients à 1/jour (86400s).
  
-  * On oublie pas de créer le dossier des configurations clientes :+  * On n'oublie pas de créer le dossier des configurations clientes :
 <sxh bash>mkdir /etc/openvpn/ccd</sxh> <sxh bash>mkdir /etc/openvpn/ccd</sxh>
  
Ligne 136: Ligne 137:
 COMMIT COMMIT
  
-#================# +#==========================================# 
-# Partie clients # +# Partie clients pour chaque route commune 
-#================#+#==========================================#
  
 *filter *filter
  
-# Autorisation à créer selon chaque client sous la forme : +# Autorisation à créer selon chaque route commune sous la forme : 
-# -I FORWARD -i tun0 -o ens192 -s 172.16.0.49 -d 10.1.1.1 -p tcp --dport 80 -j ACCEPT +# -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 tun0 -o ens192 -s 172.16.0.49 -d 10.1.1.1 -p tcp --dport 443 -j ACCEPT +# -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"
-# -I FORWARD -i ens192 -o tun0 -s 10.1.1.1 -d 172.16.0.49 -j ACCEPT+
  
 #========================================================================================# #========================================================================================#
Ligne 202: Ligne 202:
 comp-lzo comp-lzo
 verb 4 verb 4
 +# uncomment below lines for use with Google 2FA
 +#auth-user-pass
 cipher AES-256-GCM cipher AES-256-GCM
 key-direction 1 key-direction 1
Ligne 207: Ligne 209:
 remote-cert-tls server remote-cert-tls server
 auth-nocache auth-nocache
-  +explicit-exit-notify 1 
- +reneg-sec 86400 
 # uncomment below lines for use with linux # uncomment below lines for use with linux
 #script-security 2 #script-security 2
Ligne 217: Ligne 220:
 #up /etc/openvpn/update-systemd-resolved #up /etc/openvpn/update-systemd-resolved
 #down /etc/openvpn/update-systemd-resolved #down /etc/openvpn/update-systemd-resolved
-  +
-{{- if .PasswdAuth }} +
-auth-user-pass +
-{{- end }} +
- +
 <cert> <cert>
 {{ .Cert -}} {{ .Cert -}}
Ligne 240: Ligne 239:
 # Variables # Variables
    
-#OVPN_LISTEN_HOST=127.0.0.1                             # Adresse de l'hôte +OVPN_LISTEN_HOST=127.0.0.1                              # Adresse de l'hôte 
-OVPN_LISTEN_PORT=8080                                   # Port 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_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_SERVER=1.2.3.4:1194:udp                            # Adresse, port et protocole d'écoute pour OpenVPN
Ligne 248: Ligne 247:
 EASYRSA_PATH="/etc/openvpn/easyrsa"                     # Racine pour easy-RSA 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_INDEX_PATH="/etc/openvpn/easyrsa/pki/index.txt"    # Chemin de la base de données pour les certificats gérés
-#OVPN_CCD                                               # Stockage des configurations clientes 
 OVPN_CCD_PATH="/etc/openvpn/ccd"                        # Stockage des configurations clientes 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_CC_PATH="/etc/openvpn/client.conf.tpl"   # Chemin du modèle de configuration cliente
Ligne 256: Ligne 254:
    
 /etc/openvpn/ovpn-admin \ /etc/openvpn/ovpn-admin \
 +        --listen.host=$OVPN_LISTEN_HOST \
 +        --listen.port=$OVPN_LISTEN_PORT \
         --log.level=$LOG_LEVEL \         --log.level=$LOG_LEVEL \
         --easyrsa.path=$EASYRSA_PATH \         --easyrsa.path=$EASYRSA_PATH \
Ligne 385: Ligne 385:
         CustomLog ${APACHE_LOG_DIR}/access.log combined         CustomLog ${APACHE_LOG_DIR}/access.log combined
    
-        ProxyPass               / http://127.0.0.1:8080+        ProxyPass               / http://127.0.0.1:8088
-        ProxyPassReverse        / http://127.0.0.1:8080/+        ProxyPassReverse        / http://127.0.0.1:8088/
         ProxyRequests           Off         ProxyRequests           Off
         <Location />         <Location />
Ligne 401: Ligne 401:
   * On crée le mot de passe :   * On crée le mot de passe :
 <sxh>htpasswd -c /etc/apache2/password.file ovpn-admin</sxh> <sxh>htpasswd -c /etc/apache2/password.file ovpn-admin</sxh>
-  * On active les modules ''ssl'' et ''proxy_http'' :+  * On active les modules ''ssl'', ''proxy'' et ''proxy_http'' :
 <sxh bash>a2enmod ssl <sxh bash>a2enmod ssl
 +a2enmod proxy
 a2enmod proxy_http</sxh> a2enmod proxy_http</sxh>
   * On active le site :   * On active le site :
Ligne 419: Ligne 420:
 <sxh bash>apt install -y libqrencode4 libpam-google-authenticator</sxh> <sxh bash>apt install -y libqrencode4 libpam-google-authenticator</sxh>
   * On crée le script de création de 2FA ''/etc/openvpn/create-2fa.sh'' :   * On crée le script de création de 2FA ''/etc/openvpn/create-2fa.sh'' :
-<sxh bash></sxh> +<sxh bash>#!/bin/bash 
-===== Clients =====+  
 +# 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} 
 +</sxh> 
 +  * On rend le script exécutable : 
 +<sxh bash>chmod +x /etc/openvpn/create-2fa.sh</sxh> 
 +  * On modifie le service ''/lib/systemd/system/openvpn@.service'' et on le recharge : 
 +<sxh bash>sed -i 's/ProtectHome=true/ProtectHome=false/g' /lib/systemd/system/openvpn@.service 
 +systemctl daemon-reload</sxh> 
 +  * On crée la configuration PAM ''/etc/pam.d/openvpn''
 +<sxh bash>cp /etc/pam.d/common-account /etc/pam.d/openvpn</sxh> 
 +  * On modifie cette configuration pour y ajouter en 1ère ligne : 
 +<sxh>auth required pam_google_authenticator.so authtok_prompt=pin</sxh> 
 +  * On redémarre le service : 
 +<sxh bash>service openvpn@server restart</sxh> 
 + 
 +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 =====
  
 <callout type="info" title="Unicité" icon="true">Cette procédure devra être suivie pour chaque client devant se connecter au serveur. Chaque configuration sera donc unique.</callout> <callout type="info" title="Unicité" icon="true">Cette procédure devra être suivie pour chaque client devant se connecter au serveur. Chaque configuration sera donc unique.</callout>
Ligne 437: Ligne 482:
 proto udp proto udp
 remote 1.2.3.4 1194 remote 1.2.3.4 1194
-resolv-retry infinite 
-management 127.0.0.1 19999 
 nobind nobind
 persist-key persist-key
Ligne 444: Ligne 487:
 comp-lzo comp-lzo
 verb 4 verb 4
 +# uncomment below lines for use with Google 2FA
 +#auth-user-pass
 cipher AES-256-GCM cipher AES-256-GCM
 +key-direction 1
 +tls-client
 +remote-cert-tls server
 +auth-nocache
 +explicit-exit-notify 1
 +reneg-sec 86400
 +
 # keys # keys
 ca chemin_vers_le_fichier_ca.crt ca chemin_vers_le_fichier_ca.crt
Ligne 450: Ligne 502:
 key chemin_vers_le_fichier_client.key key chemin_vers_le_fichier_client.key
 tls-auth chemin_vers_le_fichier_ta.key 1 tls-auth chemin_vers_le_fichier_ta.key 1
-auth-nocache</sxh>+</sxh>
  
   * Pour Linux, à mettre dans ''/etc/openvpn/'' du poste client, ''client.conf'' dont le contenu est :   * Pour Linux, à mettre dans ''/etc/openvpn/'' du poste client, ''client.conf'' dont le contenu est :
Ligne 462: Ligne 514:
 comp-lzo comp-lzo
 verb 4 verb 4
-cipher AES-256-GCM+# 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 # keys
 ca chemin_vers_le_fichier_ca.crt ca chemin_vers_le_fichier_ca.crt
Ligne 468: Ligne 537:
 key chemin_vers_le_fichier_client.key key chemin_vers_le_fichier_client.key
 tls-auth chemin_vers_le_fichier_ta.key 1 tls-auth chemin_vers_le_fichier_ta.key 1
-auth-nocache</sxh>+</sxh>
  
   * 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) :   * 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) :
Ligne 479: Ligne 548:
       * **passerelle** : adresse du client +1       * **passerelle** : adresse du client +1
       * **broadcast** : adresse du client +2       * **broadcast** : adresse du client +2
-    * les options de DHCP +    * les options de DHCP (sauf si ajouté dans la partie serveur) 
-    * les options de DNS+    * 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     * les différentes routes vers les serveurs dont les accès sont autorisés
   * Exemple :   * Exemple :
Ligne 508: Ligne 577:
  
 <callout type="success" title="Fini" icon="true">Et voilà ! Vous disposez d'un serveur OpenVPN et d'un configuration cliente permettant de s'y connecter.</callout> <callout type="success" title="Fini" icon="true">Et voilà ! Vous disposez d'un serveur OpenVPN et d'un configuration cliente permettant de s'y connecter.</callout>
 +
 +===== Clients avec l'interface de gestion =====
 +
 +  * On se connecte à l'interface et on clique sur ''Add user'' :
 +<image shape="thumbnail">{{ :linux:openvpn:ovpn_002.png |}}</image>
 +  * Dans la fenêtre qui apparaît, on entre le nom de l'utilisateur et on clique sur ''Create'' :
 +<image shape="thumbnail">{{ :linux:openvpn:ovpn_003.png |}}</image>
 +  * Le compte apparaît alors en bas de la liste. On crée sa configuration de base en cliquant sur ''Edit routes'' :
 +<image shape="thumbnail">{{ :linux:openvpn:ovpn_004.png |}}</image>
 +  * Si l'utilisateur n'utilise que les routes communes, on clique directement sur ''Save'' :
 +<image shape="thumbnail">{{ :linux:openvpn:ovpn_005.png |}}</image>
 +  * 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'' :
 +<image shape="thumbnail">{{ :linux:openvpn:ovpn_006.png |}}</image>
 +  * On peut alors télécharger la configuration client en cliquant sur ''Download config'' :
 +<image shape="thumbnail">{{ :linux:openvpn:ovpn_007.png |}}</image>
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
  
  
  • openvpn.1678275212.txt.gz
  • Dernière modification : 2023/03/08 12:33
  • de nekan