lalahop
Categorie: Administration réseau

Les portails captifs …

Avant de commencer, je tiens à préciser que ce billet sera forcement incomplet. En effet, il existe une multitude de portails captifs en circulation et je n'ai pas la prétention de tous les connaître ni de faire un billet qui les concerne tous. Sans compter les configurations qui varient d'un intégrateur à un autre pour un même produit ... Dans ce billet, je vais vous donner les bases, des pistes de recherche et rien de plus. Ne soyez donc pas déçus.

Ha ! Les portails captifs ! Entre ceux qui les croient indétrônables et les mettent en place sans d'autres mesures complémentaires de sécurité et de bon sens et ceux qui passent leur temps à pester contre eux lorsqu'ils les empêchent de faire des actions légitimes ...

Dans ce billet, je parlerai des portails captifs que l'on trouve sur les accès WiFi "ouverts" comme des portails captifs que l'on trouve sur des connexions filaires. Leurs principes de fonctionnement sont identiques.

Table des matières

Contourner un portail captif

Je sais que les poils de certains lecteurs se sont hérissés à la lecture du mot "contourner". Bah oui, contourner un portail captif c'est forcement dans une mauvaise intention. Bah non ... On peut contourner un portail captif pour des raisons légitimes. Au pif : vous attendez toujours votre identifiant alors que vous avez payé il y a déjà longtemps votre accès à internet ou bien le portail captif déconne une fois de plus et vous avez besoin de vous informer, de vous divertir, de communiquer rapidement, ou que sais-je.

Plusieurs méthodes de contournement (= accéder à internet sans identifiant) sont possibles, parmi lesquelles :

  • Pinger une machine du réseau et dès qu'elle ne répond plus, on peut considérer que son propriétaire l'a éteinte sans pour autant prendre le temps de se déconnecter du portail captif. Il suffit donc de prendre l'adresse IP de cette machine et vous serez authentifié. Sisi, une technique aussi basique fonctionne encore en 2011 (à qui la faute ?) !
  • Pour les portails captifs un peu plus exigeants, il suffira d'usurper l'adresse MAC en même temps que l'adresse IP. Un ping puis un arp -a suffira à découvrir l'association entre adresse IP et adresse MAC sans utiliser d'analyseur réseau (vous savez, des logiciels comme tcpdump ou wireshark). Cette usurpation peut même avoir lieu pendant que la victime est connectée.
  • Normalement, tous les ports sont verrouillés tant que le client ne s'est pas authentifié. Mais parfois, on trouve des portails captifs avec des ports standards ouverts. Il suffit d'héberger, en dehors du réseau, un serveur (SSH/OpenVPN si c'est un port TCP qui est ouvert, OpenVPN pour un port UDP) et de faire du tunneling. Ex. : si vous constatez que le port 53/UDP est ouvert, montez un serveur OpenVPN sur le port 53/UDP. Attention toutefois à ce que le trafic ne soit pas dirigé vers une destination précise (ex. : le port 53/UDP est ouvert, mais le trafic sur ce port est dirigé vers un vrai résolveur DNS qui ne laissera pas passer votre connexion VPN). Ce genre de manipulation peut être démasquée en regardant le TTL des réponses. Si le paquet de retour a un TTL de 1, 2 ou une valeur faible, le serveur est tout près et il ne s'agit probablement pas du serveur que vous cherchez à atteindre.
  • Si aucun port n'est ouvert ou si le trafic est redirigé vers une machine particulière, il vous reste le tunneling plus avancé : TCP over ICMP, TCP over DNS, etc. De mon expérience, si le protocole ICMP est souvent bloqué, le protocole DNS n'est jamais bloqué afin de permettre la redirection du navigateur vers la page d'authentification (votre navigateur cherchera à résoudre google.fr, par exemple. S'il n'y parvient pas, il n'enverra pas de message HTTP et la passerelle ne pourra donc pas le rediriger vers la page d'authentification). Parmi les logiciels utilisables, on peut citer iodine (mon préféré), heyoka, ozymanDNS, dnstunnel ... Je vous propose ce site : Le Blog du grand loup Zeur comme tutoriel. Attention toutefois : ce genre de tunneling n'est pas le plus efficace qui soit en terme de débit (pour avoir essayé ...). De plus, vous pouvez facilement être détecté par une analyse volumétrique du trafic dû au flot inhabituel que vous allez générer sur le service choisi (ex. : DNS). À noter que ce type de tunneling permet aussi de passer les firewalls qui inspectent le contenu des paquets pour vérifier qu'ils sont conformes aux spécifications du protocole auxquels ils prétendent appartenir (ex. : iodine passera très bien un l7-filter configuré pour ne laisser passer que le protocole DNS sur le port UDP/53).
  • À l'aide d'un "complice" ayant une machine authentifiée sur le réseau, il suffit d'utiliser le NAT. Le concept est simple : sa machine est authentifiée et va transmettre vos paquets sous son identité. Vous allez peut-être vous dire qu'il faut donc que votre complice ait une machine avec deux cartes réseau ou qu'il vous faut un commutateur. Que nenni ! Vous vous raccordez sur le même réseau, via les prises murales ou que sais-je. Sur le serveur (la machine de votre "complice"), vous passerez en IP fixe (en utilisant évidemment une IP routable sur le réseau, c'est-à-dire une IP appartenant au même réseau que la passerelle), vous activez l'ip forwarding et le NAT. Pour accroître un peu la sécurité, le serveur ne NATera que les paquets dont l'IP source est celle de votre machine (le client). Ceci est à configurer dans la chaîne FORWARD pour les iptabliens. Cela évite que quelqu'un d'autre, par hasard, comprenne le truc et utilise aussi le serveur sans votre accord. Sur le client, il suffit de passer en IP fixe (= pas de DHCP), de déclarer le serveur comme route par défaut et en avant ! Cette technique peut également vous servir si vous avez deux machines vous appartenant pour un seul identifiant. Si en plus vous avez deux machines pour une seule prise murale, alors là oui, vous aurez besoin d'un commutateur.
  • ...

S'authentifier automatiquement sur un portail captif

Il n'y a rien de plus embêtant que de devoir se connecter à chaque fois au portail captif. Pour éviter ce calvaire, il suffit d'utiliser curl (mon préféré) ou wget pour qu'ils vous connectent automatiquement.

Il suffit d'analyser le code source de la page d'authentification et notamment les paramètres passés via l'URL ou via un formulaire. Méfiez-vous des champs cachés qui doivent tout de même être remplis ! Faites également attention aux pages qui s'enchainent (ex. : une page vous demande votre login, puis une page qui vous demande votre mot de passe, seule la deuxième page est importante). Il suffit ensuite de créer une commande curl qui remplira le formulaire pour vous et vous connectera automatiquement.

Par exemple, si la page d'authentification ressemble à ça (exemple inventé) et se trouve sur le serveur 10.123.36.254) :

<form method="post" action="fin.html">
	<input type="hidden" name="url" value=""/>

	<input type="hidden" name="meth" value="radius"/>
	<input type="hidden" name="action" value="login"/>

	<input type="hidden" name="time" value="360"/>
	<input type="password" name="pswd" size="25"/>

	<input type="hidden" name="uid" value="mon_login"/>
 
	<input type="submit" value="OK">

	<input type="button" value="Annuler" onclick="window.location='/';">
</form>

Alors la commande curl correspondante ressemblera à :

curl -m 5 -d pswd=votre_mdp -d uid=mon_login -d time=360 -d url= -d meth=radius -d action=login "http://10.123.36.254/fin.html" > /dev/null 2>&1

Le paramètre "-d" permet de remplir les champs, "-m 5" demande à curl d'arrêter sa tentative de connexion après 5 secondes.
À vous d'adapter ceci à votre situation. Exemple : si votre portail captif utilise le protocole HTTPS et un certificat non valable, utilisez l'option "-k" de curl pour contourner ce problème.

Il ne vous reste plus qu'à mettre cette commande dans un script shell, de le rendre exécutable et d'utiliser le Network Manager ou bien Wicd (Propriété de la connexion, Scripts, Exécuter un script après connexion) ou le fichier de configuration /etc/network/interfaces et son paramètre "post-up" pour exécuter le script dès la connexion au réseau et ainsi être authentifié automatiquement.

Maintenir l'authentification

Il n'y a rien de plus chiant que d'interrompre une séance productive de travail pour se reconnecter, car le timeout du portail captif a expiré ! Le pire, c'est quand le timeout est démesurément court : 30 minutes, par exemple (sisi, j'ai déjà vu ça !).

La solution est simple, il suffit d'utiliser cron pour lancer le script d'autoconnexion écrit ci-dessus à un intervalle régulier. Pour cela, il suffit d'utiliser la commande :

crontab -e

Et de rajouter une ligne. Par exemple (le script sera lancé toutes les 5 heures) :

* */5 * * * /home/guigui/.autoconnect

Astuces bonus

Il arrive que le portail captif refuse de vous identifier alors que vous avez fourni les bons identifiants. Deux causes peuvent expliquer cela : le fait que le serveur DHCP vous ai attribué une autre IP (lors d'une demande post-reboot ou lors d'un renouvellement) et la cause inconnue.

Dans le premier cas, il suffit de reprendre votre ancienne IP et si vous le souhaitez, de vous déconnecter du portail, de reprendre l'IP qui vous a été attribué en dernier et vous authentifier. Le problème étant de connaître son avant-dernière IP. La commande suivante devrait vous aider à connaître les 2 dernières IPs qui vous ont été attribuées :

sudo grep "dhclient: bound to" /var/log/daemon.log | tail -2

Dans le deuxième cas, j'ai constaté que ce problème se résout en envoyant plusieurs requêtes d'authentification au portail captif. Il suffit donc de répéter la commande d'autoconnexion plusieurs fois. Par exemple :

#!/bin/bash
 
while let 1; 
do 
	curl -d pswd=votre_mdp -d uid=mon_login -d time=360 -d url= -d meth=radius -d action=login "http://10.123.36.254/fin.html";

done

Vous vous apercevrez que le portail va très rapidement (dans les 30 secondes) vous authentifier puis repartir en erreur. Mais ce n’est pas grave : vous serez authentifié ! Contrairement aux apparences, ce script n'est pas une boucle infinie destructrice : un simple CTRL+C suffit pour tout arrêter). Faites quand même attention lorsque vous l'employez afin que l'on ne vous accuse pas de porter atteinte à un système automatisé de traitement de données alors que vous cherchez simplement à rétablir un service légitime. C'est la mode ces temps-ci ...

Se déconnecter automatiquement (ÉDIT du 03/04/2012 à 18h15)

Je vous ai montré, plus haut, l'importance de se déconnecter du portail captif avant de quitter le réseau mais je ne vous ai pas encore montré comment vous déconnecter de manière automatique. Nous allons faire en sorte de vous déconnecter automatiquement durant l'arrêt de votre machine.

La première étape est de trouver l'url et les paramètres de déconnexion. Tout comme pour la connexion automatique, il va falloir y aller au reverse. Tout comme pour la connexion automatique, vous devez obtenir une commande curl.

La deuxième étape est de modifier le fichier /etc/network/interfaces et d'y ajouter une ligne "pre-down". Cela demandera à la commande ifdown de vous déconnecter du portail avant de rendre l'adresse (si vous êtes en DHCP) et d'éteindre la carte réseau. Exemple :

allow-hotplug eth0
iface eth0 inet dhcp
pre-down curl -d pswd=votre_mdp -d uid=mon_login -d time=360 -d url= -d meth=radius -d action=logout "http://10.123.36.254/fin.html"

Attention : pour ceux qui seraient tenter d'utiliser wicd ou le network-manager, ce n'est pas une bonne idée. Ces deux services seront stoppés lors de l'arrêt et ne vous déconnecteront donc pas.

Pour ceux qui veulent se déconnecter sans pour autant éteindre leur machine, il n'y a pas, à ma connaissance, de méthode 100% automatique. Si vous avez modifié le fichier /etc/network/interfaces comme ci-dessus, vous pouvez lancer la commande "sudo ifdown eth0". Vous pouvez également placer votre commande dans wicd (Propriété de la connexion, Scripts, Exécuter un script avant déconnexion) ou le network-manager comme ça, vous aurez juste à cliquer sur "Déconnexion" pour quitter le portail captif et le réseau. Cette deuxième possibilité n'impose pas d'avoir modifié le fichier interfaces.

SSH auto-reconnect

Je vais finir ce billet en vous parlant d'un sujet qui n'a qu'un rapport limité avec le thème de ce billet : la reconnexion automatique à un serveur SSH. Vous savez que, sur les réseaux insécures, je fais transiter tout mon trafic par un tunnel SSH en attendant de me monter un VPN. Le keepalive permet de maintenir la connexion. Mais si jamais un problème survient sur le réseau et provoque une déconnexion, cela peut-être ennuyeux si je ne suis pas là pour relancer la connexion et si je télécharge un fichier, par exemple. C'est dans cette optique que j'ai créé le script suivant.

Il me semble au point, mais il y a sans doute moyen de l'améliorer. Il peut être simplifié, car il est, pour le moment, adapté à mes besoins/désirs :

  • Connexion au serveur SSH via le système clé publique/clé privée.
  • Je vérifie que la connexion est down via une requête DNS effectuée via mon tunnel SSH. Il est nécessaire d'ouvrir deux tunnels distincts (un pour le test, l'autre pour les données), car sinon, en cas de trafic dans le tunnel, la requête DNS de test n'est pas prioritaire et le script diagnostique, à tort, une connexion SSH down. Il est bien sûr possible de contrôler l'état de la connexion SSH via d'autres moyens comme la surveillance des connexions actives avec netstat ou la surveillance des processus actifs avec ps. Mais ces méthodes sont plus lentes pour détecter une connexion down du fait des timers, entre autres.
  • Ce script suppose que le serveur SSH soit configuré dans votre fichier ssh_config.
  • Ce script suppose que le port 53/tcp soit redirigé, grâce à iptables, sur le port 5300. je vous avais déjà expliqué pourquoi.
  • La commande dig doit être disponible sur le système (package dnsutils sous Debian).
  • Le résolveur DNS utilisé doit accepter les requêtes DNS sur le port 53/tcp.
  • Ce script est complexifié par le fait que le serveur SSH procède à un bannissement par IP après deux tentatives de connexion en moins de 10 minutes. C'est pourquoi le script attend 12 minutes en cas de reconnexion ratée et a été adapté à cette contrainte.

Trêve de parole, voici le script que j'utilise :

#!/bin/bash
 

ssh-add /chemin/vers/la/cle/privee
 
while true

do
	dig google.fr @127.0.0.1 +tcp > /dev/null 2>&1
	if [ $? -eq 0 ]; then

		echo "La connexion SSH est OK."
		sleep 60
	else
		echo "La connexion SSH semble KO."

		dig google.fr @127.0.0.1 +tcp > /dev/null 2>&1
		if [ $? -ne 0 ]; then

			echo "La connexion SSH est réellement KO."
			killall ssh > /dev/null 2>&1

 
			echo "Tentative de reconnexion ..."
			ssh -N -D6666 serveur &
			ssh -N -L5300:resolveurDNS:53 serveur &

 
			sleep 60   
			dig google.fr @127.0.0.1 +tcp > /dev/null 2>&1

			if [ $? -ne 0 ]; then
				echo "Tentative de reconnexion KO, attente de 12 minutes."

				killall ssh > /dev/null 2>&1
				sleep 720

			else
				echo "Tentative de reconnexion OK."
				sleep 60
			fi
		else

			echo "Mais la connexion est OK en fait."   
			sleep 60
		fi
	fi
done

OpenWRT : sécuriser l’accès SSH

Table des matières

Dans ce billet, je vais vous parler de plusieurs méthodes pour améliorer la sécurité de votre accès SSH à votre routeur sous OpenWRT. Un deuxième objectif sera d'éviter au maximum les attaques par bruteforce. Bien qu'elles soient sans espoir avec un mot de passe bien choisi, elles consomment un peu des ressources (processeur et bande passante) et ça m'énerve. Nous verrons quatre méthodes au total. Il est bien entendu qu'il est inutile de combiner toutes les méthodes. Néanmoins, certaines peuvent être combinées (ex. : 3 et 4 ou 1 et 2 ou ...). Évidemment, tout ceci est inutile si vous n'utilisez pas SSH en dehors de votre LAN.

Un changement du port d'écoute et une règle iptables

J'ai déjà présenté une règle iptables permettant de limiter l’impact d'une attaque par bruteforce sur le démon SSH dans ce billet : Adieu DG834G, bonjour WRT54GL et OpenWRT

Pour rappel, voici ce que j'écrivais :
Je change le port sur lequel écoute dropbear (démon SSH). Pour cela, il faut éditer le fichier /etc/config/dropbear en changeant la ligne « Port ».

Ensuite, j’ouvre le port, dans iptables, pour qu’il soit accessible depuis internet et je protège le service contre une attaque par brute force. Pour faire cela, il faut éditer le fichier /etc/firewall.user avec vi, par exemple, et ajouter :

iptables -A input_wan -p tcp --dport 7523 -m state --state NEW -m recent --name ATTACKER_SSH --rsource --update --seconds 600 --hitcount 2 -j DROP
iptables -A input_wan -p tcp --dport 7523 -m state --state NEW -m recent --name ATTACKER_SSH --rsource --set
iptables -A input_wan -p tcp --dport 7523 -m state --state NEW -j ACCEPT

Notes :

  • 7523 est le port d'écoute choisi.
  • Ce code est inspiré de celui fourni sur le wiki officiel mais lui fonctionne, au moins 😉 .
  • Ce code nécessite que les packages iptables-mod-conntrack-extra et kmod-ipt-conntrack-extra soient installés. Ils ne le sont pas par défaut.

Explication rapide : L’attaquant sera donc bloqué pendant 10 minutes après 2 connexions (qui permettent chacune d’essayer 10 mots de passe). On ne peut pas plus réduire le nombre de connexions. Si vous mettez 1, vous ne devrez jamais vous tromper quand vous tapez le login. Car dans ce cas, vous devrez quitter la session et en recommencer une mais vous serez alors bloqué pendant 10 minutes. Évidemment, cela s’applique uniquement aux paquets venant d’internet, pas du LAN.

Malheureusement, il n'est pas toujours possible de changer le port d'écoute : certains réseaux vérifient les ports utilisés dans le trafic sortant, voir plus (reverse-proxy ...) et vous ne pourrez donc pas accéder à votre routeur depuis ces réseaux. Mais n'oubliez pas qu'il reste beaucoup de ports ouverts et qui ne sont que rarement contrôlés par de reverse proxy ou des règles qui matchent le contenu des paquets. À ce sujet, privilégiez les ports qui utilisent un protocole de chiffrement (ex : SSH, HTTPS, POPS, IMAPS, SMTPS, ports VPN, ports IPSEC, ...). De plus, Dropbear, le démon SSH utilisé par OpenWRT permet d'essayer 10 mots de passe par connexions. Ce qui fait qu'ici, un bot aura le droit d'essayer 20 mots de passe par session.

Bon, vous me direz que 20 essais toutes les 10 minutes, ce n'est rien comparé à un mot de passe de 12 caractères chiffres, lettre minuscules, majuscules et caractères spéciaux ne représentant pas une séquence connue (ex. : azertyuiop75) ni un mot du dictionnaire. Sachant que, d’après mes observations, les bot bloqués ne reviennent pas au bout de 10 minutes mais au bout de 24H, cela fait donc 20 essais de mot de passe par jour. Autant dire : rien. Et je ne parle pas des bots qui sont seulement capables de tester un mot de passe par connexion. Ceux-là essayent donc 2 mots de passe par jour. Néanmoins, comme je l'ai déjà dit ces tentatives, même vouées à l'échec, m'énervent.

Compiler dropbear pour n'autoriser que 3 essais de mot de passe par connexion

Édit du 25/08/2011 à 2h40 :
Attention : J'ai oublié de préciser que ce point vous concerne même si vous utilisez l'authentification à clé publique. En effet, même si vous n'avez pas besoin de limiter le nombre d'essais de mot de passe, il peut être intéressant de limiter la durée pendant laquelle l'authentification est possible, de limiter le nombre de d'utilisateurs non authentifiés simultanés ou bien encore de limiter la taille du binaire.
Fin de l'édit

Ici, les manières de procéder sont diverses. La plus adaptée serait d'utiliser le SDK d'OpenWRT puisque nous voulons compiler uniquement un seul paquet. Néanmoins, celui-ci n'est pas disponible pour Backfire 10.03. Certains internautes du forum officiel d'OpenWRT utilisent le SDK de la version Kamikaze au prix d'une petite bidouille d'opkg par la suite. Nous n'allons donc pas employer cette méthode mais nous allons utiliser buildroot, une série de scripts qui permet de compiler facilement un système embarqué avec Linux comme noyau et qui est utilisé par OpenWRT, pour compiler dropbear.

Pour rappel : le SDK ou l'image builder, sont des composants du buildroot. Ils peuvent donc être remplacés ou compilés par buildroot (voir make menuconfig).

Préparer votre GNU/Linux Debian Squeeze pour buildroot

Il faut installer un certain nombre de paquets :

# apt-get install asciidoc autoconf bison build-essential fastjar flex gawk gettext git-core intltool libextutils-autoinstall-perl libncurses5-dev libssl-dev libtool subversion zlib1g-dev

Source : OpenWrt Buildroot – Installation. Le reste des paquets seront installés via le jeu des dépendances.

C'est l'heure d'aller se chercher un premier café ! 😉

Récupérer les sources

Nous allons récupérer les sources stables de la version Backfire 10.03 :

~$ svn co svn://svn.openwrt.org/openwrt/tags/backfire_10.03

S'assurer que toutes les dépendances sont satisfaites

~$ cd backfire_10.03
~/backfire_10.03$ make defconfig
~/backfire_10.03$ make prereq

Modifier le Makefile de dropbear afin d'accroitre la sécurité

Ouvrez le Makefile spécifique à dropbear (./package/dropbear). Dans la rubrique "Build/Configure", constatez que certains fichiers sources sont modifiés avant compilation. Il s'agit notamment du fichier options.h que l'auteur de dropbear nous conseille (via le fichier README des sources) d'ailleurs de consulter afin de personnaliser notre installation. C'est ce que j'ai fait et je vous livre ici les modifications utiles que j’ai trouvées. Signalons au passage la présence de nombreux commentaires, dans le code, qui aide à faire des choix. Rien ne vous empêche donc de vérifier que je n'ai rien oublié 😉 .

Voici donc les lignes que nous allons rajouter dans la rubrique "Build/Configure du Makefile" :

$(SED) 's,^#define AUTH_TIMEOUT 300,#define AUTH_TIMEOUT 60,g' $(PKG_BUILD_DIR)/sysoptions.h
$(SED) 's,^#define MAX_UNAUTH_PER_IP 5,#define MAX_UNAUTH_PER_IP 2,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define MAX_UNAUTH_CLIENTS 30,#define MAX_UNAUTH_CLIENTS 2,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define MAX_AUTH_TRIES 10,#define MAX_AUTH_TRIES 3,g' $(PKG_BUILD_DIR)/options.h

Explications simplifiées :

  • La première ligne passe le délai pour s'authentifier de 5 minutes à 1 minute. Il ne faut tout de même pas 5 minutes pour taper un mot de passe !
  • La deuxième et la troisième ligne réduisent le nombre de clients non authentifiés qui peuvent se connecter simultanément.
  • La dernière ligne passe le nombre d'essais de mot de passe de 10 à 3 pour une session.

Évidemment, ces options, et notamment celle pour le nombre de clients non authentifiés simultanés, doivent être adapter à votre situation (nombre d'utilisateurs, ...).

Modifier le Makefile de dropbear afin d'optimiser l'espace occupé par le programme

Tant que nous y sommes, nous allons désactiver les fonctions dont nous ne nous servirons pas afin que le binaire généré occupe moins d'espace sur la flash du routeur. Par la même occasion, nous augmentons la sécurité du démon (moins de code donc moins de bugs/failles possibles).

Sachez que le développeur de dropbear donne des conseils pour que dropbear occupe moins d'espace dans le fichier SMALL des sources. Je vous cite le contenu de ce fichier, ci-dessous, pour information :

Tips for a small system:

If you only want server functionality (for example), compile with
make PROGRAMS=dropbear
rather than just
make dropbear
so that client functionality in shared portions of Dropbear won't be included.
The same applies if you are compiling just a client.

---

The following are set in options.h:

- You can safely disable blowfish and twofish ciphers, and MD5 hmac, without
affecting interoperability

- If you're compiling statically, you can turn off host lookups

- You can disable either password or public-key authentication, though note
that the IETF draft states that pubkey authentication is required.

- Similarly with DSS and RSA, you can disable one of these if you know that

all clients will be able to support a particular one. The IETF draft
states that DSS is required, however you may prefer to use RSA.
DON'T disable either of these on systems where you aren't 100% sure about
who will be connecting and what clients they will be using.

- Disabling the MOTD code and SFTP-SERVER may save a small amount of codesize

- You can disable x11, tcp and agent forwarding as desired. None of these are

essential, although agent-forwarding is often useful even on firewall boxes.

---

If you are compiling statically, you may want to disable zlib, as it will use
a few tens of kB of binary-size (./configure --disable-zlib).

You can create a combined binary, see the file MULTI, which will put all
the functions into one binary, avoiding repeated code.

If you're compiling with gcc, you might want to look at gcc's options for
stripping unused code. The relevant vars to set before configure are:

LDFLAGS=-Wl,--gc-sections
CFLAGS="-ffunction-sections -fdata-sections"

You can also experiment with optimisation flags such as -Os, note that in some
cases these flags actually seem to increase size, so experiment before
deciding.

Of course using small C libraries such as uClibc and dietlibc can also help.

If you have any queries, mail me and I'll see if I can help.

Nous allons suivre le dernier conseil : utiliser les options de gcc pour dégager le code inutilisé. Pour cela, ajoutez les deux lignes données en haut de la rubrique Build/Compile du Makefile de dropbear. Comme cela :

define Build/Compile
	LDFLAGS=-Wl,--gc-sections
	CFLAGS="-ffunction-sections -fdata-sections"	
	$(MAKE) -C $(PKG_BUILD_DIR) \
		$(TARGET_CONFIGURE_OPTS) \
		LD="$(TARGET_CC)" \
		PROGRAMS="dropbear dbclient dropbearkey scp" \
		MULTI=1 SCPPROGRESS=1

	$(MAKE) -C $(PKG_BUILD_DIR) \
		$(TARGET_CONFIGURE_OPTS) \
		LD="$(TARGET_CC)" \
		PROGRAMS="dropbearconvert"

endef

Nous allons maintenant suivre les conseils précédents en rajoutant les lignes suivantes dans la rubrique "Build/Configure" du Makefile :

$(SED) 's,^#define INETD_MODE,/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define DO_MOTD,/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define SFTPSERVER_PATH "/usr/libexec/sftp-server",/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define ENABLE_X11FWD,/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define DROPBEAR_BLOWFISH,/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define DROPBEAR_TWOFISH256,/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define DROPBEAR_TWOFISH128,/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define DROPBEAR_3DES,/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define DROPBEAR_AES128,/* & */,g' $(PKG_BUILD_DIR)/options.h
$(SED) 's,^#define DROPBEAR_MD5_HMAC,/* & */,g' $(PKG_BUILD_DIR)/options.h

Explications :

  • La première ligne demande à dropbear de ne pas être lancé par un quelconque démon réseau mais de toujours se lancer en standalone. Le mode inetd est inutile sur OpenWRT qui ne possède pas ce genre de démon.
  • La deuxième ligne désactive le message du jour. Le fichier /etc/banner nous suffira pour afficher un message.
  • La troisième ligne désactive le support d'un serveur SFTP. Nous avons déjà SCP pour copier des fichiers de manière sécurisée.
  • La quatrième ligne désactive le X11 forwarding. Par défaut, il n'y a pas d'environnement graphique accessible via SSH sur OpenWRT et nous n'en voulons pas. Autant gagner de la place en désactivant cette fonctionnalité.
  • Les autres lignes désactivent les algorithmes de chiffrage/hachage les plus faibles (bien qu'ils ne soient pas "non sécurisés"). Seuls l'algorithme de chiffrement symétrique AES 256 et les fonctions de hachage SHA1_HMAC et SHA1_96_HMAC resteront.

L'auteur de dropbear nous conseille aussi de désactiver le port forwarding et l'agent forwarding. Dans mon cas, ceux-ci me seront utiles donc je ne les désactive pas. Enfin, il nous conseille de désactiver l'authentification par mot de passe ou celle par clé publique. Vu le lien entre désactivation de telnet et changement du mot de passe de root sous OpenWRT, je ne préfère pas désactiver l'authentification par mot de passe dans le code mais plutôt dans le fichier de configuration de dropbear, une fois que j'aura importer ma clé publique dans le routeur. J'ai également conservé les deux algorithmes liés à l'authentification par clé publique, RSA et DSA car il m'arrive d'utiliser l'un ou l'autre.

Les autres options possibles (désactiver la résolution des IP en nom de domaine et créer un binaire qui combine le serveur et le client) sont déjà activées par OpenWRT : c'est l'objet des deux premières lignes de la rubrique Build/Configure.

Compiler le nouveau dropbear

Avant de compiler quoi que ce soit, fermez puis rouvrez votre session. Si vous ne le faites pas, vous aurez des erreurs sans queue ni tête (CDPATH ...). Ceci n'est à faire que la première fois, à la suite de l'installation des paquets prérequis. Certainement un problème de variables d'environnement mais je n'ai pas plus d'informations.

Quelles que soient les modifications que vous effectuez sur le Makefile, pensez à incrémenter la variable "PKG_RELEASE" de celui-ci avant de lancer la compilation. C'est une bonne pratique à prendre et ça évite des erreurs.

Vous ne pouvez pas compiler un seul paquet sans avoir compilé le toolchain d'abord. Nous allons utiliser la commande suivante afin d'avoir une interface semi-graphique nous permettant de régler les options de la compilation :

~/backfire_10.03$ make menuconfig

Dans "Target system", nous choisirons "Broadcom BCM947xx/953xx" qui correspond à la déclinaison brcm47xx. Vous pouvez choisir la déclinaison brcm2.4 ("Broadcom BCM947xx/953xx [2.4]"). Votre choix n'affectera que très peu la suite de ce billet, tout au plus quelques chemin/noms de fichiers qui changeront.

À noter que les binaires des deux branches (brcm47xx et brcm2.4) sont compatibles. En tout cas, c'est ce que j'ai pu constater.

Nous ne toucherons à rien dans "Target profile". Ni dans "Target images" ni dans" Global build settings" ni dans "Advanced configuration options" ni dans "Image configuration". Nous ne nous occuperons pas non plus des options qui permettent de compiler les trucs spécifiques (SDK, toolchain, image builder). Et dans les rubriques qui restent, nous décocherons tout (touche "n") sauf dropbear. Cela dans le but d’alléger le téléchargement et la compilation des sources.

Ensuite, lançons la compilation avec la commande :

~/backfire_10.03$ make

Si une erreur survient, vous pourrez tentez de debugger la compilation en la relançant avec le paramètre "V=99", comme cela :

~/backfire_10.03$ make V=99

Si vous compilez sur un processeur multicoeur, vous pouvez exploiter au mieux la puissance de celui-ci en utilisant le parametre "-j <nombre de coeur + 1>". Exemple pour un processeur quad core :

~/backfire_10.03$ make -j 5

Le système va télécharger les sources du toolchain et le compiler. Puis il téléchargera les sources de dropbear, les modifiera et les compilera. Enfin, il fabriquera le package ipkg de dropbear ainsi que les images des firmwares au format squashfs.

C'est le moment d'aller se chercher un deuxième café voir plus 😉 .

À la fin de la compilation, vous retrouverez le package de dropbear dans le dossier ./bin/brcm47xx/package.

Si jamais vous effectué des modifications, vous n'aurez pas besoin de tout recompiler : il vous suffira d'incrémenter la variable "PKG_RELEASE" présente dans le Makefile de dropbear et de lancer la commande suivante :

~/backfire_10.03$ make package/dropbear/compile

Les options précédemment évoquées ("-j" et "V=99" restent réutilisables).

Remplacer le binaire sur votre routeur

Ici, plusieurs méthodes sont encore possibles. Nous en exposerons deux.

Utiliser opkg

Il suffit de transférer le package sur le routeur avec la commande :

~/backfire_10.03$ scp ./bin/brcm47xx/packages/dropbear_0.52-5_brcm47xx.ipk root@192.168.1.1:/tmp

Puis de se connecter en SSH sur le routeur et d'y installer le package :

root@OpenWrt:~# opkg install /tmp/dropbear_0.52-5_brcm47xx.ipk

Vous n'avez plus qu'à relancer le serveur :

root@OpenWrt:~# /etc/init.d/dropbear restart

Cela devrait suffire mais, par prudence, je préfère rebooter le routeur.

Remplacer directement le binaire

Le package ipkg n'est qu'un fichier compressé avec gzip comme nous en informe la commande file :

file ./bin/brcm47xx/packages/dropbear_0.52-5_brcm47xx.ipk
./bin/brcm47xx/packages/dropbear_0.52-5_brcm47xx.ipk: gzip compressed data, from Unix, last modified: Sat Aug 13 15:34:30 2011

Il suffit donc de le décompresser :

~/backfire_10.03$ mkdir dropbear_uncompress && cd dropbear_uncompress
~/backfire_10.03/dropbear_uncompress$ tar -xf ../bin/brcm47xx/packages/dropbear_0.52-5_brcm47xx.ipk

Puis de décompresser le fichier data.tar.gz :

~/backfire_10.03/dropbear_uncompress$ tar -xf data.tar.gz

Votre binaire se trouve donc dans le dossier ~/backfire_10.03/dropbear_uncompress/usr/sbin. Il vous suffit de le transférer en utilisant SCP :

~/backfire_10.03/dropbear_uncompress$ scp ./usr/sbin/dropbear root@192.168.1.1:/tmp

Il ne vous reste plus qu'à remplacer le binaire en vous connectant par ssh :

root@OpenWrt:~# mv /tmp/dropbear /usr/sbin/dropbear
root@OpenWrt:~# chmod ugo+x /usr/sbin/dropbear

La deuxième ligne sert à rendre le binaire exécutable pour tout le monde. C'est les droits qui sont définis sur le fichier d'origine.

Vous n'avez plus qu'à relancer le serveur :

root@OpenWrt:~# /etc/init.d/dropbear restart

Cela devrait suffire mais, par prudence, je préfère rebooter le routeur.

Si vous venez de réussir votre première compilation croisée en suivant ces explications, félicitations 😀 .

Intégrer notre dropbear modifié dans une image de firmware au format squashfs (= créer un firmware personnalisé)

Cela permet de ne pas avoir à réinstaller votre version modifiée de dropbear (en supposant que vous ayez gardé le binaire que vous avez compilé) lorsque vous réinstallez le firmware suite à une erreur trop importante. Nous évoquerons ce point dans un prochain billet. Néanmoins, pour ceux qui veulent avoir un aperçu : Fonera 2 : Personnaliser, compiler, régénérer OpenWRT sur KubuntuBlog.

Néanmoins, la recompilation de dropbear n'est toujours pas suffisante. Combinée à la première solution, elle permet de réduire à 3 le nombre d'essais de mot de passe par connexion. Donc, 6 essais par jour pour les meilleurs bots (et toujours 2mdp/jour pour les plus mauvais). C'est toujours mieux que 20 mais ces 6 essais consomment toujours des ressources inutiles et m'énervent toujours.

Utiliser le port knocking

Présentation du concept

Encore un concept logiciel qui, à l’instar des sémaphores/jetons, prouve qu'on n’invente rien en informatique : on s'inspire de la réalité. Qui n'a jamais joué à l'espion avec un toc-toc secret pour rentrer dans le QG durant son enfance ? 😀 Comment ça je suis seul ? 😮 Menteurs !

Si vous ne savez pas ce qu'est le port knocking, voir : port knocking sur Wikipedia en.

Le port knocking est une technique que je connais depuis pas mal de temps mais que je n'avais jamais mis en pratique. Par contre, ce que je ne savais pas, c'est que le concept avait évolué pour être plus sécurisé : on a maintenant le Single Packet Authorization qui permet de transmettre la séquence de manière chiffrée. Cela empêche une attaque de l'homme du milieu qu'il est possible de faire avec un port knocking classique. A savoir aussi, une adaptation du port knocking peut également servir à dissimuler un point d’accès WiFi beaucoup plus efficacement que par le simple fait de cacher le SSID. Pour plus d'informations à ce sujet, voir : Sécuriser un réseau WiFi avec Wknock (Laurent Oudot - Blackhat 2005) - secuobs.com.

Bien que l'auteur de knockd s'en défendent, je vois le port knocking comme une sécurité par l'obscurité : on masque les ports en espérant que personne ne voit la porte d'entrée derrière le voile. C'est pour cela qu'il ne faut pas se reposer uniquement sur un logiciel de port knocking. Mais ces logiciels peuvent être utiles pour rajouter une couche de protection (et donc de failles (rappelez-vous : un logiciel sans bugs/failles est un logiciel insuffisamment testé)).

Quoi qu'il en soit, seuls les paquets wknock et knockd sont disponibles en package pré-compilés pour OpenWRT. Nous ne verrons donc pas de Single Packet Authorization à moins que quelqu'un compile le paquet pour OpenWRT, bien entendu. Pour ceux qui se le demande, knockd est évidemment sous licence libre (GNU GPL).

Édit du 25/08/2011 à 2h35 :
Attention : knockd a tendance à faire planter mon routeur lors de son démarrage. Cela arrive environ 3 fois sur 4. Cela peut être énervant donc je préfère vous prévenir. Je ne me suis pas penché sur l'origine de ce problème. Mais ne vous inquiétez pas, si vous utilisez la déclinaison brcm47xx, le watchdog se chargera de redémarrer le système pour arrêter le plantage. Mais cela prend un peu de temps (par défaut : 1 minute + le temps du boot).
Fin de l'édit

Installation

Vous devriez être habitué maintenant :

opkg update && opkg install knockd

Configuration de knockd

La configuration s'effectue depuis le fichier /etc/knockd.conf. Voici le contenu que je vous propose :

[options]
	UseSyslog
	interface	= eth0.1
 
[opencloseSSH]
	sequence		= 2222:tcp,3333:udp,4444:tcp
	seq_timeout		= 2
	tcpflags		= syn,ack
	command			= /usr/sbin/iptables -t filter -I INPUT -i eth0.1 -s %IP% -p tcp -m state --state NEW -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
	cmd_timeout		= 5
	stop_command		= /usr/sbin/iptables -t filter -D INPUT -i eth0.1 -s %IP% -p tcp -m state --state NEW -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j ACCEPT

Explications :

  • UseSyslog permet d'envoyer le journal (les tentatives) au démon syslog. Cela permet donc de grouper le journal de knockd avec les autres journaux du système, ce qui les rend plus faciles à lire et à exporter. Si vous préférez écrire le journal de knockd dans un autre fichier, utilisez la directive "logfile". À noter que rien ne vous empêche d'utiliser les deux méthodes d'enregistrement du journal en même temps.
  • interface permet de spécifier l'interface sur laquelle knockd doit écouter. Par défaut, il tente d'écouter sur toutes les interfaces et bloque sur eth0 avec le message d'erreur suivant : "could not get IP address for eth0". Ce qui est normal puisque eth0 ne peut pas être utilisé directement mais par le biais d'eth0.1 ou de br-lan puisqu'elle fait partie d'un bridge.
  • [opencloseSSH] permet de définir un service. Mettez le nom que vous voulez.Évidemment, vous pouvez définir plusieurs services, avec des séquences différentes.
  • sequence permet de définir les ports auxquels nous frapperons et dans quel ordre nous les frapperons. Comme vous le constatez, vous pouvez mixer des ports tcp et udp. Vous pouvez également mettre le nombre de ports que vous souhaitez. Je vous conseille vivement de mettre une combinaison plus robuste que celle de cet exemple.
  • seq_timeout définit le délai après lequel la séquence est abandonnée si elle n’a pas été menée à terme. Vous devriez la régler en fonction de l'activité réseau de votre routeur. En effet, s’il y a trop d'activité, les paquets du knock pourraient être dispersés et traiter trop tard.
  • tcpflags permet de spécifier à knockd de ne prêter attention qu'aux paquets marqués avec les drapeaux définis.
  • command est la commande qui sera lancée lors de la réussite du knock. Ici, elle ouvre le port SSH, seulement pour l'IP ayant réussi le knock. Si votre routeur à une IP fixe sur l’interface WAN, vous pouvez rendre la règle plus spécifique en ajoutant le paramètre "-d <ip_wan>".
  • cmd_timeout est le temps après lequel le knock n'est plus considéré comme étant valide. Ici, il faut juste spécifier assez de temps pour lancer une connexion sur le port ouvert par le knock.
  • stop_command est, bien entendu, la commande qui sera exécutée dès que le knock ne sera plus valide. Ici, elle ferme le port.

Note : j'ai honteusement pompé et adapté ce fichier de configuration depuis le man knockd.

Configuration d'iptables

Regardons la règle qui nous ouvre le port SSH : elle accepte une nouvelle connexion dans l'état NEW, en provenance d'une machine bien définie, à destination du port tcp/22 du routeur à condition que le paquet provienne de l'interface WAN. Cela signifie que les paquets suivants seront ignorés et donc la connexion perdue. Évidemment, nous considérons que la politique par défaut de la chaine INPUT est DROP. De plus, après le timeout, knockd refermera cette porte d'entrée.

Il faut donc ajouter une règle dans la chaine INPUT qui autorise les connexions établies et à destination du port tcp/22 du routeur :

iptables -t filter -I INPUT -i eth0.1 -p tcp -m state --state ESTABLISHED -m tcp --dport 22 -j ACCEPT

Même combat si vous filtrer les sorties (ce qui est une bonne pratique) : il faudra créer, dans la chaine OUTPUT, une règle qui accepte les connexions établies provenant du port tcp/22 du routeur et qui sont à destination de l'interface WAN :

iptables -t filter -I OUTPUT -o eth0.1 -p tcp -m state --state ESTABLISHED -m tcp --sport 22 -j ACCEPT

Je suis au courant que mes règles ne respectent pas les chaînes introduites par OpenWRT. Mais, n'utilisant plus ces chaines, je vous mets les chaines par défaut plutôt que de vous imposer les miennes. Libre à vous de les remplacer pour convenir à votre configuration.

Script d'init

Nous allons créer un script d'init (sous /etc/init.d). Ces scripts sont toujours pratiques pour relancer rapidement un démon (/etc/init.d/knockd restart est quand même plus pratique que les commandes kill `pidof knockd|sed "s/$$//g"` + knockd -d & ou équivalents). OpenWRT n'en intègre pas pour l'instant pour knockd. Néanmoins, nous ne créerons pas de lien symbolique vers ce script dans le répertoire /etc/rc.d/ afin que knockd ne soit pas lancé deux fois de suite (voir ci-dessous).

Voilà le script que je vous propose (/etc/init.d/knockd) :

#!/bin/sh /etc/rc.common
 
START=70

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DAEMON=/usr/sbin/knockd
NAME=knockd
DESC="Port knocking"
 
start() {

	echo "Starting $DESC: $NAME"
	logger Starting $DESC: $NAME
	`$DAEMON -d &`

}
 
stop() {
	echo "Stopping $NAME"
	logger Stopping $NAME
	kill `pidof $NAME|sed "s/$$//g"` > /dev/null 2>&1

}
 
restart() {
	echo "Restarting $DESC: $NAME... "
	stop
	sleep 2

	start
}

J'ai pompé et adapté ce script sur celui fourni par/pour dnscache.

Si vous avez configurer knockd pour utiliser syslogd, alors les commandes logger, qui, pour rappel, permettent d'enregistrer un message dans les logs du système, ne sont pas utiles puisque knockd écrira de lui-même des messages lors de ses démarrages/arrêts.

Il faudra penser à rendre ce script exécutable :

chmod ugo+x /etc/init.d/knockd

Démarrage automatique

Tout comme dnscache, knockd est inefficace après une déconnexion qui surviendrait sur l'interface WAN. Nous allons donc créer un script pour hotplugd. Pour ceux qui ne comprennent pas, voir le billet sus-linké.

C'est pour cela que l'on ne devait pas faire de lien symbolique vers /etc/init.d/knockd dans /etc/rc.d toute à l'heure : hotplud lancera knockd automatiquement au démarrage de la machine, pas besoin de le lancer une deuxième fois par erreur (voir le billet sus-linké pour des explications détaillées).

Voici donc le script pour hotplugd que je vous propose (/etc/hotplug.d/iface/30-dknock) :

#!/bin/sh
 
if [ "$INTERFACE" = "wan" ]

then
	KNOCKD_RUNNING=`ps  | grep knockd | grep -v grep`

 
	case "${ACTION:-ifup}" in
		ifup)
			[ -z "$KNOCKD_RUNNING" ] && /etc/init.d/knockd start
		;;

 
		ifdown)
			[ -n "$KNOCKD_RUNNING" ] && /etc/init.d/knockd stop
		;;

	esac
fi

Ouvrir le port ssh sur un client GNU/linux Debian

Il faut installer le logiciel knock :

# apt-get install knockd

Puis, lorsque vous voudrez vous connecter en SSH à votre routeur, il faudra exécuter la commande :

$ knock <séquence> && ssh root@OpenWRT

Par exemple, pour l'exemple configuré ci-dessus, il faudrait exécuter :

$ knock 2222 3333:udp 4444 && ssh root@OpenWRT

Pour aller plus loin

C'est ici que je m'arrête : je pense que la configuration actuelle de knockd couplée à l'utilisation d'une authentification par clé publique/privée suffira à protéger mon accès ssh. De plus knockd empêchera les attaques par bruteforce. Et si un jour la séquence est découverte, vous en serez informé dans les logs (= vous verrez les tentatives de connexions frauduleuses au démon SSH) et vous pourrez la changer.

Mais si vous voulez plus de sécurité, vous pouvez utiliser la fonctionnalité one time sequence de knockd. Il s'agit d'un fichier qui contient autant de séquences que vous voulez. Chaque fois qu'une séquence est validée, elle n'est plus acceptée. Ainsi, une séquence n'est valable qu'une seule fois (sauf exceptions). Voir l'exemple dans le man knockd. Pour vous simplifier l'utilisation de cette fonctionnalité, je vous conseille l'utilisation des knockd-utils (GNU GPL). Rien ne vous empêche dès lors d'imaginer une cron qui génère régulièrement un fichier de séquence sur l'ordinateur depuis lequel vous souhaitez accéder à votre routeur puis qui vous en stocke un exemplaire dans votre home et qui en upload une copie, via scp, sur votre routeur et relance le démon knockd pour qu'il prenne en compte ce fichier.

Rien ne vous empêche également de porter, sur OpenWRT, un démon qui fait de l'encrypted port knocking tels que fwknop (GNU GPL) ou cryptknock (flou sur la licence mais sources disponibles).

Authentification par clé publique/clé privée

C'est une fonctionnalité de base de SSH et elle permet d'éviter de la manière la plus simple du monde le problème du bruteforçage de votre mot de passe. On n'utilise plus un mot de passe mais une clé privée et une clé publique. Cette méthode permet, via les agent ssh de s'authentifier en toute sécurité sans
pour autant saisir un mot de passe à longueur de journée. Elle permet également l'automatisation de tâches (puisque la connexion ne requiert plus de mot de passe). On peut même faire de l'administration à travers plusieurs machines (voir : ssh agent forwarding).

Je ne vous expliquerai pas comment mettre en place une telle authentification puisque les gars d'openWRT l'ont déjà fait : Dropbear Public Key Authentication - OpenWRT Wiki. Si vous êtes un peu perdu, je vous conseille cette lecture : La connexion sécurisée à distance avec SSH - Site du Zéro.

Je préciserai juste que vous pouvez très bien utiliser des clés RSA d'une longueur supérieure à 1024 bits (ex. : 2048 bits). Il suffit d'utiliser un paramètre supplémentaire lors de la génération :

ssh-keygen -t rsa -b 2048

Les clés DSA doivent en revanche, avoir une longueur strictement égale à 1024 bits pour respecter le FIPS 186-2.

Si vous générer votre clé depuis puttygen, n'oubliez pas de copier le début (ex. : "ssh-rsa") sinon cela ne fonctionnera pas.

ÉDIT du 16/08/2011 à 14h50 :
Je précise également que si vous créez des comptes invités/non-root/sans droits d'administration, les clés publiques permettant de se connecter avec ces comptes devront se trouver dans le fichier ~/.ssh/authorized_keys de chacun. Exemple : vous créez un compte "toto" dont le home directory est /home/toto. La clé publique de toto devra donc se trouver dans le fichier /home/toto/.ssh/authorized_keys pour que l'authentification par clé publique soit acceptée. Source : Dropbear PublicKey Authentication for multiuser setup sur forum.openwrt.org.

Fin de l'édit

Ressources

Voici les sites sur lesquels j'ai honteusement appris, pompé, adapté mais que je n'ai pas encore cité dans ce billet :

Table des matières

Récemment, j'ai dû déployer une solution permettant de préparer rapidement les nouvelles machines entrantes dans le parc informatique. La solution retenue et installée est Clonezilla Server Édition. Ce billet se propose de vous exposer les différentes phases de ce projet : la réalisation d'un cahier des charges, le choix de la solution ainsi que son installation et son utilisation.

Situation initiale

Chaque année, 30 % à 40 % du parc informatique est renouvelé, soit environ une cinquantaine de machines. Nous devons donc préparer les nouvelles machines. Cette préparation est longue puisqu'elle comporte l'installation et la personnalisation (ex. : désactivation des services inutiles) de Windows, l'installation des pilotes de périphériques, l'installation des logiciels qui sont communs à tous les utilisateurs.

Par chance, les machines reçues la même année sont homogènes d'un point de vue de leur configuration matérielle. Il n'y a qu'à de rares occasions que les machines sont hétérogènes. Par exemple : une année, nous avions deux modèles de machine.

De ce fait, nous utilisons le principe des images disque : nous installons et personnalisons Windows sur une seule machine, nous installons les pilotes de périphériques associés ainsi que les logiciels. Puis nous réalisons une image disque que nous restaurons sur toutes les autres machines. Le logiciel de clonage est imposé : il s'agit de True Image d'Acronis.

Comme toutes les machines sont dorénavant livrées en une seule vague, nous avons décidé, après réflexion, d'automatiser le processus de restauration de l'image disque sur toutes les machines, via le réseau.

D'autres solutions que le clonage en réseau peuvent correspondre à vos besoins, notamment si vos machines ne sont pas homogènes.

Il existe des produits logiciels qui permettent le déploiement de Windows et/ou de distribution GNU/Linux et de logiciels. À titre d'exemple, nous pouvons citer Microsoft Windows Deployment Services, DRBL ou bien encore WPKG. Néanmoins ces produits ne nous conviennent pas pour deux raisons. La première : le déploiement se déroule en plusieurs phases : il faut déployer Windows, puis les pilotes de périphériques puis les logiciels. En admettant que cela soit possible (je pense au déploiement des pilotes), cela reste fastidieux. La deuxième : nous sommes déjà habitués à l'utilisation des images disques. Il s'agit donc d'une évolution de notre mode de fonctionnement plus qu'une révolution.

Nous avions aussi la possibilité de transformer les machines clientes en des clients légers. Malgré les avantages que ce modèle propose (administration centralisée, évolution limitée à l'acquisition d'un nouveau serveur, sécurité, etc.), il impose de réfléchir à de nouvelles problématiques (ex. : tolérance aux pannes du serveur). Nous n'avons pas retenu ce choix pour l'instant mais il pourrait être une évolution du SI dans un futur proche.

Nous avons décidé de ne pas configurer automatiquement les paramètres réseau après le clonage. Néanmoins, si cela vous intéresse, les outils NewSID ou SysPrep ou même des scripts batch en utilisant la commande netsh sont faits pour vous.

Concernant le BIOS, il est possible de configurer le BIOS des machines à distance mais cela est réservé, d'après ce que je sais, aux machines professionnelles. Intel Active Management Technology permet ce genre de choses.

Cahier des charges

Nous cherchons donc une solution de clonage en réseau. Les principaux critères de sélection de la solution seront :

  • Simplicité d'utilisation (l'installation peut être compliquée, mais l'utilisation au quotidien doit être simple (voir simpliste) puisqu'elle sera réalisée par des personnes moins compétentes).
  • Fiabilité.
  • Gratuité.
  • En français si possible.
  • La solution doit utiliser des composants logiciels éprouvés et doit être intégralement disponible sous une licence libre (GNU GPL, BSD, MIT, …).

Choix de la solution

Attention : la solution retenue l'est par rapport à nos besoins. Selon vos besoins, vous ne retiendrez peut-être pas la même solution.

Les solutions trouvées mais qui ne correspondent pas à nos besoins peuvent être rangées dans 4 catégories. Les logiciels présents dans ces catégories sont des exemples et la liste des logiciels présentés n'est pas exhaustive (ex. : nous pouvons rajouter UDPCast dans la catégorie des logiciels difficiles à prendre en main).

Les logiciels propriétaires et/ou payants

Exemples : Symantec Norton Ghost Solution Suite, Acronis Backup & Recovery 10 Advanced Server ...

Les logiciels obsolètes

Partimage serveur : utilitaire GNU/Linux sous licence libre (GNU GPL) permettant la création et la restauration d'image disque depuis un serveur. Il permet de copier uniquement les données utiles du système de fichier et d'ignorer, par exemple, les espaces vides. Néanmoins, le support du NTFS, système de fichiers propre aux systèmes d'exploitation de Microsoft depuis Windows XP est expérimental, ce qui le disqualifie au vu des besoins en terme de stabilité. De plus, le logiciel n'est plus maintenu. À titre d'exemple, nous pouvons citer le fait que le système de fichiers ext4, présent dans les distributions GNU/Linux depuis fin 2008 n'est toujours pas supporté par Partimage.

Les logiciels difficiles à prendre en main

G4U : utilitaire sous licence libre (BSD) permettant la création d'images disque bit par bit ce qui lui permet le support de tous les systèmes de fichiers. Mais, d'une part, il copie les espaces vides des disques durs, ce qui accroît la taille des images inutilement ainsi que la bande passante réseau et le temps de clonage nécessaires. D'autre part, l'utilisation de cet outil dans un contexte réseau s'avère difficile à mettre en place et à maintenir.

Les logiciels trop complets

OSCAR : l’Outil Système Complet d’Assistance Réseau est un logiciel sous licence libre (GNU GPL) qui permet de sauvegarder et de restaurer facilement un poste ou encore de cloner un ensemble de postes identiques. Cette solution est intéressante puisqu'elle permet de transformer chaque machine en serveur. En effet, chaque machine stocke OSCAR ainsi que l'image de son disque sur son propre disque dur. Ainsi, après toute modification sur un poste, on peut recréer l'image et la déployer sur tout le réseau. Autre fonctionnalité intéressante : il suffit de démarrer un poste sur un CD d'assistance pour restaurer automatiquement l'image disque en cas de problème. Des fonctionnalités qui sont intéressantes mais qui dépassent le cadre de nos besoins. Or, plus de fonctionnalités = plus de bugs potentiellement possibles.

La solution retenue

De ce fait, une dernière solution correspond à nos besoins : il s'agit de Clonezilla Server Édition.
Il s'agit de la version serveur du logiciel de clonage libre Clonezilla Live. Disponible sous une licence libre (GNU GPL) et en français, Clonezilla Server Édition repose sur des composants logiciels éprouvés : DRBL, Partclone, UDPCast, ... Une interface graphique est disponible, ce qui le rend simple d'utilisation au quotidien après, cependant, une installation qui peut paraître laborieuse. Il tourne sur les systèmes GNU/Linux les plus populaires (Debian, Fedora, CentOS, etc.).

Un mot de réseau

Voici le schéma réseau de notre installation de Clonezilla Server Édition :

Schéma réseau de notre installation Clonezilla Server Édition

Comme l'illustre le schéma ci-dessus, les machines qui seront clonées seront isolées, au niveau physique et logique, sur un réseau indépendant. Cela permet d'éviter qu'un ordinateur du réseau "normal"/de production dont le BIOS est mal configuré ne soit sauvegardé/restauré par erreur. Le serveur de clonage est tout de même connecté au réseau afin de pouvoir être mis à jour via internet dans l'optique de supporter un ensemble de configurations matérielles toujours plus important. Néanmoins, le serveur ne sert pas de passerelle : les machines à sauvegarder/restaurer ne peuvent pas communiquer avec les machines du réseau "normal"/de production.

Note : il n'est pas nécessaire d'avoir deux cartes réseau. En effet, une seule carte réseau peut-être utilisée mais l'utilisation du serveur sera moins simple. Pour mettre le serveur à jour, il faut brancher la carte réseau sur le réseau "normal"/de production, faire la configuration réseau (ipconfig+route ou /etc/network/interfaces), effectuer la mise à jour puis brancher la carte réseau sur le réseau de clonage puis refaire la configuration réseau à nouveau.

Dans la suite de ce tutoriel, je considérerai que votre serveur possède deux cartes réseau. Je considérerai également que votre réseau de production n'utilise pas le protocole DHCP pour réaliser la configuration réseau de manière automatique des machines. Enfin, je considérerai que la connexion internet est accessible via un serveur mandataire (proxy) uniquement et que ce serveur se trouve sur le réseau de production. Si cela n'est pas le cas, vous devrez adapter ce tutoriel à votre installation.

Installation de Clonezilla Server Édition

Dans un premier temps, nous allons installer le système d'exploitation GNU/Linux Debian puis le configurer. Ensuite, nous installerons Clonezilla Server Édition et nous le configurerons.

Enfin, une étape facultative permettra la création de raccourcis dans le menu des applications et sur le bureau afin de rendre l'utilisation de Clonezilla Server Édition plus agréable.

Installation du système GNU/Linux Debian Squeeze

Note : le système GNU/ Linux Debian a été retenu pour son large support matériel, sa philosophie du Libre et sa stabilité (selon les dépôts utilisés, évidemment). Néanmoins, un autre système GNU/Linux peut-être utilisé.

  1. Démarrez l'ordinateur et mettez le CD dans le lecteur. Le BIOS étant configuré, vous n'avez rien d'autre à faire pour démarrer sur le CD.

  2. Un menu apparaît. L'option que nous souhaitons, « Install » est déjà sélectionnée. Validez avec la touche « Entrée » de votre clavier. À chaque fois que nous écrirons « Validez », comprenez que vous devez appuyer sur la touche « Entrée ».
    Installation GNU/Linux Debian Squeeze et2

  3. Sélectionnez votre langue (« French ») avec les touches fléchées de votre clavier. Validez.
    Installation GNU/Linux Debian Squeeze et3

  4. Sélectionnez votre situation géographique (= votre pays). La France est déjà sélectionnée donc validez.
    Installation GNU/Linux Debian Squeeze et4

  5. Choisissez la disposition des touches de votre clavier. « Français (fr-lation9) » est déjà sélectionnée donc validez.
    Installation GNU/Linux Debian Squeeze et5

  6. Le système va charger des composants supplémentaires depuis le CD. Laissez-le faire.

  7. Lorsque le système vous demande votre carte réseau principale, validez simplement.
    Installation GNU/Linux Debian Squeeze et7

  8. Nos réseaux ne disposent pas du protocole DHCP. La tentative de configuration automatique va donc échouer. Vous pouvez attendre ou appuyer sur la touche « Entrée » pour l'annuler directement.
    Installation GNU/Linux Debian Squeeze et8

  9. Le système vous demande ce que vous souhaitez faire compte tenu de l’échec de la configuration automatique du réseau. Choisissez de « Ne pas configurer le réseau maintenant » et validez.
    Installation GNU/Linux Debian Squeeze et9

  10. Le système vous demande quel nom vous souhaitez donner à la machine. Nous avons choisi « clone-srv » mais peu importe. Tapez le nom et validez.
    Installation GNU/Linux Debian Squeeze et10

  11. L'assistant vous demande le mot de passe du super-utilisateur (= root). Choisissez-en un et validez.
    Installation GNU/Linux Debian Squeeze et11

  12. L'assistant vous demande de confirmer le mot de passe du super-utilisateur. Saisissez-le et validez.
    Installation GNU/Linux Debian Squeeze et12

  13. On vous demande à présent le nom complet de l'utilisateur afin de créer un compte utilisateur « simple » (sans droits avancés). Choisissez-en un, saisissez-le et validez.
    Installation GNU/Linux Debian Squeeze et13

  14. Laissez l'identifiant proposé et validez.
    Installation GNU/Linux Debian Squeeze et14

  15. Saisissez le mot de passe de l'utilisateur et validez.
    Installation GNU/Linux Debian Squeeze et15

  16. Confirmez le mot de passe de l'utilisateur et validez.
    Installation GNU/Linux Debian Squeeze et16

  17. Nous passons maintenant à la phase de partitionnement du disque dur. Laissez l'assistant vous aider à partitionner l'intégralité du disque dur (« Assisté – utiliser un disque entier ») en validant simplement.
    Installation GNU/Linux Debian Squeeze et17

  18. L'assistant vous demande quel disque doit être partitionné. Dans notre cas, nous avons un seul disque dur donc validez.
    Installation GNU/Linux Debian Squeeze et18

  19. Choisissez « Partitions /home, /usr, /var et tmp séparées » comme schéma de partitionnement. Validez.
    Installation GNU/Linux Debian Squeeze et19

  20. L'assistant vous propose une organisation du disque dur. Confirmez-la en choisissant « Terminer le partitionnement et appliquer les changements ». Validez.
    Installation GNU/Linux Debian Squeeze et20

  21. L'assistant vous demande de confirmer l'organisation du disque avant son application. Choisissez « Oui » et validez.
    Installation GNU/Linux Debian Squeeze et21

  22. Le système formate votre disque dur et installe les composants de base. Bien que vous n'ayez rien à faire, ne partez pas trop loin, car l'assistant va bientôt avoir d'autres questions auxquelles vous devrez répondre.

  23. L'assistant vous demande s'il doit analyser un CD/DVD supplémentaire afin de prendre en compte des logiciels supplémentaires. Nous n'en avons pas besoin donc validez le choix « Non ».
    Installation GNU/Linux Debian Squeeze et23

  24. L'assistant vous demande si vous souhaitez participer, de manière anonyme aux statistiques d'utilisation des logiciels. Laissez le choix par défaut, « Non », et validez.
    Installation GNU/Linux Debian Squeeze et24

  25. Le système nous demande ensuite les logiciels supplémentaires à installer. Par défaut, « Environnement graphique de bureau » et « Utilitaires standard du système » sont cochés. Nous ne voulons rien de plus. Appuyez sur la touche tabulation de votre clavier et validez.
    Installation GNU/Linux Debian Squeeze et25

  26. Le système installe les logiciels supplémentaires sans vous questionner. Patientez.

  27. L'assistant vous demande si vous voulez installer le programme de démarrage (= bootloader) sur le secteur d’amorçage de votre disque dur. Choisissez « Oui » et validez.
    Installation GNU/Linux Debian Squeeze et27

  28. L'assistant vous informe ensuite que l'installation est finie. Retirez le CD du lecteur et validez.
    Installation GNU/Linux Debian Squeeze et28

Configuration du système d'exploitation GNU/Linux Debian Squeeze

Nous allons :

  • Configurer les cartes réseau
  • Configurer les deux logiciels (apt-get/wget) servant à l'installation de Clonezilla Server Édition et à la mise à jour du système pour qu'ils utilisent le serveur mandataire.
  • Configurer le logiciel de gestion des autres logiciels (apt-get) afin de permettre l'installation de Clonezilla Server Édition.
  • Configurer le système pour que le clavier numérique soit automatiquement activé dès le démarrage.
Configurer les cartes réseau

Note : je suppose ici que vous suivez le tutoriel et que donc votre dernière action sur la machine est le redemarrage de la machine suite à la fin de l'installation de GNU/Linux Debian.

Au redémarrage de la machine, vous arrivez sur l’écran de connexion. Connectez-vous. Attention : lors de la saisie du mot de passe, le pavé numérique n'est pas activé sur certaines machines.

Configuration GNU/Linux Debian Squeeze
  1. Ouvrez un terminal (= une console) en utilisant le menu Applications -> Accessoires -> Terminal. C'est cette manipulation qu'il faudra réaliser de nouveau si vous fermez le terminal ou si nous vous demandons d'ouvrir un terminal.

  2. Obtenez les droits du super-utilisateur. Pour cela, tapez la commande :

    su -

    (le tiret n'est pas une coquille) et validez. Saisissez le mot de passe du super-utilisateur et validez. Attention : même si rien n'apparaît à l'écran, la saisie du mot de passe est prise en compte par le système.
    Configuration réseau GNU/Linux Debian Squeeze et2

  3. Tapez la commande

    gedit /etc/network/interfaces

    et validez. C'est cette opération qu'il faudra réaliser lorsque nous vous demanderons de taper une commande.
    Configuration réseau GNU/Linux Debian Squeeze et3

  4. L’éditeur de texte gedit s'ouvre en chargeant le fichier /etc/network/interfaces. Ajoutez les lignes manquantes : de

    auto eth0

    jusqu'à

    broadcast 192.168.2.255

    Il convient bien evidement d'adapter cet exemple à votre plan d'adressage
    Configuration réseau GNU/Linux Debian Squeeze et4

  5. Enregistrez vos modifications et fermez l'éditeur.

  6. Vous revenez automatiquement sur le terminal. Tapez la commande

    service networking restart

    afin que le système affecte les adresses IP aux cartes réseau.
    Configuration réseau GNU/Linux Debian Squeeze et6

  7. Enfin, pour parfaire l'installation, il faut indiquer l'adresse IP du résolveur DNS dans le fichier /etc/resolv.conf. Cela peut se faire, de manière simple, en tapant la commande :

    echo "nameserver 192.168.0.2" > /etc/resolv.conf

    Configuration réseau GNU/Linux Debian Squeeze et7

Configurer les deux logiciels (apt-get/wget) servant à l'installation de Clonezilla Server Édition et à la mise à jour du système pour qu'ils utilisent le serveur mandataire

Note : si vous n'avez pas de serveur mandataire, ces étapes sont inutiles.

  1. Tapez la commande :

    gedit /etc/apt/apt.conf

    Un fichier vide s'ouvre dans l'éditeur de texte gedit. Tapez le contenu présent sur la capture d'écran, enregistrez le fichier et quittez l'éditeur.
    Configuration proxy GNU/Linux Debian Squeeze et1

  2. Tapez la commande :

    gedit /etc/wgetrc

    Recherchez, dans le fichier, les lignes entourées en rouge dans la capture d'écran ci-dessous puis modifiez-les afin qu'elles correspondent à celles présentes dans la capture d'écran ci-dessous. Enregistrez vos modifications et quittez l'éditeur.
    Configuration proxy GNU/Linux Debian Squeeze et2

Configurer le logiciel de gestion des autres logiciels (apt-get) afin de permettre l'installation de Clonezilla Server Édition.
  1. Tapez la commande :

    gedit /etc/apt/sources.list

    Effacez le contenu du fichier et remplacez-le par celui présent dans la capture d'écran ci-dessous. Vous pouvez ignorer les lignes de commentaires, c'est-à-dire les lignes commençant par le symbole « # ». Enregistrez vos modifications et quittez l'éditeur.
    Configuration apt GNU/Linux Debian Squeeze et1

  2. Tapez la commande :

    wget http://drbl.nchc.org.tw/GPG-KEY-DRBL && apt-key add GPG-KEY-DRBL

    Vous devez obtenir un résultat similaire à la capture d'écran ci-dessous.
    Configuration apt GNU/Linux Debian Squeeze et2

Configuration du système afin que le pavé numérique soit automatiquement activé au démarrage

Note : cette étape est facultative si votre pavé numérique est automatiquement activé au démarrage.

  1. Il est nécessaire d'installer le logiciel numlockx. Cela se fait à l'aide de la commande :

    apt-get update && apt-get install numlockx

    Configuration numlockx GNU/Linux Debian Squeeze et1

  2. Dans un deuxième temps, il est nécessaire de modifier un fichier de configuration. Tapez la commande :

    gedit /etc/gdm3/Init/Default

    À la fin du fichier, avant la ligne « exit 0 », tapez le paragraphe entouré en rouge dans la capture d'écran ci-dessous. Enregistrez le fichier et fermez l'éditeur.
    Configuration numlockx GNU/Linux Debian Squeeze et2

Installation de Clonezilla Server Édition

L'installation se résume à taper la commande suivante :

apt-get install drbl

Installation Clonezilla Server Édition (apt-get)

Configuration de Clonezilla Server Édition

La configuration de Clonezilla Server Édition se fait en deux étapes. D'abord, il faut configurer le serveur. Ensuite, il faut configurer l'environnement des clients.

Configuration du serveur

La configuration du serveur peut s'effectuer de deux manières : en tapant une seule commande ou en répondant à des questions. Nous avons choisi de taper une seule commande. Néanmoins, nous vous expliquerons les différents paramètres qu'elle comprend afin que vous puissiez faire, si vous le souhaitez, l’installation en répondant à des questions. De plus, les paramètres sont mis dans l’ordre des questions afin que vous vous y retrouviez.

Dans un terminal, il faut taper la commande :

/opt/drbl/sbin/drblsrv -i -n n -c n -k 0 -g y -o 2

Signification :

  • -n n : ne pas télécharger les images disque des distributions GNU/Linux les plus utilisées. Nous n'en avons pas besoin pour utiliser Clonezilla.
  • -c n : ne pas utiliser la sortie console sur les clients.
  • -k 0 : les clients utilisent une architecture CPU i386/i486. Ne changez pas ce paramètre, car il permet d'être compatible avec le plus large matériel possible (oui, j'ai eu du matériel entre les mains qui n'est pas compatible i686 durant la mise en place de ce serveur de clonage).
  • -g y : mettre à jour le système (équivalent de apt-get dist-update).
  • -o 2 : on utilise toujours le noyau Linux provenant du dépôt, pas celui de la machine local.

La configuration se fait de manière automatique. Il ne vous reste plus qu'à attendre le message de fin « Fait ! ».

Configuration Serveur Clonezilla Server Édition

Configuration Serveur Clonezilla Server Édition

Configuration de l'environnement des clients

Cette fois-ci, l'installation se fait obligatoirement en répondant à des questions.

Avant de procéder à cette étape, nous allons changer la couleur du texte et celle de l'arrière-plan de notre terminal. Nous faisons cela car le script d'installation écrit en jaune dans le terminal, ce qui rend le texte illisible.

Pour faire cela, il suffit d'aller dans le menu Édition ? Préférences du profil. En se rendant dans l'onglet « Couleurs », il est possible de changer la couleur du texte et celle de l'arrière-plan en décochant la case « Utiliser les couleurs du thème système ».

Configuration Terminal GNU/Linux Debian

Nous pouvons maintenant configurer l’environnement des clients grâce à la commande :

/opt/drbl/sbin/drblpush -i
  1. L'assistant vous demande de saisir le nom de domaine DNS. Laissez celui qui est proposé en validant.Configuration environnement des clients Clonezilla Server Édition et1

  2. Même réponse concernant le nom de domaine NIS/YP.
    Configuration environnement des clients Clonezilla Server Édition et2

  3. Même réponse concernant le préfixe du nom des clients.
    Configuration environnement des clients Clonezilla Server Édition et3

  4. L'assistant vous demande ensuite quelle carte réseau permet d'accéder à internet. Dans notre cas, il s'agit de la carte « eth0 ». Tapez donc « eth0 » et validez.
    Configuration environnement des clients Clonezilla Server Édition et4

  5. L'assistant vous demande si vous souhaitez enregistrer les adresses MAC des clients. Comme nos clients sont temporaires, cette opération serait fastidieuse puisqu'il faut l'effectuer pour chaque nouveau client. Nous refusons donc en tapant « n » et en validant.
    Configuration environnement des clients Clonezilla Server Édition et5

  6. Le script nous demande si nous souhaitons réserver les mêmes adresses IP à nos machines clientes. Ceci se fait en enregistrant leurs adresses MAC. Néanmoins, pour la raison évoquée à la question précédente, nous refusons en tapant « n » et en validant.
    Configuration environnement des clients Clonezilla Server Édition et6

  7. On vous demande ensuite, dans cet ordre, l'adresse IP à attribuer à la première machine qui demandera une adresse, puis le nombre total de machines. Laissez les choix proposés, à savoir : 12 machines dont les IP iront de 192.168.2.1 à 192.168.2.12 inclues. Le système vous demande ensuite si vous acceptez ces choix. Tapez « y » pour confirmer et validez.
    Configuration environnement des clients Clonezilla Server Édition et7

  8. Le système vous présente un schéma du réseau ainsi constitué et vous demande de confirmer. Validez.Configuration environnement des clients Clonezilla Server Édition et8

  9. Le système vous demande ensuite de choisir le mode de démarrage des clients. Choisissez l'option « Mode DRBL SSI » en tapant « 1 » et en validant.
    Configuration environnement des clients Clonezilla Server Édition et9

  10. L'assistant vous demande ensuite le mode d’exécution de Clonezilla Server. Choisissez « Mode Clonezilla Box » en tapant « 1 » et en validant.
    Configuration environnement des clients Clonezilla Server Édition et10

  11. Le système vous demande dans quel répertoire vous souhaitez conserver les images disque réalisées. Laissez le choix par défaut (/home/partimag) et validez. Évidement, vous pouvez choisir un autre dossier (ex. : /home/clone ou bien /dev/null ;)) car le script de sauvegarde/restauration sera lancé en root et aura donc les droits de lecture/écriture dans toute l'arborescence.
    Configuration environnement des clients Clonezilla Server Édition et11

  12. Le système vous demande s'il doit utiliser les partitions swap des clients. Infirmez en tapant « n » et en validant.
    Configuration environnement des clients Clonezilla Server Édition et12

  13. L'assistant vous demande si les clients doivent utiliser un menu graphique ou textuel. Choisissez un menu textuel en tapant « 2 » et en validant.
    Configuration environnement des clients Clonezilla Server Édition et13

  14. Les deux prochaines questions concernent des mots de passe qui peuvent être mis lors du démarrage des clients. Pour les deux, répondez par la négative en tapant « n » et en validant.
    Configuration environnement des clients Clonezilla Server Édition et15

  15. Le système vous demande si vous souhaitez définir le prompt de démarrage des clients. Refusez en tapant « n » et en validant.
    Configuration environnement des clients Clonezilla Server Édition et15

  16. Même réponse concernant l'utilisation d'un arrière-plan graphique dans le menu de démarrage.
    Configuration environnement des clients Clonezilla Server Édition et16

  17. Même réponse concernant l’accès au son, au lecteur CD, etc. sur les clients.
    Configuration environnement des clients Clonezilla Server Édition et17

  18. Répondez toujours négativement à la question concernant la création d'alias.
    Configuration environnement des clients Clonezilla Server Édition et18

  19. Refusez l'utilisation des clients DRBL en mode terminal en tapant « n » et en validant.
    Configuration environnement des clients Clonezilla Server Édition et19

  20. Le système vous demande ensuite si le serveur doit faire office de passerelle vers internet. Répondez « n » et validez.
    Configuration environnement des clients Clonezilla Server Édition et20

  21. Validez ensuite la demande de confirmation.
    Configuration environnement des clients Clonezilla Server Édition et21

  22. Le système vous demande encore une fois une confirmation avant de mettre en place la configuration. Tapez « y » et validez.
    Configuration environnement des clients Clonezilla Server Édition et22

  23. Attendez le message indiquant la fin de la procédure de configuration.
    Configuration environnement des clients Clonezilla Server Édition et23

Facultatif : créer des raccourcis dans le menu des applications et sur le bureau

Dans un premier temps, nous allons créer un raccourci vers Clonezilla Server Édition. Dans un deuxième temps, nous créerons un script permettant de mettre facilement à jour tout le système ainsi qu'un raccourci vers ce script.

ATTENTION : Si vous ne souhaitez pas créer ces raccourcis, sachez que la commande pour lancer Clonezilla Server Édition est :

/opt/drbl/sbin/dcs

Par ailleurs, les commandes pour mettre à jour le système sont les suivantes (en utilisant le compte super-utilisateur évidemment) :

apt-get update && apt-get dist-upgrade
/opt/drbl/sbin/drblsrv -i -n n -c n -k 0 – g y -o 2

/opt/drbl/sbin/drblpush -i -c /etc/drbl/drblpush.conf
reboot

La première commande met à jour la liste des logiciels disponibles et, en cas de succès, met à jour tout le système. La deuxième commande reconfigure le serveur DRBL. La troisième commande reconfigure l’environnement des clients. La dernière commande permet de redémarrer le serveur afin de s'assurer qu'on utilisera bien les derniers composants (notamment le dernier noyau Linux).

Dans le reste de ce tutoriel, je considérerai que vous avez créer les raccourcis. Si ce n'est pas le cas, il faudra adapter mes écrits à votre installation.

Création d'un raccourci vers Clonezilla Server Édition
  1. Il est nécessaire d'installer un logiciel supplémentaire qui permet de lancer des commandes comme si l'utilisateur la lançant était le super-utilisateur. Il s'agit du logiciel sudo. Pour l'installer, il faut taper la commande :

    apt-get install sudo
  2. Tapez la commande :

    usermod -aG sudo clone

    Cela a pour effet d'ajouter le compte utilisateur « clone » au groupe « sudo » car uniquement les membres de ce groupe peuvent obtenir les privilèges du super-utilisateur avec sudo. Il est nécessaire de fermer la session utilisateur « clone » pour que les modifications soient prises en compte.

  3. Tapez la commande :

    gedit /usr/share/applications/clonezilla.desktop
  4. Un fichier vide s'ouvre alors dans l'éditeur de texte. Remplissez-le avec les lignes contenues dans la capture d'écran ci-dessous. Enregistrez vos modifications et quittez l'éditeur.
    Création d'un raccourci sous GNOME pour Clonezilla Server Édition

  5. Un raccourci vers Clonezilla Server est disponible dans le menu Applications ? Outils système. Vous pouvez faire glisser ce raccourci sur le bureau afin d'avoir également un raccourci sur le bureau.

Création d'un script de mise à jour de tout le système
  1. Tapez la commande :

    gedit /home/clone/maj.sh
  2. Un fichier vide s'ouvre alors dans l'éditeur de texte. Remplissez-le avec les lignes contenues dans la capture d'écran ci-dessous. Enregistrez vos modifications et quittez l'éditeur.
    Création d'un script de mise à jour pour Clonezilla Server Édition

Création d'un raccourci vers le script de mise à jour
  1. Tapez la commande :

    gedit /usr/share/applications/maj.desktop
  2. Un fichier vide s'ouvre alors dans l'éditeur de texte. Remplissez-le avec les lignes contenues dans la capture d'écran ci-dessous. Enregistrez vos modifications et quittez l'éditeur.

  3. Un raccourci vers le script de mise à jour est disponible dans le menu Applications ? Outils système. Vous pouvez faire glisser ce raccourci sur le bureau afin d'avoir également un raccourci sur le bureau.
    Création d'un raccourci pour la mise à jour de Clonezilla Server Édition

Utilisation de Clonezilla Server Édition

L'utilisation se fait en deux temps. Dans un premier temps, on sauvegarde le disque dur de la machine modèle vers une image disque. Dans un deuxième temps, on restaure l'image disque sur le reste des machines entrantes dans le parc.

Sauvegarde de la machine modèle

  1. Cliquez sur l'icône « Clonezilla Server » présente sur le bureau.

  2. Le mot de passe du super-utilisateur vous est demandé. Saisissez-le. Attention : rien n'apparaît à l'écran mais votre saisie est tout de même prise en compte.
    Sauvegarde en réseau avec Clonezilla Server Édition et2

  3. L'assistant démarre et vous demande si la manipulation concerne une partie du parc ou la totalité. L'option « une partie des clients par IP ou adresse MAC » ne fonctionnera pas car nous n'avons pas fixé les adresses IP/MAC puisque nos clients sont temporaires. Donc, validez le choix « Sélectionner tous les clients ».
    Sauvegarde en réseau avec Clonezilla Server Édition et3

  4. Nous voulons démarrer Clonezilla donc choisissez « Démarrage mode Clonezilla » et validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et4

  5. Clonezilla nous demande quel mode nous voulons. Le « mode expert » permet de définir des paramètres avancés (ex. : compression plus ou moins efficace/gourmande). Néanmoins, les options par défaut sont suffisantes donc validez le choix « mode débutant ».
    Sauvegarde en réseau avec Clonezilla Server Édition et5

  6. Nous voulons sauvegarder l'intégralité d'un disque dur donc choisissez l'option « Sauvegarde totale du disque » et validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et6

  7. Nous voulons choisir le nom de l'image disque qui sera créée maintenant afin de ne pas avoir à agir sur le client. Validez donc le choix « Entrer maintenant le nom de l'image ».
    Sauvegarde en réseau avec Clonezilla Server Édition et7

  8. Choisissez un nom pour l'image disque, tapez-le et validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et8

  9. Il faut à présent choisir le ou les disque(s) dur(s) à sauvegarder. Pas d'hésitation ici : tous nos disques ont la notation « sda » sous GNU/Linux. Dans notre cas, nous voulons sauvegarder la partition Windows et la partition de données (qui est vide) qui sont toutes deux contenues sur le premier disque. Nous allons donc taper « sda » et valider. Néanmoins, si la machine comporte 2 disques, tapez « sda sdb » pour sauvegarder les deux disques. Pour sauvegarder uniquement le deuxième disque, tapez « sdb ». Etc. .
    Sauvegarde en réseau avec Clonezilla Server Édition et9

  10. Nous souhaitons vérifier que l'image disque sauvegardée a été correctement réalisée donc validez l'option proposée « Oui, vérifier l'image sauvegardée ».
    Sauvegarde en réseau avec Clonezilla Server Édition et10

  11. À la fin du processus de sauvegarde, nous souhaitons éteindre la machine cliente. Choisissez l'option « Arrêter le client en fin de clonage » et validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et111

  12. Nous ne souhaitons pas couper l'image disque en plusieurs morceaux afin de pouvoir la répartir sur plusieurs médiums différents. Il faut donc entrer une grande valeur. Rajoutez quelques zéros et validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et12

  13. Clonezilla vous demande une confirmation. Validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et13

  14. Le terminal va se fermer.
    Vous pouvez démarrer la machine à cloner après l'avoir raccordée au réseau de clonage et avoir vérifié que son BIOS autorise le démarrage depuis le réseau.

    Aucune indication n'apparaît sur le serveur pour annoncer le début et/ou la fin du processus. Néanmoins, en observant le commutateur réseau, vous observerez une période avec un fort trafic réseau puis une période calme. Vous verrez également une forte période d'écriture sur le disque dur du serveur, suivie d'une période calme indiquant également le début et la fin de la sauvegarde. De plus, la machine cliente s’éteindra en fin de sauvegarde. Néanmoins, rien ne vous empêche de brancher un écran sur la machine cliente avant de la démarrer afin de surveiller le déroulement des opérations.

    Note : si vous n'utilisez pas les raccourcis et que vous lancez Clonezilla depuis la ligne de commande, alors vous verrez des messages s'afficher dans la console et vous indiquant la connexion de la machine au serveur ainsi que la fin de la sauvegarde.

    Si vous branchez un écran sur la machine cliente, voici ce que vous verrez :

    La machine cliente obtient une adresse IP via DHCP puis charge un menu de démarrage depuis le serveur via le réseau. Le menu s'affiche ensuite et le chargement d'un système GNU/Linux minimal, lui aussi récupéré sur le serveur, s'effectue.
    Sauvegarde en réseau avec Clonezilla Server Édition et14a

    Ensuite, le processus de sauvegarde s'effectue.
    Sauvegarde en réseau avec Clonezilla Server Édition et14b

  15. À la fin de la sauvegarde, il convient de faire le ménage dans les fichiers créés sur le serveur pour l'opération. Pour cela, cliquez sur l'icône Clonezilla Server sur le bureau. Le système vous demande le mot de passe du super-utilisateur. Tapez-le et validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et15

  16. Confirmez, là encore, que l'opération concerne toutes les machines en validant le choix proposé (« Sélectionner tous les clients »).
    Sauvegarde en réseau avec Clonezilla Server Édition et16

  17. Choisissez ensuite l'option « Arrêt mode Clonezilla » dans le menu et validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et17

  18. Les opérations de nettoyage sont effectuées et le terminal se ferme.

La création de l'image disque de la machine modèle est finie.

Restaurer l'image de la machine modèle sur les autres machines

  1. Cliquez sur l'icône « Clonezilla Server » présente sur le bureau afin de le lancer.

  2. Le mot de passe du super-utilisateur vous est demandé. Saisissez-le. Attention : rien n'apparaît à l'écran mais votre saisie est tout de même prise en compte.
    Restauration en réseau avec Clonezilla Server Édition et2

  3. L'assistant démarre et vous demande si la manipulation concerne une partie du parc ou la totalité. L'option « une partie des clients par IP ou adresse MAC » ne fonctionnera pas car nous n'avons pas fixé les adresses IP/MAC puisque nos clients sont temporaires. Donc, validez le choix « Sélectionner tous les clients ».
    Restauration en réseau avec Clonezilla Server Édition et3

  4. Nous voulons démarrer Clonezilla donc choisissez « Démarrage mode Clonezilla » et validez.
    Restauration en réseau avec Clonezilla Server Édition et4

  5. Clonezilla nous demande quel mode nous voulons. Le « mode expert » permet de définir des paramètres avancés (ex. : compression plus ou moins efficace/gourmande). Néanmoins, les options par défaut sont suffisantes donc validez le choix « mode débutant ».
    Restauration en réseau avec Clonezilla Server Édition et5

  6. Nous voulons restaurer l'intégralité du disque dur donc choisissez l'option « Restauration complète du disque » et validez.
    Restauration en réseau avec Clonezilla Server Édition et6

  7. À la fin du processus de sauvegarde, nous souhaitons éteindre la machine cliente. Choisissez l'option « Arrêter le client en fin de clonage » et validez.
    Restauration en réseau avec Clonezilla Server Édition et7

  8. Clonezilla Server vous demande ensuite quelle image disque doit être restaurée. Choisissez la bonne image dans la liste et validez.
    Restauration en réseau avec Clonezilla Server Édition et8

  9. Choisissez ensuite les disques durs à restaurer. Dans notre cas, il n'y a qu'un disque sauvegardé dans l'image mais dans le cas de plusieurs disques sauvegardés dans une même image, cette option s'avère utile pour ne pas restaurer tous les disques.
    Restauration en réseau avec Clonezilla Server Édition et9

  10. Il faut à présent sélectionner le mode de transmission réseau de l'image disque. « Unicast » consiste à envoyer l'information autant de fois qu'il y a de machines à restaurer. Ceci implique une forte charge pour le serveur et pour le réseau. « Broadcast » consiste à envoyer une seule fois l'information à l'ensemble des machines présentes sur le réseau. Libre ensuite aux machines de traiter l'information transmise. « Multicast » permet d'envoyer une seule fois l'information à un groupe de machines s'étant enregistrées dans le groupe de diffusion. Il s'agit d'une optimisation du mode broadcast puisque seules les machines ayant fait la demande reçoivent l'information. Nous allons donc utiliser le mode « multicast ». Validez cette option.
    Restauration en réseau avec Clonezilla Server Édition et10

  11. Nous devons maintenant définir la période de temps durant laquelle on attend les clients. « Clients to wait » permet de spécifier le nombre de machines qui doivent être attendues avant le lancement de la procédure. « Time to wait » permet de définir le délai d'attente des machines clientes. Ce délai commence à partir de l'enregistrement de la première machine cliente auprès du serveur. Enfin, « Clients+time to wait » est la réunion des deux modes précédents. Afin de nous assurer qu'aucun client ne sera ignoré si celui-ci ne démarre pas sur le réseau, choisissez l'option « clients to wait » et validez.
    Restauration en réseau avec Clonezilla Server Édition et11

  12. Indiquez le nombre de clients à attendre et validez.
    Restauration en réseau avec Clonezilla Server Édition et12

  13. Clonezilla vous demande une confirmation. Validez.
    Restauration en réseau avec Clonezilla Server Édition et13

  14. Clonezilla vous demande de confirmer que le matériel réseau est prêt pour la restauration multicast. Validez.

  15. Le terminal va se fermer.
    Vous pouvez démarrer les machines à restaurer après les avoir raccordées au réseau de clonage et avoir vérifié que leur BIOS autorise le démarrage depuis le réseau.

    Aucune indication n'apparaît sur le serveur pour annoncer le début et/ou la fin du processus. Néanmoins, en observant le commutateur réseau, vous observerez une période avec un fort trafic réseau puis une période calme. Vous verrez également une forte période de lecture sur le disque dur du serveur, suivie d'une période calme indiquant également le début et la fin de la sauvegarde. De plus, les machines clientes s’éteindront en fin de sauvegarde. Néanmoins, rien ne vous empêche de brancher un écran sur une des machines clientes avant de la démarrer afin de surveiller le déroulement des opérations.

    Note : si vous n'utilisez pas les raccourcis et que vous lancez Clonezilla depuis la ligne de commande, alors vous verrez des messages s'afficher dans la console et vous indiquant les machines qui se connectent au serveur ainsi que la fin de la restauration.

    Si vous branchez un écran sur une des machines clientes, voici ce que vous verrez :

    La machine cliente obtient une adresse IP via DHCP puis charge un menu de démarrage depuis le serveur via le réseau. Le menu s'affiche ensuite et le chargement d'un système GNU/Linux minimal, lui aussi récupéré sur le serveur, s'effectue.
    Restauration en réseau avec Clonezilla Server Édition et15a

    Ensuite, le processus de restauration de l'image va commencer.
    Restauration en réseau avec Clonezilla Server Édition et15b

  16. À la fin de la restauration, il convient de faire le ménage dans les fichiers créés sur le serveur pour l'opération. Pour cela, cliquez sur l'icône Clonezilla Server sur le bureau. Le système vous demande le mot de passe du super-utilisateur. Tapez-le et validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et16

  17. Confirmez, là encore, que l'opération concerne toutes les machines en validant le choix proposé (« Sélectionner tous les clients »).
    Sauvegarde en réseau avec Clonezilla Server Édition et17

  18. Choisissez ensuite l'option « Arrêt mode Clonezilla » dans le menu et validez.
    Sauvegarde en réseau avec Clonezilla Server Édition et18

  19. Les opérations de nettoyage sont effectuées et le terminal se ferme.

L'image a donc été restaurée sur toutes les machines.

Mise à jour du serveur

Interêt de la mise à jour

Il est important de mettre à jour ce serveur de clonage de manière régulière. D'une part afin de garantir une correction des bogues découverts et donc une plus grande stabilité du serveur. D'autre part afin de pouvoir supporter le matériel récent, et donc, de ce fait, les machines clientes récentes. En effet, les mises à jour, notamment celles du noyau Linux amènent un support matériel élargi.

IMPORTANT : nous n'avons pas planifié de mises à jour automatiques du système afin d'éviter que des clients ne démarrent plus du jour au lendemain sans raison apparente et afin de ne pas gêner l'utilisation du serveur. En effet, puisqu'il n'est pas allumé en permanence, la mise à jour se ferait au démarrage du serveur. Or, si l'on allume le serveur, c'est qu'on en a besoin maintenant.

Comment mettre à jour ?

Si vous avez suivi la procédure pour créer un script de mise à jour ainsi qu'un raccourci vers celui-ci dans le menu et sur le bureau, vous avez juste à cliquer sur l'un de ces raccourcis pour mettre à jour l'intégralité du système.

Si vous n'avez pas suivi la procédure, vous devez mettre à jour le système en tapant les commandes suivantes (leur signification est expliquée dans la partie concernant la création des raccourcis :

apt-get update && apt-get dist-upgrade

/opt/drbl/sbin/drblsrv -i -n n -c n -k 0 – g y -o 

 
/opt/drbl/sbin/drblpush -i -c /etc/drbl/drblpush.conf
reboot

Dans tous les cas, si le serveur vous demande une confirmation pour effectuer la mise à jour, du type « Appuyez sur Entrée pour continuer » ou équivalent, validez.

Dépannage rapide : Les machines clientes ne démarrent pas !

Problème : Une ou plusieurs machines clientes démarrent depuis le réseau, mais la sauvegarde ne se fait pas (il n'y a pas de trafic ni d’écriture sur le disque dur du serveur). Vous avez branché un écran sur une des machines clientes et vous avez constaté que le menu s'affiche, que le système commence à se charger, mais que le chargement plante en affichant des lignes incompréhensibles.

Solution : Un composant matériel essentiel de la machine n'est pas pris en charge par le système GNU/Linux minimal qui est chargé sur les machines clientes par le serveur.

La seule solution est de tenter une mise à jour du serveur. Si le composant a été pris en charge dans les versions récentes des logiciels, alors les machines clientes pourront être clonées. Pour mettre à jour l'intégralité du système, veuillez vous reporter à la section « Mise à jour de la solution ».

Si le problème n'est pas résolu après une tentative de mise à jour, considérez que vous ne pouvez pas cloner la machine avec la solution avec Clonezilla Server Édition pour le moment.

ÉDIT du 11/07/2011 à 21h45 : J'ai oublié de le préciser mais si le menu apparait sur les postes clients mais que le noyau ne s’exécute pas, alors vous avez sans doute un problème d’incompatibilité entre l'architecture CPU réelle et celle choisie lors de la configuration du serveur. Par exemple : vous avez choisi l'architecture i686 alors que vos machines clientes ont l'i586 pour architecture. Dans ce cas-là, il existe une solution : reconfigurer le serveur et l'environnement des clients en choisissant une architecture antérieure à celle choisie auparavant. J'ai rencontré ce problème et cette solution l'a résolu. Néanmoins, si cela ne fonctionne pas pour vous, même avec l'architecture i386, alors vous avez sans doute un matériel qui n'est pas supporté par le système GNU/Linux minimal qui est chargé sur les machines.

Sources documentaires

Comme d'habitude, je vous indique les sites qui m'ont aidé dans la mise en place de mon projet et dans l'écriture de ce billet.

Astuces rapides

Table des matières

On remet le couvert pour un partage des connaissances 😛 . Rien de révolutionnaire une fois encore.

Différence entre SNAT, DNAT et masquerade

Commençons par étudier les définitions de chacun de ces termes :

SNAT :
Selon le man d'iptables :

It specifies that the source address of the packet should be modified (and all future packets in this connection will also be mangled), and rules should cease being examined.

En plus clair (source : Guide de configuration Shorewall) :

Avec la SNAT, un segment interne du réseau local est configuré en utilisant des adresses de la RFC 1918. Quant un hôte A sur ce segment interne initie une connexion vers un hôte B sur internet, le firewall/routeur réécrit les entêtes IP de la requête pour utiliser une de vos adresses publiques IP en tant qu'adresse source. Quant B répond et que la réponse est reçue par le firewall, le firewall change l'adresse destination par celle de la RFC 1918 de A et transfère la réponse à A.

Masquerade :
Selon le man d'iptables :

It should only be used with dynamically assigned IP (dialup) connections: if you have a static IP address, you should use the SNAT target. Masquerading is equivalent to specifying a mapping to the IP address of the interface the packet is going out, but also has the effect that connections are forgotten when the interface goes down. This is the correct behavior when the next dialup is unlikely to have the same interface address (and hence any established connections are lost anyway).

DNAT :
Selon le man d'iptables :

It specifies that the destination address of the packet should be modified (and all future packets in this connection will also be mangled), and rules should cease being examined.

En plus clair (source : pareil que précédemment) :

Quand la SNAT est utilisée, il est impossible pour les hôtes sur internet d'initialiser une connexion avec un des systèmes internes puisque ces systèmes n'ont pas d'adresses publiques IP. La DNAT fournit une méthode pour autoriser des connexions sélectionnées depuis internet.

Pour résumer :

  • La DNAT permet de rediriger une connexion externe vers le réseau interne. Sur les *box, cela est appelé port forwarding, port mapping ou redirection de port lorsqu'il s'agit de rediriger un seul port ou DMZ lorsqu'il s'agit de transférer toutes les connections vers une machine interne.
  • La SNAT permet à plusieurs machines de partager la même adresse réseau de sortie.
  • Le Masquerade revient au même que SNAT à la différence que l'on considère que l'adresse réseau de sortie est dynamique.

Utiliser un proxy avec apt-get et wget

Il est parfois nécessaire d'utiliser un proxy HTTP pour sortir sur internet. Dans ce cas, comment mettre à jour vos logiciels ?

Pour une bonne partie des utilitaires en ligne de commande, il est possible de spécifier le proxy à utiliser via la variable d'environnement http_proxy. Voir : apt-get à travers un proxy HTTP.

Néanmoins cette méthode ne fonctionne que pour l'utilisateur ayant exporté la variable. Ce qui veut dire que la démarche suivante sera vaine :

$ export http_proxy=http://login:password@adresseduproxy:portduproxy
$ sudo apt-get update

Il faudra bien évidement faire :

$su -
# export http_proxy=http://login:password@adresseduproxy:portduproxy
# apt-get update

Note : La ligne peut changer selon si vous avez besoin d'un mot de passe pour utiliser le proxy ou selon le logiciel proxy utilisé. Voir : Linux : Mettre un Proxy pour les commandes Wget et Apt-get .

Pour appliquer la modification à chaque démarrage, il est possible de placer l'export dans le fichier ~/bashrc tout en se rappelant que les commandes lancées sous une autre identité seront vaines.

De plus, si l'utilisation du proxy concerne uniquement 2-3 logiciels, il est possible de spécifier un proxy uniquement pour ces logiciels. C'est ce que nous allons faire.

Pour apt-get

Il suffit de créer un fichier /etc/apt/apt.conf contenant quelque chose comme :

Acquire::http::Proxy "http://login:password@adresseduproxy:8080";

Pour wget

Pour que l'usage du proxy concerne tous les utilisateurs, il suffit d'éditer le fichier /etc/wgetrc et de décommenter la ligne "use_proxy = on". Ensuite, il faut modifier les lignes "http_proxy =" et "https_proxy =" selon vos besoins.

Imprimante HP : Adobe Reader n'imprime pas mes PDF !

Vous pouvez imprimer tous vos fichiers à l'exception des fichiers au format PDF. Sur certaines machines, une page d'erreur est imprimée à la place du fichier.

HP a publié un guide de dépannage. Voir : Impossibilité d'imprimer des fichiers PDF à partir d'Adobe Reader.

L'étape 1 de la solution 2 m'a permis de résoudre le problème sur une imprimante. Sur une autre imprimante, il m'a fallu modifier la mise à l’échelle pour la passer de "Ajuster à la zone d'impression" à "Aucun".

Installer les guest additions de VirtualBox dans une machine virtuelle Debian GNU/Linux Squeeze

Voir Installer Virtualbox Guest Additions sur une machine virtuelle Debian.

Installation de GNU/Linux Debian Squeeze : partman bloque à 50% sur l' « analyse des disques »

Durant l'installation de Debian, partman se bloque à 50% lors de la phase d' "Analyse des disques". Dans un premier temps, on accède à un shell. Pour cela, on redémarre l'ordinateur, on valide les paramètres linguistiques, on attend durant le chargement depuis le CD et durant le choix de la carte réseau, on appuie sur la touche "Echap" et on sélectionne "Exécuter un shell". De là, on liste les disques durs/partitions disponibles avec fdisk :

fdisk -l

On se rend compte que notre disque dur apparaît bien. Il ne s'agit donc pas d'un contrôleur de disques non supporté comme je l'ai vu dans le billet d'un forum que je ne retrouve plus.

La solution (qui ne semble avoir aucun lien avec le problème) : si vous utilisez une clé USB pour installer Debian, utilisez un CD. Je n'ai pas creusé plus loin pour déterminer l'origine exacte de ce bug.

ÉDIT du 29/09/2011 à 19h55 : D'après les retours (voir la discution dans les commentaires de ce billet), c'est les utilitaires du type Unetbootin, Universal USB Installer et autres qui provoquent ce bug.

Comme remède, je vous propose ce qui suit. Les ISOs de Debian/Debian Live sont des ISOs hybrides depuis Squeeze. Ainsi, vous pouvez télécharger l'ISO pour CD/DVD et la copier sur votre clé USB avec un bon vieux dd. Voir, entre autres : DebianEeePC HowToInstallUsingStandardInstaller sur wiki.debian.org.

Si vous n'utilisez pas une clé USB pour l'installation ou si vous n'avez pas utilisé d'utilitaire comme Unetbootin, alors je n'ai pas de solution pour vous.Fin de l'édit

Quelques astuces en vrac

Table des matières

Après cette absence, je vous livre des solutions rapides à des problèmes techniques qui me sont arrivés ou qui sont arrivés à des personnes que je connais.

MS Removal Tool

Si vous avez le malheur d'avoir à gérer des machines Windows et qu'un utilisateur peu scrupuleux colle un rogue (définition) et notamment le rogue nommé "MS Removal Tool" sur l'une d'elle, pensez à utiliser le logiciel de désinfection Rogue Killer. Pensez à changer le nom de l’exécutable pour le nom d'un processus système (exemple : winlogon.exe) afin que l'outil ne soit pas détecté et supprimé par MS Removal Tool. Vu chez Malekal

Trouver le DN (Distinguished Name) d'un Active Directory

Quand vous voulez interfacer un Active Directory (bouuh mais pas le choix) avec un autre logiciel en utilisant le protocole LDAP, vous devez fournir le DN, c'est à dire la structure (= la hiérarchie) vers un enregistrement depuis le bas de l'arbre jusqu'en haut (et dans ce sens là !). Pour décrire cette hiérarchie, vous avez des attributs (CN, OU, DC, ...) à votre disposition (voir LDAP sur Wikipédia).Voir une comparaison pour mieux comprendre (en anglais).

Je sais pas pour vous mais moi je galère toujours un peu pour "voir" le DN d'un Active Directory. Cette fois-ci, j'ai pris des captures d'écran afin de pouvoir me servir de ce cas concret maitrisé lors d'un prochain interfaçage. Évidemment, j'ai changé les noms 😉 Maintenant, je vous laisse réfléchir : dans l'image ci-dessous, quel est le DN de l'utilisateur "bob leponge" ?

Active Directory

Réponse : CN=bob leponge,OU=foyer,OU=azerty,DC=TOTO,DC=LOCAL
N'oubliez pas de decomposer le DC en utilisant le "." comme délimiteur ;).

Maintenant, supposons que vous avez des utilisateurs à authentifier. Ceux-ci se trouvent tous dans l'OU "azerty". Néanmoins, tous ne se trouvent pas dans l'OU "foyer", certains se trouvent dans l'OU "titi". Or le logiciel qui va réaliser l'authentification de vos utilisateurs à partir de l'A.D. vous demande le DN de la base. Vous l'aurez peut-être compris : il faut indiquer uniquement la base commune. Dans notre exemple, nous nous arrêterons à l'OU "azerty". Le DN de la base sera donc : OU=azerty,DC=TOTO,DC=LOCAL.

Configurer Alcasar pour authentifier les utilisateurs à partir d'un Active Directory

Avec ce que nous venons de dire ci-dessous, la configuration d'Alcasar va être simple :

Nom : adresse IP ou nom DNS du serveur Active Directory
DN de la base : OU=azerty,DC=TOTO,DC=LOCAL (à adapter à votre cas, voir ci-dessus)
Identifiant LDAP : sAMAccountName (donné par Alcasar)
Filtre de l'utilisateur : (objectClass=radiusprofile) (donné par Alcasar)
Utilisateur LDAP DN : CN=bob leponge,OU=foyer,OU=azerty,DC=TOTO,DC=LOCAL (à adapter à votre cas, voir ci-dessus)
Mot de passe de l'utilisateur : je vous laisse deviner ce qu'il faut mettre ici

Pour l'utilisateur LDAP, je vous conseille de créer un utilisateur dans votre A.D. avec juste un droit de lecture sur les OU désirées afin d'accroître, un minimum, la sécurité.

Les utilisateurs ne devront pas s'identifier avec leur nom complet mais avec leur login de session Windows inscrit dans l'A.D. Par exemple, notre utilisateur bob leponge devra se connecter avec son login "bobleponge". Voir la capture ci-dessous :

Active Directory 2

Problème de DNS avec Alcasar

Symptômes : Alcasar n'intercepte pas vos requêtes, vous n'avez pas accès à la page d'authentification ni au web. Pourtant, vous avez configuré votre client avec une IP appartenant au réseau de consultation du serveur Alcasar, avec le même masque de réseau. Le serveur Alcasar est définit comme passerelle par défaut et comme résolveur DNS sur le client.

Quand vous tapez l'adresse IP du serveur dans un navigateur, vous pouvez y accéder. Quand vous tapez l'IP d'un site web au lieu de son nom de domaine, vous pouvez également y accéder. Quand vous effectuez un nslookup ou un dig, vous obtenez un message "Accès refusé".

La solution se trouve sur le forum d'aide aux utilisateur Alcasar : PB requêtes DNS (sur le forum adullact.net).

Monter rapidement une passerelle

Je vous en ai déjà parlé brièvement mais un rappel ne fait pas de mal.

Vous êtes sur une machine sur un certain réseau, disons 192.168.182.1/24 et vous voulez accéder à une machine d'un autre réseau, disons 192.168.0.1/24. Les machines n'étant pas sur le même réseau, vous devez installer une passerelle entre les deux réseau.

Pour cela, il vous faut :

  • Un ordinateur équipé de deux cartes réseau
  • Activer l'ip forwarding : Windows (pensez à redémarrer après le changement dans le registre) | GNU/Linux. Vous n'avez pas besoin d'activer le NAT.
  • Configurer les routes sur les deux machines qui doivent communiquer.

Note : ajout des routes :

Sous une machine GNU/Linux :

route add -net 192.168.182.1/24 gw 192.168.0.254

Sous une machine Windows :

route add 192.168.182.0 mask 255.255.255.0 192.168.0.254

Si vous préférez ajouter une route vers la machine uniquement et non plus vers tout le réseau (ce que je vous conseille) :
GNU/Linux :

route add -host 192.168.182.1 gw 192.168.0.254

Windows :

route add 192.168.182.1 mask 255.255.255.255 192.168.0.254

255.255.255.255 représente le masque de réseau pour une seule machine. Utilisé notamment dans les offres ADSL *box (et les accès internet en général, même sans *box).

Effacer un mot de passe de session Windows

Plutôt que de cracker le password avec pwdump/John the Ripper ou ophcrack, je préfère effacer le mot de passe. J'y vois deux avantages : rapidité et préservation de la confidentialité. Sachant qu'un utilisateur moyen (et même parfois les "power users") mettent le même mot de passe à peu près partout, je trouve cette méthode plus convenable.

Pour effacer le mot de passe ou en définir un nouveau, j'utilise un utilitaire qui n'est pas nouveau : Offline NT Password and Registry editor. En cadeau, je vous donne également un lien vers un très bon tutoriel (pdf).

MySQL : forcer le changement du mot de passe root

En cas d'oublie de votre mot de passe root : mysql - Documentation Ubuntu Francophone, paragraphe 3.4.

Alcasar : désactiver DHCP

Si vous ne voulez pas utiliser le protocole DHCP sur votre réseau de consultation, suivez ceci : désactiver le DHCP de chilli (sur le forum adullact.net).

Alcasar : retrouver la traçabilité

Par défaut, Squid, le logiciel proxy connu et reconnu utilisé dans cet ensemble logiciel est utilisé en mode transparent. Ce mode permet de ne pas avoir à configurer les options des navigateurs et autres applications sur les postes clients pour leur indiquer à quelle adresse et sur quel port interroger le proxy. Comment ça marche ? Le serveur Alcasar étant définit comme passerelle par défaut sur les clients, il reçoit donc les paquets. Une règle dans le pare-feu Netfilter redirige les paquets à destination du port 80 (et autres selon la configuration voulue) vers le port du proxy. Ainsi, vous perdez la traçabilité dans les logs : toutes les connexions semblent venir de l'adresse locale (127.0.0.1).

Pour retrouver un semblant de traçabilité (rappelons qu'une IP peut être changée par un utilisateur et ne permet donc pas toujours de faire le lien avec un utilisateur), il suffit donc de supprimer la règle de redirection dans iptables (table nat), chaine prerouting, de vérifier que Squid écoute bien sur d'autres interfaces réseau que l'interface de bouclage et configurer les applications des postes clients pour passer via le proxy avec l'IP et le port associés.

Amon NG : Authentification des utilisateurs avec un Active Directory

Amon NG est un module du projet Eole NG.

L'authentification des utilisateurs peut-être activée dans l'outil de configuration gen_config : il faut mettre à "Oui" l'option "Activation de l'authentification Web (proxy)" dans l'onglet "Services" puis de "Valider le groupe". Un nouvel onglet "Authentification" apparaît alors afin de vous permettre de saisir les paramètres. Vous n'avez plus qu'à choisir "LDAP (Active Directory)" dans la liste des types d'authentification et à entrer vos paramètres, les mêmes que pour Alcasar (voir ci-dessus).

Néanmoins, les paramètres ne sont pas correctement écrit dans le fichier de configuration de Squid (/etc/squid/squid.conf". Il convient donc de chercher la chaîne "auth_param basic program" et d'éditer la ligne qui n'est pas commentée.

Il faut changer le paramètre "-b" qui doit représenter le DN de la base et le paramètre "-D" qui doit correspondre au DN de l'utilisateur autorisé à consulter l'Active Directory.

Dans notre exemple précédent, cette ligne ressemblerait à :

auth_param basic program /usr/lib/squid/ldap_auth -R -b "OU=azerty,DC=TOTO,DC=LOCAL" -D "CN=bob leponge,OU=foyer,OU=azerty,DC=TOTO,DC=LOCAL" -w motdepasse -f sAMAccountName=%s -h IP de l'A.D.

Je reviendrai sur Alcasar et Eole NG dans un prochain billet.