HSC
Network Security Consulting Agency Since 1989 - Specialized in Unix, Windows, TCP/IP and Internet
Text mode: access to the page content
Hervé Schauer Consultants
You are here: Home > Resources > Tips > OpenVPN, certificats et PAM
Go to: HSC Trainings
Télécharger le catalogue des formations
Search:  
Version française
   Services   
o Skills & Expertise
o Consulting
o ISO 27001 services
o Audit & Assessment
o Penetration tests
o Vunerability assessment (TSAR)
o Forensics
o ARJEL
o Training courses
o E-learning
   Conferences   
o Agenda
o Past events
o Tutorials
   Resources   
o Thematic index
o Tips
o Lectures
o Courses
o Articles
o Tools (download)
o Vulnerability watch
   Company   
o Hervé Schauer
o Team
o Job opportunities
o Credentials
o History
o Partnerships
o Associations
   Press and
 communication
 
 
o HSC Newsletter
o Bulletin juridique HSC
o Press review
o Press releases
o Publications
   Contacts   
o How to reach us
o Specific inquiries
o Directions to our office
o Hotels near our office
|>|OpenVPN, certificats et PAM  

by Louis Nyffenegger (06/02/07)



-- [ OpenVPN, certificats et PAM ]---------------------------------

Cet article traite de la mise en place d'un serveur OpenVPN couplant
l'authentification par certificat et l'authentification par PAM.


--[ 1. Intérêt de la double authentification ]---------------------

La double authentification utilisant PAM permet d'ajouter un niveau de
sécurité à l'authentification par certificat.
Cette solution pourra par exemple être utilisé pour un déploiement utilisant
un unique certificat partagé entre tous les utilisateurs et permettra d'avoir
tout de même une méthode d'authentification.
Enfin, l'authentification par PAM peut permettre de gérer les utilisateurs
dans une base LDAP.

--[ 2. Création des certificats ]----------------------------------

Dans un premier temps, la création du certificat de l'authorité de
certification ainsi que l'ensemble des certificats et clés nécessaires peut
être facilement réalisée en utilisant easy-rsa (fourni avec OpenVPN).

Sur une machine Debian; easy-rsa se trouve dans le répertoire
/usr/share/doc/openvpn/examples/easy-rsa/. Sur une machine gentoo, easy-rsa
est disponible dans le répertoire /usr/share/openvpn/easy-rsa/.
L'utilisation de locate sur votre distribution vous permettra de retrouver
cette suite d'outils (locate easy-rsa).

Tout d'abord, il faut initialiser easy-rsa :
# . ./vars
# ./clean-all

Pour créer le certificat de l'authorité de certification, il suffit de lancer :
# ./build-ca et de remplir correctement tous les champs.

Pour créer les clés et le certificat du serveur, il suffit de lancer :
# ./build-key-server server
Le certificat sera automatiquement signé par l'authorité de certification.

Enfin, pour chaque client, on peut lancer la commande :
./build-key client1 
./build-key client2 
...
pour créer autant de clés signées que vous souhaitez avoir de clients 
diffèrents.

Pour finir, il faut créer le secret partagé servant pour Diffie-Helman:
./build-dh

Le résultat de toutes ces actions se trouve dans le répertoire ./keys.


--[ 3. Configuration du serveur ]----------------------------------

Tout d'abord, il faut installer les paquets nécessaires (exemple sous Debian):
	# apt-get install openvpn libpam0g-dev

Puis, il suffit de créer un fichier server.conf et un répertoire server dans
/etc/openvpn/.
Le répertoire /etc/openvpn/server/ permet de stocker les clés et certificats, 
il faut recopier les fichiers ca.crt, dh1024.pem, server.crt et server.key dans
ce répertoire. Il faut ensuite s'assurer que tous ces fichiers sont accessibles
uniquement en lecture par root.


