braveo:docinstallsrvopenvpn
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Révision précédente | |||
| — | 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 | ||
