Les fichiers hosts et hostname

hostname

Le fichier /etc/hostname contient le nom d'hôte de l'ordinateur. Celui-ci est utilisé pour identifier la machine sur un réseau, et apparaît dans l'invite de commande (prompt) du terminal.

Sa modification requiert les permissions administrateur en l'éditant avec votre éditeur préféré, ou en entrant depuis un terminal :

sudo sh -c "echo nouveau_nom_du_pc > /etc/hostname"

Un redémarrage est nécessaire pour la prise en compte.

De façon temporaire on peut simplement utiliser la commande hostname :

sudo hostname nouveau_nom_du_pc
Attention à garder la cohérence avec le fichier de configuration de Samba, cf. Paramètres généraux de [global].

hosts

Le fichier /etc/hosts est consulté par tous les systèmes d'exploitations lors de l'accès à Internet, avant l'accès au serveur DNS, afin de résoudre une adresse IP. C'est un simple fichier qui associe, en les déclarant sur une même ligne, une adresse IP à un nom de domaine. Le fichier hosts est l'ancêtre des DNS utilisé sur ARPANET.

Ce fichier permet de :

  • définir les noms des machines sur un réseau (privé ou public)
  • bloquer l'accès à un site Internet
  • le rediriger
  • bloquer les publicités
  • dans une certaine mesure améliorer l'accès à certains sites.

Il peut être utile pour protéger un ordinateur, empêcher un enfant (par exemple) d'accéder à un site particulier.

La modification du fichier hosts n'est cependant utile ni fonctionnelle que pour la machine sur laquelle il se trouve, et facilement contournable. Pour définir (ou bloquer) plus largement des noms de domaine, que ce soit sur Internet ou sur un réseau privé, on préférera généralement utiliser d'autres méthodes, qui s'appliqueront à plusieurs machines (voir mDNS, NetBIOS, les serveurs DNS, le projet Pi-hole, ou PeerGuardian).

Trouver et modifier le fichier hosts

Le fichier hosts se trouve dans /etc/. Son chemin est donc /etc/hosts.

Avant modification, comme pour tout fichier du système, il est prudent d'en faire une copie de sauvegarde (ici datée de la veille) :
sudo cp -av /etc/hosts /etc/hosts.bak.$(date -d "yesterday" '+%Y-%m-%d')
Les deux premières lignes de hosts sont cruciales. N'y touchez pas si vous ne savez pas exactement ce que vous faites – au risque de rendre la machine inutilisable.

Pour modifier le fichier hosts, il faut les permissions administrateur.

En ligne de commande :

sudo nano /etc/hosts

Pour enregistrer : Ctrl+O puis Entrée. Pour quitter : Ctrl+X.

En mode graphique :

  1. Copier le fichier (sans changer son nom) dans le répertoire personnel (et pas dans un de ses sous-répertoires) :
    cp -v /etc/hosts ~
  2. Modifier cette copie avec votre éditeur de texte favori.
  3. L'enregistrer (toujours sans changer son nom).
  4. Le déplacer dans /etc/ (c'est la seule opération qui requiert les permissions administrateur) :
    sudo mv -v ~/hosts /etc/hosts
La modification de /etc/hosts est instantanément appliquée par le système.

Utiliser le fichier hosts pour bloquer des sites web

En définissant comme adresse IP une adresse autre, on peut empêcher l'accès à certains sites web, ou bloquer les publicités.

La plupart du temps c'est l'adresse de la boucle locale 127.0.0.1 qui est utilisée, cependant il est conseillé d'utiliser 0.0.0.0 à la place car il n'y a pas d'attente de timeout. Résultat : beaucoup moins de lenteurs. De plus, de cette façon, le fichier hosts n'interfère pas avec les serveurs Web qui peuvent être hébergés en local.

A priori, de trop grosses listes et/ou non adaptées peuvent ralentir l'accès au réseau. Faire des test (via la commande ping par exemple).

systemd-resolved est utilisé comme résolveur DNS par défaut et un trop gros fichier hosts (plusieurs Mo) peut bloquer complètement l'accès à internet.

Pour aller plus loin et dans une perspective de sécurité, l'utilisation d'un pare-feu ou d'un proxy peut être préférable.

Voir aussi l'utilisation de dnsmasq.

Divers fichiers hosts

On trouve sur le web des fichiers hosts listant des noms de domaine à bloquer. On peut les utiliser et les inclure dans son propre fichier /etc/hosts pour bloquer de très nombreux domaines. Cependant pour être efficace, ces listes devraient être mises à jour en permanence au moyen d'un utilitaire (voir les scripts proposés avec ces listes).

Cette liste n'est pas exhaustive. Les liens sont classés par ordre alphabétique.

D'autres listes et sources sont disponibles sur GitHub :

Voir aussi