lundi 14 janvier 2008

Tip and Trick pour un administrateur système et réseau Linux

Dans la peau d’un administrateur Linux
Par Yann Serra - Copyright L'Informaticien, tous droits réservés


Le saviez-vous ? La maintenance des serveurs sous Linux peut être nettement plus simple et bien plus efficace que l’administration des systèmes propriétaires alourdis, entre autres, par leur environnement graphique. Voici une simulation qui vous donnera peut-être envie de franchir le pas.

admin03.jpg
Le téléchargement, l’installation et la configuration de base des logiciels serveurs sous Debian se résument essentiellement à taper une commande.
La mise au point de passerelles, firewalls, proxies, DNS et autres routeurs capables d’orienter dynamiquement les flux de données vers des serveurs disponibles vous passionne peut-être, mais ce n’est pas le métier de l’administrateur – enfin, disons que dans la mesure du possible, faites en sorte que ça ne le devienne pas. On a beau se revendiquer spécialiste Linux, système qui anime tous ces rouages, l’efficacité consiste à ne surtout jamais perdre de temps à réinventer la roue. Des boîtes toute faite existent pour remplir automatiquement les tâches citées ci-dessus (à commencer par les boxes ADSL qui font office de passerelles-firewalls suffisantes) et l’on se contentera tout au plus de les configurer au moyen de l’interface Web qui apparaît généralement lorsque l’on pointe un navigateur sur leur adresse IP privée. De même, l’installation et la configuration d’une solution applicative commerciale (du style progiciel en Intranet, qui fonctionne par-dessus un serveur d’applications Java, et qui exploite une grosse base de données Oracle, ou site Web public marchand, ce qui revient techniquement au même) est à la charge du prestataire qui l’a vendue à l’entreprise. N’allez surtout pas y entreprendre des manipulations qui invalideraient la garantie et pourraient vous faire perdre votre place.
Non, votre seul travail « créatif » – c’est-à-dire autre que le dépannage des utilisateurs – en tant qu’administrateur Linux consiste à configurer le réseau (attribution des adresses IP…) et à installer dessus des services « simples ». Outre les serveurs d’expédition et de réception d’e-mails (potentiellement pris en charge par votre fournisseur d’accès), on pense à la mise en place d’un serveur Web qui permette à vos collègues d’utiliser en ligne un site ou une petite application métier, mis au point par le webmaster ou le développeur de l’entreprise – ce n’est pas vous. Vont de pair avec le serveur Web, un serveur FTP, pour que les responsables puissent installer et mettre à jour le site Web, et un serveur de base de données, pour que l’application en ligne puisse travailler avec des informations dynamiques. On pense aussi à des sauvegardes régulières et, pourquoi pas, à un accès VPN pour que les collaborateurs nomades puissent utiliser les ressources du réseau local (répertoires partagés, etc.) comme s’ils se trouvaient physiquement dans l’entreprise.


Astuce : générez des rapports lisibles
À l’évidence, les développeurs Web ont commis quantité de fautes de liaisons dans le code de leur site : nombre d’images ne s’affichent pas. Connaître les noms des fichiers qui posent problème est théoriquement facile, il suffit de lire le fichier « error_log » que génère le serveur web. Sauf que… celui-ci est constitué au bas mot de plusieurs milliers de lignes sous la forme « [Mon Dec 18 08:10:25 2006] [error] [client 80.118.147.176] File does not exist: /htdocs/images/toto23.jpg » (la date, l’adresse IP de l’ordinateur qui a accédé au site, puis le nom du fichier manquant). Et comme certains fichiers sont répétés un nombre incalculable de fois, il faudrait inutilement tout lire pour être sûr de les référencer tous ! le cauchemar… Heureusement, le Shell d’un système Unix (dont Linux) permet d’enchaîner sur une seule ligne plusieurs commandes de recherche et de tri pour rendre ce travail automatique :

grep "File does not exist:" error_log | awk ‘{print $13}’ | sort | uniq | less

