Table des matières
Openvpn
Pré-requis
Une Debian toute fraiche.
À l'attaque
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
Création de l'autorité de certification
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]:
Création du certificat Serveur(openvpn c'est son petit nom)
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'
Création des certificats clients openvpn
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'
Création du paramètre Diffie Hellman
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 |
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/openvpn.crt /etc/openvpn/ cp ./keys/openvpn.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
Configuration du Serveur OpenVPN
Openvp En UDP
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 }
Openvp En TCP IP
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 }
Démarrage du serveur OpenVPN
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
Partage de connexion
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
Configuration du client
en udp
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
en tcp sans proxy
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
En tcp avec proxy sans authentification
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
En tcp avec proxy avec authentification
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