WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:services:openvpn:vpnprod

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
wiki:services:openvpn:vpnprod [2017/09/18 17:14]
insolentbacon
wiki:services:openvpn:vpnprod [2020/06/27 18:16] (Version actuelle)
Ligne 10: Ligne 10:
 ==== Comment je crée mes clés? ==== ==== Comment je crée mes clés? ====
 Pour avoir ses accès sur le VPN il faut tout d'abord créer ses clés //OpenVPN//. Pour avoir ses accès sur le VPN il faut tout d'abord créer ses clés //OpenVPN//.
-Premièrement demandez à un membre de MiNET qui a déjà accès au VPN le fichier **ca.crt**.+Pour cela, vous aurez notamment besoin du fichier suivant : {{ :wiki:services:openvpn:ca.crt |}}.
    
 La première étape sera de télécharger un outil appelé __"easy-rsa"__ (logique vu que ça sera des clés RSA qui seront créées...). La première étape sera de télécharger un outil appelé __"easy-rsa"__ (logique vu que ça sera des clés RSA qui seront créées...).
Ligne 24: Ligne 24:
 Pour faire un lien symbolique: Pour faire un lien symbolique:
   ln -s openssl-1.0.0.cnf openssl.cnf   ln -s openssl-1.0.0.cnf openssl.cnf
 +  
 +Puis éditez le fichier
 +  vim vars
 +Par exemple en modifiant ces variables :
 +  export KEY_COUNTRY="FR"
 +  export KEY_PROVINCE="Ile-de-France"
 +  export KEY_CITY="Evry"
 +  export KEY_ORG="MiNET"
 +  export KEY_EMAIL="(user)@minet.net"
 +  export KEY_OU="Equipe"
 +
  
 Puis chargez les variables Puis chargez les variables
   source ./vars   source ./vars
      
