dimanche 5 juin 2011

Installation rapidos d'un serveur VPN (OpenVPN) sous Linux depuis un serveur Debian en mode live sur clef USB avec mode persistant.

< version alpha 5 juin 2011 >

Ce Tutorial va vous permettre de disposer d'un serveur VPN opérationnel sur une clef USB contenant une version Live de Linux, en l’occurrence une distribution Debian.

Parmi les intérêts d'une telle solution, je retiens celle qui évite le passage par le partitionnement d'un disque dur contenant un autre système d'exploitation, passage obligé quand il s'agit d'installer Linux, ainsi que la problématique du multi-boot.

En pratique, il suffira de démarrer le pc, de choisir le boot sur USB. 1 minute plus tard vous disposez d'un serveur VPN totalement opérationnel. Et plus encore, si vous le désirez, la possibilité d'ajouter un serveur WEB, un serveur FTP...

Quid de l'utilité d'un serveur VPN ?

Votre entreprise met à votre disposition un pc avec une connexion internet permettant un accès au WEB.  Cet accès peut être limité avec un blocage de certains sites. Votre navigation est surveillée.
Il est possible, sous certaines conditions, de créer un tunnel crypté entre le connexion internet à votre travail et la connexion internet de votre domicile.
Autre exemple, l'usage du wifi dans les hôtels ou dans un lieu public présente la même particularité que précédemment, avec une exposition plus grande de vos données privées. La même solution peut être apportée.
Si ce document propose l'installation d'un serveur VPN sous Linux, sachez que le client sera OpenVPN Portable, pour Windows, décrit en fin de page.

 Nécessaire pour l'installation, modulable: 
  1. deux clefs USB, dont une avec une capacité de 1 Go, format  FAT32.
  2. un pc avec prise en charge du boot sur un port usb
  3. une connexion internet haut-débit depuis une box ou un routeur avec DHCP actif.
  4. un peu de temps, selon votre connexion internet (environ une heure)
Ces premières opérations sont décrites depuis un environnement sous Windows XP.
[A] 
Rendez-vous sur le site Debian pour télécharger l'image ISO de la distri live. LIEN
Choisissez en fonction de votre configuration matériel, personnellement j'ai pris l'image disque dans
le dossier /i386/iso-hybrid/debian-live-6.0.1-i386-standard.iso, taille du fichier 274 Mo.
[B]
Formatez la clef USB en FAT32, ne choisissez pas l'option Formatage rapide.


[C] Télécharger l'excellent logiciel "LiLi USB Creator" pour Windows [lien] et démarrez le.
Suivez les étapes...
  1. choisir une clé USB... (est la clef USB formatée en FAT32)
  2. choisir la source (le fichier iso debian-live)
  3. Mode persistance (définir une taille de 200 Mo minimum quand cela vous sera demandé)
  4. Options, permettre de lancer LinuxLive sous Windows (ajoute VitualBox sur la clef, comptez 70 Mo)
    4.1 Choisir l'option Cacher les fichiers sur la clé
Voilà, cliquez sur l'éclair en bas et patientez quelques minutes jusqu'au message indiquant que tout est ok.

Si en 4. vous avez ajouté VirtualBox, il est possible de tester immédiatement votre clef sous Windows en allant dans le répertoire x:\VirtualBox\ de la clef usb puis lancez "Virtualize_This_Key.exe"
Après quelques instant l'écran suivant va s'afficher:



Appuyez sur Entrée pour valider le choix par défaut "Persistent". Votre serveur virtuel  a fini son démarrage en mode console (texte seul).
Vous être logué user@debian.
Le clavier est en mode qwerty (USA standard), donc le a s'obtient avec le q, le z est en w (et inversement).
Regardez ici http://fr.wikipedia.org/wiki/Fichier:KB_USA-standard.svg
Dans l’immédiat ne touchons à rien et arrêtons le serveur en tapant la commande suivante

sudo shutdown -h  now

(ou fermez la fenêtre Virtual Box)

Suivez les instructions et attendez le pop-up de Virtual Box si vous souhaitez retirer la clef usb.

La suite des opérations  se feront directement sur le serveur en direct, pensez à imprimer la suite de ce document si vous n'avez qu'un seul PC sous la main.

[D] Sous Windows, trouvons l'ip de votre passerelle internet, celle ci sera utile plus tard. Vous pouvez, soit
  1. Appuyez sur la touche Windows (avec le drapeau) et la touche R, tapez CMD, tapez ipconfig /all
  2. Dans le systray, près de l'horloge, click droit sur l'icone du réseau, choisir Etat, puis cliquez sur l'onglet support