Le fichier de configuration de ce serveur est le fichier 
/etc/openvpn/server.conf, il doit contenir : 

	local ip # l'adresse du serveur
	port 443 # le port sur lequel le serveur écoute
	proto tcp-server # le type de serveur

	mode server 
	dev tap
	tls-server	

	# le chemin vers les clés et certificats:
	ca /etc/openvpn/server/ca.crt
	cert /etc/openvpn/server/server.crt
	key /etc/openvpn/server/server.key
	dh /etc/openvpn/server/dh1024.pem

	# l'obligation d'utiliser pam pour l'authentification
	plugin /usr/lib/openvpn/openvpn-auth-pam.so common-auth

	# la configuration réseau du serveur
	server-bridge 10.5.0.1 255.255.0.0 10.5.0.50 10.5.255.254
	keepalive 20 120
	comp-lzo
	max-clients 10 # 10 clients maximum
	user nobody
	group nogroup

	persist-key
	persist-tun
	verb 3
	mute 5
	ifconfig 10.5.0.1 255.255.0.0

Pour partager le même certificat entre plusieurs clients, il faut ajouter dans
le fichier de configuration l'option duplicate-cn.

--[ 4. Configuration du client ]-----------------------------------

Tout d'abord, il faut installer OpenVPN sur la machine cliente (exemple sous
Gentoo):
	# emerge openvpn


Il faut ensuite créer un fichier de configuration client.conf:
	client
	dev tap	
	proto tcp
	remote ip 443  # adresse ip ou nom de la machine distante
	persist-key
	persist-tun
	ca      ca.crt
	key     client1.key
	cert    client1.crt

	comp-lzo
	# OpenVPN doit utiliser une authentification PAM
	auth-user-pass

--[ 5. Tests du fonctionnement de la double authentification ]-----

Il est maintenant possible de tester en lançant la commande :
	# openvpn --config configuration

Ce qui donne pour le serveur :
	# openvpn --config /etc/openvpn/server.conf

et pour le client :
	# openvpn --config client.conf

OpenVPN demande le nom d'utilisateur et le mot de passe.


--[ 6. Révocation d'un certificat ]--------------------------------

En cas de compromission d'un des clients, il est important de savoir comment
révoquer son certificat afin de lui bloquer l'accès au serveur OpenVPN.
Il est possible de bloquer l'accès à un client grâce à easy-rsa (toujours en 
se plaçant dans le répertoire d'easy-rsa):
	# ./revoke-full client2

Il suffit ensuite de copier la liste de révocation (keys/crl.pem) dans le 
répertoire  /etc/openvpn/server/ et de spécifier au serveur OpenVPN de vérifier
la liste de révocation en ajoutant la ligne : 
	crl-verify /etc/openvpn/server1/crl.pem 
dans le fichier de configuration du serveur (/etc/openvpn/server.conf).

Il suffit ensuite redémarrer le serveur OpenVPN.


--[ 7. Conclusion ]------------------------------------------------

Cette brève vous a présenté l'utilisation de PAM dans OpenVPN. 
Même s'il peut être tentant de n'utiliser qu'un certificat pour tous les 
utilisateurs, il est préférable de séparer ces utilisateurs en groupes, ce qui
permettra de redéployer plus facilement un nouveau certificat en cas de 
compromission d'un des clients.

Dans un objectif de test, il est aussi possible d'utiliser uniquement l'
authentification par mot de passe mais il est réellement préférable d'utiliser
un certificat pour s'assurer d'un niveau supplémentaire de sécurité.

		-- Louis Nyffenegger <Louis.Nyffenegger@hsc.fr> --

--[ 7. Liens ]-----------------------------------------------------

- Le site du projet OpenVPN :
	http://openvpn.net/
- Linux PAM : 
	http://www.kernel.org/pub/linux/libs/pam/




Last modified on 26 February 2007 at 15:27:48 CET - webmaster@hsc.fr
Mentions légales - Information on this server - © 1989-2013 Hervé Schauer Consultants