-Mettez le **ca.crt** que on vous a filé dans le dossier keys/+Mettez le **ca.crt** que on vous a filé dans le dossier keys/ (qu'il faut créer)
 Ensuite vous allez créer votre clé ainsi qu'une demande de signature pour votre clé (//CSR: certificate signing request//). Ensuite vous allez créer votre clé ainsi qu'une demande de signature pour votre clé (//CSR: certificate signing request//).
   ./build-req ton_pseudo_ldap_en_minuscules   ./build-req ton_pseudo_ldap_en_minuscules
Ligne 34: Ligne 45:
 On vous demandera de renseigner des informations. On vous demandera de renseigner des informations.
 Le "__Common Name__" doit être votre pseudo en minuscules. Le "__Common Name__" doit être votre pseudo en minuscules.
 +(Laissez //challenge password// vide, il est mis en clair dans le fichier)
  
-Un fichier **ton_pseudo.key** et **ton_pseudo.crt** seront créé dans le dossier //keys///+Un fichier **ton_pseudo.key** et **ton_pseudo.crt** seront créé dans le dossier //keys/// que vous devez créer auparavant
 Le fichier en **.key** est la clé privée. Il faut la garder bien précieusement et ne jamais l'envoyer à qui que ce soit. Le fichier en **.key** est la clé privée. Il faut la garder bien précieusement et ne jamais l'envoyer à qui que ce soit.
  
-Il faut envoyer le **.csr** au président ou à un membre qui détient le //CA (autorité de certification)//. Par mail chiffré de préférence (mais non obligatoire). Celui-ci vous renverra votre certificat signé (le fichier **.crt** qui sera envoyé au VPN pour certifier que vous avez bien le droit d'y accéder).+Il faut envoyer le **.csr** au président ou à un membre qui détient le //CA (autorité de certification)//. Celui-ci vous renverra votre certificat signé (le fichier **.crt** qui sera envoyé au VPN pour certifier que vous avez bien le droit d'y accéder).
  
-Une fois qu'on vous a renvoyé un fichier par mail, vous aurez trois fichiers  importants: __deux__ .crt et un .key (vous pouvez supprimer le .csr, il ne vous sert plus à rien à ce moment là)+Une fois qu'on vous a renvoyé un fichier par mail, vous aurez donc trois fichiers  importants: __deux__ .crt ( ca.crt et pseudo.crt) et un .key (vous pouvez supprimer le .csr, il ne vous sert plus à rien à ce moment là)
  
 Vous pourrez mettre ces trois fichiers dans le dossier de votre choix et vous débarrasser de easy-rsa. Vous pourrez mettre ces trois fichiers dans le dossier de votre choix et vous débarrasser de easy-rsa.
  
-Une fois que vous avez fait ça, il faut prendre le fichier de configuration (pour que le client VPN sache comment communiquer avec notre serveur VPN), que vous pouvez trouver plus bas dans la page (__n'oubliez pas d'éditer les chemins de fichiers vers le ca.crt, votre .crt et votre .key dans la configuration__).+Une fois que vous avez fait ça, il faut prendre le fichier de configuration (pour que le client VPN sache comment communiquer avec notre serveur VPN), que vous pouvez trouver dans la section juste après (__n'oubliez pas d'éditer les chemins de fichiers vers le ca.crt, votre .crt et votre .key dans la configuration !__).
  
 Vous pouvez normalement vous connecter aux réseaux privés de MiNET <del>(et tout casser :D)</del> Vous pouvez normalement vous connecter aux réseaux privés de MiNET <del>(et tout casser :D)</del>
   sudo openvpn /chemin/vers/votre/fichier/de/config.conf   sudo openvpn /chemin/vers/votre/fichier/de/config.conf
  
-On vous demandera des identifiants, c'est ceux de MiNET. +On vous demandera des identifiants, c'est ceux du LDAP MiNET.
- +
- +
- +
-<del> +
-==== Pour les clés ==== +
-Le président détient les clés du CA, permettant de créer des nouvelles clés aux utilisateurs, qui sont ensuite envoyé sur le vpn, dans le home de l'utilisateur concerné. +
- +
-===== IPTables =====  +
-Le pare-feu a été configuré pour NAT les clients d'openVPN. +
- +
- +
-==== Authentification openvpn ==== +
- +
-L'authentification openvpn utilise user-password, permettant de vérifier l'identité de l'utilisateur qui se connecte (on ne veut pas que les clés suffisent à accéder à nos réseaux privés). On utilise PAM couplé au module pam-ldap. +
-=== vsftpd === +
-Le home des utilisateurs est accessible en ftp utilisant TLS, grâce à vsftpd, il est configuré pour utiliser PAM pour l'authentification : on vérifie avec le LDAP. Les utilisateurs sont chroot dans leur home et ont uniquement le droit de lecture, ce qui leur permet de récupérer leur clé sans leur donner accès à la machine se qui rendrait inutile la segmentation des accès : les utilisateurs auraient accès à tous les sous réseaux auquel le vpn est connecté. (ssh c'est pour le management pas pour vpn) +
- +
-En fait les utilisateurs se connectent sur le port 2121, ensuite les utilisateurs utilisent un mode passif qui écoute sur les ports 64000-64321 (donc il faut rajouter une ligne iptables).</del> +
- +
-==== Pour les sous réseaux ==== +
- +
-Eh bien quand vous vous connectez avec OpenVPN sur le serveur, celui-ci vous attribue une IP. +
-Dans notre cas, ça sera quelque chose du genre 10.0.X.Y. +
- +
-Ensuite, quand vous allez vouloir accéder à un service par exemple dans 192.168.102.0/24, vous allez être NATé par le serveur derrière son IP. Chaque groupe d'utilisateurs du VPN ont une plage d'IP +
- +
-^ Groupe      ^ IP/masque      ^ Accès          ^ +
-| Nouveaux utilisateurs   | 10.0.0.0/24    | Rien        | +
-| Production    | 10.0.1.0/24 | 10,14,16,103,104,147,999| +
-| Developpement    | 10.0.64.0/24     | 192.168.103.0/24        | +
- +
-Pour restreindre les accès, nous utilisons IPTables. Il suffit de restreindre le forward des packets selon l'adresse IP source. Par exemple, nous n'autorisons les IP en 10.0.2.0/24 qu'au VLAN de dev. +
- +
- +
-===== Comment ajouter les accès à quelqu'un ? =====  +
- +
-Vous devez avoir la clé privée du CA. +
- +
-  - Donner le ca.crt à la personne, lui dire d'aller regarder sur le wiki pour savoir comment créer ses clés +
-  - Une fois que la personne vous a filé le .csr, signez le (./sign-req ) après avoir bien vérifié que le csr appartient bien à la personne. Renvoyez à cette personne le .crt ainsi créé. +
-  - Ajouter les droits dans le LDAP pour que cette personne puisse utiliser le VPN +
-  - À ce moment là, la personne devrait pouvoir se connecter au VPN avec openVPN. Elle n'aura juste aucune route d'accessible... Vous devez donc définir à quoi elle aura accès.  +
-  - Utilisez /etc/openvpn/manage_users.py (python3) pour générer les fichiers de conf pour chaque utilisateur après avoir édité /etc/openvpn/vpn.conf. Dans ce fichier vous pourrez assigner à un pseudo (le même que celui que vous avez utilisé pour la clé) un groupe. Le script python se chargera de faire tous les fichiers de conf. +
- +
-(En réalité il va dans /etc/openvpn/ccd/ et crée un fichier avec le pseudo de l'utilisateur. Dedans om  définit l'IP que le VPN lui attribuera ainsi que spécifie les routes qui lui seront automatiquement pushées.) +
- +
-<WRAP important 60%> +
-À lire si vous éditez directement les fichiers dans /etc/openvpn/ccd/+
- +
-Les routes dans les fichiers de ccd/* ne permettent pas de contrôler l'accès des gens à la prod. C'est l'adresse IP définie qui permet de faire cela. +
- +
-Si par exemple vous ne pushez pas la route 192.168.102.0/24 à un membre, il pourra très bien la rajouter à la main sur son client genre "ip route add 192.168.102.0/24 via 10.0.1.2" et ainsi quand même accéder au VLAN 102. +
- +
-Les règles d'accès pour chaque plage d'IP sont définies dans iptables! +
-</WRAP> +
- +
-===== Comment rajouter un groupe ? ===== +
-   - Commencez par le référencer dans le tableau ci-dessus. +
-   - Ajoutez "route 10.0.X.0 255.255.255.0" dans /etc/openvpn/openvpn.conf +
-   - Ajoutez des règles IPTables autorisant le trafic de tun0 avec comme IP source votre plage, vers l'interface destination et plage d'IP destination. +
-   - Ajoutez une entrée dans /etc/openvpn/vpn.conf avec la plage d'IP correspondante et les routes +
- +
-===== Comment rajouter une interface au vpn ? ===== +
-   - Ajoutez l'interface sur proxmox +
-   - Renommez l'interface proprement (genre "eth" + vlan) avec udev +
-   - Configurer une IP pour cette interface +
-   - Ajoutez une règle au pare-feu pour que le VPN NAT sur cette interface (masquerade) +
-   - Ajouter une règle au pare-feu pour que certains groupes puissent l'utiliser (forward) +
-   - Rajouter votre interface aux groupes en n'oubliant pas de l'ajouter au tableau ci-dessus +
  
 ===== Un joli de fichier de conf commenté pour Linux ===== ===== Un joli de fichier de conf commenté pour Linux =====
Ligne 251: Ligne 193:
 #  Authenticate data channel packets with SHA515 algorithm #  Authenticate data channel packets with SHA515 algorithm
 auth SHA512 auth SHA512
- 
-# Don't cache username/password 
-auth-nocache 
 </code> </code>
  
 +
 +<del>
 +==== Pour les clés ====
 +Le président détient les clés du CA, permettant de créer des nouvelles clés aux utilisateurs, qui sont ensuite envoyé sur le vpn, dans le home de l'utilisateur concerné.
 +
 +===== IPTables ===== 
 +Le pare-feu a été configuré pour NAT les clients d'openVPN.
 +
 +
 +==== Authentification openvpn ====
 +
 +L'authentification openvpn utilise user-password, permettant de vérifier l'identité de l'utilisateur qui se connecte (on ne veut pas que les clés suffisent à accéder à nos réseaux privés). On utilise PAM couplé au module pam-ldap.
 +=== vsftpd ===
 +Le home des utilisateurs est accessible en ftp utilisant TLS, grâce à vsftpd, il est configuré pour utiliser PAM pour l'authentification : on vérifie avec le LDAP. Les utilisateurs sont chroot dans leur home et ont uniquement le droit de lecture, ce qui leur permet de récupérer leur clé sans leur donner accès à la machine se qui rendrait inutile la segmentation des accès : les utilisateurs auraient accès à tous les sous réseaux auquel le vpn est connecté. (ssh c'est pour le management pas pour vpn)
 +
 +En fait les utilisateurs se connectent sur le port 2121, ensuite les utilisateurs utilisent un mode passif qui écoute sur les ports 64000-64321 (donc il faut rajouter une ligne iptables).</del>
 +
 +==== Pour les sous réseaux ====
 +
 +Eh bien quand vous vous connectez avec OpenVPN sur le serveur, celui-ci vous attribue une IP.
 +Dans notre cas, ça sera quelque chose du genre 10.0.X.Y.
 +
 +Ensuite, quand vous allez vouloir accéder à un service par exemple dans 192.168.102.0/24, vous allez être NATé par le serveur derrière son IP. Chaque groupe d'utilisateurs du VPN ont une plage d'IP
 +
 +^ Groupe      ^ IP/masque      ^ Accès          ^
 +| Nouveaux utilisateurs   | 10.0.0.0/24    | Rien        |
 +| Production    | 10.0.1.0/24 | 10,14,16,103,104,147,999|
 +| Developpement    | 10.0.64.0/24     | 192.168.103.0/24        |
 +
 +Pour restreindre les accès, nous utilisons IPTables. Il suffit de restreindre le forward des packets selon l'adresse IP source. Par exemple, nous n'autorisons les IP en 10.0.2.0/24 qu'au VLAN de dev.
 +
 +
 +===== Comment ajouter les accès à quelqu'un ? ===== 
 +
 +Vous devez avoir la clé privée du CA.
 +
 +  - Donner le ca.crt à la personne, lui dire d'aller regarder sur le wiki pour savoir comment créer ses clés
 +  - Une fois que la personne vous a filé le .csr, signez le (./sign-req ) après avoir bien vérifié que le csr appartient bien à la personne. Renvoyez à cette personne le .crt ainsi créé.
 +  - Ajouter les droits dans le LDAP pour que cette personne puisse utiliser le VPN
 +  - À ce moment là, la personne devrait pouvoir se connecter au VPN avec openVPN. Elle n'aura juste aucune route d'accessible... Vous devez donc définir à quoi elle aura accès. 
 +  - Utilisez /etc/openvpn/manage_users.py (python3) pour générer les fichiers de conf pour chaque utilisateur après avoir édité /etc/openvpn/vpn.conf. Dans ce fichier vous pourrez assigner à un pseudo (le même que celui que vous avez utilisé pour la clé) un groupe. Le script python se chargera de faire tous les fichiers de conf.
 +
 +(En réalité il va dans /etc/openvpn/ccd/ et crée un fichier avec le pseudo de l'utilisateur. Dedans om  définit l'IP que le VPN lui attribuera ainsi que spécifie les routes qui lui seront automatiquement pushées.)
 +
 +<WRAP important 60%>
 +À lire si vous éditez directement les fichiers dans /etc/openvpn/ccd/*
 +
 +Les routes dans les fichiers de ccd/* ne permettent pas de contrôler l'accès des gens à la prod. C'est l'adresse IP définie qui permet de faire cela.
 +
 +Si par exemple vous ne pushez pas la route 192.168.102.0/24 à un membre, il pourra très bien la rajouter à la main sur son client genre "ip route add 192.168.102.0/24 via 10.0.1.2" et ainsi quand même accéder au VLAN 102.
 +
 +Les règles d'accès pour chaque plage d'IP sont définies dans iptables!
 +</WRAP>
 +
 +===== Comment rajouter un groupe ? =====
 +   - Commencez par le référencer dans le tableau ci-dessus.
 +   - Ajoutez "route 10.0.X.0 255.255.255.0" dans /etc/openvpn/openvpn.conf
 +   - Ajoutez des règles IPTables autorisant le trafic de tun0 avec comme IP source votre plage, vers l'interface destination et plage d'IP destination.
 +   - Ajoutez une entrée dans /etc/openvpn/vpn.conf avec la plage d'IP correspondante et les routes
 +
 +===== Comment rajouter une interface au vpn ? =====
 +   - Ajoutez l'interface sur proxmox
 +   - Renommez l'interface proprement (genre "eth" + vlan) avec udev
 +   - Configurer une IP pour cette interface
 +   - Ajoutez une règle au pare-feu pour que le VPN NAT sur cette interface (masquerade)
 +   - Ajouter une règle au pare-feu pour que certains groupes puissent l'utiliser (forward)
 +   - Rajouter votre interface aux groupes en n'oubliant pas de l'ajouter au tableau ci-dessus
  
  
Ligne 347: Ligne 353:
  </code>  </code>
  
-Gateway : vpn1(2).minet.net +<del>Gateway : vpn1(2).minet.net 
 +</del>
 Type : mot de passe + certificat TLS Type : mot de passe + certificat TLS
  
Ligne 355: Ligne 361:
  
 IMPORTANT : ne pas oublier de cocher la case tout en bas pour les options ipv6 IMPORTANT : ne pas oublier de cocher la case tout en bas pour les options ipv6
 +
 +===== Comment regénérer la CRL =====
 +La CRL ou certificate revocation list, permet de révoquer des certificats. Elle est signée par le CA et doit être renouvelée régulièrement.
 +
 +Pour la réactualiser il faut faire:
 +> source vars
 +> export KEY_CN=""
 +> export KEY_OU=""
 +> export KEY_NAME=""
 +> openssl ca -gencrl -out "$CRL" -config "$KEY_CONFIG"
  
 ===== Comment accéder au VPN depuis Windows ?===== ===== Comment accéder au VPN depuis Windows ?=====
Ligne 361: Ligne 377:
  
 Une fois installé, rendez vous dans le dossier C:\Program Files\OpenVPN\config\ et créez un nouveaux fichier MiNET.txt . Ouvrez le et tapez : Une fois installé, rendez vous dans le dossier C:\Program Files\OpenVPN\config\ et créez un nouveaux fichier MiNET.txt . Ouvrez le et tapez :
 +<del>
 <code> <code>
 client client
Ligne 391: Ligne 407:
 ;down /usr/share/openvpn/update-resolv-conf ;down /usr/share/openvpn/update-resolv-conf
 </code> </code>
-et remplacer /*votre pseudo*/ par votre pseudo.+et remplacer /*votre pseudo*/ par votre pseudo.</del>
  
 Ensuite renommez le en MiNET.ovpn. Ensuite renommez le en MiNET.ovpn.
  
 Lancez ensuite openvpn et dans la barre d’icône en bas à droite cliquez avec le bouton droit de la souris sur l’icône openvpn et sélectionnez MiNET puis connecter. Rentrez votre login et mot de passe et c'est bon :) . Lancez ensuite openvpn et dans la barre d’icône en bas à droite cliquez avec le bouton droit de la souris sur l’icône openvpn et sélectionnez MiNET puis connecter. Rentrez votre login et mot de passe et c'est bon :) .
wiki/services/openvpn/vpnprod.1505747644.txt.gz · Dernière modification: 2020/06/27 18:15 (modification externe)