« Point d'accès sécurisé par OpenVPN » : différence entre les versions
(Ajout des catégories) |
Aucun résumé des modifications |
||
(7 versions intermédiaires par 4 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
= Introduction = | = Modification de Point d'accès sécurisé par OpenVPN = | ||
Par [[Utilisateur:Glandos|Glandos]]. | |||
== Introduction == | |||
Ceci est la suite de [[Créer un point d'accès sécurisé avec hostAPd]]. Pourquoi me direz-vous ? Et bien, d'abord, pour la beauté de la chose. Ensuite, parce que certains clients font tout simplement planter mon point d'accès, qui tourne avec le module Madwifi. Donc j'ai voulu essayer autre chose. | Ceci est la suite de [[Créer un point d'accès sécurisé avec hostAPd]]. Pourquoi me direz-vous ? Et bien, d'abord, pour la beauté de la chose. Ensuite, parce que certains clients font tout simplement planter mon point d'accès, qui tourne avec le module Madwifi. Donc j'ai voulu essayer autre chose. | ||
= Présentation = | == Présentation == | ||
Le but recherché, et c'est très important de le souligner, est de créer <u>un point d'accès sécurisé sans WEP ni WPA, ni WPA2</u>. Le point d'accès apparaît comme non-sécurisé, mais si tout le monde peut s'y associer, ce n'est pas pour autant qu'il va être ouvert. | Le but recherché, et c'est très important de le souligner, est de créer <u>un point d'accès sécurisé sans WEP ni WPA, ni WPA2</u>. Le point d'accès apparaît comme non-sécurisé, mais si tout le monde peut s'y associer, ce n'est pas pour autant qu'il va être ouvert. | ||
Ligne 12 : | Ligne 16 : | ||
* Un ordinateur portable qui a un chipset Wifi Atheros fonctionnant avec ath9k. | * Un ordinateur portable qui a un chipset Wifi Atheros fonctionnant avec ath9k. | ||
[[Image:Topologie_Wifi_OpenVPN.png]] | |||
== Inconvénient par rapport au WPA / WPA2 == | Attention ! Ce tutoriel décrit les opérations dans le sens logique d'une installation. Cependant, si vous le suivez dans l'ordre, il se peut que votre réseau se retrouve sans défense, et complètement accessible pendant un certain temps. Si vous voulez prendre le moins de risques possible, il est préférable de commencer par les règles IPTables. | ||
=== Inconvénient par rapport au WPA / WPA2 === | |||
* C'est plus compliqué à installer | * C'est plus compliqué à installer | ||
* Les clients doivent pouvoir installer OpenVPN | * Les clients doivent pouvoir installer OpenVPN | ||
= Pré-requis = | == Pré-requis == | ||
Malheureusement, je ne peux pas considérer que vous partez avec zéro connaissance. Mais voici la liste de ce qui doit déjà marcher sur votre installation : | Malheureusement, je ne peux pas considérer que vous partez avec zéro connaissance. Mais voici la liste de ce qui doit déjà marcher sur votre installation : | ||
* Le chipset Wifi doit être reconnu sur le serveur | * Le chipset Wifi doit être reconnu sur le serveur | ||
Ligne 27 : | Ligne 33 : | ||
* Des notions de VPN sont conseillées. | * Des notions de VPN sont conseillées. | ||
= Préparation du point d'accès = | == Préparation du point d'accès == | ||
Toutes les commandes de cette partie sont à exécuter avec les droits du super utilisateur. | Toutes les commandes de cette partie sont à exécuter avec les droits du super utilisateur. | ||
== Création de l'interface réseau == | === Création de l'interface réseau === | ||
Disposant d'une carte géré par le pilote madwifi, il me faut tout d'abord créer l'interface à l'aide de <code>wlanconfig</ | Disposant d'une carte géré par le pilote madwifi, il me faut tout d'abord créer l'interface à l'aide de <div class="code">wlanconfig</div>. Cela permet de créer plusieurs interfaces virtuelles qui fonctionnent toutes sur la même carte réseau physique, mais dans des modes différents. Allons-y : | ||
<code> | <div class="code"> | ||
wlanconfig ath0 create wlandev wifi0 wlanmode ap | wlanconfig ath0 create wlandev wifi0 wlanmode ap | ||
</ | </div> | ||
Cela crée une interface virtuelle nommée ath0 à partir de la carte wifi0 en mode "ap", c'est-à-dire "Access Point" soit "Point d'accès". | Cela crée une interface virtuelle nommée ath0 à partir de la carte wifi0 en mode "ap", c'est-à-dire "Access Point" soit "Point d'accès". | ||
Ensuite, il faut fixer le SSID, c'est à dire le nom du réseau Wifi qui sera identifié par le client : | Ensuite, il faut fixer le SSID, c'est à dire le nom du réseau Wifi qui sera identifié par le client : | ||
<code> | <div class="code"> | ||
iwconfig ath0 essid "Mon OpenVPN" | iwconfig ath0 essid "Mon OpenVPN" | ||
</ | </div> | ||
Vous pouvez changer d'autres paramètres sur cette interface, comme le canal utilisé. Reportez-vous à la documentation de < | Vous pouvez changer d'autres paramètres sur cette interface, comme le canal utilisé. Reportez-vous à la documentation de <b>iwconfig</b> pour en savoir plus. | ||
Et enfin, il faut démarrer l'interface nouvellement créée. | Et enfin, il faut démarrer l'interface nouvellement créée. | ||
<cadre type='alert'>À partir de là, votre point d'accès peut-être rejoint par n'importe qui ! | <cadre type='alert'>À partir de là, votre point d'accès peut-être rejoint par n'importe qui ! | ||
</cadre> | </cadre> | ||
<code> | <div class="code"> | ||
ifconfig ath0 192.168.1.254 netmask 255.255.255.0 | ifconfig ath0 192.168.1.254 netmask 255.255.255.0 | ||
</ | </div> | ||
Pour rendre cette configuration persistante, il suffit de modifier le fichier < | Pour rendre cette configuration persistante, il suffit de modifier le fichier <b>/etc/network/interfaces</b> sous Debian et d'y rajouter ces lignes : | ||
<code> | <div class="code"> | ||
# Interface pour le VPN | # Interface pour le VPN | ||
auto ath0 | auto ath0 | ||
iface ath0 inet manual | iface ath0 inet manual | ||
madwifi-base wifi0 | madwifi-base wifi0 | ||
madwifi-mode ap | madwifi-mode ap | ||
Ligne 62 : | Ligne 68 : | ||
netmask 255.255.255.0 | netmask 255.255.255.0 | ||
broadcast 192.168.0.255 | broadcast 192.168.0.255 | ||
</ | </div> | ||
== Installation de OpenVPN == | === Installation de OpenVPN === | ||
Je suis sous Debian, donc si ça vous vexe pas, je vais décrire la procédure d'installation à la mode Debian :) Et c'est plutôt simple : | Je suis sous Debian, donc si ça vous vexe pas, je vais décrire la procédure d'installation à la mode Debian :) Et c'est plutôt simple : | ||
<code> | <div class="code"> | ||
apt-get install openvpn | apt-get install openvpn | ||
</ | </div> | ||
Pouf pouf, c'est fait. Pour les autres distributions, je doute que ce soit plus compliqué, OpenVPN étant un logiciel couramment utilisé. | Pouf pouf, c'est fait. Pour les autres distributions, je doute que ce soit plus compliqué, OpenVPN étant un logiciel couramment utilisé. | ||
== Configuration de OpenVPN == | === Configuration de OpenVPN === | ||
=== Génération des certificats === | ==== Génération des certificats ==== | ||
Alors je ne vais pas réinventer la roue. Je vous renvoie au tutoriel d'Ubuntu pour [http://doc.ubuntu-fr.org/openvpn#configuration_des_vpn la génération des fichiers du VPN] | Alors je ne vais pas réinventer la roue. Je vous renvoie au tutoriel d'Ubuntu pour [http://doc.ubuntu-fr.org/openvpn#configuration_des_vpn la génération des fichiers du VPN] | ||
=== Création d'un VPN === | ==== Création d'un VPN ==== | ||
J'ai donc un fichier monvpn.conf dans < | J'ai donc un fichier monvpn.conf dans <b>/etc/openvpn</b> qui ressemble à ça : | ||
<code> | <div class="code"> | ||
## Pour ne répondre au VPN que sur l'interface ath0 | ## Pour ne répondre au VPN que sur l'interface ath0 | ||
local 192.168.1.254 | local 192.168.1.254 | ||
port 1194 | port 1194 | ||
proto udp | proto udp | ||
## Utilisation du mode routé | ## Utilisation du mode routé | ||
dev tun | dev tun | ||
## Fichiers générés à la section précédente | ## Fichiers générés à la section précédente | ||
ca ca.crt | ca ca.crt | ||
cert monvpn.crt | cert monvpn.crt | ||
key monvpn.key # This file should be kept secret | key monvpn.key # This file should be kept secret | ||
dh dh1024.pem | dh dh1024.pem | ||
## Adresse de l'interface de sortie du VPN | ## Adresse de l'interface de sortie du VPN | ||
server 192.168.254.0 255.255.255.0 | server 192.168.254.0 255.255.255.0 | ||
ifconfig-pool-persist ipp.txt | ifconfig-pool-persist ipp.txt | ||
## Permet de faire passer tout le trafic du client à travers le VPN | ## Permet de faire passer tout le trafic du client à travers le VPN | ||
push "redirect-gateway local" | push "redirect-gateway local" | ||
keepalive 10 120 | keepalive 10 120 | ||
comp-lzo | comp-lzo | ||
user nobody | user nobody | ||
group nogroup | group nogroup | ||
persist-key | persist-key | ||
persist-tun | persist-tun | ||
status openvpn-status.log | status openvpn-status.log | ||
log-append /var/log/openvpn.log | log-append /var/log/openvpn.log | ||
verb 3 | verb 3 | ||
</ | </div> | ||
J'ai mis des commentaires là où c'est important de comprendre. Les autres paramètres sont nécessaires, mais les garder intacts est une super bonne idée :) | J'ai mis des commentaires là où c'est important de comprendre. Les autres paramètres sont nécessaires, mais les garder intacts est une super bonne idée :) | ||
Et après, il n'y a plus qu'à démarrer le VPN : | Et après, il n'y a plus qu'à démarrer le VPN : | ||
<code> | <div class="code"> | ||
/etc/init.d/openvpn start | /etc/init.d/openvpn start | ||
</ | </div> | ||
Normalement, cette commande est exécutée automatiquement lors du démarrage de la machine. Allez faire un tour dans < | Normalement, cette commande est exécutée automatiquement lors du démarrage de la machine. Allez faire un tour dans <b>/etc/default/openvpn</b> pour faire du démarrage sélectif de VPN. | ||
== Modification du pare-feu == | === Modification du pare-feu === | ||
C'est la partie la plus délicate. C'est celle qui m'a motivé à faire ce tutoriel :) Pour comprendre la suite, il faut comprendre le trajet d'un paquet arrivant par le VPN sur la passerelle : | C'est la partie la plus délicate. C'est celle qui m'a motivé à faire ce tutoriel :) Pour comprendre la suite, il faut comprendre le trajet d'un paquet arrivant par le VPN sur la passerelle : | ||
* ath0 : un paquet arrive encapsulé et chiffré par le port 1194 en UDP | * ath0 : un paquet arrive encapsulé et chiffré par le port 1194 en UDP | ||
Ligne 134 : | Ligne 140 : | ||
* eth_adsl, eth_lan : selon la destination du paquet. | * eth_adsl, eth_lan : selon la destination du paquet. | ||
=== Sécurisation de l'interface ath0 === | ==== Sécurisation de l'interface ath0 ==== | ||
Le but est déjà de verrouiller l'interface sans-fil pour ne laisser passer que deux flux : | Le but est déjà de verrouiller l'interface sans-fil pour ne laisser passer que deux flux : | ||
* Le DHCP. Bah oui, on pourrait configurer les clients à la main, mais c'est quand même plus pratique d'avoir le DHCP qui s'occupe de ça. Et ce n'est pas bien dangereux d'avoir une IP si on ne peut rien faire avec. Pour les paranoïaques, j'imagine que cela pose un problème de sécurité, si jamais il y a des failles dans le serveur DHCP. Il faut savoir qu'en WPA, le chiffrement de la connexion se fait AVANT le DHCP, ce qui est mieux. C'est un inconvénient de cette solution. À vous de voir. | * Le DHCP. Bah oui, on pourrait configurer les clients à la main, mais c'est quand même plus pratique d'avoir le DHCP qui s'occupe de ça. Et ce n'est pas bien dangereux d'avoir une IP si on ne peut rien faire avec. Pour les paranoïaques, j'imagine que cela pose un problème de sécurité, si jamais il y a des failles dans le serveur DHCP. Il faut savoir qu'en WPA, le chiffrement de la connexion se fait AVANT le DHCP, ce qui est mieux. C'est un inconvénient de cette solution. À vous de voir. | ||
Ligne 140 : | Ligne 146 : | ||
Donc avec iptables, ça donne ça : | Donc avec iptables, ça donne ça : | ||
<code> | <div class="code"> | ||
## ath0 : On accepte les paquets en UDP sur le port du VPN | ## ath0 : On accepte les paquets en UDP sur le port du VPN | ||
iptables -t filter -A INPUT -i ath0 -p udp -m udp --dport 1194 -j ACCEPT | iptables -t filter -A INPUT -i ath0 -p udp -m udp --dport 1194 -j ACCEPT | ||
## ath0 : On accepte les paquets en UDP sur le port DHCP | ## ath0 : On accepte les paquets en UDP sur le port DHCP | ||
iptables -t filter -A INPUT -i ath0 -p udp -m udp --dport 67 -j ACCEPT | iptables -t filter -A INPUT -i ath0 -p udp -m udp --dport 67 -j ACCEPT | ||
## tun0 : Il faut bien que le VPN envoie et reçoive des paquets | ## tun0 : Il faut bien que le VPN envoie et reçoive des paquets | ||
iptables -t filter -A INPUT -i tun0 ACCEPT | iptables -t filter -A INPUT -i tun0 ACCEPT | ||
## Ne tapez cette commande QUE si vous N'avez PAS d'autres règles déjà en place ! | ## Ne tapez cette commande QUE si vous N'avez PAS d'autres règles déjà en place ! | ||
iptables -t filter -A INPUT -i "!ath0" ACCEPT | iptables -t filter -A INPUT -i "!ath0" ACCEPT | ||
## Par défaut, on jette tous les paquets en entrée. La règle précédente vous permettra d'avoir encore accès | ## Par défaut, on jette tous les paquets en entrée. La règle précédente vous permettra d'avoir encore accès | ||
## à votre machine par le réseau câblé. Sinon, tout sera bloqué... | ## à votre machine par le réseau câblé. Sinon, tout sera bloqué... | ||
iptables -t filter -P INPUT DROP | iptables -t filter -P INPUT DROP | ||
## Les paquets ne doivent pas passer à travers une autre interface directement, | ## Les paquets ne doivent pas passer à travers une autre interface directement, | ||
## mais doivent tous être délivré à OpenVPN. | ## mais doivent tous être délivré à OpenVPN. | ||
## C'est très important ! | ## C'est très important ! | ||
iptables -t filter -A FORWARD -i ath0 DROP | iptables -t filter -A FORWARD -i ath0 DROP | ||
## Maintenant, on fait la règle de NAT pour faire sortir les paquets déchiffré par OpenVPN sur Internet. | ## Maintenant, on fait la règle de NAT pour faire sortir les paquets déchiffré par OpenVPN sur Internet. | ||
## Si on ne fait pas ça, seul les paquets à destination du réseau local arriveront à destination. | ## Si on ne fait pas ça, seul les paquets à destination du réseau local arriveront à destination. | ||
iptables -t nat -A POSTROUTING -s 192.168.254.1 -j MASQUERADE | iptables -t nat -A POSTROUTING -s 192.168.254.1 -j MASQUERADE | ||
</ | </div> | ||
Et comme moi, j'utilise [http://ferm.foo-projects.org/ ferm] pour me simplifier la vie, voici le résumé dans une syntaxe lisible par ce logiciel : | Et comme moi, j'utilise [http://ferm.foo-projects.org/ ferm] pour me simplifier la vie, voici le résumé dans une syntaxe lisible par ce logiciel : | ||
<code> | <div class="code"> | ||
# Activation du NAT (juste pour le VPN dans ce cas) | # Activation du NAT (juste pour le VPN dans ce cas) | ||
table nat { | table nat { | ||
chain POSTROUTING saddr 192.168.254.1 MASQUERADE; | chain POSTROUTING saddr 192.168.254.1 MASQUERADE; | ||
} | } | ||
table filter { | table filter { | ||
#Tout le trafic en sortie est autorisé | #Tout le trafic en sortie est autorisé | ||
Ligne 204 : | Ligne 210 : | ||
} | } | ||
</ | </div> | ||
Bon à partir de là, vous pouvez respirer, il est normalement impossible de se connecter via l'interface ath0 sur votre réseau. | Bon à partir de là, vous pouvez respirer, il est normalement impossible de se connecter via l'interface ath0 sur votre réseau. | ||
= Préparation du client = | == Préparation du client == | ||
Je ne dispose que d'un client sous Ubuntu, donc je ne détaillerai l'installation que pour ce système. Sachez que le client OpenVPN existe sous Windows, mais que la configuration se fait en éditant un fichier de configuration. | Je ne dispose que d'un client sous Ubuntu, donc je ne détaillerai l'installation que pour ce système. Sachez que le client OpenVPN existe sous Windows, mais que la configuration se fait en éditant un fichier de configuration. | ||
== Ubuntu 8.10 avec NetworkManager == | === Ubuntu 8.10 avec NetworkManager === | ||
Il faut préalablement installer les deux paquets suivants : | Il faut préalablement installer les deux paquets suivants : | ||
<code> | <div class="code"> | ||
apt-get install network-manager-openvpn openvpn | apt-get install network-manager-openvpn openvpn | ||
</ | </div> | ||
Ensuite, il suffit suivre les étapes suivantes : | Ensuite, il suffit suivre les étapes suivantes : | ||
Ligne 233 : | Ligne 239 : | ||
Ensuite, il suffit de se connecter au Wifi, et de lancer le VPN. C'est fait :) | Ensuite, il suffit de se connecter au Wifi, et de lancer le VPN. C'est fait :) | ||
= Conclusion = | == Conclusion == | ||
Cette alternative à WPA n'est pas ultime. Normalement, WPA s'occupe de tout. Cependant, cela permet de fournir une solution lorsque le chipset ne supporte pas le WPA (ce qui se fait rare), ou bien que le pilote n'est pas assez mature pour être stable en production. | Cette alternative à WPA n'est pas ultime. Normalement, WPA s'occupe de tout. Cependant, cela permet de fournir une solution lorsque le chipset ne supporte pas le WPA (ce qui se fait rare), ou bien que le pilote n'est pas assez mature pour être stable en production. | ||
<br/> | |||
{{CC-BY-SA}} | <br/> | ||
[[Catégorie: | '''<b>[[Sécurité et vie privée|@ Retour à la rubrique Sécurité et vie privée]]</b>''' | ||
<br/> | |||
{{Copy|2009|[[Utilisateur:Glandos|Glandos]]|CC-BY-SA}} | |||
[[Catégorie:Sécurité et vie privée]] |
Dernière version du 27 décembre 2023 à 19:05
Modification de Point d'accès sécurisé par OpenVPN
Par Glandos.
Introduction
Ceci est la suite de Créer un point d'accès sécurisé avec hostAPd. Pourquoi me direz-vous ? Et bien, d'abord, pour la beauté de la chose. Ensuite, parce que certains clients font tout simplement planter mon point d'accès, qui tourne avec le module Madwifi. Donc j'ai voulu essayer autre chose.
Présentation
Le but recherché, et c'est très important de le souligner, est de créer un point d'accès sécurisé sans WEP ni WPA, ni WPA2. Le point d'accès apparaît comme non-sécurisé, mais si tout le monde peut s'y associer, ce n'est pas pour autant qu'il va être ouvert.
Je dispose toujours du même matériel :
- Une freebox basique (sans fonctions routeur ni wifi).
- Un PC (passerelle pour le reste du document) connecté directement à la freebox sous Debian/testing. Elle dispose de deux cartes réseau Ethernet RJ45 (filaire) qui sont identifiées par l'OS en tant que eth_adsl et eth_local. La freebox est reliée sur eth_adsl. Un firewall tourne entre eth_adsl et eth_local à l'aide d'iptables.
- Un switch branché sur eth_local, et sur lequel sont reliés deux clients de manière on ne peut plus classique.
- Une carte Wi-Fi D-Link DWL-G520 PCI avec chipset Atheros (le chipset importe beaucoup plus que la carte, croyez moi !!).
- Un ordinateur portable qui a un chipset Wifi Atheros fonctionnant avec ath9k.
Attention ! Ce tutoriel décrit les opérations dans le sens logique d'une installation. Cependant, si vous le suivez dans l'ordre, il se peut que votre réseau se retrouve sans défense, et complètement accessible pendant un certain temps. Si vous voulez prendre le moins de risques possible, il est préférable de commencer par les règles IPTables.
Inconvénient par rapport au WPA / WPA2
- C'est plus compliqué à installer
- Les clients doivent pouvoir installer OpenVPN
Pré-requis
Malheureusement, je ne peux pas considérer que vous partez avec zéro connaissance. Mais voici la liste de ce qui doit déjà marcher sur votre installation :
- Le chipset Wifi doit être reconnu sur le serveur
- Le réseau doit être fonctionnel sur le serveur
- Le serveur dispose d'un serveur DHCP fonctionnel pour le réseau local.
- iptables doit être installé sur le serveur
- Le client doit avoir une carte Wifi qui marche
- Des notions de VPN sont conseillées.
Préparation du point d'accès
Toutes les commandes de cette partie sont à exécuter avec les droits du super utilisateur.
Création de l'interface réseau
Disposant d'une carte géré par le pilote madwifi, il me faut tout d'abord créer l'interface à l'aide de
. Cela permet de créer plusieurs interfaces virtuelles qui fonctionnent toutes sur la même carte réseau physique, mais dans des modes différents. Allons-y :
wlanconfig ath0 create wlandev wifi0 wlanmode ap
Cela crée une interface virtuelle nommée ath0 à partir de la carte wifi0 en mode "ap", c'est-à-dire "Access Point" soit "Point d'accès".
Ensuite, il faut fixer le SSID, c'est à dire le nom du réseau Wifi qui sera identifié par le client :
iwconfig ath0 essid "Mon OpenVPN"
Vous pouvez changer d'autres paramètres sur cette interface, comme le canal utilisé. Reportez-vous à la documentation de iwconfig pour en savoir plus.
Et enfin, il faut démarrer l'interface nouvellement créée. <cadre type='alert'>À partir de là, votre point d'accès peut-être rejoint par n'importe qui ! </cadre>
ifconfig ath0 192.168.1.254 netmask 255.255.255.0
Pour rendre cette configuration persistante, il suffit de modifier le fichier /etc/network/interfaces sous Debian et d'y rajouter ces lignes :
# Interface pour le VPN auto ath0 iface ath0 inet manual madwifi-base wifi0 madwifi-mode ap wireless-channel 9 address 192.168.1.254 netmask 255.255.255.0 broadcast 192.168.0.255
Installation de OpenVPN
Je suis sous Debian, donc si ça vous vexe pas, je vais décrire la procédure d'installation à la mode Debian :) Et c'est plutôt simple :
apt-get install openvpn
Pouf pouf, c'est fait. Pour les autres distributions, je doute que ce soit plus compliqué, OpenVPN étant un logiciel couramment utilisé.
Configuration de OpenVPN
Génération des certificats
Alors je ne vais pas réinventer la roue. Je vous renvoie au tutoriel d'Ubuntu pour la génération des fichiers du VPN
Création d'un VPN
J'ai donc un fichier monvpn.conf dans /etc/openvpn qui ressemble à ça :
## Pour ne répondre au VPN que sur l'interface ath0 local 192.168.1.254
port 1194
proto udp
## Utilisation du mode routé dev tun
## Fichiers générés à la section précédente ca ca.crt cert monvpn.crt key monvpn.key # This file should be kept secret
dh dh1024.pem
## Adresse de l'interface de sortie du VPN server 192.168.254.0 255.255.255.0
ifconfig-pool-persist ipp.txt
## Permet de faire passer tout le trafic du client à travers le VPN push "redirect-gateway local"
keepalive 10 120
comp-lzo
user nobody group nogroup
persist-key persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
J'ai mis des commentaires là où c'est important de comprendre. Les autres paramètres sont nécessaires, mais les garder intacts est une super bonne idée :)
Et après, il n'y a plus qu'à démarrer le VPN :
/etc/init.d/openvpn start
Normalement, cette commande est exécutée automatiquement lors du démarrage de la machine. Allez faire un tour dans /etc/default/openvpn pour faire du démarrage sélectif de VPN.
Modification du pare-feu
C'est la partie la plus délicate. C'est celle qui m'a motivé à faire ce tutoriel :) Pour comprendre la suite, il faut comprendre le trajet d'un paquet arrivant par le VPN sur la passerelle :
- ath0 : un paquet arrive encapsulé et chiffré par le port 1194 en UDP
- Le processus OpenVPN, qui écoute sur le port et l'adresse lié à l'interface, reçoit ce paquet, le déchiffre et le renvoi au bon endroit. Comme le client envoie tous les paquets via l'adresse de l'interface créée par OpenVPN soit 192.168.254.1
- tun0 : reçoit donc le paquet en clair, et doit le transmettre à la bonne interface de sortie (car à part le ping, il n'y a rien à destination de cette interface).
- eth_adsl, eth_lan : selon la destination du paquet.
Sécurisation de l'interface ath0
Le but est déjà de verrouiller l'interface sans-fil pour ne laisser passer que deux flux :
- Le DHCP. Bah oui, on pourrait configurer les clients à la main, mais c'est quand même plus pratique d'avoir le DHCP qui s'occupe de ça. Et ce n'est pas bien dangereux d'avoir une IP si on ne peut rien faire avec. Pour les paranoïaques, j'imagine que cela pose un problème de sécurité, si jamais il y a des failles dans le serveur DHCP. Il faut savoir qu'en WPA, le chiffrement de la connexion se fait AVANT le DHCP, ce qui est mieux. C'est un inconvénient de cette solution. À vous de voir.
- Le tunnel OpenVPN. Normal.
Donc avec iptables, ça donne ça :
## ath0 : On accepte les paquets en UDP sur le port du VPN iptables -t filter -A INPUT -i ath0 -p udp -m udp --dport 1194 -j ACCEPT
## ath0 : On accepte les paquets en UDP sur le port DHCP iptables -t filter -A INPUT -i ath0 -p udp -m udp --dport 67 -j ACCEPT
## tun0 : Il faut bien que le VPN envoie et reçoive des paquets iptables -t filter -A INPUT -i tun0 ACCEPT
## Ne tapez cette commande QUE si vous N'avez PAS d'autres règles déjà en place ! iptables -t filter -A INPUT -i "!ath0" ACCEPT
## Par défaut, on jette tous les paquets en entrée. La règle précédente vous permettra d'avoir encore accès ## à votre machine par le réseau câblé. Sinon, tout sera bloqué... iptables -t filter -P INPUT DROP
## Les paquets ne doivent pas passer à travers une autre interface directement, ## mais doivent tous être délivré à OpenVPN. ## C'est très important ! iptables -t filter -A FORWARD -i ath0 DROP
## Maintenant, on fait la règle de NAT pour faire sortir les paquets déchiffré par OpenVPN sur Internet. ## Si on ne fait pas ça, seul les paquets à destination du réseau local arriveront à destination. iptables -t nat -A POSTROUTING -s 192.168.254.1 -j MASQUERADE
Et comme moi, j'utilise ferm pour me simplifier la vie, voici le résumé dans une syntaxe lisible par ce logiciel :
# Activation du NAT (juste pour le VPN dans ce cas) table nat { chain POSTROUTING saddr 192.168.254.1 MASQUERADE; } table filter {
#Tout le trafic en sortie est autorisé chain OUTPUT { policy ACCEPT; }
# On filtre tout ce qui arrive chain INPUT { policy DROP; interface ath0 { proto udp dport openvpn ACCEPT; proto udp dport bootps ACCEPT; } interface tun0 ACCEPT;
# D'autres règles sont nécessaire pour que Internet marche. interface eth_adsl { # On accepte seulement les paquets qui reviennent mod state state INVALID DROP; mod state state (ESTABLISHED RELATED) ACCEPT; }
}
# Interdiction de forwarder des paquets ! chain FORWARD interface ath0 { DROP; }
}
Bon à partir de là, vous pouvez respirer, il est normalement impossible de se connecter via l'interface ath0 sur votre réseau.
Préparation du client
Je ne dispose que d'un client sous Ubuntu, donc je ne détaillerai l'installation que pour ce système. Sachez que le client OpenVPN existe sous Windows, mais que la configuration se fait en éditant un fichier de configuration.
Ubuntu 8.10 avec NetworkManager
Il faut préalablement installer les deux paquets suivants :
apt-get install network-manager-openvpn openvpn
Ensuite, il suffit suivre les étapes suivantes :
- Cliquer sur l'icône du réseau, et sur "Connexions VPN" puis "Configurer le VPN"
- Cliquer sur "Ajouter"
- Paramètres
- Nom de la connexion : "Mon VPN"
- Passerelle : 192.168.1.254
- Authentification, Type : Certificat "TLS"
- Certificat de l'utilisateur : client.crt
- Certificat du CA : ca.crt
- Clé privée : client.key
- Private Key Password : le mot de passe utilisé pour la génération de la clé client
- Onglet Paramètres IPv4, cliquer sur le bouton "Routes..."
- Cocher la case "Ignorer les routes automatiquement obtenues", pour ignorer les routes obtenues avant la connexion VPN. Je sais, c'est pas clair du tout...
- Valider le tout
Ensuite, il suffit de se connecter au Wifi, et de lancer le VPN. C'est fait :)
Conclusion
Cette alternative à WPA n'est pas ultime. Normalement, WPA s'occupe de tout. Cependant, cela permet de fournir une solution lorsque le chipset ne supporte pas le WPA (ce qui se fait rare), ou bien que le pilote n'est pas assez mature pour être stable en production.
@ Retour à la rubrique Sécurité et vie privée
Copyright
© 2009 Glandos
![]() ![]() ![]() |
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique 4.0 : https://creativecommons.org/licenses/by-sa/4.0/ |