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à.