titre

Openvpn sur mon serveur Ubuntu 12.04

Je viens d'installer openVPN sur mon serveur 12.04 de façon a pouvoir me connecter au web en passant par mon serveur lorsque je suis au travail avec mon ordi ou avec mon téléphone Android. Pour créer ce tutoriel je me suis servie des excellents tutos de Nicolargo et Digger pour la connexion de mon Android.

A-Installation et configuration d'Openvpn

Nous allons commencer par installer openvpn et openssl
   
    sudo apt-get install openvpn openssl
    
On copie les fichiers de configuration dans /etc/openvpn

    sudo mkdir /etc/openvpn/easy-rsa/
    sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
    sudo chown -R $USER /etc/openvpn/easy-rsa/
    
Nous allons nous servir des scripts installés dans le répertoire /etc/openvpn/easy-rsa/ pour utiliser l'authentification par clés et certificats d'openVPN.
On édite /etc/openvpn/eas-rsa/vars avec nano.

    sudo nano /etc/openvpn/easy-rsa/vars
    
Puis on modifie la partie export à la fin du fichier.

      # Don't leave any of these fields blank.
      export KEY_COUNTRY="FR"                       #ton Pays
      export KEY_PROVINCE="Pays_de_loire"           #ta Région
      export KEY_CITY="Bretignolles"                #ta Villes
      export KEY_ORG="lagirardiere"                 #ton Nom de Domaine
      export KEY_EMAIL="XXXXXXXXXXXX@free.fr"       #ton Mail
      export KEY_EMAIL=mail@host.domain
      export KEY_CN=changeme
      export KEY_NAME=changeme
      export KEY_OU=changeme
      export PKCS11_MODULE_PATH=changeme
      export PKCS11_PIN=1234
    
On crée les clés et les certificats.

      cd /etc/openvpn/easy-rsa/
      sudo cp openssl-1.0.0.cnf openssl.cnf 
      source vars
      ./clean-all
      ./build-dh
      ./pkitool --initca
      ./pkitool --server server
      sudo openvpn --genkey --secret keys/ta.key
      
On copie les clés et les certificats pour le serveur dans /etc/openvpn/

      cd keys
      sudo cp ca.crt ta.key server.crt server.key dh1024.pem /etc/openvpn/ 
      
On crée le fichier de configuration /etc/openvpn/server.conf

      sudo nano /etc/openvpn/server.conf
      
Et on y met ceci.

         # Serveur TCP/443         
         mode server         
         proto tcp            
         port 443
         dev tun                    
         # Cles et certificats                        
         ca ca.crt                            
         cert server.crt                                
         key server.key                                    
         dh dh1024.pem                                       
         tls-auth ta.key 0                                            
         cipher AES-256-CBC                                                
         # Reseau                                                    
         server 10.8.0.0 255.255.255.0                                                        
         push "redirect-gateway def1 bypass-dhcp"                                                            
         push "dhcp-option DNS 4.4.4.4"                                                                
         push "dhcp-option DNS 8.8.8.8"                                                                    
         keepalive 10 120                                                                        
         # Securite                                                                            
         user nobody                                                                                  
         group nogroup
         chroot /etc/openvpn/jail
         persist-key                                                    
         persist-tun                                                                 
         comp-lzo                                                                      
         # Log                                                         
         verb 3                                                   
         mute 20                                                 
         status openvpn-status.log                                                    
        ; log-append /var/log/openvpn.log
      
server.conf est le fichier de configuration de notre serveur VPN qui utilise le cryptage SSL avec le protocole TCP sur le port 443 (HTTPS part défaut).Bien sur l'on choisie le port que l'on veut, mais penser que les réseaux ou accès utilisés peuvent bloquer certains ports.

On crée 2 dossiers jail (pour la sécurité) et clientconf (pour la configuration des clients) dans /etc/openvpn/.

      sudo mkdir /etc/openvpn/jail
      sudo mkdir /etc/openvpn/clientconf
      
On teste tout est ok

      cd /etc/openvpn
