Les fichiers Hosts et hostname

hostname

Le fichier /etc/hostname contient le nom du PC. Il faut le modifier avec les droits administrateur en l'éditant avec votre éditeur préféré ou en tapant :

 sudo 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 du même nom :

 sudo hostname nouveau_nom_du_pc

Attention à garder la cohérence avec le fichier de configuration de Samba, cf. samba_smb.conf paramètres généraux [global]

hosts

Le fichier hosts est utilisé sous tous les systèmes d’exploitations lors de l’accès à Internet, ce fichier est consulté avant l’accès au serveur DNS. C’est un simple fichier qui contient sur la même ligne une adresse IP et parfois le nom de domaine.

Ce fichier permet de bloquer l’accès à un site Internet, de le rediriger, de bloquer les pubs et d’améliorer l’accès à des sites en fonction de la configuration de celui-ci. Il peut être utile pour protéger votre ordinateur, empêcher un enfant (par exemple) d’accéder à un site particulier.
Ce fichier peut aussi servir à définir les noms des machines sur un réseau local (ou pas), cf. renseigner_le_fichier etc hosts

Le fichier hosts est l’ancêtre des DNS utilisé dans ARPANET - servant à adresser les adresses des réseaux.

  • Voir également PGLD, pour bloquer à partir de la liste 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-système, il est prudent d'en faire une copie de sauvegarde, datée :
sudo cp -av /etc/hosts /etc/hosts.<date-de-la-veille>

Les deux premières lignes de hosts sont cruciales, n'y touchez pas si vous ne savez pas exactement ce que vous faites - risque de rendre votre session inaccessible.

Pour modifier le fichier hosts, il faut les droits d'administrateur.
En ligne de commande :

sudo nano /etc/hosts

Pour enregistrer : Ctrl o puis Entrée. Pour quitter : Ctrl x.


En mode graphique :
…jusqu'à la version 17.04 incluse,
……..dans les variantes Kubuntu ou Neon, faites

kdesudo xdg-open /etc/hosts

……..et dans les autres variantes, faites

gksudo xdg-open /etc/hosts

…à partir de la 17.10 (mais cette méthode est utilisable dans toutes les versions) :

  • Copier le fichier (sans changer son nom) dans votre home (et pas dans un de ses sous-répertoires) :
cp -v /etc/hosts ~
  • Modifier cette copie dans votre home avec votre éditeur de texte favori ;
  • L'enregistrer (toujours sans changer son nom) ;
  • Le déplacer dans /etc/ (c'est le seul moment qui nécessite les droits d'administrateur) :
sudo mv -v ~/hosts /etc/hosts
La modification de /etc/hosts, est instantanément appliquée par le système, sans autre intervention de votre part. (Testé avec Trusty).

En définissant comme adresse IP, une adresse autre, on peut éviter d'aller sur certains sites web ou par exemple, 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 votre accès au réseau. Faire des test (via la commande ping par exemple).

A partir d'Ubuntu 17.04, 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 palier à ce problème, il suffirait de supprimer systemd-resolved. Plus d'infos dans cette discussion.

Pour aller plus loin et dans une perspective de sécurité, l'utilisation d'un pare-feu est préférable.
Voir aussi l'utilisation de dnsmasq.

Divers fichiers hosts

Liste non exhaustive. Liens classés par ordre alphabétique.

D'autres listes et sources sont disponibles ICI, ICI ou encore ICI.

Pour Windows, il y a HostsMan (freeware), SpywareBlaster (gratuit pour les particuliers et l'éducation) et Spybot (freeware) qui ont des listes à leur disposition. Il serait utile de les récupérer et de les partager.

Il est théoriquement possible de convertir des listes peerguardian pour mettre à jour hosts - mais autant utiliser PGLD qui fait déjà cela automatiquement.

Pré-requis

Être familiarisé avec les commandes de bases.

Penser à sauvegarder le fichier hosts original ou précédent avec :

cd /etc/
cp hosts hosts.backup

Installation et mise à jour automatique

Je vous propose une méthode simple de mise à jour automatique mensuel du fichier host.

Dans une console :

sudo touch /etc/cron.monthly/hosts ; sudo xdg-open /etc/cron.monthly/hosts

Collez-y le code ci-dessous ("ubuntu" est à changer par le nom de votre machine) :

#!/bin/bash
wget --directory-prefix=/tmp  http://winhelp2002.mvps.org/hosts.txt ||exit
mv /tmp/hosts.txt /etc/hosts
echo "127.0.1.1 ubuntu" >> /etc/hosts
echo "::1 ip6-localhost ip6-loopback" >> /etc/hosts
echo "fe00::0 ip6-localnet" >> /etc/hosts
echo "ff00::0 ip6-mcastprefix" >> /etc/hosts
echo "ff02::1 ip6-allnodes" >> /etc/hosts
echo "ff02::2 ip6-allrouters" >> /etc/hosts

Fermez l’éditeur de texte puis exécutez :

sudo chmod +x /etc/cron.monthly/hosts

et voilà la mise à jour est automatique !

Remarque :

- ce script ne modifie rien si il n’arrive pas à télécharger

- ce script s'adapte en ajoutant les lignes par défaut du fichier de Ubuntu

- ce script est exécuté automatiquement tout les mois sans intervention de l'utilisateur

- il est possible de l’exécuter n’importe quand avec "sudo /etc/cron.monthly/hosts"

Désinstallation

Il faut tout simplement supprimer le fichier hosts qui a été remplacé et remettre l’original précieusement sauvegardé :)