[E]  Redémarrage du PC et boot sur la clef USB.
Suivant le bios, l'accès au menu boot se fait en appuyant sur F8, parfois Echap, mais
bien souvent l'instruction figure à l'écran immédiatement après avoir allumé la bête.

Le démarrage terminé, vous êtes devant la console linux, le clavier est toujours en qwerty, en mode user.
Passons root, tapez:

sudo passwd root

Entrez un nouveau de passe, répétez, ensuite tapez:

su root

Entrez le mot de passe défini précédemment.

Nous allons passer le clavier en AZERTY, il existe plusieurs méthodes, notez que malheureusement aucune ne fût persistante après un reboot, j'attend vos solutions.
Tapez:

dpkg-reconfigure console-data

Choisissez "Select keymap from full list", puis  "pc / azerty / French / Same as X11 ...".

Modifions les valeurs locales:

dpkg-reconfigure locales
(faire défiler et dé-sélectionnez le choix inutile, gardez uniquement fr_FR.UTF-8 UTF-8 )

dpkg-reconfigure tzdata
(europe, paris)

A ce stade il est utile de vérifier par quelle interface le réseau est fonctionnel. Tapez

ifconfig -a | less

(le trait vertical, un pipe, s'obtient avec ALT+6)
En haut de l'écran figure l'interface réseau opérationnelle, soit eth0 ou eth1 (ou eth2, 3...).
Notez bien le nom de cette interface car ce document utilise eth0 dans les fichiers de configuration, il faudra le modifier en conséquence.
Appuyez sur Q pour quitter.

[F] L'installation du serveur OpenVPN va se faire par l'intermédiaire d'un script qui automatisera les tâches, simplifiant notre travail. Ce script va être utilisé tel quel, nous modifierons plus tard quelques paramètres.
Remercions au passage l'auteur du script, John Malkowski de vpsnoc.com, car nous utilisons son travail.
Tapez:

cd /
wget http://vpsnoc.com/scripts/debian-openvpn.sh
chmod +x debian-openvpn.sh

Exécutons le script qui va installer OpenVPN, créera toutes les clefs et les fichiers de configurations.

./debian-openvpn.sh

Après la mise à jour, tapez Y pour valider l'installation.
L'installation du serveur OpenVPN requiert d'entrée quelques valeurs, la première question posées concernent le serveur:

Contry Name [US]:  ( entrez FR)
State or Province name [CA] (entrez BRETAGNE par exemple)
Locality Name ...                   (entrez RENNES par exemple)
Organisation Name                (peu importe)
Organizational Unit Name      (peu importe)
Common name                      (validez ou modifier)
Name                                    (validez ou modifier)
Email                                     (validez ou modifier)

A challenge password []         (validez sans modifier)
A optional compagny name     (validez sans modifier)
Sign the certificate? [y/n] : y    (validez avec y)
...commit ? [y/n] y

La suite est la génération du D.H (1024 bits), patience...
A présent, cela concerne le client1, répondez comme tout à l'heure.

Voilà, OpenVPN est installé.
[G] Modification des fichiers de configuration.
Le premièr fichier à modifier est celui du serveur VPN, tapez

nano /etc/openvpn/openvpn.conf 

Ci-dessous le fichier final, modifiez en conséquence et supprimez les différences. Contrôlez l'adresse du serveur DNS qui dans notre exemple est à 192.168.1.1 et qui en réalité doit correspondre à l'adresse de votre passerelle, que nous avons récupéré en [D].

Quittez l'éditeur avec un CTRL + X, répondre Y pour accepter les modifs.

mode server
proto tcp
port 443
dev tun
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
ca ca.crt
cert server.crt
key server.key
dh dh1024.pen
push "route 10.8.0.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.1"
push "redirect-gateway"
comp-lzo
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
group daemon
daemon

[H] Le pare-feu de notre serveur Linux doit être configuré pour accepter les connexions entrantes sur le port 443. Trouvons l'adresse IP du serveur et l'interface réseau 'eth ', tapez

ifconfig | less

L'adresse se trouve au niveau de l'interface eth., après inet addr, par exemple:
inet addr:192.168.1.10
Adaptez avec votre IP les commandes suivantes pour les règles du pare-feu, attention à eth0 car si votre PC dispose de plusieurs interfaces l'interface peut être eth1 ou eth2, voir 3...

iptables -A INPUT -d 192.168.1.0/24 -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE


Ci-dessous des directives que j'ai dû tester après quelques problèmes de connexions.
Elles sont optionnelles.

iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT


La plage d'adresses 192.168.1.0/24 (de 0 à 254) permet de couvrir l'attribution de l'IP par le serveur DHCP
de votre passerelle internet (box de votre FAI ou routeur privé). 

Sauvons les nouvelles directives:

iptables-save > /etc/iptables.conf

[I] Nous devons récupérer les clefs pour le client créées précédemment, la méthode la plus simple est la copie vers la deuxième clef USB, que vous insérez maintenant. A ce moment un message s'affiche et donne le libellé du périphérique, si par exemple c'est  [sde]  tapez:

mount -t vfat /dev/sde1 /mnt/

La copie avec:

cp /root/keys.tgz  /mnt/

Avant de retirer la clef, tapez:

umount /dev/sde1

[J] Nous allons mettre à l'heure votre serveur, sinon la connexion entre le client et le serveur échouera.
Éditez et modifiez, passez  UTC=no si ce n'est pas le cas dans:

nano /etc/default/rcS

Tapez:

date

Le jour doit être en français et l'heure ok ( si vous avez fait ce choix dans la config des locales).
Voilà, la configuration du serveur est finie, redémarrez:

reboot

Démarrage ou arrêt du serveur OpenVPN manuellement, cette opération sera automatique après un reboot:

/etc/init.d/openvpn stop
/etc/init.d/openvpn start

Eventuellement en cas de changement du fichier de configuration:
/etc/init.d/openvpn reload
Fin de la partie serveur.

Si vous avez un deuxième PC sur votre réseau, nous allons tester le serveur. Sous Windows, allez dans l’éditeur de commandes en utilisant le raccourci clavier "drapeau windows" + R (ou faire démarrer, exécuter, tapez cmd)
Tapez ( et modifier 192.168.1.10 par l'adresse ip du serveur, voir en [H] )

telnet 192.168.1.10 443

Si la connexion est acceptée, cela veut dire que le serveur VPN fonctionne, de plus le pare-feu de Linux accepte la connexion sur le port 443. Appuyez sur entrée.
Utilisation du client OpenVPN.
Téléchargez le client pour Windows ici [lien]

Le setup va extraire les fichiers, vous pouvez choisir comme destination votre deuxième clef USB. Les clefs du client qui ont été récupérés tout à l'heure (keys.tgz) étant également sur cette clef, il faut les décompresser dans le dossier OpenVPNPortable\data\config\

Toujours dans le dossier \data\config se trouve désormais un fichier avec l'extension .OVPN (debian.ovpn) que nous allons éditer avec un click droit et "ouvrir avec", "Choisir le programme..." et sélectionnez WORDPAD. Enlevez le paramètre "remote 1194" et remplacez le par "remote 192.168.1.10 443". 
Il faut également ajoutez un paramètre qui est "proto tcp-client" à insérer après "client"

Puisque nous allons tester en local, l'adresse IP est bien 192.168.1.10. Cette adresse sera modifiée plus tard.
Après la sauvegarde du fichier, lancez le client OpenVPNPortable.exe et connectez vous avec l'option idoine dans le systray, près de l'heure.  

Après la connexion, testez dans la fenêtre de commande Windows ouverte tout à l'heure

ping www.google.fr

Maintenant que ça marche, il faut modifier l'adresse ip local (192.168.1.10) par votre IP Internet! Pour connaître votre IP, allez sur ip-adress.com
Votre adresse IP Internet peut changer avec le temps (suivant le FAI), referez vous aux solutions existantes décrites sur le web (no-ip.com) pour contourner ce problème.
Enfin, n'oubliez pas d'ouvrir le port 443 sur votre routeur internet (ou la box du FAI) depuis la page d'administration du matériel.
Ce port peut être modifié et devra sans doute l'être, en fonction des restrictions rencontrées sur le lieu de connexion (port 443 fermé).
Astuce:
Utilisez la fonction du PAT (Port Address Translation) disponible sur votre routeur à la maison afin de router le  numéro de port  vers le 443 du serveur Linux.

Exemple ci-dessous avec une Livebox, qui montre deux config différentes, dont une avec PAT du port 119 vers le port 450 :



Pour être plus clair, imaginons que vous utilisez une connexion internet dans un hôtel. Que le port 443 soit verrouillé mais le port 119 ouvert. Au lieu de modifier la configuration sur le serveur Linux (faisable mais pas très pratique, surtout à distance), router le port 119 vers le port 443 dans la configuration du routeur. Pour ce faire, permettez une administration web distante de votre routeur pour modifier la PAT si besoin! 

Page d'admin à distance de la Livebox:
DynDNS pour fixer un DNS avec no-ip.com



Pensez à installer le navigateur Internet Opera Portable sur une clef usb, afin de limiter les traces de navigation sur le PC du taff.

Good luck. 

Fab.

ps: n’hésitez pas à commenter ce document, à proposer des modifications, des améliorations, des corrections ou racontez vos expériences et vos solutions.

références web:
USENET:
fr.comp.os.linux.configuration


Aucun commentaire:

Enregistrer un commentaire