OpenVpn¶

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
.