braveo:docinstallsrvopenvpn
                Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| braveo:docinstallsrvopenvpn [2013/04/20 15:14] – modification externe 127.0.0.1 | braveo:docinstallsrvopenvpn [2024/04/16 22:20] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ===== Openvpn ===== | ||
| + | |||
| + | ==== Pré-requis ==== | ||
| + | |||
| + | Une Debian toute fraiche. | ||
| + | |||
| + | ==== À l' | ||
| + | Bon comme d' | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | Nous avons repris le tutoriel [[http:// | ||
| + | |||
| + | 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 / | ||
| + | |||
| + | < | ||
| + | |||
| + | nous placons dans ce nouveau repertoir | ||
| + |   cd / | ||
| + | |||
| + | Nous renseignons le fichiers vars | ||
| + | vi vars | ||
| + | |||
| + | En lui mettant a la fin   | ||
| + |   export KEY_COUNTRY=" | ||
| + |   export KEY_PROVINCE=" | ||
| + |   export KEY_CITY=" | ||
| + |   export KEY_ORG=" | ||
| + |   export KEY_EMAIL=" | ||
| + | |||
| + | nous pouvons exécuter ce fichier  | ||
| + | . ./vars | ||
| + | |||
| + | <note important> | ||
| + | Vous pouvez enlever les clés que dans le cas d'une installation neuve ou si vous voulez tout effacer. | ||
| + | </ | ||
| + | Nous donnons un petit coup de balai : | ||
| + | ./clean-all | ||
| + | |||
| + | =====Création de l' | ||
| + | Le script suivant permet de créer dans «  keys  » le certificat principal du serveur « ca.crt  | ||
| + | ./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' | ||
| + |   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 » : | ||
| + | |||
| + |   ./ | ||
| + | |||
| + | que vous renseignez comme cela | ||
| + |   countryName  | ||
| + |   stateOrProvinceName  | ||
| + |   localityName  | ||
| + |   organizationName  | ||
| + |   commonName  | ||
| + |   emailAddress  | ||
| + | |||
| + | ===== Création des certificats clients  | ||
| + | |||
| + | Le script suivant permet de créer dans  ./ | ||
| + | |||
| + |   cd / | ||
| + | . ./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' | ||
| + |   Email Address [contact@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  | ||
| + | |Serveur de certification (CA) OpenSSL|	Certificat |ca.crt  | ||
| + | |Serveur de certification (CA) OpenSSL|	Clé	  | ||
| + | |Serveur OpenVPN	  | ||
| + | |Serveur OpenVPN	  | ||
| + | |paramètre Diffie Hellman  | ||
| + | |jean.dugenoux	  | ||
| + | |jean.dugenoux  | ||
| + | |||
| + | =====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 « / | ||
| + |   cp ./ | ||
| + |   cp ./ | ||
| + |   cp ./ | ||
| + |   cp ./ | ||
| + | |||
| + | =====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  | ||
| + | groupadd openvpn | ||
| + | useradd -d /dev/null -g openvpn -s /bin/false openvpn | ||
| + | |||
| + | =====Configuration du Serveur OpenVPN ===== | ||
| + | <note important> | ||
| + | Nous pouvons configurer sur deux protocoles en tcp, et en udp. | ||
| + | Les performances réseaux sont très largement meilleurs en UDP. | ||
| + | Toutefois dans les entreprises, | ||
| + | Ce n'est pas la panacée car dans les logs de ces équipements nous voyons très clairement que vous connectez en 443 sur l'ip du serveur vpn. mais ça permet de passer  | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Openvp En UDP ==== | ||
| + | |||
| + | Par défaut OpenVPN est fourni avec plusieurs fichiers d’exemples enregistrés dans le dossier : | ||
| + |   / | ||
| + | |||
| + | 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 «  / | ||
| + |   cd / | ||
| + | gunzip server.conf.gz | ||
| + |   cp server.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' | ||
| + | dev tun | ||
| + |    | ||
| + |   ;Nom des fichiers servant à l' | ||
| + | ca ca.crt | ||
| + | cert openvpn.crt | ||
| + |   key openvpn.key   | ||
| + | dh dh1024.pem | ||
| + |    | ||
| + |   ;Adresse du réseau virtuel (Le serveur aura l' | ||
| + | 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' | ||
| + |   push " | ||
| + |   push " | ||
| + |   push " | ||
| + |    | ||
| + | # Cette ligne permet aux clients de voire les autres clients | ||
| + |   ; | ||
| + |    | ||
| + | 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' | ||
| + | verb 1 | ||
| + | # ces lignes definiseent les fichiers le log | ||
| + |   status / | ||
| + |   log-append / | ||
| + |    | ||
| + | |||
| + | <note important> | ||
| + | </ | ||
| + | |||
| + | Pour cela, il suffit de créer le fichier / | ||
| + |   vi / | ||
| + | |||
| + | et d’y ajouter les directives suivantes : | ||
| + | |||
| + |   / | ||
| + | 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 : | ||
| + |   / | ||
| + | |||
| + | 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 «  / | ||
| + |   cd / | ||
| + | gunzip server.conf.gz | ||
| + |   cp server.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' | ||
| + | dev tun | ||
| + |    | ||
| + |   ;Nom des fichiers servant à l' | ||
| + | ca ca.crt | ||
| + | cert openvpn.crt | ||
| + |   key openvpn.key   | ||
| + | dh dh1024.pem | ||
| + |    | ||
| + |   ;Adresse du réseau virtuel (Le serveur aura l' | ||
| + | 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' | ||
| + |   push " | ||
| + |   push " | ||
| + |   push " | ||
| + |    | ||
| + | # Cette ligne permet aux clients de voire les autres clients | ||
| + |   ; | ||
| + |    | ||
| + | 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' | ||
| + | verb 1 | ||
| + | # ces lignes definiseent les fichiers le log | ||
| + |   status / | ||
| + |   log-append / | ||
| + |    | ||
| + | |||
| + | <note important> | ||
| + | </ | ||
| + | |||
| + | Pour cela, il suffit de créer le fichier / | ||
| + |   vi / | ||
| + | |||
| + | et d’y ajouter les directives suivantes : | ||
| + | |||
| + |   / | ||
| + | rotate 4 | ||
| + | daily | ||
| + |     copytruncate  | ||
| + |     compress  | ||
| + |     missingok  | ||
| + |     notifempty  | ||
| + | } | ||
| + | |||
| + | |||
| + | =====Démarrage du serveur OpenVPN==== | ||
| + | La commande suivante permet de démarrer ou redémarrer le serveur : | ||
| + |   / | ||
| + | |||
| + | Ne pas hésiter à regarder dans les logs que tout c’est bien passé : | ||
| + | |||
| + |   tail -100 / | ||
| + | |||
| + | 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: | ||
| + |          inet adr: | ||
| + |          UP POINTOPOINT RUNNING NOARP MULTICAST  | ||
| + | RX packets:0 errors:0 dropped:0 overruns:0 frame:0 | ||
| + | TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 | ||
| + |           | ||
| + | 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 / | ||
| + | |||
| + | et nous lui mettons ... \\ | ||
| + | #! /bin/sh | ||
| + | ### BEGIN INIT INFO | ||
| + |   # Provides:  | ||
| + |   # Required-Start:  | ||
| + |   # Required-Stop: | ||
| + |   # Default-Start:  | ||
| + |   # Default-Stop: | ||
| + |   # Short-Description: | ||
| + | ### END INIT INFO | ||
| + | |||
| + |    | ||
| + |   PATH=/ | ||
| + |    | ||
| + |   . / | ||
| + |   . / | ||
| + |   case " | ||
| + | start) | ||
| + |         echo 1 > / | ||
| + | iptables -F | ||
| + | iptables -t nat -F | ||
| + | iptables -t mangle -F | ||
| + | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | ||
| + | ;; | ||
| + |    | ||
| + | restart|reload|force-reload) | ||
| + |         echo " | ||
| + | exit 3 | ||
| + | ;; | ||
| + |    | ||
| + | stop) | ||
| + |         echo 0 > / | ||
| + | iptables -F | ||
| + | iptables -t nat -F | ||
| + | iptables -t mangle -F | ||
| + | ;; | ||
| + | *) | ||
| + |         echo " | ||
| + | exit 3 | ||
| + | ;; | ||
| + | esac | ||
| + | |||
| + | =====Configuration du client===== | ||
| + | ====en udp ==== | ||
| + | sur le client | ||
| + | aptitude install openvpn | ||
| + | |||
| + | puis | ||
| + |   vi / | ||
| + | |||
| + | 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 / | ||
| + | |||
| + | ====en tcp sans proxy ==== | ||
| + | <note warning> Au cas où le firewall de votre réseau ne laisse pas passer l' | ||
| + | |||
| + | sur le client | ||
| + | aptitude install openvpn | ||
| + | |||
| + | puis | ||
| + |   vi / | ||
| + | |||
| + | 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 / | ||
| + | |||
| + | ====En tcp avec proxy sans authentification ==== | ||
| + | <note warning> Au cas où il existe un proxy sur votre réseau . et que le firewall ne laisse pas passer l' | ||
| + | |||
| + | 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/ | ||
| + | |||
| + | ====En tcp avec proxy avec authentification ==== | ||
| + | |||
| + | http-proxy-retry | ||
| + | http-proxy 172.29.11.211 8080 mypass basic | ||
| + |   http-proxy-option AGENT Mozilla/ | ||
| + | |||
| + | et il faut creer le fichier mypass dans / | ||
| + |   vi / | ||
| + | |||
| + | et lui mettre dedans  | ||
| + | login | ||
| + | password | ||