Ici, le caractère « | » (dit « pipe ») sert à passer le résultat de la commande de gauche en paramètre à la commande de droite ; « grep » ne sélectionne dans le fichier « error_log » que les lignes qui comprennent la chaîne « File does not exist: » ; « awk » (avec son argument « print ») y capture le treizième groupe nominal (le nom du fichier, dans notre cas) ; « sort » trie tous les résultats par ordre croissant ; « uniq » supprime tous les doublons. Enfin, « less » affiche le résultat final. On obtient ainsi, très clairement, la liste des fichiers qui posent problème.




Votre baguette magique : la Debian

admin02.jpg
Votre botte secrète ? Vous installez la Debian pour animer les serveurs « simples ».
Pour accomplir ces tâches qui ne regardent que vous, vous avez un secret : vous n’installez pas vos serveurs à partir de ces Linux monolithiques, ultra formatés, ultra francisés et ultra complets que sont les Red Hat, SuSE et autres Mandriva. Laissez-les aux prestataires commerciaux qui y trouvent l’opportunité d’un standard (donc la possibilité d’une garantie de maintenance). Non : vous, vous utilisez la Debian, une distribution Linux qui présente au moins deux avantages dans votre corps de métier. D’une part, c’est un vrai Lego qui permet de n’installer que le strict minimum sur une machine : vos serveurs n’ont effectivement pas besoin de tout l’environnement graphique et ils seront bien plus rapides, ainsi que bien plus faciles à surveiller sans cela. D’autre part, une seule commande (« apt-get install ») permet à la fois de trouver sur Internet, de télécharger, d’installer et d’activer automatiquement n’importe quel programme serveur – il sera toujours actif après un redémarrage du système. Il n’y a rien à faire, si ce n’est répondre à quelques questions lors de l’installation (« faut-il activer ce service, par défaut ? »), voire retoucher un peu les fichiers de configuration pour les adapter à votre réseau. Attention : autant la distribution Debian vous est d’une grande aide dans vos seules tâches d’administration, autant il convient de la proscrire au profit des Red Hat et consorts dès lors qu’il s’agit d’installer contractuellement une application un tant soit peu commerciale sur Linux (sauf si celle-ci est expressément prévue pour Debian, bien entendue, mais elle ferait alors partie d’une minorité).
Démontrons sans plus attendre les bénéfices que cette fameuse Debian vous apporte.


Astuce : remplacez le mot de passe de root sans le connaître
Horreur ! Vous venez d’entrer dans vos fonctions et l’administrateur précédent est parti sans vous communiquer le mot de passe root du serveur (root étant le super compte utilisateur qui a le droit absolument de tout faire sur le système) : la machine démarre sans problème – et active tous ses services automatiquement – mais vous ne pouvez strictement rien configurer. Pis, il n’y a ni lecteur de disquette, ni lecteur de CD pour booter sur un disque d’amorce. Avec un peu de chance, le dispositif d’amorce sur le disque dur laisse quelques secondes à l’utilisateur pour intervenir avant de lancer le système, ce qui va permettre de contourner la procédure normale de démarrage et se retrouver momentanément avec une machine absolument pas fonctionnelle, mais sur laquelle on a tous les droits sans avoir à entrer de mot de passe. Si le dispositif de démarrage est l’outil LILO, il suffit d’appuyer sur la touche d’échappement ou de tabulation pour s’arrêter sur une invite de commande (« LILO: »). On y entre la commande suivante pour obtenir tous les droits (la commande « linux single » ne marche pas toujours) :

linux init=/bin/bash

Si le dispositif d’amorce est GRUB, appuyez sur la touche « e » (apparition de l’invite « grub> ») et entrez les deux lignes suivantes (en partant du principe que votre partition de démarrage soit hda1, c’est-à-dire la première du premier disque ; si vous l’ignorez, commencez par taper « find /vmlinux » pour l’identifier) :

kernel /vmlinux root=/dev/hda1 init=/bin/bash
boot


