Ceci est une ancienne révision du document !
Un serveur Debian avec un serveur OpenVPN sur un reseau en 172.16.43.0
Un client sous windows qui veut accéder au serveur debian et tous les pc qui se trouvent sur son LAN
apt-get install openvpn
On crée un utilisateur openvpn pour plus de sécurité
groupadd openvpn useradd -d /dev/null -g openvpn -s /bin/false openvpn
Tous les fichiers nécessaires se trouvent dans
cd /usr/share/doc/openvpn/examples/
On va copier le fichier de config par défaut et l’ajuster ensuite
cd /usr/share/doc/openvpn/examples/sample-config-files/ gunzip server.conf.gz cp server.conf /etc/openvpn/
Avant de se lancer dans la config, nous allons générer les clé et certificat dont nous avons besoin.
Allons dans le répertoire adéquate
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
Nous llons éditer le fichier vars afin de donner quelques info sur nous.
vi vars
Tout à la fin du fichier, modifiez les infos en fonction de vous
export KEY_COUNTRY=FR export KEY_PROVINCE=France export KEY_CITY=Dijon export KEY_ORG="MonEntreprise" export KEY_EMAIL="contact@monentreprise.fr"
Ensuite, on va initialiser le fichier vars
source vars
Faire un nettoyage au préalable
./clean-all
On crée le certificat principal du serveur ca.crt et la clé correspondante ca.key
./build-ca
On crée maintenant le certificat et clé pour le serveur openvpn
./build-key-server NomServeurVPN
Ensuite on crée un certification et clé pour le client openvpn
./build-key Client01
Répétez la commande précédente autant de fois qu’il y a de poste client avec un nom différent biensur.
Création du paramètre Diffie Hellman
./build-dh
Voila, tout est créé dans le répertoire keys, il n’y a plus qu’a copier les fichiers concernant le serveur sur le serveur et le client sur le client ;)
cp ./keys/ca.crt /etc/openvpn/ cp ./keys/LeServeurVPN.crt /etc/openvpn/ cp ./keys/LeServeurVPN.key /etc/openvpn/ cp ./keys/dh1024.pem /etc/openvpn/
Pour le client, copier le ca.crt, le Client01.crt et le Client01.key à copier dans c:\Program Files\OpenVPN\config mais nous y reviendrons dans la partie client.
grep -E -v '^(#|;|[ ]*#|[ ]*;)' /etc/openvpn/server.conf
exemple du fichier de conf
;Port en écoute utilisé pour la connexion VPN port 1194 ;Protocole utilisé (Le protocole udp est plus sécurisé que le tcp) proto udp ;Type d'interface réseau virtuelle créée dev tun ;Nom des fichiers servant à l'authentification des clients via OpenSSL ca ca.crt cert LeServeurVPN.crt key LeServeurVPN.key dh dh1024.pem ;Adresse du réseau virtuel (Le serveur aura l'adresse 10.8.0.1) server 10.8.0.0 255.255.255.0 ;Cette ligne ajoute sur le client la route du réseau du serveur push "route 172.16.43.0 255.255.255.0" ;Ces lignes indiquent aux clients l'adresse des serveur DNS et WINS push "dhcp-option DNS 172.16.43.2" push "dhcp-option DOMAIN MonDomaine.com" push "dhcp-option WINS 172.16.43.3" # Cette ligne permet aux clients de voire les autres clients ;client-to-client keepalive 10 120 ;Cette ligne active la compression comp-lzo ;Ces lignes indiquent un user et un group particulier pour le processus et on ajoute un chroot pour plus de sécurité chroot /etc/openvpn user openvpn group openvpn ;Ces lignes permettent de rendre persistante la connexion persist-key persist-tun ;Cette ligne permet de voir le status du serveur dans le fichier /etc/openvpn/openvpn-status.log status openvpn-status.log ;on définit le nom du fichier de log dans /var/log log openvpn.log ;Cette ligne permet d'indiquer le niveau de log souhaité (de 1 à 9) verb 3
ATTENTION, si les journaux sont écrits dans un fichier dédié comme c’est le cas dans la configuration ci-dessus, il faut absolument mettre en place une rotation des ces journaux. Dans le cas contraire, OpenVPN tombe lorsque le fichier atteint 2Go.
Pour cela, il suffit de créer le fichier /etc/logrotate.d/openvpn et d’y ajouter les directives suivantes :
/var/log/openvpn.log { rotate 4 daily copytruncate compress missingok notifempty }
Ainsi, une rotation des journaux d’OpenVPN sera effectuée chaque jour et les 4 derniers fichiers seront conservés. Bien sur ces valeurs doivent être adaptées en fonction de l’utilisation du serveur : si les journaux sont trop importants il est possible de diminuer le niveau de verbosité d’OpenVPN ou de modifier les paramètres de la rotation.
Vous pouvez maintenant redémarrer le serveur openvpn pour qu’il prenne en compte son nouveau fichier de config
/etc/init.d/openvpn restart
Dans l’état actuel, si un client se connecte sur le serveur openvpn, il n’aura accès uniquement au serveur mais pas au reste du LAN.
Pour cela il faut configurer le reseau et le firewall.
Vérifions que le port_forwarding est activé sur votre serveur avec la commande
cat /proc/sys/net/ipv4/ip_forward
Si vous avez 1, la fonction est activé, sinon vous avez 0, vous pouvez changer cela grace à cette commande
echo 1 > /proc/sys/net/ipv4/ip_forward
Afin que ce paramètre reste en place lors du redémarrage du serveur, il convient de modifier le fichier /etc/sysctl.conf
Trouver la ligne
# Uncomment the next line to enable packet forwarding for IPv4 # net.ipv4.ip_forward=1
et décommenté la 2eme en vous assurant que la variable est bien définie sur la valeur 1
net.ipv4.ip_forward=1
Créons maintenant notre règle firewall pour rediriger les paquets venant du réseau virtuel VPN vers notre LAN
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Pour que cette règle s’exécute au redémarrage du serveur, il convient de créer un fichier contenant cette règle dans le répertoire
/etc/network/if-up.d/