Первый эшелон: блокировка интернет-шлака через HOSTS


Давным-давно, когда Интернета еще не было, человечество собиралась поработить компьютерная сеть SkyNet ARPANET, к которой на пике ее расцвета было подключено аж несколько сотен компов. Поэтому список всех существующих необходимых в работе сетевых ресурсов и их адреса хранились на каждом таком компьютере, в файле HOSTS.TXT


С тех пор к уже глобальной Сети подключили еще сколько-то миллиардов компьютеров, смартфонов, телевизоров, утюгов и других устройств, которым доступны миллиарды сайтов, IP-адреса которых постоянно меняются. В общем, все стало сложно, но файл HOSTS.TXT (ныне просто hosts) остался и работает так же, как и 30+ лет назад.


Если кратко и без зауми, то работает он так: вы в браузере набираете «pikabu.ru» и ваша Windows/Android/iOS первым делом лезет в файл hosts на вашем устройстве – проверить, не сказано ли там что-нибудь про искомый сайт. Если не сказано, тогда начинаются DNS-запросы во внешний мир и прочая суета, к делу не относящаяся, а вот если сказано... то смотря что.


Нас интересует не все богатство возможностей манипуляций с этим файлом, а лишь одно из возможных (и, к слову, нецелевое) его использований – в качестве первого эшелона обороны от разнообразного интернет-шлака – рекламы, счетчиков, трекеров и прочей гнуси, любезно подсовываемой нам сегодня каждым первым сайтом.


С помощью файла hosts мы можем сказать своей операционной системе: ресурса, к которому ты собираешься обратиться, согласно инструкциям, полученным на открытом нами сайте, не существует, даже не пытайся его загрузить. Говорится это так: в «Блокноте» открывается файл hosts (обычно находится в папке C:\Windows\System32\Drivers\Etc), в него добавляется строчка, например, 0.0.0.0 googleads.g.doubleclick.net после чего файл сохраняется.

Первый эшелон: блокировка интернет-шлака через HOSTS Файл hosts, Информационная безопасность, Windows, Android, Интернет, Длиннопост, Блокировка рекламы
Все, большинство шлака от рекламной сети Google даже не загружается на наш комп, а сама Корпорация Добра лишается одной из возможностей шпионить за нами. googleads.g.doubleclick.net – это доменное имя, ресурсы с которого мы загружать не хотим. 0.0.0.0 – адрес, на который мы принудительно переадресуем все запросы к доменному имени googleads.g.doubleclick.net В данном случае этот адрес будет расценен операционной системой, как заведомо несуществующий, и запрос к нему будет сброшен.
Первый эшелон: блокировка интернет-шлака через HOSTS Файл hosts, Информационная безопасность, Windows, Android, Интернет, Длиннопост, Блокировка рекламы

Как узнать, какие доменные имена стоит заблокировать в hosts? Самый простой способ – скачать один из готовых и регулярно обновляемых списков, например, MVPS HOSTS. Плюсы – все уже сделано за вас, минусы – те же самые: в список могли добавить что-то лишнее, что именно вам не мешает и даже наоборот, а чего-то, мешающее именно вам, могли и не добавить.


Я добавляю вручную, узнавая имена мешающих мне доменов с помощью инструментов разработчика, встроенных в Firefox (в Chrome есть аналог). Инструменты/Веб-разработка/Сеть, «Обновите», клик на колонке «Домен», чтобы отсортировать список открытых страницей подключений по доменным именам.

Первый эшелон: блокировка интернет-шлака через HOSTS Файл hosts, Информационная безопасность, Windows, Android, Интернет, Длиннопост, Блокировка рекламы

И вот, на примере сайта РБК, видим кучу доменных имен, которые мы не заказывали – счетчик, рекламная сеть, снова счетчик, опять счетчик, и еще раз счетчик... (читай – шпионский модуль), и это лишь то, что на скриншот влезло, а если прокрутить вниз, там еще сюрпризы будут. Вот их-то ручками, ручками – ничего лишнего, но и никто не спрячется. Видим в колонке «Статус» пустое место вместо «200» или иного кода – все правильно сделал!

Первый эшелон: блокировка интернет-шлака через HOSTS Файл hosts, Информационная безопасность, Windows, Android, Интернет, Длиннопост, Блокировка рекламы

Если же надо отловить самовольные запросы к посторонним доменам от других программ или самой операционной системы, на помощь приходит DNSQuerySniffer. Например, хочет Windows 10 слить в сеть «телеметрию» (строго в наших же интересах, конечно), а мы не хотим: запускаем DNSQuerySniffer, смотрим в реальном времени список доменных имен, к которым идут обращения, понимаем, что сами мы в этом время не обращались ни к одному из них, открываем файл hosts, copy/paste...


В чем недостатки способа блокировки через hosts и почему мы говорим лишь о первом (а значит, не единственном) эшелоне обороны от интернет-шлаков? Первый и главный – он не предусматривает возможности использовать «маски». Т.е., если нам надо заблокировать такие доменные имена:

1.doubleclick.net

2.doubleclick.net

...

99.doubleclick.net

нам придется их все, поименно добавлять в hosts, вместо того, чтобы добавить одну «маску» – *.doubleclick.net.


Второй: hosts позволяет заблокировать доступ к доменному имени вообще, для всех сразу, без исключений. Заблокировать доступ только браузеру, а почтовому клиенту оставить – невозможно, для этого нужен полноценный межсетевой экран (файрвол).