Site en rapport

Vous l’aurez certainement remarqué, le fait de blacklister un site dans le fichier HOST provoque des erreurs d’affichage assez désagréables lors de la navigation.

En effet, le fichier HOST redirige l’adresse du site indésirable vers une adresse nulle (0.0.0.0) ou bien votre ordinateur (127.0.0.1). Votre PC n’est donc pas capable de répondre à la requête car aucun serveur HTTP n’est actif ou dans le cas contraire, votre serveur HTTP ne peut servir l’URL demandée car elle n'existe pas sur votre ordinateur.

La méthode de contournement consiste à lancer un serveur HTTP bidon qui va répondre à toute les requêtes en envoyant comme réponse un code HTML défini par l'utilisateur.

Installation

- Installer les dépendances

sudo apt-get install libcurl4-gnutls-dev 

- Télécharger et décompresser l’archive (le lien semble mort le 03/01/2014)

wget http://fab.homelinux.org/nullsrvd/nullsrvd.tar.gz
tar xzvf nullsrvd.tar.gz

- Compiler

cd nullsrvd
make

- Installer

sudo make install

Utilisation

Le serveur nullsrvd est un démon, c’est-à-dire que celui-ci se lance tout seul dès le démarrage de la machine

Arrêt / Démarrage

sudo service nullsrvd start|stop

Consultation de la log

cat /var/log/nullsrvd/nullsrvd.log

Changer le code HTML renvoyé par nullsrvd

Editer le fichier /etc/nullsrvd/response.html

Changer le chemin d'accès du fichier HTML renvoyé par nullsrvd

Editer le fichier /etc/default/nullsrvd

Rajouter des entrées hosts utilisateur

Si vous souhaitez que nullsrvd rajoute des entrées au fichier hosts après l'installation d'un nouveau fichier issu d’AdzHosts, éditer le fichier /etc/nullsrvd/user.hosts

Désinstallation

Penser à arrêter nullsrvd avant sa désinstallation.

sudo make uninstall

Problèmes / Remarques

S’adresser à darunia

Si vous hébergez un site sur votre ordinateur, il sera accessible à l’adresse 127.0.0.1, mais vous ne voulez pas forcément que ce soit ce site qui s’affiche pour une url bloquée par le fichier hosts.

La première chose à faire est une page en php qui va analyser l'adresse et rediriger vers votre site si l'adresse appartient à une liste définie (localhost, votre ip locale, le nom de la machine…) et rediriger vers une page bloquant l’accès au site pour toutes les autres adresses (soit celles contenues dans le fichier host).

La page index.php

La page index.php sera la page chargée par défaut si vous indiquer uniquement un nom de domaine sans indiquer de fichier, c'est donc celle la qui va analyser l'adresse

<!DOCTYPE html> 
<html>
    <head>
        <meta charset="utf-8" />
        <title>index.php</title>
    </head>

    <body>
  

<?php
$monUrl = "http://".$_SERVER['HTTP_HOST']."/";
switch ($monUrl)
{
case "http://127.0.0.1/":
include ('./mapagedaccueil.php');
break;

case "http://192.168.1.95/":
include ('./mapagedaccueil.php');
break;

case "http://localhost/":
include ('./mapagedaccueil.php');
break;

default:
include ('./bloque.php');

}
			
?> 
	
    </body>
</html>

Cette page va donc récupérer l’adresse courante avec $_SERVER['HTTP_HOST'] et inclure la page qui convient. Bien sûr, il faut remplacer 192.168.1.95 par votre adresse ip locale et rajouter si besoin d’autres case si vous voulez que d’autres adresses affichent votre site. Elle affichera soit la page bloque.php que nous verrons au chapitre suivant soit votre page d’accueil, qui s’appelait index.php avant de suivre ce tuto et que vous devez renommer en mapagedaccueil.php ou un autre nom mais il faudra adapter la page index.php et y mettre le même nom.

La page bloque.php

C’est cette page qui s’affichera pour toute les adresses qui ne sont pas précisément recensées. Elle s’affichera donc pour les url contenues dans le fichier host. Elle indique le nom du site, affiche un sens interdit, explique que la page est bloquée et redirige vers une autre page après quelques secondes.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Page bloque par le fichier host</title>

    </head>

<img src="./sens-interdit.jpg" alt="sens interdit" />

    <body>
    

 

<?
$monUrl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo "<h1> La page que vous tentez de charger </p>"  .$monUrl." est bloquée.</h1> </p>";


echo "vous allez etre redirigez vers duckduckgo dans 5s</p>";

header ("Refresh: 5;URL=https://duckduckgo.com/");



?> 
	
    </body>
</html>

Vous pouvez adapter le temps avant la redirection en secondes, changez l'adresse… Vous pouvez maintenant afficher une page différente en fonction que se soit l'adresse du site local ou une autre même si elle possède la même adresse ip dans votre fichier host.


Contributeurs principaux : Fl4t, PsychedÉric, gb1yop, darunia, anonyme68 (suppression de paragraphes et des scripts étranges pour une meilleure clarté).

Basé sur forum.

  • hosts.txt
  • Dernière modification: Le 15/02/2019, 10:01
  • (modification externe)