Installation d’OpenVPN over HTTPS sous debian
Administration des Réseaux, Adminstration Server Linux, Debian 11 Comments »Avant-propos
OpenVPN est un logiciel permettant de créer des réseaux privés virtuels sans utiliser des technologies telles que PPtP (Microsoft) ou IPSec. Il est de plus disponibles sur de nombreux systèmes d’exploitation (Microsoft Windows, GNU / Linux, MacOS X, …). C’est une solution simple pour gérer un réseau privé virtuel composé de machines hétéroclites dans un environnement n’autorisant pas IPSec.
Dans notre cas nous allons utiliser OpenVPN over HTTPS afin de contourner les éventuels restrictions que l’on trouve à l’école ou au boulot.
Voici un schéma du réseaux que nous allons mettre en place
Le server dispose de deux ips, l’une public et une autre privée pour le réseau VPN
Eth0 : 91.121.95.122
Tun0 : 172.16.0.1
Le client dispose également de deux ips, l’ip de l’interface normal donnant accès au net et l’ip du l’interface virtuel d’OpenVPN
Réseau local : 10.1.6.30
Interface virtuel 172.16.0.6
Voyons maintenant en détail l’installation et la configuration du server
Server OpenVPN
L’installation d’OpenVPN se fait simplement par la ligne de commande :
apt-get install openvpn openssl
Création du certificat de l’autorité de certification
La partie la plus compliquée et la plus fastidieuse dans la mise en place d’un serveur OpenVPN concerne la génération des clés et des certificats. OpenVPN est livré avec plusieurs scripts permettant de générer plus facilement les clés et les certificats pour OpenSSL. Ces scripts sont enregistrés dans le dossier « easy-rsa » :
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
On maintenant configuré les variable du script, pour ce faire on édite le fichier vars :
Vi /usr/share/doc/openvpn/examples/easy-rsa/2.0/vars
Tous en bas on trouve :
export KEY_COUNTRY="BE" export KEY_PROVINCE="Belgium" export KEY_CITY="Namur" export KEY_ORG="MajorXtrem" export KEY_EMAIL="admin@majorxtrem.be"
Une fois le fichier modifié, la ligne suivante permet d’initialiser les variables pour les scripts :
source ./vars
Le script suivant, permet de créer ou de réinitialiser le sous-dossier « keys » :
./clean-all
Le script suivant permet de créer le certificat principal du serveur « ca.crt » et la clé correspondante « ca.key » :
./build-ca
Pour le « Common Name » il faut le renseigner manuellement, exemple le FQDN de la machine
Création du certificat et de la clé pour le serveur OpenVPN
Le script suivant permet de créer le certificat et la pour le serveur VPN
/build-key-server server
ATTENTION : Pour les questions, la plupart des champs sont renseignés par défaut sauf le « Common Name » qu’il faut renseigner manuellement. Exemple le FQDN de la machine
Pour les questions, tous les champs sont renseignés par défaut sauf le « Common Name » qu’il faut renseigner manuellement.
Je n’ai pas renseigné le champ « password »
Création du certificat et de la clé pour un client OpenVPN
Le script suivant permet de créer le certificat et la clé pour le client VPN.
./build-key johann-laptop
Lorsque le script vous pose des questions, utilisez les valeurs par défaut, mais faites bien attention de répondre y aux questions :
Pour le « Common Name » il faut le renseigner manuellement, exemple le FQDN de la machine
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y
Création du paramètre Diffie Hellman
Le script suivant permet de créer dans « keys » le fichier « dh1024.pem » :
./build-dh
Mise en place des certificats et des clés
concernant le serveur OpenVPN, le plus simple est de copier les 4 fichiers dans le dossier « /etc/openvpn » :
cp ./keys/ca.crt /etc/openvpn/ cp ./keys/ca.key /etc/openvpn/ cp ./keys/server.crt /etc/openvpn/ cp ./keys/server.key /etc/openvpn/ cp ./keys/dh1024.pem /etc/openvpn/
Création d’un utilisateur avec des droits limités pour OpenVPN
Pour limiter les risques d’attaques sur OpenVPN, il est important que le processus d’OpenVPN fonctionne sur un utilisateur n’ayant aucun droit sur le système.
Souvent, l’utilisateur « nobody » est utilisé par défaut, mais il est encore plus sécurisant de faire tourner chaque processus avec un utilisateur différent. Donc, pour le processus OpenVPN, nous allons créer l’utilisateur « openvpn » :
groupadd openvpn useradd -d /dev/null -g openvpn -s /bin/false openvpn chown openvpn:openvpn -R /etc/openvpn/
Génération d’une clef TLS
Nous allons maintenant générer une clef qui nous protègera de certains types d’attaques. Elle va nous permettre de créer un pare-feu HSA :
openvpn --genkey --secret /etc/openvpn/ta.key
Configuration d’OpenVPN
On va partir d’une configuration vierge
Mv /etc/openvpn/server.conf /etc/openvpn/server.conf_old Vi /etc/openvpn/server.conf
Ensuite on copie la config suivante :
# Server configuration mode server dev tun max-clients 4 port 443 port-share 91.121.95.122 4443 server 172.16.0.0 255.255.255.0 proto tcp keepalive 10 120 persist-key persist-tun comp-lzo # SSL parameters ca ca.crt cert server.crt key server.key dh dh1024.pem tls-auth ta.key 0 tls-server # VPN Gateway offer DNS parameters push "dhcp-option DOMAIN majorxtrem.be" push "dhcp-option DNS 172.16.0.1" push "dhcp-option NTP 172.16.0.1" # VPN Gateway offer this routes to clients push "redirect-gateway" push "route 172.16.0.0 255.255.255.0" ifconfig-pool-persist ipp.txt # Fix MTU problems mssfix 1300 # Drop root privileges chroot /etc/openvpn user openvpn group openvpn # Gestion des clients client-to-client client-config-dir ccd # Logging configuration status /var/log/openvpn-status.log verb 1
Les paramètres port et port-share sont extrêmes important et requière une petite explication.
Le server OpenVPN tournera sur le port 443 pour pouvoir passer à travers d’éventuel proxy dans le cas ou l’accès direct au net n’est pas possible là ou vous vous trouvez. Ce pendant apache écoute aussi sur le port 443, on va donc dire a OpenVPN de transmettre les requêtes qui ne lui sont pas attribuer sur le port 4443. Il faut évidement configurer vos vhosts ssl apache sur le port 4443 et ne plus le mettre à l’écoute du port 443 mais 4443.
cat /etc/apache2/ports.conf Listen 80 Listen 4443
cat /etc/apache2/sites-available/ssl NameVirtualHost 91.121.95.122:4443… …
Pour le reste des option je vous invite a voir leur signification sur la doc d’OpenVPN (http://openvpn.net/index.php/documentation/manuals/openvpn-21.html)
Ne pas oublier de redémarrer apache et OpenVPN
/etc/init.d/apache2 restart /etc/init.d/openvpn restart
Ne pas hésiter à regarder dans les logs que tout c’est bien passé :
tail -n 100 /var/log/syslog
Bien vérifier également que le processus tourne sous l’utilisateur « openvpn »
ps aux | grep openvpn
Pour finir, si tout c’est bien passé l’interface « tun0 » doit apparaître dans la configuration du réseau :
ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet adr:172.16.0.1 P-t-P:172.16.0.2 Masque:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:22 errors:0 dropped:0 overruns:0 frame:0 TX packets:22 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:100 RX bytes:1436 (1.4 KiB) TX bytes:1436 (1.4 KiB)
Et il doit être possible de la pinguer :
ping 172.16.0.1
Configuration du NAT
L’objectif du VPN étant d’outre passé les limite du réseau dans le quel on se trouve, il serait peut-être utile d’activé le forward des paquet sur le server
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE
Voilà pour la partie serveur 🙂 On va maintenant installer et configurer la partie client
Client OpenVPN sous Windows Seven
On télécharge la dernier version en date à savoir la 2.1_rc15 à partir du site d’OpenVPN ( http://openvpn.net/release/ ).
L’installateur ne fonctionne pas sous seven, il suffit de faire clic droit compatibilité et de choisir Windows XP SP3
Récupérer les key et certificats sur le serveur, ils se trouvent dans le dossier :
/usr/share/doc/openvpn/examples/easy-rsa/2.0/key/
Vous avez besoin de la clef et du certificat du client, du certificat racine ainsi que de la clef
○ johann-laptop.crt
○ johann-laptop.key
○ ca.crt
Vous avez également besoin de la clef TSL, elle se trouve dans le repertoire /etc/openvpn/
○ ta.key
Copiez ces 4 fichiers dans le répertoire conf C:\Program Files\OpenVPN\config du client
Lancer ensuite le GUI d’OpenVPN, et dans la zone de notification faites un clic droit dessus et sélectionner « edit config »
# Client configuration client dev tun remote 91.121.95.122 443 proto tcp resolv-retry infinite nobind persist-key persist-tun comp-lzo # SSL parameters ca ca.crt cert johann-laptop.crt key johann-laptop.key tls-auth ta.key 1 # Route and Network route-method exe route-delay 2 shaper 100000000 # Log verb 3
Sur l’icône dans la zone de notification faites connect
Si tous fonctionne bien, vous devriez être capable de pinguer le serveur via le tunnel
Ping 172.16.0.1
Démarrer une console et tappez route print
Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 172.16.0.5 172.16.0.6 31 91.121.95.122 255.255.255.255 192.168.3.1 192.168.3.9 21
Vous devez avoir quelque chose de la sorte, a savoir que la passerelle par défaut est maintenant 172.16.0.5
Et que pour joindre le server VPN la route a prendre est l’ancienne passerelle par défaut
Recent Comments