Je suis un noob linux, et tout en recherchant une technique de blocage de site Web simple au niveau du système d'exploitation, je suis tombé sur la solution d'utiliser le fichier hôtes linux comme suit:
127.0.0.1 websiteiwanttoblock.com
127.0.0.1 anotherone.com
...
C'est agréable et simple - parfait pour mes besoins, mais voici ma question: si j'utilise souvent 127.0.0.1
à des fins de développement Web, est-ce dangereux?
Il semble que, à tout le moins, cela pourrait gâcher le projet de développement Web sur lequel je travaille actuellement? Par exemple, si Chrome/Firefox fait une demande à websiteiwanttoblock.com/api/blah
, alors cela ferait-il une demande 127.0.0.1/api/blah
et potentiellement jouer avec l'API de mon projet?
Si cela est dangereux à cet égard, existe-t-il une adresse IP "nulle" plus sûre vers laquelle je pourrais rediriger les sites bloqués? Je sais que ce n'est probablement pas une bonne pratique d'utiliser le fichier hosts comme celui-ci, mais j'aime simplement la simplicité d'éditer un fichier texte plutôt que de télécharger un package ou autre.
Edit: Oh, et j'utilise souvent le port 3000 pour les trucs de développement, mais supposons que j'utilise parfois 80, ou tout autre numéro de port disponible.
Est-ce sûr pour utiliser le /etc/hosts
fichier en tant que site Web bloquant l'adresse "null"?
Je dirais que la réponse devrait être: Non.
Si pour aucune autre raison que les demandes ne sont réellement "annulées". Ce sont toujours des demandes actives. Et comme l'OP l'indique, puisque les demandes concernent des hôtes Internet légitimes, ce type de méthode de raccourci pour rediriger les demandes vers localhost
peut interférer avec le test du code réseau dans un environnement de développement.
Une meilleure méthode pour bloquer le trafic vers et depuis certains hôtes Internet est peut-être d'utiliser iptables
qui est l'interface avec le pare-feu du noyau Linux. iptables
est la table de règles de mise en réseau par défaut pour la plupart des systèmes GNU/Linux. Certaines distributions utilisent ufw
comme frontal de iptables
.
Si vous souhaitez utiliser iptables
, voici un script simple qui DROP
tous les paquets entrants et sortants pour une liste d'adresses IP ou de noms d'hôtes avec une adresse ou un nom d'hôte par ligne contenus dans un fichier texte brut appelé ~/blocking.txt
## Block every IP address in ~/blocking.txt
## DROP incoming packets to avoid information leak about your hosts firewall
## (HT to Conor Mancone) REJECT outgoing packets to avoid browser wait
for i in $(cat ~/blocking.txt); do
echo "Blocking all traffic to and from $i"
/sbin/iptables -I INPUT -s $i -j DROP
/sbin/iptables -I OUTPUT -d $i -j REJECT
done
Échantillon ~/blocking.txt
websiteiwanttoblock.com
anotherone.com
ip.add.of.net/mask
Ne placez pas vos localhost
adresses IP dans ce fichier.
Lors de la réaffectation des hôtes Internet à localhost
dans le /etc/hosts
fichier est une technique de raccourci courante pour bloquer hôtes Internet indésirables, cette méthode présente de sérieux inconvénients de sécurité.
Demandes entrantes qui n'ont pas été intentionnellement lancées via une demande utilisateur spécifique. L'exemple le plus courant est celui des annonces sur les pages Web. Suivons les paquets entrants ...
Tout d'abord, je démarre wireshark
. Ensuite, je place la plus grande société de publicité sur Internet dans mon /etc/hosts
fichier avec cette ligne:
127.0.0.1 google.com
Et puis désactivez tous les bloqueurs de publicités dans mon navigateur, accédez à youtube
et lisez n'importe quelle vidéo au hasard.
Si je filtre mes paquets, y compris largement l'espace d'adressage IP de Google:
ip.addr==172.217.0.0/16
Je reçois toujours des paquets de Google.
Qu'est-ce que ça veut dire?
Cela signifie qu'il est possible qu'un serveur malveillant insère un logiciel malveillant qui pourrait attaquer ma plate-forme informatique via des paquets qui arrivent et sont envoyés à localhost. L'utilisation de /etc/hosts
plutôt que de supprimer ou de rejeter les paquets via les règles de pare-feu, est une mauvaise mesure de sécurité. Il ne permet pas de bloquer les paquets entrants provenant d’hôtes malveillants potentiels, ni de fournir un retour d’information efficace à des fins de dépannage.
Les requêtes sortantes qui sont envoyées à localhost
plutôt que d'être rejetées ou abandonnées par les règles de pare-feu sont toujours traitées par le noyau. Il y a quelques actions indésirables qui se produisent lorsque /etc/hosts
est utilisé plutôt que le pare-feu:
Un traitement supplémentaire se produit lorsque le paquet sortant atteint l'hôte local. Par exemple, si un serveur Web s'exécute sur l'hôte, le paquet envoyé à localhost peut être traité par le serveur Web.
Les commentaires des demandes sortantes peuvent devenir confus si le /etc/hosts
est peuplé de certains domaines.
Selon certains:
ServerFault: combien de règles iptables peut-il prendre en charge
Une limite théorique possible sur une machine 32 bits est de 38 millions de règles. Cependant, comme indiqué dans l'article référencé, comme la liste de règles iptables
s'étend, la mémoire du noyau nécessaire augmente également.
[...] tout en recherchant une technique de blocage de site Web simple au niveau du système d'exploitation, je suis tombé sur la solution d'utiliser le fichier hôtes Linux [...]
Clarifier, /etc/hosts
mappe simplement les noms d'hôte aux adresses IP. Une entrée avec 127.0.0.1
ne bloque pas votre accès au serveur, il permet simplement à votre ordinateur de résoudre localement ce nom particulier en 127.0.0.1
. Vous et le serveur pouvez toujours échanger des paquets sans restrictions.
Si j'utilise souvent
127.0.0.1
à des fins de développement Web, est-ce dangereux? Il semble que, à tout le moins, cela pourrait gâcher le projet de développement Web sur lequel je travaille actuellement?
Non, résolvant à 127.0.0.1
ne vous met pas en danger supplémentaire. En effet, un site Web peut de toute façon voir son nom résolu sur n'importe quelle adresse IP, y compris 127.0.0.1
(sauf si le serveur DNS bloque cela). Donc si evilpage.example
voulait résoudre en 127.0.0.1
, ils pourraient simplement spécifier un enregistrement DNS A
respectif et n'auraient pas à se fier à votre /etc/hosts
. (Voir aussi: Est-il sûr d'avoir un enregistrement DNS pointant vers 127.0.0.1? )
Notez que l'exécution de quelque chose sur 127.0.0.1
peut vous rendre vulnérable aux attaques DNS rebinding .
À moins que votre serveur Web ne s'exécute sur le port 80 ou 443 de votre machine locale (127.0.0.1
), cela ne devrait pas affecter votre projet Web. Si c'est le cas, alors ce pourrait être une gêne. Si vous avez envoyé une demande à http://example.com/api/
, il finirait par envoyer une demande à http://127.0.0.1/api/
. Si vous avez une ressource appelée /api/
, il finirait par recevoir la demande et donc interférer avec votre application. Mais le plus gros point sur lequel j'aimerais souligner que @Arminus a mentionné était que le /etc/hosts/
Le fichier sert à mapper les adresses IP aux noms d'hôtes. Si vous souhaitez bloquer un hôte particulier, je vous suggère d'installer un pare-feu tel que UFW ou d'utiliser le pare-feu Linux par défaut, iptables. Voici quelques liens pour vous aider à démarrer:
UFW: https://www.linux.com/learn/introduction-uncomplicated-firewall-ufw
iptables: https://www.howtogeek.com/177621/the-beginners-guide-to-iptables-the-linux-firewall/
Si vous souhaitez utiliser une adresse IP qui ne devrait pas aller n'importe où , vous pouvez utiliser les adresses IP officielles documentation :
Il est toujours possible qu'ils aillent quelque part, mais ils DEVRAIENT être ajoutés à des espaces d'adressage non routables. Comme d'autres l'ont noté, cela potentiellement ne dirigera que votre trafic vers ces adresses IP - il existe de meilleures solutions mentionnées dans les autres réponses, mais celles-ci au moins ont gagné n'allez pas sur votre machine locale .
L'ensemble de la plage d'adresses 127.0.0.0/8 est localhost, vous pouvez donc bloquer le trafic sortant pour une adresse de cette plage, par exemple 127.1.1.1.
Utilisez ensuite le fichier hosts pour rediriger le trafic indésirable vers cette adresse afin que les demandes de suivi indésirables ne gênent pas votre serveur Web exécuté sur localhost.