Une Debian toute fraiche.
Bon comme d'habitude deux ou trois doc
Nous avons repris le tutoriel coagul openvpn et adapté a notre plateforme
Nous installons openvpn
aptitude install openvpn
Ensuite nous créons des certificats Ces certificats vont servir pour identifier le client et le serveur
cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
nous placons dans ce nouveau repertoir
cd /etc/openvpn/easy-rsa/2.0
Nous renseignons le fichiers vars
vi vars
En lui mettant a la fin
export KEY_COUNTRY="FR" export KEY_PROVINCE="BRETAGNE" export KEY_CITY="BREST" export KEY_ORG="maison du libre" export KEY_EMAIL="contact@mdl29.net"
nous pouvons exécuter ce fichier
. ./vars
Nous donnons un petit coup de balai :
./clean-all
Le script suivant permet de créer dans « keys » le certificat principal du serveur « ca.crt » et la clé correspondante « ca.key » :
./build-ca
et renseigner les champs demandé comme cela
Country Name (2 letter code) [FR]: State or Province Name (full name) [BRETAGNE]: Locality Name (eg, city) [BREST]: Organization Name (eg, company) [maison du libre]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [maison du libre CA]:maison du libre CA Email Address [contact@mdl29.net]:
Le script suivant permet de créer dans « keys » le certificat « openvpn.crt » et la clé « openvpn.key » pour le serveur VPN nommé par exemple «openvpn » :
./build-key-server openvpn
que vous renseignez comme cela
countryName :PRINTABLE:'FR' stateOrProvinceName :PRINTABLE:'BRETAGNE' localityName :PRINTABLE:'BREST' organizationName :PRINTABLE:'maison du libre' commonName :PRINTABLE:'openvpn' emailAddress :IA5STRING:'contact@mdl29.net'
Le script suivant permet de créer dans ./keys le certificat jean.dugenoux.crt et la clé « jean.dugenoux.key » pour le client VPN nommé par exemple jean.dugenoux :
cd /etc/openvpn/easy-rsa/2.0 . ./vars ./build-key jean.dugenoux
et le renseigner comme cela
Country Name (2 letter code) [FR]: State or Province Name (full name) [BRETAGNE]: Locality Name (eg, city) [BREST]: Organization Name (eg, company) [maison du libre]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [jean.dugenoux]: Email Address [contact@mdl29.net]:'jean.dugenoux@mdl29.net'
Le script suivant permet de créer dans « keys » le fichier « dh1024.pem » :
./build-dh
Résumé des certificats et clés créés précédemment dans « keys »
Emplacement du fichier | Type | Nom | Secret |
Serveur de certification (CA) OpenSSL | Certificat | ca.crt | Non |
Serveur de certification (CA) OpenSSL | Clé | ca.key | Oui |
Serveur OpenVPN | Certificat | openvpn.crt | Non |
Serveur OpenVPN | Clé | openvpn.key | Oui |
paramètre Diffie Hellman | dh1024.pem | Non | |
jean.dugenoux | Certificat | jean.dugenoux.crt | Non |
jean.dugenoux | Clé | jean.dugenoux.key | Oui |
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/openvpn.crt /etc/openvpn/ cp ./keys/openvpn.key /etc/openvpn/ cp ./keys/dh1024.pem /etc/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
Par défaut OpenVPN est fourni avec plusieurs fichiers d’exemples enregistrés dans le dossier :
/usr/share/doc/openvpn/examples/sample-config-files/
Pour configurer le serveur, je suis parti du fichier d’exemple « server.conf.gz », qu’il faut donc décompresser et mettre en place dans « /etc/openvpn » :
cd /usr/share/doc/openvpn/examples/sample-config-files/ gunzip server.conf.gz cp server.conf /etc/openvpn/serveur-udp.conf
Il suffit ensuite d’adapter ce fichier en fonction de nos besoins.
;Port en écoute utilisé pour la connexion VPN port 1194 ;Protocole utilisé (Le protocole udp est plus performant 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 openvpn.crt key openvpn.key dh dh1024.pem ;Adresse du réseau virtuel (Le serveur aura l'adresse 10.8.0.1) server 10.8.3.0 255.255.255.0 ;Cette ligne ajoute sur le client la route du réseau du serveur push "route 192.168.0.0 255.255.255.0" ;Ces lignes indiquent aux clients l'adresse des serveur DNS et WINS push "dhcp-option DNS 192.168.0.2" push "dhcp-option DOMAIN MonDomaine.com" push "dhcp-option WINS 192.168.0.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 user openvpn group openvpn ;Ces lignes permettent de rendre persistante la connexion persist-key persist-tun status openvpn-status.log # Fix MTU problems mssfix 1300 ;Cette ligne permet d'indiquer le niveau de log souhaité (de 1 à 9) verb 1 # ces lignes definiseent les fichiers le log status /var/log/openvpn-udp-status.log log-append /var/log/openvpn-udp.log
Pour cela, il suffit de créer le fichier /etc/logrotate.d/openvpn
vi /etc/logrotate.d/openvpn
et d’y ajouter les directives suivantes :
/var/log/openvpn.log { rotate 4 daily copytruncate compress missingok notifempty }
Par défaut OpenVPN est fourni avec plusieurs fichiers d’exemples enregistrés dans le dossier :
/usr/share/doc/openvpn/examples/sample-config-files/
Pour configurer le serveur, je suis parti du fichier d’exemple « server.conf.gz », qu’il faut donc décompresser et mettre en place dans « /etc/openvpn » :
cd /usr/share/doc/openvpn/examples/sample-config-files/ gunzip server.conf.gz cp server.conf /etc/openvpn/serveur-tcp.conf
Il suffit ensuite d’adapter ce fichier en fonction de nos besoins.
;Port en écoute utilisé pour la connexion VPN port 443 ;Protocole utilisé (Le protocole udp est plus performant que le tcp) proto tcp ;Type d'interface réseau virtuelle créée dev tun ;Nom des fichiers servant à l'authentification des clients via OpenSSL ca ca.crt cert openvpn.crt key openvpn.key dh dh1024.pem ;Adresse du réseau virtuel (Le serveur aura l'adresse 10.8.0.1) server 10.8.4.0 255.255.255.0 ;Cette ligne ajoute sur le client la route du réseau du serveur push "route 192.168.0.0 255.255.255.0" ;Ces lignes indiquent aux clients l'adresse des serveur DNS et WINS push "dhcp-option DNS 192.168.0.2" push "dhcp-option DOMAIN MonDomaine.com" push "dhcp-option WINS 192.168.0.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 user openvpn group openvpn ;Ces lignes permettent de rendre persistante la connexion persist-key persist-tun status openvpn-status.log # Fix MTU problems mssfix 1300 ;Cette ligne permet d'indiquer le niveau de log souhaité (de 1 à 9) verb 1 # ces lignes definiseent les fichiers le log status /var/log/openvpn-tcp-status.log log-append /var/log/openvpn-tcp.log
Pour cela, il suffit de créer le fichier /etc/logrotate.d/openvpn
vi /etc/logrotate.d/openvpn
et d’y ajouter les directives suivantes :
/var/log/openvpn.log { rotate 4 daily copytruncate compress missingok notifempty }
La commande suivante permet de démarrer ou redémarrer le serveur :
/etc/init.d/openvpn restart
Ne pas hésiter à regarder dans les logs que tout c’est bien passé :
tail -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 Lien encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet adr:10.8.3.1 P-t-P:10.8.3.2 Masque:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Et il doit être possible de la pinguer :
ping 10.8.3.1
Par défaut, les connexion vpn n'ont pas accès au réseau local du serveur . Pour simplifier la conf, nous allons natter tout ce qui vient du vpn.
creation du script du demarrage vi /etc/init.d/networkVPN
et nous lui mettons …
#! /bin/sh ### BEGIN INIT INFO # Provides: rc.local # Required-Start: $remote_fs # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: lance le partage de connexion reseau ### END INIT INFO PATH=/sbin:/usr/sbin:/bin:/usr/bin . /lib/init/vars.sh . /lib/lsb/init-functions case "$1" in start) echo 1 > /proc/sys/net/ipv4/ip_forward iptables -F iptables -t nat -F iptables -t mangle -F iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) echo 0 > /proc/sys/net/ipv4/ip_forward iptables -F iptables -t nat -F iptables -t mangle -F ;; *) echo "Usage: $0 start|stop" >&2 exit 3 ;; esac
sur le client
aptitude install openvpn
puis
vi /etc/openvpn/client.conf
et on lui met
client dev tun proto udp remote ip_qui_va_bien 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert jean.dugenoux.crt key jean.dugenoux.key comp-lzo verb 1
il ne reste plus qu'a copier les cle ca.crt et le jean.dugenoux* dans le repertoire /etc/openvpn
sur le client
aptitude install openvpn
puis
vi /etc/openvpn/client.conf
et on lui met
client dev tun proto tcp remote 91.217.154.233 443 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert jean.dugenoux.crt key jean.dugenoux.key comp-lzo verb 1
il ne reste plus qu'a copier les cle ca.crt et le jean.dugenoux* dans le repertoire /etc/openvpn
meme chose que pour tcp sans proxy, il suffit de rajouter à la fin du fichier client.conf
http-proxy-retry http-proxy 172.29.11.211 8080 http-proxy-option AGENT Mozilla/5.0+(Windows+NT+5.0;+fr-FR;+rv:1.7.6)+gecko /20050226+Firefox/1.0.1
http-proxy-retry http-proxy 172.29.11.211 8080 mypass basic http-proxy-option AGENT Mozilla/5.0+(Windows+NT+5.0;+fr-FR;+rv:1.7.6)+gecko /20050226+Firefox/1.0.1
et il faut creer le fichier mypass dans /etc/openvpn/
vi /etc/openvpn/mypass
et lui mettre dedans
login password