OpenVpn

OpenVPN Logo

Présentation

Cette présentation présente un tuto openvpn pour client openvpn nomade.

Nous partons du principe que la partie routage sera géré par shorewall.

Installation

Nous allons installer openvpn

Le paquet easy-rsa comme son nom l’indique permet une gestion facile des certificats.

apt-get install openvpn easy-rsa

Génération des clés serveur

Copie du dossier easy-rsa d’exemple pour la génération des clé :

cp -r /usr/share/easy-rsa/ /etc/openvpn/

On commence par éditer le fichier /etc/openvpn/easy-rsa/vars :

export KEY_COUNTRY="FR"
export KEY_PROVINCE="44"
export KEY_CITY="Loire atlantique"
export KEY_ORG="Fourmis"
export KEY_EMAIL="blog@lesfourmisduweb.org"
export KEY_OU="Fourmis"

Création d’un lien symbolique pour pointer vers la dernière version de openssl.cnf

cd /etc/openvpn/
ln -s openssl-1.0.0.cnf openssl.cnf

On génère maintenant les clé pour le serveur (génération de la ca)

cd /etc/openvpn/easy-rsa/
source vars
./clean-all
./build-dh                                          #Construction du dhparam
./pkitool –initca                                   #On construit une ca
./pkitool --server server                       #On construit un clé de type serveur
openvpn --genkey --secret keys/ta.key       #On construit une clé symétrique

Note

Voir tls-auth dans la documentation openvpn pour comprendre le pourquoi d’une clé symétrique (c’est une double sécu et c’est plus performant )

On copie maintenant les clé des easy-rsa a openvpn

cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh2048.pem /etc/openvpn/

Configuration du serveur openvpn

Pour plus de sécurité, nous allons isolé openvpn dans un chroot dans le dossier /etc/openvpn/jail :

mkdir /etc/openvpn/jail
mkdir etc/openvpn/jail/tmp

Configuration du fichier: /etc/openvpn/server.conf

mode server                                                  #Mode Serveur
topology subnet
proto udp                                                    #Sur du TCP
port 4444                                                    #Sur le Port 4444
dev tun                                                      #En mode Tun

# Cles et certificats
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 1
cipher AES-256-CBC

# Reseau
server 10.8.0.0 255.255.255.0

keepalive 10 120

# Securite
user nobody
group nogroup
chroot /etc/openvpn/jail
persist-key
persist-tun
comp-lzo
#crl-verify crl.pem

# Log
verb 3
mute 20
status openvpn-status.log
;log-append /var/log/openvpn.log

Ajouter l’interface vpn dans shorewall

On déclare une zone vpn dans /etc/shorewall/zone

vpn  ipv4

Et on ajoute l’interface tun0 dans la zone vpn (fichier /etc/shorewall/interfaces )

vpn      tun0        detect           tcpflags,nosmurfs

Ajouter le fait que le service vpn est dispo depuis l’exterieur dans le fichier /etc/shorewall/rules

ACCEPT  all           fw      udp     4444

Gestion des utilisateurs dans OpenVPN

Génération de clés clients openvpn

Nous allons stocker les conf des clients vpn dans le dossier /etc/openvpn/clients

mkdir /etc/openvpn/clients

On va générer la nouvelle clé avec esay-rsa

cd /etc/openvpn/easy-rsa/
source vars
./build-key **_USER_NAME_**   (Attention le Common name est important)

Création d’un dossier _USER_NAME_ dans le répertoire des conf client openvpn :

mkdir /etc/openvpn/clients/**_USER_NAME_**/
cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/**_USER_NAME_** .crt keys/**_USER_NAME_** .key /etc/openvpn/clients/**_USER_NAME_**/

Création de la conf client

Fichier /etc/openvpn/clients/**_USER_NAME_**/**_USER_NAME_** .conf (renommer en .ovpn pour windows et todos pour fin de ligne windows ( paquet tofrodos ) :

# Client
client
dev tun
proto udp
remote 1.2.3.4 4444
resolv-retry infinite
cipher AES-256-CBC
auth-user-pass
auth-nocache

# Cles
ca ca.crt
cert $**_USER_NAME_**.crt
key $**_USER_NAME_**.key
tls-auth ta.key 1
key-direction 1
# Securite
nobind
script-security 2
persist-key
persist-tun
comp-lzo yes
verb 3

Note

Remplacer 1.2.3.4 par l’ip ou le nom dns disponible depuis l’exterieur.

Forcer une ip fixe pour le client et fixer les route pour chaque clients (plus propre):

mkdir /etc/openvpn/jail/ccd
ln -s /etc/openvpn/jail/ccd /etc/openvpn/ccd

Fichier /etc/openvpn/jail/ccd/**_USER_NAME_** (Attention le fichier porte le nom du CN)

ifconfig-push 10.8.0.18 255.255.255.0
push "route 172.29.0.0 255.255.0.0"
push "route 172.30.0.0 255.255.0.0"
  • On indique ici avec ifconfig-push l’ip que va avoir le client.
  • push route ajoute une route au client lors de la connexion.

De cette manière on pousse uniquement les routes utile au client

Autoriser l’adresse 10.8.0.18 d’accéder aux vlan locaux dans le fichier rules de shorewall:

ACCEPT       vpn:10.8.0.18           loc             all

Depuis l’interface du client OpenVPN, dans le menu faire changer la « pass phrase » pour finir de sécuriser le certificat.

Révoquer un certificat

Révocation du certificat depuis les outils easy-rsa

cd etc/openvpn/easy-rsa
source vars

ici on révoque la clé _USER_NAME_ ce qui va créer un fichier crl.pem

./revoke-full **_USER_NAME_**

On copie le nouveau fichier crl dans openvpn pour la prise en compte

cp -f /etc/openvpn/easy-rsa/keys/crl.pem /etc/openvpn/jail/

On indique a openvpn de prendre en compte le nouveau fichier crl en décomentent la ligne dans le fichier /etc/openvpn/server.conf

crl-verify crl.pem

Gestion des outils clients OpenVPN

Client Linux

Sous ubuntu, le plus simple est d’utiliser « Network-manager », il faut donc lui permettre de gérer les configuration OpenVPN avec l’ajout du paquet « network-manager-openvpn »

  • Depuis la gestion du réseau dans la barre des taches, selectionner « configurer les connexions réseaux », puis completement en bas de la colonne de gauche, cliquer sur le « + »
  • Dans la liste proposée, toujours en bas de liste dans la partie « Autre » sélectionner « importer connexion VPN… ». Intégrer le fichier de type ovpn et copier les certificats.
  • Pour eviter des messages d’erreurs ultérieurs, vérifier que dans le chemin ~/.local/share/networkmanagement/certificates/ les fichiers soient uniquement lisible par l’utilisateur de la session.
  • Dans l’onglet IPv4 ajouter les dns et le domaine de recherche. Dans le bouton « Routes » cocher « utiliser uniquement pour les ressources sur cette connexion ».

Client Windows OpenVPN 2.4.6

Installer le client openvpn. Depuis la barre des tâches, et le client Openvpn, « importer le fichier », selectionner le fichier **_USER_NAME_**.ovpn

Dans le dossier de configuration c:usersUTILISATEUROpenvpnconfig**-USER_NAME_**, copier toute les certificats : **_USER_NAME_**.crt **_USER_NAME_**.key ca.crt et ta.key.