Ce document détaille la mise en place d'un lien sécurisé entre un serveur et des clients nomades roadwarrior. Il est pour cela nécessaire de mettre en place une autorité de certification (pouvant être basée sur une PKI ou non) ainsi qu'un serveur et des clients OpenVPN.
Dans cet exemple, le protocole d'échange TLS sera utilisé par les hôtes openvpn afin d'établir un lien de communication sécurisé. Il est également possible d'utiliser des clés statiques pré-partagées, même si cette solution peut se réveller moins sécurisée et plus fastidieuse à mettre en place.
Il est tout d'abord nécessaire de posséder une authorité de certification afin de pouvoir émettre des certificats, à destination du serveur et des clients OpenVPN. Pour se faire, il peut être avantageux d'utiliser le fichier openssl.cnf fournit avec le logiciel OpenVPN.
$ sudo cp /usr/local/share/examples/openvpn/easy-rsa/openssl.cnf /etc/ssl/
Il faut ensuite positionner quelques variables d'environnement, et créer les fichiers nécessaires afin d'être en mesure de signer des certificats.
% mkdir -p /etc/openvpn/ssl % cd /etc/openvpn/ssl % sudo touch index.txt % sudo echo "00" > serial % setenv KEY_DIR /etc/openvpn/ssl % setenv KEY_SIZE 1024 % setenv KEY_COUNTRY FR % setenv KEY_PROVINCE x % setenv KEY_CITY x % setenv KEY_ORG domain.tld % setenv KEY_EMAIL root@domain.tld
Pour créer le certificat du CA :
% sudo openssl dhparam -out dh1024.pem 1024 % sudo openssl genrsa -des3 -out ca.key 1024 (et spécifier pass CA) % sudo openssl req -config openssl.cnf -new -x509 -keyout ca.key -out ca.crt -days 730
% sudo openssl req -config openssl.cnf -nodes -new -keyout server.key -out server.csr % sudo openssl ca -config openssl.cnf -in server.csr -out server.crt
Sur le serveur comme sur les clients, les clés et certificats générés devront être placés dans /etc/openvpn/ssl.
Voici un exemple pour le client appelé "client1", le principe est identique à celui du serveur.
% sudo openssl req -config openssl.cnf -nodes -new -keyout client1.key -out client1.csr % sudo openssl ca -config openssl.cnf -in client1.csr -out client1.crt
OpenVPN permet de mettre en place deux types de VPN, grâce aux modes bridge (niveau 2, aucun routage) ou routeur (niveau 3). Si le driver pour accomplir ces deux modes est le même sur les systèmes BSD, à savoir tun, il faudra différencier les drivers tun (niveau 3 uniquement) et tap (niveau 2 uniquement) sur d'autres systèmes.
Si la configuration est quasi-identique selon les systèmes, des différences peuvent apparaitre, comme le nom du device à utiliser (tun ou tun0), ou l'utilisateur OpenVPN (nobody par exemple).
Il est possible de configurer comme suit le serveur OpenVPN, via le fichier /etc/openvpn/openvpn.conf. Celui-ci incarnera un serveur TLS, permettant l'accès des clients grâce à des opérations de routage (routes, adresses IP, etc.)
port 1194 proto udp dev tun0 mode server tls-server server 192.168.2.0 255.255.255.0 ifconfig 192.168.2.1 192.168.2.2 keepalive 15 120 ifconfig-pool-persist /etc/openvpn/ipp.txt push "route 192.168.1.0 255.255.255.0" comp-lzo user nobody group nobody chroot /var/empty persist-key persist-tun ca /etc/openvpn/ssl/ca.crt cert /etc/openvpn/ssl/server.crt key /etc/openvpn/ssl/server.key dh /etc/openvpn/ssl/dh1024.pem
Dans cet exemple de configuration, l'option ifconfig-pool-persist est utilisée afin de conserver une liste des correspondances FQDN-IP ayant utilisées OpenVPN, afin d'attribuer les mêmes adresses lors des prochaines connexions clientes.
Afin d'automatiser le lancement, on peut par exemple ajouter au fichier /etc/rc.local :
echo 'lancement du démon: openvpn...'
if [ -x /usr/local/sbin/openvpn ]; then
/usr/local/sbin/openvpn --config /etc/openvpn/openvpn.conf --daemon
fi
Il est possible de configurer comme suit les clients OpenVPN, via le fichier /etc/openvpn/openvpn.conf. Ceux-ci incarneront des clients TLS, contactant le serveur server.domain.tld pour établir des liaisons.
client dev tun0 proto udp tls-client remote server.domain.tld 1194 comp-lzo nobind user nobody group nobody chroot /var/empty persist-key persist-tun ca /etc/openvpn/ssl/ca.crt cert /etc/openvpn/ssl/client1.crt key /etc/openvpn/ssl/client1.key
Enfin, si un ou plusieurs firewalls viennent à être utilisés, il sera nécessaire d'autoriser le flux 1194/udp entrant sur le serveur OpenVPN.