Une fois ceci fait, vous arrivez sur l’invite du système en mode mono-utilisateur (« # »). Montez la partition racine en lecture/écriture, puis modifiez le mot de passe de root en entrant les deux lignes suivantes (attention, le clavier est certainement en qwerty par défaut) :

mount -o remount,rw /
passwd


Fermez proprement avec un « mount -o remount,ro / », puis redémarrez l’ordinateur (faisons simple, en appuyant sur la touche « Reset » ou sur le bouton d’allumage).




Déployez votre réseau

Imaginons que vous souhaitiez déployer sur le réseau local quatre machines serveurs. La première fera office de serveur Web capable d’exécuter des applications PHP et de communiquer avec un serveur de bases de données MySQL. Elle offrira également un accès FTP pour mettre à jour le site. La seconde sera le serveur MySQL. La troisième servira pour la sauvegarde et la quatrième permettra aux collaborateurs externes de se connecter au LAN via un accès VPN. Pour commencer, prenez quatre PC lambda ; il peut s’agir de vieilles « casseroles », mais songez que des disques durs en RAID sont un plus pour la sécurité des données et que le serveur Web sera a priori celui qui aura le plus besoin de puissance. Ensuite, téléchargez l’image-disque de base de la dernière Debian (http://cdimage.debian.org/debian-cd/3.1_r4/i386/iso-cd/debian-31r4-i386-netinst.iso), gravez-la sur un CD, puis installez-la sur les quatre machines en leur attribuant une adresse IP fixe (par exemple 192.168.0.2 pour le serveur Web, 192.168.0.3 pour la base de données, 192.168.0.4 pour la sauvegarde et 192.168.0.5 pour le serveur VPN). Le fait d’attribuer une IP fixe est plus pratique pour les configurations ultérieures (l’adresse IP est enregistrée dans le fichier « /etc/network/interfaces » de chaque machine). La version de la Debian citée ici correspond à une distribution basique qui s’enrichit automatiquement de toutes les fonctions, dont vous pouvez avoir besoin, en allant les télécharger toute seule sur Internet lors de l’installation.
Pour des raisons de commodité, vous pourrez avoir envie de piloter chacune des machines à distance, ce qui vous évitera de vous déplacer pour chaque manipulation et vous permettra même de retirer les écrans et claviers des serveurs. La prise de contrôle à distance se fait par l’intermédiaire de l’outil SSH, dont le serveur s’installe sur vos machines Debian en tapant « apt-get install ssh » (il conviendra de répondre aux questions posées, notamment être favorable au lancement automatique de « sshd ») et dont un client existe pour toutes les plates-formes, y compris Windows et Mac OS X : il suffit de taper depuis votre poste « ssh @ », puis d’entrer votre mot de passe lorsqu’on vous le demande, pour vous retrouver dans le système de la machine distante (le nom d’utilisateur et le mot de passe sont ceux que vous avez créés lors de l’installation de la Debian sur chaque serveur). À tant faire, optez pour l’installation d’Ubuntu sur votre propre poste de travail : il s’agit d’une implémentation de la Debian qui, pour le coup, dispose d’absolument tous les artifices graphiques de la station personnelle, certains la considérant même plus riche que les Red Hat (Fedora, en l’occurrence), SuSE et autres Mandriva dans ce domaine.


Astuce : rangez automatiquement les fichiers en vrac
Le répertoire d’échange auquel ont accès tous vos utilisateurs sur le serveur de fichiers est un véritable sac de nœuds : de multiples sujets s’y côtoient dans la plus joyeuse pagaille de documents. Voici comment ranger au sein d’un répertoire « rangez/toto/ » tous les documents qui citent le produit Toto dans leur nom. Pour commencer, placez-vous (à l’aide de « cd ») dans le répertoire d’échange, puis tapez les deux lignes suivantes (attention, votre Shell doit être le Bash, soit le Shell par défaut sous Linux) :

mkdir -p rangez/toto
for i in *[Tt][Oo][Tt][Oo]* ; do mv $i rangez/toto/ ; done


La commande « mkdir » crée d’abord plusieurs répertoires imbriqués grâce à l’option « -p ». « for » est une commande interne au Bash qui lance une suite de commandes (initiée par « do », terminée par « done », avec le caractère « ; » pour séparer chaque élément) pour tout fichier du répertoire courant qui commence et se termine par une chaîne quelconque (les jokers « * »), mais comprend dans son nom le mot « toto », qu’il soit écrit avec des majuscules ou des minuscules (les deux possibilités étant indiquées pour chaque caractère grâce aux crochets « [" et "] »). La routine principale n’est quant à elle composée que de la commande de déplacement « mv » qui prend comme source le compteur de « for » (ici « i », précédé par un « $ » pour indiquer qu’il s’agit d’une variable) et comme destination le chemin « rangez/toto/ ».




Installez un serveur Web qui sait exécuter du PHP et utiliser une base de données MySQL

Sur le PC du serveur Web, installez Apache, PHP, l’interface de communication vers MySQL et même l’application PhpMyAdmin (pour peupler et administrer la base de données MySQL via un navigateur Web à partir de n’importe quel poste de travail), à l’aide de ces trois commandes :

apt-get install apache2
apt-get install libapache2-mod-php4 php4-mysql php4-gd php4-cli
apt-get install phpmyadmin


On dispose dès lors de deux sites Web sur la machine, un d’exemple et l’applicatif en ligne PhpMyAdmin. Le fichier de configuration de l’applicatif en ligne PhpMyAdmin est « /etc/apache2/sites-available/phpmyadmin ». Éditez-le en tapant la commande « nano /etc/apache2/sites-available/phpmyadmin » (« nano » est un éditeur de texte bien plus ergonomique que le spartiate « vi » : c’est Ctrl-o pour enregistrer et Ctrl-x pour quitter) afin de modifier le port d’écoute : mettez quelque chose comme « *:81 » à la suite des directives « Listen » et « VirtualHost ». Ensuite, éditez le fichier « /var/www/phpmyadmin/config.inc.php » pour indiquer l’adresse du serveur MySQL (192.168.0.3, dans notre exemple).
Le fichier de configuration du site d’exemple est « /etc/apache2/sites-available/default ». Éditez-le pour indiquer au moins dans quel répertoire du disque dur seront stockés les fichiers de votre site ; à la suite des directives « DocumentRoot » et « Directory », entrez quelque chose comme « /usr/local/ftpusers/ webmaster/ ». Ce répertoire n’existe pas encore, il s’agira de celui créé à l’attention du webmaster pour qu’il puisse venir déposer sur le serveur les pages et autres données du site Web (voir paragraphe suivant). Enregistrez le fichier, puis renommez-le en quelque chose comme « monsite » avec les commandes suivantes (« cd » sert à changer de répertoire et « mv » à déplacer ou renommer un fichier) :

cd /etc/apache2/sites-available/
mv default mon site


Les sites activés par Apache sont en réalité signalés par un lien dans le répertoire « /etc/apache2/sites-enabled/ ». Voici comment retirer (commande « rm ») le lien vers le site d’exemple et placer (commande « ln -s ») celui vers votre site :

cd /etc/apache2/sites-enabled/
rm default
ln -s ../sites-available/monsite ./


Enfin, relancez le serveur Web avec la commande « /etc/init.d/apache2 reload ». Voilà, votre site Web (encore vierge) est accessible à partir du LAN à l’adresse http://192.168.0.2 et PhpMyAdmin à l’adresse http://192.168.0.2:81.


Astuce : installez un paquet rpm sur une Debian
Peste ! Le logiciel que l’on souhaite installer sur son Linux de type Debian (qui utilise des paquets « .deb ») n’est disponible qu’en paquet de type « .rpm » (pour Red Hat, SuSE, Mandriva et consorts.). Qu’à cela ne tienne, il suffit d’utiliser la commande « alien » avec ses options « d » (conversion d’un rpm en deb) et « i » (installation automatique) pour parvenir à l’installer. Par exemple, pour le paquet « toto.rpm » :

alien -di toto.rpm

Seul problème, cette bidouille ne gère pas automatiquement les dépendances (c’est-à-dire l’installation automatique de paquets annexes nécessaires au fonctionnement de celui-ci). Il faut donc rapatrier manuellement tous les fichiers manquants. Regardez les erreurs signalées à la suite de la commande « alien », recherchez sur Internet quelle archive contient tel fichier manquant au moyen de la commande « apt-file » suivie du nom de fichier, puis récupérez et installez cette archive avec la commande « apt-get install » suivie du nom de l’archive précédemment trouvée (une au hasard s’il y en a plusieurs). Attention : dans le cadre de logiciels professionnels, la garantie de l’éditeur (ou du distributeur) ne fonctionnera plus si vous utilisez cette bidouille !




Installez un accès FTP pour peupler le site Web

Reste à permettre au webmaster d’installer son site sur le serveur, ce que vous faites en lui donnant un accès FTP. Il suffit ici d’installer un serveur de ce type ; le programme Pure-FTPd en est l’incarnation la plus en vogue et on l’installe ainsi :

apt-get install pure-ftpd

Tous les utilisateurs qui accèderont par FTP seront des utilisateurs « virtuels » gérés par Pure-FTPd, déclinés à partir d’un seul compte utilisateur (appelons-le « ftpuser » et disons qu’il fait partie du groupe « ftpgroup ») à qui Linux donnera le droit de lecture et d’écriture. On crée ce « ftpuser », on bloque l’accès aux autres utilisateurs Linux et on configure en conséquence Pure-FTPd avec les commandes suivantes :

groupadd ftpgroup
useradd -g ftpgroup -G www-data -d /dev/null -s /etc ftpuser
rm /etc/pure-ftpd/auth/*
ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/75puredb
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone
echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir
echo "21" > /etc/pure-ftpd/conf/Bind


On remarque que, lors de la seconde commande, on a également attribué l’utilisateur « ftpuser » au groupe « www-data », ceci afin que le serveur Web puisse puiser dans les répertoires de téléchargement le site à afficher. On crée ensuite le compte de chaque utilisateur (virtuel) ayant un accès FTP à l’aide des trois commandes suivantes (imaginons que le premier utilisateur s’appelle donc « webmaster ») :

mkdir /usr/local/ftpusers/webmaster
pure-pw useradd webmaster -u ftpuser -d /usr/local/ftpusers/webmaster
pure-pw mkdb



Installez un serveur MySQL

Sur la deuxième machine (adresse IP 192.168.0.3), vous installez MySQL au moyen de la commande suivante :

apt-get install mysql-server-4.1

Il ne vous reste plus qu’à configurer le mot de passe de l’utilisateur « root » qui pourra créer et peupler la base de données à l’aide de commandes SQL (et de PHPMyAdmin depuis l’adresse http://192.168.0.2:81). Il suffit de taper la première commande ci-dessous, laquelle lance une session interactive pour les trois entrées suivantes :

mysql –u root -p
mysql> SET PASSWORD FOR root@localhost=PASSWORD(‘le_nouveau_pass’);
mysql> FLUSH PRIVILEGES;
mysql> quit;



Astuce : compilez plus vite avec plusieurs cœurs de processeur
Pour installer un programme à partir de son code source, il suffit de se déplacer dans son répertoire, puis de taper les commandes « ./configure » (qui adapte le programme à votre système), « make » (qui transforme - « compile » - le programme en binaire exécutable) et « make install » (qui installe l’exécutable au bon endroit). La phase de compilation étant la plus longue, on peut la paralléliser grâce à l’option « -j » pour qu’elle soit traitée par tous les cœurs de processeurs disponibles (à indiquer directement après « -j »), ce qui réduit de presque autant le temps de compilation. Par exemple, pour compiler un programme sur un processeur à double coeur, on fera « make -j2 » (et « make -j4 » pour un processeur à quatre cœurs). Attention, certains programmes ne veulent pas se compiler de cette manière. Si une erreur survient, recommencez sans « -j ».




Mettez en place des sauvegardes quotidiennes

Sur la troisième machine (192.168.0.4), vous créez un répertoire pour accueillir les sauvegardes quotidiennes des données de votre webmaster et un autre pour celles de la base de données à l’aide des deux commandes suivantes :

useradd -m webmaster
useradd -m database


admin06.jpg
Donnez un accès FTP à votre webmaster pour qu’il puisse installer à distance le site Web, sans toucher à vos machines.
Le mieux étant de taper également « passwd webmaster » et « passwd database » pour leur attribuer un mot de passe. Ensuite, vous vous rendez sur les deux premières machines pour placer une commande de sauvegarde dans leur « crontab ». La crontab est une liste d’action à faire automatiquement. On l’édite en tapant « crontab -e ». Puis, sur chaque ligne (qui correspond à une action à effectuer), on entre les chiffres de la date où effectuer l’action (dans l’ordre, il y a les minutes, l’heure, le jour du mois, le mois, le jour de la semaine, avec un « * » pour chaque paramètre non précisé), suivis de la commande à effectuer. Celle de synchronisation de deux répertoires (sauvegarde dite « incrémentale «) étant « rsync -a », voici ce que l’on entrerait dans la crontab de la machine 192.168.0.2 pour faire une sauvegarde toutes les nuits à 3h00 du matin des données de votre webmaster (sur une seule ligne et en admettant que votre mot de passe soit « password ») :

0 3 * * * rsync -a /usr/local/ftpusers/webmaster webmaster:password@192.168.0.4:/home/webmaster/

En ce qui concerne la base de données, le mieux consiste à l’exporter d’abord sous la forme d’un script SQL récupérable par n’importe quel serveur de bases SQL (ce qui se fait au moyen de la commande « mysqldump »), puis de copier le fichier résultant sur le serveur de sauvegarde. Comme il y a deux actions à effectuer, le plus commode reste de les placer dans un script qui sera exécuté tous les jours par la crontab. Sur la machine 192.168.0.3, créez le script suivant et enregistrez-le en tant que « /usr/local/bin/dump.sh » (en admettant que votre mot de passe soit « password ») :

#!/bin/sh
mysqldump --all-databases > ~/backup-base.sql
rsync ~/backup-base.sql database:password@192.168.0.4:/home/database/


Pour que ce script soit exécutable, entrez la commande :

chmod +x /usr/local/bin/dump.sh

Puis entrez la ligne suivante dans la crontab pour effectuer une sauvegarde quotidienne à 4h00 du matin :

0 4 * * * /usr/local/bin/dump.sh


Astuce : téléchargez d’un coup toutes les données d’un site Web
Argh ! Les informaticiens de l’agence de communication ont oublié de mettre à votre disposition sur un FTP les 120 vidéos « .mpg » que vous devez récupérer – dix par mois. Celles-ci sont bien disponibles sur leur site Web, chacune accessible via une adresse du style « http:// www.agence.com/videos//.mpg », mais on ne peut pas se permettre de passer la nuit à visiter toutes les URL avec un navigateur pour les récupérer une à une (en cliquant dessus avec le bouton droit et en sélectionnant « Enregistrer sous… ») ! Heureusement, toutes ces opérations peuvent se faire d’un coup grâce à la commande « curl ». Si les vidéos à récupérer sont numérotées de 01 à 10 (« 01.mpeg », « 02.mpeg », etc.) et qu’elles sont contenues dans des répertoires numérotés selon le mois (de « 01 » à « 12 »), on peut rapatrier tous les fichiers en vrac dans le répertoire local en les renommant pour que le mois apparaisse dans leur nom de cette manière :

curl http://www.agence.com/videos\[01-12\]/\[01-10\].mpeg -o "#1_#2"


Les crochets (« [ ] ») indiquent des intervalles (« [01-12] » signifie « toutes les nombres de 01 à 12 ») : « curl » va effectuer des requêtes sur des noms de fichiers créés à partir de toutes les possibilités comprises dans ces intervalles. Le caractère d’échappement « \ » sert à indiquer que les crochets doivent considérer comme des caractères de contrôle et non comme faisant textuellement partie de l’URL. Il est possible de remplacer l’intervalle « [ ] » par une liste de noms au moyen de « { } » et même de récréer l’arborescence en local (c’est plus propre) en épaulant « -o » de l’argument « --create-dirs ». Par exemple, si les répertoires des mois sont plutôt nommés « jan », « fev », « mar », « avr », etc., on pourra faire :

curl http://www.site.com/videos\{jan,fev,mar,avr\}/\[01-10\].mpeg -o "#1/#2" create-dirs


Évidemment, il vous appartient de préciser la liste complète des répertoires entre les accolades, en les séparant par une virgule. Il est à noter qu’on ne peut pas ici utiliser les jokers « * » (n’importe quelle suite de caractères) et « ? » (n’importe quel caractère) : un site Web ne livrant la liste des répertoires et des fichiers qu’il contient que si on les lui demande, « curl » doit faire des requêtes explicites.




Mettez en place un VPN


admin08.jpg
Il suffit d’entrer quelques lignes à peine pour que toutes les sauvegardes se fassent automatiquement et régulièrement, sans même nécessiter de présence humaine pour les superviser.
Pour mémoire, le VPN est le moyen de faire croire à une machine située à l’autre bout d’Internet qu’elle fait partie du réseau local. Pour rendre la chose réalisable, il faut que le collaborateur nomade lance sur son ordinateur un logiciel client qui le connecte directement et, dans l’entreprise, qu’il y ait un serveur qui réceptionne les requêtes des nomades, leur attribue une adresse IP privée (par défaut du genre 10.8.0.x) puis fasse office de passerelle entre eux et le LAN. Une solution en vogue se nomme OpenVPN, laquelle passe par le protocole OpenSSL pour sécuriser les échanges. On pourra télécharger un client Windows à l’adresse http://openvpn.se/download.html, un client Mac OS X à l’adresse http://www.tunnelblick.net/ et une version RPM pour un client Linux (RedHat, SuSE, Mandriva, etc.) sur http://dag.wieers.com/packages/openvpn/. Pour qu’il puisse se connecter au réseau de l’entreprise, chaque collaborateur doit placer dans le répertoire de son application OpenVPN un fichier de configuration (comprenant l’adresse IP publique de l’entreprise, le port sur lequel il faut communiquer) et des clés d’authentification ; vous les lui fournirez après les avoir générés. Du côté du serveur, on gagnera à installer, en plus d’OpenVPN, OpenSSL pour plus de sécurité et la bibliothèque liblzo1 pour compresser les données (ce qui fait économiser de la bande passante). Ceci se fait au moyen des trois commandes suivantes :

apt-get install openvpn
apt-get install liblzo1
apt-get install openssl


La génération des clés pour tout le monde est réalisée par des scripts fournis. On se déplace dans le répertoire qui les contient et l’on exécute les scripts un à un en répondant à des questions – nécessaires pour générer les certificats d’authenticité. Pour commencer, il convient de créer, une bonne fois pour toutes, les clés et certificats soit communs, soit propres au serveur (appelons-le « serveurvpn ») :

cd /usr/share/doc/openvpn/examples/easy-rsa/
./clean-all
gunzip openssl.cnf.gz
./build-ca
./build-dh
./build-key-server serveurvpn
openvpn --genkey --secret keys/ta.key


Les fichiers « ca.crt », « ca.key », « ta.key », « serveurvpn.key », « serveurvpn.crt » et « dh1024.pem » vont dans le répertoire « /etc/openvpn/keys/ ». Pour chaque collaborateur à qui l’on souhaite donner l’accès, il faudra exécuter la commande suivante (remplacez « toto » par un nom arbitraire pour votre collaborateur) :

./build-key toto


Astuce : retrouvez un nom au sein de milliers de fichiers
Sur les dix mille pages « .html » de votre site, quelles sont celles où l’on parle de Linux, déjà ? Voici une commande qui vous répond et vous indique même le numéro de la ligne où Linux apparaît dans le fichier (avant de taper cette commande, placez-vous avec « cd » dans un répertoire suffisamment haut dans l’arborescence pour qu’il englobe tous les sous-répertoires de votre site) :

find . -iname \*.html -exec grep -Hn Linux {} \;


Ici, « find » est la commande de recherche de fichiers. Elle lance ses investigations à partir du répertoire courant « . » (elle descend automatiquement dans l’arborescence) et ne retient que les fichiers dont le nom, en majuscules ou en minuscules (option « -iname »), se termine par « .html » (le « * » est un joker qui veut dire « tous » et le signe d’échappement « \ » qui le précède sert à indiquer que « * » est un joker). Pour chacun de ces fichiers (accolades « { } » à la fin qui servent à indiquer en paramètre le résultat du début), « find » exécute (option « -exec », plus obligation de terminer la ligne avec « \; ») la commande « grep » qui détecte dans chaque fichier « .html » la présence de la chaîne « Linux » et indique le nom du fichier plus la ligne où cette chaîne se trouve (double option « -Hn »).



Il faut ensuite lui communiquer les clés « .crt » et « .key » engendrées, les clés « ca.crt » et « ta.key » générées précédemment, ainsi qu’un fichier de configuration « toto.ovpn » que l’on pourra décliner d’après l’exemple fourni dans le répertoire « /usr/share/doc/openvpn/ » (placez à la suite de « remote » l’adresse IP publique de l’entreprise ainsi que le port sur lequel communiquer, puis à la suite de « cert » et « key » les noms corrects des clés du client).
Il ne reste plus qu’à transformer le serveur OpenVPN local en routeur pour qu’il puisse mettre en contact les machines des collaborateurs nomades (qui auront une adresse IP privée du style « 10.8.0.x ») avec celles du LAN. Commencez par configurer la passerelle/firewall de votre entreprise pour qu’elle envoie toutes les connexions entrantes sur le port choisi vers l’adresse IP privée du serveur OpenVPN.
Ensuite, créez le fichier de configuration « /etc/openvpn/openvpn.conf » en adaptant les exemples fournis (notamment la ligne « push ‘route… » où l’on précise la plage d’adresses IP privées du LAN, par exemple « 192.168.1.0 »). Enfin, ajoutez les deux lignes suivantes au script « /etc/init.d/rc » (en partant du principe que votre serveur OpenVPN ait l’adresse 192.168.1.5 » dans le LAN) :

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j SNAT to-source 192.168.1.5


Il est à noter que certains prestataires, voire certains proxies, peuvent empêcher la communication VPN de s’effectuer avec les paramètres par défaut d’OpenVPN. La meilleure solution consiste alors à opter pour une communication en TCP plutôt qu’en UDP (directive « proto tcp » dans les fichiers de configuration) et à utiliser le port de communication 443 (à la fin de la directive « remote », après l’adresse IP, dans le fichier de configuration du client et « port 443 » dans celui du serveur).


Quelques lectures

Si ces quelques pages vous ont donné l’envie de vous lancer dans l’administration Linux, la lecture de livres sur le sujet vous aidera à aller plus loin. Parmi la littérature très fournie qui existe, nous vous conseillons de commencer par la collection
« À 200 % » (notamment « Debian à 200 % » et « L’administration Linux à 200 % »), chez O’Reilly, laquelle regroupe des volumes organisés en trucs et astuces, très faciles à lire.

tableau.jpg

Aucun commentaire: