OpenVPN avec utilisateurs MySQL ou système

Hi all,
Vous souhaitez monter une petite infrastructure de VPN pour vous et vos amis ? Alors cet article est fait pour vous.

Je vais vous expliquer comment simplifer le système d’authentification d’OpenVPN qui, par défaut, nécessite un jeu de clés et le remplacer par une authentification login/password. Utiliser une base de données permet de facilement gérer vos utilisateurs à travers un petit site web. Si vous êtes webmaster LET’S GO !

 

Pour commencer, je précise que le tutoriel est basé sur une debian squeeze.
On débute tout d’abord par installer openvpn ainsi que le plugin pam à utiliser (ici mysql) :

#apt-get install openvpn libpam-mysql

libpam-mysql de debian lenny ne convient pas, vous devrez le recompiler afin qu’il fonctionne.

 

Maintenant il faut générer les clés du serveur. Pour cela on va utiliser le template fourni dans la documentation d’openvpn :

mkdir /etc/openvpn/keys
cd /etc/openvpn/keys
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./

On édite les KEY pour coller aux infos voulues.

vim vars

 

Puis on génère les différents fichiers nécessaires.

source ./vars
./clean-all
./build-dh
./pkitool –initca
./pkitool –server server

On édite la configuration d’OpenVPN /etc/openvpn/server.conf dont voici un exemple.

N’hésitez pas à utiliser un fichier de conf template disponible dans la doc ( /usr/share/doc/openvpn/examples/sample-config-files/)
Tips : On peut avoir plusieurs configurations de serveurs/clients vpn lancées en même temps, il suffit de placer un fichier .conf dans /etc/openvpn

port 1194
proto udp
dev tun

ca /etc/openvpn/easy-rsa/ca.crt
cert /etc/openvpn/easy-rsa/server.crt
key /etc/openvpn/easy-rsa/server.key
dh /etc/openvpn/easy-rsa/dh1024.pem

server 10.128.127.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push « redirect-gateway def1 »
push « dhcp-option DNS 8.8.8.8 »

keepalive 10 120

comp-lzo

max-clients 50

persist-key
persist-tun

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

client-cert-not-required
username-as-common-name

plugin /usr/lib/openvpn/openvpn-auth-pam.so openvpn

 

Les 3 dernières lignes sont importantes pour l’authentification par user/password.
La dernière, « plugin /usr/lib/openvpn/openvpn-auth-pam.so openvpn », spécifie que l’on va utiliser le fichier openvpn pour la configuration de PAM.

Il nous faut donc créer ce dernier fichier et insérer la config du plugin pam souhaitée.

#touch /etc/pam.d/openvpn

Selon la base de données souhaitée on insérera différentes lignes dans ce fichier.
Pour le login avec des utilisateurs système on utilisera :

@include common-password

 

Alors que pour une authentification mysql on remplira le fichier avec :

auth optional /lib/security/pam_mysql.so user=MYSQLUSER passwd=MYSQLPASSWORD host=localhost db=vpn table=user usercolumn=username passwdcolumn=password where=active=1 sqllog=no crypt=4 verbose=0

account required /lib/security/pam_mysql.so user=MYSQLUSER passwd=MYSQLPASSWORD host=localhost db=vpn table=user usercolumn=username passwdcolumn=password where=active=1 sqllog=no crypt=4 verbose=0

 

Bien sur auparavant on aura pris soin d’exécuter ces différentes requêtes sur le serveur MySQL :

CREATE DATABASE `vpn` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `vpn`;

CREATE TABLE IF NOT EXISTS `user` (
`userid` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT ‘1’,
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

 

Il ne reste plus qu’à créer les différents utilisateurs grâce à la requête suivante :

INSERT INTO `user` (`username`, `password`, `active`) VALUES (‘LOGIN‘, SHA1(‘PASSWORD‘), 1);

 

N’oublions pas de redémarrer le serveur OpenVPN :

#/etc/init.d/openvpn restart

Désormais, le service OpenVPN est accessible à vos utilisateurs définis dans votre base ou à vos utilisateurs système.

 

Pour leur permettre d’accéder à internet,  voici une petite règle Iptables ainsi qu’une petite manip :

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.128.127.0/24 -o eth0 -j MASQUERADE

Pensez bien à mettre ces lignes dans un petit script au démarrage de la machine, sinon vos règles ne seront pas reprise en compte au reboot !

 

Et voilà.

Source

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *