Почему 0.0.0.0 в / etc / hosts может блокировать определенный веб-сайт? - PullRequest
0 голосов
/ 21 июня 2020

В дальнейшем мы учитываем только ipv4. Ища способ заблокировать определенный веб-сайт без какого-либо плагина для браузера, я обнаружил этот вопрос: Блокировка веб-сайтов с помощью / etc / hosts . Согласно принятому ответу, простое добавление

0.0.0.0  <domain>

к /etc/hosts может заблокировать доступ к домену <domain>. И это сработало как шарм. Но почему это так работает?

Эксперименты

Предположим, веб-сайт X.com загружает некоторые скрипты из Y.com, и я добавил 0.0.0.0 Y.com в /etc/hosts, чтобы заблокировать скрипты для быть загруженным.

  1. Когда я напрямую набираю Y.com или 0.0.0.0 в адресной строке браузера, он становится маршрутизируемым и ведет меня на мой локальный веб-сайт localhost:8080.

  2. Однако, когда я получаю доступ к X.com, Y.com полностью блокируется. Под "полностью" я подразумеваю, что к Y.com невозможно получить доступ не из-за тайм-аута , ни Not Found , ни Forbidden ; насколько я проверяю Network Monitor в Firefox, браузер даже не пытается получить доступ к Y.com в первую очередь † 1 , что подразумевает, что значение 0.0.0.0 здесь отличается от первый результат выше.

† 1: Или, возможно, он действительно пытается получить доступ к Y.com, но немедленно возвращает без результата. Если это так, я не понимаю, почему он возвращается мгновенно, не дожидаясь (десятков) секунд для тайм-аута.

Вопросы

  1. В этом случае, кто интерпретирует 0.0.0.0? Браузер?

  2. Почему косвенная ссылка на 0.0.0.0 (эксперимент 2) означает «это должно быть заблокировано», а прямой доступ к 0.0.0.0 (эксперимент 1) означает «это должен быть подключен к локальному веб-сайту "?

0.0.0.0 - Википедия дает мне подсказку, но не объясняет в в каком контексте выбрано определенное значение.

Среды :

Firefox 77.0.1 на Arch Linux

Моя догадка

После публикации этого вопроса я провел несколько тестов, чтобы найти один факт:

Хотя во многих сообщениях в блогах и ответах на этом веб-сайте говорится, что 0.0.0.0 <domain> можно использовать для блокировки <domain>, на самом деле он не блокирует домен. Собственно говоря, это зависит от обстоятельств. Как и обычная запись в /etc/hosts, 0.0.0.0 <domain> просто преобразует доступ к <domain> в доступ к 0.0.0.0.

Потому что

  1. 0.0.0.0 то же самое, что localhost в этом контексте † 2

  2. , а доступ к 0.0.0.0 происходит мгновенно † 3

, , если вы не используете веб-сервер на хосте , 0.0.0.0 <domain> эффективно блокирует доступ к <domain>.

Когда вы используете веб-сервер,

  1. Доступ к <domain>/<file> эффективно блокируется, если localhost/<file> не существует. Обратите внимание, однако, поскольку доступ к веб-серверу осуществляется и он возвращает 404, многочисленные обращения к <domain>/<file> могут замедлить работу вашего компьютера.

  2. Если localhost/<file> действительно существует, наблюдается неожиданный результат. Если вам повезет, это просто нарушит макет веб-сайта. Но в целом это может быть очень опасно.

Итак, как я предполагаю, 0.0.0.0 <domain> - не более чем обходной путь; он работает в ограниченных условиях.

† 2: Я пока не понимаю, почему. Предполагаемая причина: Что делает Chrome / server, когда я использую 0.0.0.0 вместо localhost в браузере?

† 3: Например , ping -c 1 0.0.0.0 возвращается через мгновение. Не знаю почему. (Возможно, просто потому, что доступ к локальному интерфейсу очень быстрый?)

1 Ответ

1 голос
/ 21 июня 2020

Я здесь на Artix linux. 0.0.0.0 для меня не маршрутизируется. В связанной статье в Википедии говорится, что 0.0.0.0 - это «немаршрутизируемый мета-адрес». Похоже, что что-то в вашей конфигурации делает что-то (возможно) нестандартное, что приводит к прямому запросу 0.0.0.0 или веб-сайту, привязанному к этому ip в / etc / hosts, идущему на localhost. Это имеет смысл, если это «мета-адрес», даже если он «немаршрутизируемый». «мета-адрес» подразумевает некоторую гибкость в отношении ссылки. «немаршрутизируемый» кажется очень негибким понятием. Но если вы посмотрите на этот пост SE, он может быть немного более расплывчатым, чем это:

https://networkengineering.stackexchange.com/questions/40328/what-is-a-routable-ip

Я бы предположил, что «немаршрутизируемый» в общий случай просто означает, что у вас не может быть машины, маршрутизирующей пакеты с использованием этого адреса. Нет причин, по которым простое перенаправление на localhost должно вызывать какие-либо проблемы. Но, как я уже сказал, на моей машине artix linux он, кажется, просто ни на что не указывает - и это, вероятно, стандартное поведение.

EDIT - согласно RF C 8190 0.0.0.0 относится к " эта сеть ». Более старый RF C 6890 говорит, что это означает «этот хост, эта сеть»:

https://tools.ietf.org/html/rfc8190

https://tools.ietf.org/html/rfc6890

Итак, похоже, что использование 0.0.0.0 для ссылки на localhost совершенно верно.

...