informatique:logiciels:openvpn
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
informatique:logiciels:openvpn [2016/06/30 15:20] – [Liens] pteu | informatique:logiciels:openvpn [2018/08/20 12:49] (current) – [Générer les certificats] pteu | ||
---|---|---|---|
Line 3: | Line 3: | ||
======OpenVPN====== | ======OpenVPN====== | ||
- | OpenVPN est un logiciel libre multiplateforme permettant de créer un tunnel VPN chiffré TLS ce qui signifie qu'il utilise TCP ou UDP (niveau 4). | + | {{: |
- | **Ce mode opératoire décrit la mise en place d'un tunnel routé avec certificats entre un serveur Linux (Ubuntu ou Debian 8) plusieurs clients, peu importe leur système d' | + | [[https:// |
+ | |||
+ | **Ce mode opératoire décrit la mise en place d'un tunnel routé avec certificats entre un serveur Linux (Ubuntu ou Debian 8) et plusieurs clients, peu importe leur système d' | ||
Avant de commencer il faut savoir qu'il existe 2 types de tunnels : | Avant de commencer il faut savoir qu'il existe 2 types de tunnels : | ||
Line 15: | Line 17: | ||
* par **certificat** : plus long à mettre en place, l' | * par **certificat** : plus long à mettre en place, l' | ||
- | La méthode consiste à générer toutes les clés sur le serveur Linux (il jouera le rôle de CA) pour signer toutes les clés ; puis on installera ces clés sur chaque machine. | + | Si comme la plupart des gens no ne possède pas de CA, la méthode consiste à générer toutes les clés sur le serveur Linux (il jouera le rôle de CA) pour signer toutes les clés ; puis on installera ces clés sur chaque machine. |
Line 31: | Line 33: | ||
**OpenVPN** contient des outils permettant de générer facilement des couples de clés. Ils sont situés dans le répertoire **/ | **OpenVPN** contient des outils permettant de générer facilement des couples de clés. Ils sont situés dans le répertoire **/ | ||
<code bash> | <code bash> | ||
- | mkdir / | + | mkdir / |
cp -R / | cp -R / | ||
# alternative pour Debian 8 : | # alternative pour Debian 8 : | ||
- | cp -a /usr/share/eay-rsa / | + | cp -a /usr/share/easy-rsa / |
# puis dans tous les cas, aller dans le répertoire copié | # puis dans tous les cas, aller dans le répertoire copié | ||
Line 57: | Line 59: | ||
Puis intégrer ces variables et supprimer les précédents éventuels certificats présents dans le répertoire '' | Puis intégrer ces variables et supprimer les précédents éventuels certificats présents dans le répertoire '' | ||
- | </code bash> | + | <code bash> |
source vars | source vars | ||
./clean-all | ./clean-all | ||
Line 158: | Line 160: | ||
D' | D' | ||
<code bash> | <code bash> | ||
- | # envoyer cette route aux clients (réseau de votre LAN) | + | # envoyer cette route aux clients (pour qu'ils puissent accéder au réseau de votre LAN) |
push "route 192.168.2.0 255.255.255.0" | push "route 192.168.2.0 255.255.255.0" | ||
# le réseau utilisé pour les tunnels | # le réseau utilisé pour les tunnels | ||
- | # NB : OpenVPN utilise l'IP .1 du premier /30 pour son IP à lui | + | # NB : OpenVPN utilise l'IP .1 du premier /30 pour lui |
# les /30 suivants sont pour chaque tunnel | # les /30 suivants sont pour chaque tunnel | ||
# ex : 192.168.3.4/ | # ex : 192.168.3.4/ | ||
Line 168: | Line 170: | ||
# spécification de l' | # spécification de l' | ||
- | cipher AES-128-CBC | + | # pour lister tous les algos possibles : " |
+ | # (NB : '' | ||
+ | cipher AES-256-CBC | ||
# activer la communication entre les clients | # activer la communication entre les clients | ||
Line 214: | Line 218: | ||
Pour pérenniser cette config, on peut utiliser le paquet **iptables-persistent** : | Pour pérenniser cette config, on peut utiliser le paquet **iptables-persistent** : | ||
<code bash> | <code bash> | ||
- | apt remove ipmitool | + | aptitude |
- | apt install iptables-persistent | + | |
/ | / | ||
</ | </ | ||
Line 245: | Line 248: | ||
verb 3 | verb 3 | ||
</ | </ | ||
- | NB : avec OpenVPN Connect, le fichier de conf doit être renommé pour avoir l' | + | NB : avec OpenVPN Connect, le fichier de conf doit avoir l' |
+ | ====Intégrer les certificats dans le fichier de configuration==== | ||
+ | |||
+ | Plutôt que de pointer vers des fichiers externes, openvpn permet d' | ||
+ | <code bash> | ||
+ | #ca / | ||
+ | <ca> | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIEoTCCA4mgAwIBAgIJAKWLtfNAkVCcMA0GCSqGSIb3DQEBCwUAMIGRMQswCQYD | ||
+ | [blabla...] | ||
+ | +/ | ||
+ | 9KljFHVPKEAFhZzokOREYCG+8yVA5F6Uk2miMw6ZVGDgbrYvWA== | ||
+ | -----END CERTIFICATE----- | ||
+ | </ca> | ||
+ | </ | ||
+ | |||
+ | Cela simplifie beaucoup la mise en œuvre, mais possède l' | ||
=====Conf avancée===== | =====Conf avancée===== | ||
Sur le serveur, on peut spécifier une configuration dédiée à un seul client en modifiant ainsi la conf : | Sur le serveur, on peut spécifier une configuration dédiée à un seul client en modifiant ainsi la conf : | ||
<code bash> | <code bash> | ||
- | # indique ou sont situes les fichiers | + | # indique ou sont situes les fichiers |
client-config-dir / | client-config-dir / | ||
+ | # interdit la connexion des clients qui n'ont pas de fichier dédié | ||
# | # | ||
</ | </ | ||
- | Ensuite place la config dédiée dans fichier portant le nom du client (le Common Name de son certificat). | + | Ensuite place la config dédiée dans fichier portant le nom du client (le **Common Name** (CN) de son certificat). |
* '' | * '' | ||
<code bash> | <code bash> | ||
+ | # son IP réservée 192.168.3.10 ainsi que l'IP du tunnel côté serveur : .9 | ||
ifconfig-push 192.168.3.10 192.168.3.9 | ifconfig-push 192.168.3.10 192.168.3.9 | ||
+ | # une route pour que le client puisse avoir accès à un réseau connecté au serveur | ||
+ | # sa passerelle sera l'IP du tunnel du serveur (.9) | ||
push "route 192.168.2.0 255.255.255.0" | push "route 192.168.2.0 255.255.255.0" | ||
+ | |||
+ | # LAN pour que le serveur accède au réseau du client (via 192.168.3.10) | ||
+ | iroute 192.168.100.0 255.255.255.0 | ||
+ | # NB : on doit ajouter également dans la conf serveur : "route 192.168.100.0 255.255.255.0" | ||
</ | </ | ||
- | De cette façon on attribue au client toto l'IP 192.168.3.10 ; sa gateway (l'autre bout du tunnel) sera 192.168.3.9 | + | **Le driver TAP sous Windows impose |
- | * '' | + | On peut couper la connexion si inactivité du client avec l'option |
- | **Le driver TAP sous Windows impose | + | |
- | Sachant que, dans le cas d'un serveur sous DD-WRT, ce dernier ne permet | + | '' |
- | Explications : | + | '' |
- | * créer | + | |
- | On peut couper la connexion si inactivité du client avec l'option | + | '' |
- | '' | + | =====Intégration système===== |
+ | |||
+ | On va s'atteler à configurer les utilitaires du sytème pour une bonne intégration d'openvpn. | ||
+ | |||
+ | ====Démarrage automatique==== | ||
+ | |||
+ | Pour lancer openvpn automatiquement au démarrage de la machine : | ||
+ | <code bash> | ||
+ | update-rc.d openvpn defaults | ||
+ | </ | ||
+ | |||
+ | ====syslog==== | ||
+ | |||
+ | Pour orienter les log du daemon openvpn, on peut définir l'option idoine ('' | ||
+ | <code bash> | ||
+ | # Create a template for the vpn log location | ||
+ | $template | ||
+ | |||
+ | # Save log events where the programname starts with ovpn like ovpn-server to the | ||
+ | # location mentioned in the template | ||
+ | : | ||
+ | |||
+ | # Stop processing ovpn-* log events | ||
+ | : | ||
+ | </ | ||
+ | |||
+ | Relancer ensuite le syslog : | ||
+ | <code bash> | ||
+ | systemctl restart rsyslog | ||
+ | </ | ||
+ | |||
+ | ====logrotate==== | ||
+ | |||
+ | Une configuration classique, à déposer dans ''/ | ||
+ | <code bash> | ||
+ | / | ||
+ | { | ||
+ | rotate 12 | ||
+ | size 500M | ||
+ | monthly | ||
+ | missingok | ||
+ | notifempty | ||
+ | delaycompress | ||
+ | compress | ||
+ | copytruncate | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ====fail2ban==== | ||
+ | |||
+ | On déclare le fichier à surveiller dans en créant un ''/ | ||
+ | <code bash> | ||
+ | [openvpn] | ||
+ | enabled = true | ||
+ | protocol = udp | ||
+ | port = 5594 | ||
+ | filter | ||
+ | logpath = / | ||
+ | </ | ||
+ | |||
+ | Et on défini les filtres dans ''/ | ||
+ | <code bash> | ||
+ | [Definition] | ||
+ | failregex = < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
Line 282: | Line 373: | ||
* '' | * '' | ||
* '' | * '' | ||
- | * la commande | + | * '' |
+ | * '' | ||
=====Liens===== | =====Liens===== | ||
+ | * Documentation officielle : [[https:// | ||
* installation d' | * installation d' | ||
* [[http:// | * [[http:// | ||
Line 293: | Line 387: | ||
* tunnel routé sous Ubuntu : http:// | * tunnel routé sous Ubuntu : http:// | ||
* [[http:// | * [[http:// | ||
+ | * Pour faire fonctionner le serveur OpenVPN de la Freebox Révolution avec le client OpenVPN : [[https:// | ||
+ | <code bash> | ||
+ | topology subnet | ||
+ | # copier/ | ||
+ | ifconfig 192.168.27.65 255.255.255.224 | ||
+ | # empêche d' | ||
+ | pull-filter ignore " | ||
+ | # ip de l' | ||
+ | route-gateway 192.168.27.94 | ||
+ | </ |
informatique/logiciels/openvpn.1467300007.txt.gz · Last modified: 2016/06/30 15:20 by pteu