« Point d'accès sécurisé par OpenVPN » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(14 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.


<cadre type='alert'>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</cadre>
[[Image:Topologie_Wifi_OpenVPN.png]]
 
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 =
== 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
* Le réseau doit être fonctionnel 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
* iptables doit être installé sur le serveur
* Le client doit avoir une carte Wifi qui marche
* Le client doit avoir une carte Wifi qui marche
* 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</code>. 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 :
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
</code>
</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"
</code>
</div>


Vous pouvez changer d'autres paramètres sur cette interface, comme le canal utilisé. Reportez-vous à la documentation de <code>iwconfig</code> pour en savoir plus.
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
</code>
</div>


Pour rendre cette configuration persistante, il suffit de modifier le fichier <code>/etc/network/interfaces</code> sous Debian et d'y rajouter ces lignes :
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 57 : Ligne 68 :
         netmask 255.255.255.0
         netmask 255.255.255.0
         broadcast 192.168.0.255
         broadcast 192.168.0.255
</code>
</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
</code>
</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 <code>/etc/openvpn</code> qui ressemble à ça :
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
</code>
</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
</code>
</div>


Normalement, cette commande est exécutée automatiquement lors du démarrage de la machine. Allez faire un tour dans <code>/etc/default/openvpn</code> pour faire du démarrage sélectif de VPN.
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 129 : 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 135 : 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
 
iptables -t filter -A INPUT -i ath0 -p udp -m udp --dport 67 -j ACCEPT
## ath0 : On accepte les paquets en UDP sur le port DHCP
## tun0 : Il faut bien que le VPN envoie et reçoive des paquets
iptables -t filter -A INPUT -i ath0 -p udp -m udp --dport 67 -j ACCEPT
iptables -t filter -A INPUT -i tun0 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


## Ne tapez cette commande QUE si vous N'avez PAS d'autres règles déjà en place !
## Par défaut, on jette tous les paquets en entrée. La règle précédente vous permettra d'avoir encore accès
iptables -t filter -A INPUT -i "!ath0" ACCEPT
## à votre machine par le réseau câblé. Sinon, tout sera bloqué...
## 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
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.
## Les paquets ne doivent pas passer à travers une autre interface directement,
iptables -t nat -A POSTROUTING -s 192.168.254.1 -j MASQUERADE
## mais doivent tous être délivré à OpenVPN.
</code>
## 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
</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 191 : Ligne 210 :




}
}
</code>
</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 ==
== Ubuntu 8.10 avec NetworkManager ==
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 :
<div class="code">
apt-get install network-manager-openvpn openvpn
</div>
 
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.
 
<br/>
<br/>
'''<b>[[Sécurité et vie privée|@ Retour à la rubrique Sécurité et vie privée]]</b>'''
<br/>


= Conclusion =
{{Copy|2009|[[Utilisateur:Glandos|Glandos]]|CC-BY-SA}}


= Copyright =
[[Catégorie:Sécurité et vie privée]]
{{CC-BY-SA}}

Dernière version du 27 décembre 2023 à 18: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

wlanconfig

. 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

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike icon
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique 4.0 :
https://creativecommons.org/licenses/by-sa/4.0/