sudo openvpn server.conf
Si tout c'est bien passé voici ce qu'il doit s'afficher dans le terminal.

      Wed Oct 17 21:45:16 2012 TUN/TAP device tun0 opened
      Wed Oct 17 21:45:16 2012 TUN/TAP TX queue length set to 100
      Wed Oct 17 21:45:16 2012 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
      Wed Oct 17 21:45:16 2012 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
      Wed Oct 17 21:45:16 2012 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
      Wed Oct 17 21:45:16 2012 Data Channel MTU parms [ L:1560 D:1450 EF:60 EB:135 ET:0 EL:0 AF:3/1 ]
      Wed Oct 17 19:45:16 2012 chroot to '/etc/openvpn/jail' and cd to '/' succeeded
      Wed Oct 17 19:45:16 2012 GID set to nogroup
      Wed Oct 17 19:45:16 2012 UID set to nobody
      Wed Oct 17 19:45:16 2012 Listening for incoming TCP connection on [undef]
      Wed Oct 17 19:45:16 2012 TCPv4_SERVER link local (bound): [undef]
      Wed Oct 17 19:45:16 2012 TCPv4_SERVER link remote: [undef]
      Wed Oct 17 19:45:16 2012 MULTI: multi_init called, r=256 v=256
      Wed Oct 17 19:45:16 2012 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
      Wed Oct 17 19:45:16 2012 MULTI: TCP INIT maxclients=1024 maxevents=1028
      Wed Oct 17 19:45:16 2012 Initialization Sequence Completed
      
Dernier petit réglage si tout est ok, on décommente la dernière ligne dans /etc/openvpn/server.conf et on démarre le serveur VNP

       sudo nano /etc/openvpn/server.conf
       #######################################
       ; log-append /var/log/openvpn.log
          ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
       log-append /var/log/openvpn.log
       #######################################
       sudo service openvpn start
       
Bon maintenant que le serveur VPN est opérationnel il faut que les données puissent transiter vers le net entre tun0 interface virtuel crée par openVPN et eth0 (ou autres suivant la configuration du serveur) interface physique connectée au web.

On lance la commande pour la configuration du routage et l'on rend la configuration permanente en rajoutant net.ipv4.ip_forward = 1 a la fin du fichier /etc/syctl.conf.

       sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
       sudo nano /etc/sysctl.conf
       ##################################################
       # Log Martian Packets
       #net.ipv4.conf.all.log_martians = 1
       #
       net.ipv4.ip_forward = 1
       ##################################################
       
On configure la translation d'adresse (NAT) (eth0 est a adapter à la configuration de votre serveur).

       sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
       
On rend la règle NAT persistante avec la commande sudo sh -c "iptables-save > /etc/iptables.rules" puis l'on ajoute pre-up iptables-restore < /etc/iptables.rules dans /etc/network/interfaces.

       sudo sh -c "iptables-save < /etc/iptables.rules"
       sudo nano /etc/network/interfaces
       ################################################
       # The primary network interface
       auto eth0
       iface eth0 inet static
       address XXX.XXX.X.X
       netmask 255.255.255.0
       gateway XXX.XXX.X.XXX
       dns-nameservers 212.27.40.241 212.27.40.240
       pre-up iptables-restore < /etc/iptables.rules
       ################################################
       

B-Création d'un compte client

Bon maintenant que notre serveur est opérationnel nous allons créer des clés pour le client. Le client sera ordidell et la connexion au serveur vpn se fera sans mot de passe.

       cd /etc/openvpn/easy-rsa
       source vars
       ./build-key ordidell
       ##########################
       pour la connection au serveur 
       avec mot de passe lancer la commande
          ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
       ./build-key-pass ordidell
       
Ce qui doit créer 3 fichiers dans /etc/openvpn/easy-rsa/keys On va rassemblé tous les fichiers nécessaire a la connexion du client dans un dossier dédiés ordidell.

        sudo mkdir /etc/openvpn/clientconf/ordidell
        cd /etc/openvpn/ 
        sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key /etc/openvpn/clientconf/ordidell/
        cd /etc/openvpn/easy-rsa/keys
        sudo cp ordidell.crt ordidell.key /etc/openvpn/clientconf/ordidell/
        
Maintenant on va se rendre dans le dossier ordidell ou l'on va créer un fichier de configuration client.conf pour une connexion avec Ubuntu et client.ovpn pour Windows.

        cd /etc/openvpn/clientconf/ordidell/
        sudo nano client.conf
        