В остальном же – одни сплошные плюсы: изменения, внесенные в файл, активируются сразу; даже большой файл hosts не нагружает систему и не приводит к зависаниям браузера, логика работы списка блокированных доменов прозрачна. И, самое главное, заблокировать домен с мусором сможет даже не самый продвинутый пользователь ПК.

Первый эшелон: блокировка интернет-шлака через HOSTS Файл hosts, Информационная безопасность, Windows, Android, Интернет, Длиннопост, Блокировка рекламы

На закуску – немного дополнительных знаний, для интересующихся. Если не нашли ответа на свой вопрос – комменты открыты ;)


1. В Android файл hosts расположен в директории: /system/etc/ Права на файл (CHMOD): 644 (-rw-r-r--) Доступ к этой директории возможен лишь при наличии root-прав. Символ переноса строки в файле: LF (про это часто забывают, копируя файл из Windows).


2. Правильно посылать нежелательные домены на три буквы 0.0.0.0 (в Windows можно для краткости просто на 0), а не на 127.0.0.1 В контексте файла hosts 0.0.0.0 означает «несуществующий адрес», обращение к которому сразу приводит к завершению соединения. А 127.0.0.1 означает вполне себе существующий адрес – он служит для имитации обращения к тому же самому компьютеру из сети. Т.е. вместо сразу «нет такого адреса» мы получим через какое-то (пусть и небольшое) время «никто не отвечает». Хотя в некоторых случаях могут и ответить, что чревато сбоем системы.


3. Файл hosts – первый, но не единственный (и даже не главный) эшелон защиты компьютера от интернет-шлака. Не стоит забывать про межсетевой экран, системы контентной фильтрации, плагины для браузера с тем же назначением, да и просто грамотную настройку программ, вылезающих в Интернет. А для ценителей – локальные прокси, позволяющие вволю поглумиться над своим трафиком, прежде чем допускать его до браузера.

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

А почему  0.0.0.0? Почему не 127.0.0.1?

раскрыть ветку (12)
1
Автор поста оценил этот комментарий

Прочтите мой текст до конца, или хотя бы самый конец.

раскрыть ветку (11)
Автор поста оценил этот комментарий

Мне интересно, в чем будет разница для пользователя? Я, например, могу настроить ресолв так, чтобы хостс игнорировался, и иногда так делаю, если ушлые разрабы начинают менять его содержимое.

раскрыть ветку (10)
Автор поста оценил этот комментарий

В большинстве случаев пользователь разницы не увидит, но если вдруг у него на локалхосте будет что-то слушающее запущено, результат непредсказуем в случае с 127.0.0.1. В случае с нулями результат будет тот же - отлуп.

раскрыть ветку (9)
Автор поста оценил этот комментарий

Очень даже предсказуем - скорее всего connection refused, или, в случае веб сервера - одна из ошибок, причем сразу. Атак есть разнца - при 127.0.0.1 отлуп на закрытый порт идет сразу, а при 0.0.0.0 - примерно полминуты (netcat). Так что, имхо, для меня (мак, линух) - сомнительное преимущество. Оставлю 127.

раскрыть ветку (8)
Автор поста оценил этот комментарий

Честно говоря, что происходит под *nix системами не в курсе, под Виндами отлуп мгновенный в обоих случаях, впрочем, под Ведром тоже.

В случае вебсервера и возврата 404 возвращается еще и контент "файл не найден, бла-бла-бла", а не покажет ли его браузер на месте нежелательного баннера/счетчика?

Ну и в любом случе, если переадресация на localhost, то "сразу" это видимый эффект, а невидимый - полноценный запрос. В случае с 0.0.0.0 (как я это вижу), запрос обрывается раньше, в случае десятков запросов, это может быть заметно визуально.

Тут #comment_143961812 коллега тоже критикует мой подход, в ходе дискуссии родилась идея переадресовывать на 256.0.0.0 ну и надо будет еще покурить доки для нахождения истины оптимального решения.

раскрыть ветку (7)
Автор поста оценил этот комментарий

"В случае вебсервера и возврата 404 возвращается еще и контент "файл не найден, бла-бла-бла", а не покажет ли его браузер на месте нежелательного баннера/счетчика?" - в теории он может его и там и там показать, вот это и интересно. Надо будет глянуть на достуге.

раскрыть ветку (3)
Автор поста оценил этот комментарий
в теории он может его и там и там показать
Не понял, где еще там? ;)

Проверил вышеописанную идею, выходит пока, что 0.0.0.0 - лучший вариант.

Иллюстрация к комментарию
раскрыть ветку (2)
Автор поста оценил этот комментарий

Трейс имхо еще не показатель, вот чем-то вроде курла было бы лучше. И курлом у меня также - на 127 сразу отваливается, connection refused, а на нули - висит и висит. Но это тоже еще ни о чем не говорит - если на загрузке контента не скажется, то пофиг. Да, вот что в итоге - 127 сразу отбивка, а на нули - отбивка по таймауту.

раскрыть ветку (1)
Автор поста оценил этот комментарий

У меня наоборот: 127 - connection refused через пару секунд, на 0 - сразу adress not available. Запрос такой: curl domainname

TCPLogView вообще не видит конннекта к 0, он даже не устанавливается, в отличие от коннекта к 127

Автор поста оценил этот комментарий

Не очень понял, как с 256.0.0.0 будет hosts работать в Винде? Может 255.0.0.0?
С нулями он работает однозначно:

Иллюстрация к комментарию
раскрыть ветку (2)
Автор поста оценил этот комментарий

Надо эксперементировать, вряд ли где-то задокументировано поведение при переадресации на невалидный адрес. Мну откровенно лень, тем более, что 0.0.0.0 и так всем хорош.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Аналогично

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку