__   _          ___               _       
   / /__| |_ ___   / / |__   ___  ___| |_ ___ 
  / / _ \ __/ __| / /| '_ \ / _ \/ __| __/ __|
 / /  __/ || (__ / / | | | | (_) \__ \ |_\__ \
/_/ \___|\__\___/_/  |_| |_|\___/|___/\__|___/

De l'efficacité du fichier hosts

	

Sommaire

  1. Descriptif
  2. Fonctionnement
  3. Pour aller plus loin
  4. Conclusion
  5. Références
  6. Autres formats
  7. Historique

1. Descriptif

Le fichier hosts est un simple fichier texte qui est d'office présent dans votre système, que vous utilisiez Microsoft Windows, GNU/Linux, Mac ou Unix. Il contient les correspondances entre adresses IP et un ou plusieurs nom(s) de domaine (comprendre par là un lien Internet comme www.example.org).

Étant donné qu'il s'agit d'un fichier universel, il est pris en compte quelque soit le navigateur que vous utilisez (Mozilla Firefox et ses dérivés, Internet Explorer, Google Chrome, Safari, Opera, Midori, et caetera) et la compatibilité de son contenu est totale.


2. Fonctionnement

Voici une ligne du fichier hosts : 127.0.0.1 www.example.org.
Cette ligne veut dire que lorsque n'importe quel programme ou outil (votre navigateur, commande ping, et caetera) qui tentera d'accéder à www.example.org sera redirigé à l'adresse du serveur ayant pour IP 127.0.0.1. Simple comme bonjour.

2.1. Généralités

Dans mon navigateur préféré, j'entre l'adresse www.example.org, que se passe t-il ? Et bien le navigateur regarde dans le fichier hosts si www.example.org est attribué à une adresse IP.

Si oui, alors www.example.org vous amènera au serveur qui a l'adresse IP définie telle que dans ce dernier.

Si non, le navigateur interrogera divers serveurs spécialisés (serveurs DNS) afin de résoudre l'adresse IP de www.example.org ; ce qu'on peut traduire par trouver, tout simplement.
Puis le navigateur affiche la page d'accueil de www.example.org.

(Voir 3. Pour aller plus loin pour des détails plus techniques)

2.2. Avantage sur les logiciels tiers

Il existe quelques outils spécialisés qui permettent de bloquer un nom de domaine ou une adresse IP. C'est le cas de beaucoup de bloqueurs de publicités (anti-pub).

L'utilisation d'un fichier hosts modifié est différent dans l'approche mais identique dans le processus. Je m'explique, ces logiciels (ou modules pour votre navigateur) contiennent des bases de données des adresses IP et noms de domaine "mauvais" (serveurs espions, axés sur la pornographie, le piratage (warez), ou tout autres sujets qui ont une réputation dite mauvaise pour les éditeurs de ces logiciels ou modules).

Lorsque ces outils se rendent comptent que votre navigateur fait une requête à un de ces serveurs, ils bloquent leur affichage. Simple, net et sans bavure (ou presque[*]).

L'avantage premier du fichier hosts sur tout ces outils est qu'il y a moins de requêtes ; c'est-à-dire qu'avec un fichier hosts bien configuré, mon navigateur n'essayera même pas d'envoyer une requête au serveur "mauvais", mais plutôt au serveur local (votre machine). Du coup il ne s'agit plus là de bloquer l'affichage de la publicité puisqu'on ne l'a pas du tout téléchargée.

D'autres avantages sous forme de liste :

[*] Même si vous ne voyez pas la publicité, votre navigateur a téléchargé et gardé en mémoire divers scripts et images.

2.3. Mise à jour

Bien entendu, un fichier hosts dépassé ne sert pas à grand chose. C'est là qu'AdZHosts tombe à pic !

AdZHosts est maintenu par Alden MagiX et n'est ni plus ni moins qu'un ficher hosts optimisé et régulièrement mis à jour. Vous pouvez le trouver sur le site officiel www.adzhosts.com et pour toute question/suggestion il y a un forum où vous pourrez poster.

Pour les utilisateurs de GNU/Linux, Unix et certainement Mac, j'ai écrit un script Perl pour automatiser la mise à jour et "purifier" ce que notre ami Alden MagiX nous a concocté (par mesure de sécurité, non pas que je ne lui fasse pas confiance). Ce script se nomme adzhosts.sh (version anglaise) ou adzhosts-fr.sh (pour la version française) et se trouve ici :

Il est simple d'utilisation et il explique tout ce qui se passe, rien n'est caché à l'utilisateur.

Bon à savoir, l'emplacement de ce fameux fichier hosts :
	GNU/Linux et Unix        : /etc/hosts
	Mac OS(X)                : /etc/hosts
	Windows 95/98            : c:\windows\[**]
	Windows NT/2000          : c:\winnt\system32\drivers\etc\
	Windows XP               : c:\windows\system32\drivers\etc\
	Windows 2008/Vista/Seven : c:\windows\system32\drivers\etc\hosts
	OS/2                     : boot\mptn\etc\hosts
	BeOS                     : /boot/beos/etc/hosts
[**] Le fichier n'existe peut être pas par défaut, un fichier HOST.SAM peut être présent, vous pourrez l'utiliser comme base de départ sans oublier de le renommer HOST sans aucune extension.

3. Pour aller plus loin

Cette partie est plus technique, vous pouvez l'ignorer sans soucis.
Grâce à l'excellent strace, voyons comment procède la commande ping.

Commande effectuée : ping www.example.org
Réponse :

PING www.example.org (192.0.32.10) 56(84) bytes of data.
64 bytes from 192.0.32.10: icmp_req=1 ttl=59 time=22.6 ms
64 bytes from 192.0.32.10: icmp_req=2 ttl=59 time=32.3 ms
64 bytes from 192.0.32.10: icmp_req=3 ttl=59 time=20.7 ms
64 bytes from 192.0.32.10: icmp_req=4 ttl=59 time=21.4 ms
64 bytes from 192.0.32.10: icmp_req=5 ttl=59 time=101 ms
^C64 bytes from 192.0.32.10: icmp_req=6 ttl=59 time=31.9 ms

--- www.example.org ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5005ms
rtt min/avg/max/mdev = 20.784/38.485/101.656/28.646 ms
Nous savons que l'adresse IP de www.example.org est 192.0.32.10.

Maintenant voyons ceci plus en détails à l'aide de strace.
Commande effectuée : strace -f -e open ping www.example.org
Réponse :
(...)
open("/etc/resolv.conf", O_RDONLY)      = 4
(...)
open("/etc/host.conf", O_RDONLY)        = 4
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
PING www.example.org (192.0.32.10) 56(84) bytes of data.
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
64 bytes from www.example.com (192.0.32.10): icmp_req=1 ttl=242 time=183 ms
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
64 bytes from www.example.com (192.0.32.10): icmp_req=2 ttl=242 time=186 ms
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
64 bytes from www.example.com (192.0.32.10): icmp_req=3 ttl=242 time=192 ms
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
64 bytes from www.example.com (192.0.32.10): icmp_req=4 ttl=242 time=186 ms
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
64 bytes from www.example.com (192.0.32.10): icmp_req=7 ttl=242 time=189 ms
^C
On voit bien que le système va voir ce qui se trouve dans le fichier hosts.

Dans /etc/hosts j'ajoute la ligne : 127.0.0.1 www.example.org
Lorsque je relance la commande sans strace, voici le résultat :
PING www.example.org (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.015 ms
64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.013 ms
64 bytes from localhost (127.0.0.1): icmp_req=3 ttl=64 time=0.014 ms
64 bytes from localhost (127.0.0.1): icmp_req=4 ttl=64 time=0.015 ms
64 bytes from localhost (127.0.0.1): icmp_req=5 ttl=64 time=0.014 ms
^C
--- www.example.org ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3997ms
rtt min/avg/max/mdev = 0.013/0.014/0.015/0.002 ms
Voyez, l'adresse IP de www.example.org est devenue 127.0.0.1.
C'est un exemple parmis tant d'autres, le fonctionnement est identique lorsque vous utilisez votre navigateur.

De part cette manipulation du fichier hosts, on soulève une faille de sécurité : si une personne mal intentionnée a accès à votre fichier hosts et qu'il a les droits suffisants pour le modifier, il pourrait aisément dérouter le site de votre banque ou votre compte courriel afin que www.ma-banque.fr vous amène ailleurs que sur le réel serveur de votre banque ; sur un serveur pirate par exemple...


4. Conclusion

Le fichier hosts est une redoutable arme contre les sites à mauvaise réputation, il est simple et rapide de le modifier et les effets entrent directement en compte. C'est un moyen efficace dont tout le monde devrait avoir connaissance, que vous soyez administrateur système ou simple utilisateur.


5. Références

Par ordre alphabétique :

Merci à Alden MagiX, Lord, fifi et Amarina du forum d'AdZHosts.

6. Autres formats


7. Historique


Contenu modifié le 01/10/2013.
moc.liamg@gitobob - Philosophie.

congregational