Et on y insère ceci.(supprimer les commentaires dans le fichier client.conf car pour moi ça bloquait l'installation sur le client Ubuntu)

        client
        dev tun
        proto tcp-client
        remote XXXXXXXXXXXX 443  #remplacer les X par l’adresse du serveur VPN et le port si différent.
        resolv-retry infinite
        cipher AES-256-CBC
        ca ca.crt
        cert ordidell.crt
        key ordidell.key
        tls-auth ta.key 1
        nobind
        persist-key
        persist-tun
        comp-lzo
        verb 3
        
On créer le ficher de configuration pour windows

        sudo cp /etc/openvpn/clientconf/ordidell/client.conf /etc/openvpn/clientconf/ordidell/client.ovpn
        
Pour résumer dans notre dossier ordidell on doit y trouver Eh bien maintenant nous allons générer un .ZIP a envoyer a l'ORDI client.

        sudo zip ordidell.zip *.*
        

C-Configuration et installation sur Ubuntu client 12.04(UNITY)

On commence par vérifier si toutes les dépendance sont installés.

        sudo apt-get install openvpn resolvconf network-manager-openvpn-gnome
        
Si tout n'était pas installer il faut redémarrer l'ordi puis on décompresse le .ZIP dans notre /home par exemple. Ensuite on clic sur l’icône de network-manager dans la barre du menu puis placer la souris sur Connexions VPN et cliquer sur Configurer le VPN
panel
nmapplet
nmapplet1
nmapplet2
nmapplet3
Et voilou il ne reste plus qu'a tester la connexion.
On verifie, le fichier log de openvpn se trouve dans /etc/openvpn/openvpn-status.logs

  tail -f /etc/openvpn/openvpn-status.log
  OpenVPN CLIENT LIST
  Updated,Thu Aug 15 06:47:49 2013
  Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
  ROUTING TABLE
  Virtual Address,Common Name,Real Address,Last Ref
  GLOBAL STATS
  Max bcast/mcast queue length,2
  END
  ddress,Last Ref
  XX.X.X.XX,ordidell,XXX.XXX.X.XXX:46239,Thu Aug 15 06:48:48 2013
  GLOBAL STATS
  Max bcast/mcast queue length,2
  END

        

D-Installation sur mon htc Desir Z

Nous voila a mon but final pouvoir créer un tunel VPN entre mon serveur et mon htc Desir Z rooté sous cyanogen 7.2 (Gingerbread). Le tuto fonctionne aussi pour les téléphones non rooté a partir Froyo.

Android ne se sert pas du fichier client.conf mais il faut un fichier PKCS12 compressé pour l'importation des fichiers de configuration.
Voici la marche a suivre:

Tout d’abord comme pour un client sous linux on crée un répertoire sur notre serveur VPN dans /etc/openvpn/clientconf/

        sudo mkdir /etc/openvpn/clientconf/htcdesirz
        
puis on génère les fichiers de connexion client et on les copies dans notre dossier htcdesirz

          cd /etc/openvpn/easy-rsa
          source vars
          ./build-key htcdesirz
          cd /etc/openvpn/
          sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key /etc/openvpn/clientconf/htcdesirz/
          cd /etc/openvpn/easy-rsa/keys
          sudo cp htcdesirz.crt htcdesirz.key /etc/openvpn/clientconf/htcdesirz/
         
Voila maintenant il faut créer le fichier conpresser PKSC12 avec cette commande:

         cd /etc/openvpn/clientconf/htcdesirz/
         sudo openssl pkcs12 -export -in htcdesirz.crt -inkey htcdesirz.key -certfile ca.crt -name htcdesirz -out certif.p12
         #########################################
             ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
         Enter Export Password:                #entre un mot de passe
         Verifying - Enter Export Password:    #confirmer le mot de passe
         #########################################
         
Maintenant dans notre répertoire /etc/openvpn/clientconf/htcdesirz/ on doit retrouver: Il faut maintenant copier certif.p12 et ta.key a la racine de la sdcard de mon htc Desir Z. Puis on passe a la configuration du téléphone.
htchtc1htc2
On va dans les Paramètres=>Localisation et securité=>Installer depuis la carte SD.Le fichier certif.p12 est automatiquement reconnu et il faut rentrer le mot de pas rentrer lors de sa création.
htc3htc4htc5
puis on attribut un nom pour le certificat et l'on saisie un mot de passe qui nou sera demander lors de la connection et l'on va créer la connection Paramètres=>Sans fil réseaux=>
htc6htc7htc8
Paramètre de VPN=>Ajouter un VPN=>Ajouter le VPN "openVPN".
htc9htc10htc11
Là commence la configuration htc12htc13htc14
htc15htc16
Dans Option avancées nous devons configurer:
Et voilou on enregistre et il ne nous reste plus qu'a tester notre connexion au serveur openVPN. htc17htc18htc20
On sélectionne la connexion puis on saisie le mot de passe de stockage choisie au moment de l'installation du certif.p12 et voila après un dur labeur notre connexion est active.

signaturelagirardiere
Source documentation
- Le tuto de Nicolargo pour l'installation du serveur et configuration client Linux.
- L'excellent tuto de Digger sur le forum d'archos pour l'installation sur mon Adroid.
mercredi 10 aout 2011
Lien
|ubuntu Ubuntu |linux Linux |firefox Firefox |thunderbird Thunderbird |gnome Gnome |site du zero Openclassrooms |gnome look Gnome look |debian Debian |
Valid XHTML 1.0 Strict Valid CSS!