Блокирование контента при помощи DNS: прошлое, настоящее, будущее

Эта статья по сути является текстовой калькой с выступления Андрея Мешкова, сооснователя и CTO AdGuard, на коференции Ad Blocker Dev Summit 2021. Если вы не хотите читать “много букв”, уделите 30 минут просмотру этого видео (на английском языке).

Сегодня к интернету подключено абсолютно всё — от телевизора до умных лампочек, от мобильных устройств до умных автомобилей. А где есть интернет, есть трекеры и реклама. Верно? Получается, что один только браузерный блокировщик не сможет защитить вас. В его силах лишь предоставить вам крошечное окно в «лучший интернет» без агрессивных и навязчивых баннеров, пытающихся завладеть вашим вниманием. Но что, если вы хотите расширить это «окно»?

В этом случае пристегните ремни и приготовьтесь к увлекательному путешествию по прошлому, настоящему и будущему DNS-фильтрации. Почему? Потому что DNS — это ответ!

Что такое блокировка на уровне DNS

Чтобы освежить ваши знания: аббревиатура DNS расшифровывается как Domain Name System, т.е. «система доменных имен». DNS — своего рода «адресная книга» интернета, цель которой состоит в переводе имён веб-сайтов в нечто понятное браузерам, то есть в IP-адреса. Таким образом, каждый раз, когда вы заходите на веб-сайт, ваш браузер отправляет запрос на DNS-сервер (который обычно предоставляется вашим интернет-провайдером), чтобы определить IP-адрес веб-сайта. В ответ обычный DNS-резолвер просто возвращает IP-адрес запрошенного домена.

Ваше устройство всегда использует какой-либо DNS-сервер для получения IP-адреса доменного имени, к которому обращается приложение.

К счастью для нас с вами, существуют DNS-серверы, обеспечивающие фильтрацию трафика и блокировку контента. Обычно это делается с помощью техники «DNS Sinkholing», суть которой заключается в выдаче немаршрутизируемых адресов для заблокированных доменов. Когда ваше устройство отправляет «плохой» запрос, будь то реклама или трекер, DNS-сервер отвечает IP-адресом 0.0.0.0 для заблокированного домена. Получается, что приложение просто не может подключиться к этому адресу, и мы получаем желаемый результат — заблокированое подключение.

Пример использования DNS-сервера для блокировки доступа к домену

DNS-сервер также может вернуть такие ответы: NXDOMAIN (означает, что домен не существует) или REFUSED (означает, что сервер отказался обрабатывать запрос). Вы скорее всего не заметите разницы между ними, но некоторые старые устройства могут неверно интерпретировать REFUSED и попытаться использовать резервный DNS-сервер.

Прародитель DNS — HOSTS-файл

Удивительно, но блокировка на уровне DNS — самый старый известный подход к блокировке рекламы. Как такое возможно?

Ещё в те дни, когда интернет был молод и назывался ARPANET, была разработана система именования, которая сопоставляла IP-адрес компьютера с уникальным идентификатором на основе ASCII. Имея всего несколько компьютеров, подключенных к ARPANET, Центр сетевой информации Министерства обороны США поддерживал файл с именем HOSTS.TXT — главный список адресов всех компьютеров и их хост-имён. Системные администраторы периодически загружали обновленный HOSTS.TXT. Зная имя компьютера ARPANET, можно было просто посмотреть его IP-адрес в файле HOSTS.

Так выглядел файл HOSTS.TXT, который использовался во времена ARPANET

Но вскоре стало ясно, что растущее число хостов создает слишком большую нагрузку на компьютер NIC (Network Information Center). Все хотели иметь свои компьютеры в ARPANET, но им приходилось ждать, пока организация NIC обновит HOSTS.TXT. Возникла необходимость в альтернативном решении, поэтому в конце 1987 года Пол Мокапетрис разработал систему доменных имён.

Но файл HOSTS не был забыт. Вскоре после появления первой рекламы в интернете люди обнаружили, что HOSTS.TXT можно использовать в качестве блоклиста для предотвращения загрузки рекламы (такой подход очень напоминает технику «DNS Sinkholing», не так ли?) После этого некоторые энтузиасты стали составлять первые блоклисты и делиться ими со всеми желающими. Есть несколько ярких примеров блоклистов с более чем 20-летней историей, которые активно развиваются и по сей день, например, блоклисты Питера Лоу, блоклисты Стивена Блэка или хосты Дэна Поллока.

Фрагмент блоклиста Питера Лоу

Когда появилась первая версия Adblock для Firefox, некоторые пользователи просто не могли понять его предназначение. Их всё устраивало в том, как работал файл HOSTS.

Скриншот записи на форуме, 2003 г.

Однако файлы HOSTS имеют некоторые недостатки, которые не так просто устранить.

Распространение обновлений. Не существует удобного способа предоставления обновлений файла HOSTS пользователям. Для этого нужно либо иметь специальное программное обеспечение, либо быть очень терпеливым и периодически делать это вручную.

Большие размеры. Файлы HOSTS становятся просто огромными из-за того, в них нельзя использовать подстановочные знаки и необходимо прописывать каждый домен. Синтаксис файла HOSTS просто не предназначен для использования таким образом. Взгляните на рисунок ниже, где показан один из самых больших блоклистов — Energized Unified. Как вы можете видеть, он содержит более 700 тысяч доменов и весит почти 21 мегабайт. Распространять файл размером 21 Мб среди миллионов пользователей ежедневно — это уже серьезная проблема.

Блоклист Energized Unified

Публичные DNS-серверы, блокирующие рекламу, появились как перспективная альтернатива файлу HOSTS. Достаточно было настроить устройство на использование такого сервера, и больше не нужно было возиться с обновлением файлов HOSTS. Один из первых публичных DNS-серверов назывался Alternate DNS и появился в 2015 году. Его обслуживанием занимался один человек. Позже, в 2016 году, мы запустили AdGuard DNS.

Новая жизнь для DNS-блокировщиков

До недавнего времени DNS как стандарт был почти заморожен, в него вносились лишь незначительные изменения. Но пару лет назад всё взорвалось новыми стандартами. И, в первую очередь, за счет DNS-шифрования: DNS-over-TLS, DNS-over-HTTPS, DNS-over-QUIC — все эти протоколы стали мейнстримом и оказали большое влияние на блокировку контента!

До роста популярности DNS-шифрования доступные варианты были слишком сложными для обычного пользователя. Можно было:

  • Использовать файл HOSTS и каким-то образом получать его обновления.
  • Использовать обычный DNS-сервер и смириться с ограничениями, такими как невозможность настроить его на телефоне для мобильной сети или необходимость настраивать каждый сетевой адаптер на десктопе и погружаться для этого в довольно низкоуровневые настройки.
  • Использовать VPN или локальный VPN.

После того как DNS-шифрование стало общепринятым, некоторые технические препятствия просто исчезли. Теперь настроить DNS-сервер стало намного проще, и его можно использовать в любой сети. Конечно, вам всё ещё нужно погружаться в настройки устройства, но не так глубоко, как раньше. Кроме того, DNS-шифрование нативно поддерживается на Android 9+ (DoT, DoH на подходе), iOS 14+ и macOS 15+ (DoT, DoH), Windows 11 (правда, поддержка довольно ограничена). Всё это дало огромный толчок росту популярности DNS-блокировки.

Кроме того, развитие DNS-шифрования позволило публичным DNS-серверам предоставлять пользователям возможности настройки. Другими словами, каждый получил возможность выбирать, что блокировать, а что нет. Ранее применение пользовательских правил на основе доменного имени DNS-сервера было возможно только путём "привязки" IP-адреса пользователя, что точно не было хорошим решением.

Использование DNS для блокировки контента: за и против

DNS-блокировка контента имеет как преимущества, так и очевидные недостатки. Давайте начнем с положительных сторон использования DNS для блокировки контента.

Плюсы

  • Не требует установки дополнительного программного обеспечения.
  • Не зависит от производителя браузера или ОС.
  • Не влияет на производительность.
  • Запуск публичного DNS-сервера позволяет наблюдать за всем интернетом. Это очень полезно, если вы ведёте список сайтов для блокировки. Вы можете избавиться от неиспользуемых правил и оперативно узнавать о новых угрозах. У DNS нет "слепых зон", поскольку он наблюдает за всеми устройствами, а не только за браузерами.
  • Централизованное решение лучше справляется с некоторыми проблемами.

Например, давайте рассмотрим маскировку CNAME — тактику, которую использовали некоторые трекеры, чтобы скрыться от блокировщиков. С помощью DNS-записи CNAME они скрывали настоящее доменное имя третьей стороны, маскируя его под домен первой стороны. С помощью AdGuard DNS мы смогли обнаружить все эти замаскированные домены и опубликовать их список, чтобы даже блокировщики контента, не имеющие доступа к DNS, могли остановить это.

Другой пример — использование прокси для маскировки трекеров. В принципе, возможно использовать CloudFlare или CloudFront для настройки безсерверного прокси, который будет скрывать оригинальный домен третьей стороны. DNS в целом не поможет в этом случае, но он может стать хорошей отправной точкой для обнаружения таких прокси.

Минусы

  • Невозможно работать с рекламой от первого лица. Например, вы не сможете заблокировать видеорекламу на YouTube, потому что она размещается на том же домене, что и обычные видео.
  • Нет косметической фильтрации. При использовании только блокировки по DNS вы не будете видеть большинство рекламных объявлений, но у вас будут довольно уродливые веб-страницы со сломанными фреймами и пустыми рекламными блоками.
  • Более высокая вероятность поломки. Например, некоторые приложения или веб-сайты могут быть сломаны из-за блокировки Google Analytics, и вы ничего не сможете с этим сделать.
  • Легче обойти. Приложение может просто использовать другой DNS-сервер.

Что можно улучшить

DNS-фильтрация имеет некоторые недостатки, которые можно исправить или хотя бы смягчить.

Страница ошибки “Доступ запрещён” (Access Denied Error Page)

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

К счастью, существует проект RFC (документ с запросом на комментарии) как раз об этом: DNS Access Denied Error Page, который позволит показывать пользователю красивую страницу ошибки, не прибегая к уродливым решениям (например, требованию установить сертификат HTTPS).

Механизмы обнаружения DNS с шифрованием

Сейчас вам нужно настраивать DNS на каждом устройстве. Не проще ли сделать это один раз непосредственно на роутере? Некоторые новые маршрутизаторы уже поддерживают DNS-шифрование. Однако многие старые устройства по-прежнему могут работать только со стандартными DNS-серверами. Существует рабочая группа "Adaptive DNS Discovery", которая стремится изменить эту ситуацию к лучшему.

Примечательные RFC-проекты:.

  1. Discovery of Designated Resolvers (“Обнаружение установленных резолверов”)](https://datatracker.ietf.org/doc/draft-ietf-add-ddr/), который позволяет обнаруживать зашифрованные DNS-серверы через специальную DNS-запись. Вот как это должно работать: вы настраиваете обычный DNS-сервер, а затем ваша ОС посылает ему специальный запрос, спрашивая, есть ли зашифрованный DNS-сервер, который он может использовать.
  2. Второй заметный RFC касается новой опции DHCP для зашифрованных DNS-серверов. Эта опция позволит роутеру распространять настройки зашифрованного DNS на подключённые к нему компьютеры.

Обнаружение приложений

И ещё одна вещь может быть улучшена. Было бы здорово иметь возможность определять, какое приложение выполняет тот или иной DNS-запрос. Однако не существует RFC, который мог бы в этом помочь. Но мы можем попытаться сделать это сами, попытаться создать своего рода "отпечатки пальцев DNS", по крайней мере, для популярных приложений. Если бы мы знали, какое приложение делает DNS-запрос, мы могли бы более гибко настраивать параметры блокировки.

  1. Например, мы хотим заблокировать трекинг Facebook. Но глобальная блокировка приведёт к поломке всех приложений Facebook. Поэтому мы хотим иметь возможность блокировать его только в приложениях, не относящихся к Facebook.

  2. Другая реальная проблема заключается в том, что блокировка AppsFlyer (системы мобильной аналитики) ломает некоторые довольно популярные приложения. Мы бы предпочли выборочно разрешить его работу — только для затронутых приложений, а в противном случае оставить его заблокированным.

Создание таких "отпечатков DNS" требует анализа сетевого поведения каждого популярного приложения, и мы работаем над решением, которое позволит это сделать.

Что такое AdGuard DNS

Если вы хотите получить доступ к "лучшему интернету", вам обязательно нужно в сочетании с VPN и блокировщиком рекламы использовать DNS. И мы предлагаем вам присмотреться к AdGuard DNS.

Что же представляет собой AdGuard DNS? Это DNS-сервис, который заботится о сохранении вашей конфиденциальности и обеспечении безопасности в интернете. Он поддерживает такие надежные протоколы шифрования, как DNS-over-HTTPS, DNS-over-TLS и DNS-over-QUIC. Он может определять запросы к рекламным, отслеживающим и/или доменам со "взрослым" контентом (опционально) и возвращать им пустой ответ. AdGuard имеет собственную базу доменных имен, обслуживающих рекламу, трекеры и мошеннические активности, и она регулярно обновляется. Кроме того, мы обеспечиваем полезную возможность добавлять в блоклисты свои пользовательские правила.

Чтобы дать вам более широкое представление о том, что такое AdGuard DNS, я упомяну ещё несколько моментов:

  • Он состоит из нескольких серверов, расположенных в 14 локациях.
  • Все эти серверы "анонсируют" одни и те же IP-адреса через BGP (Border Gateway Protocol).
  • Его текущая нагрузка составляет около трёхсот тысяч DNS-запросов в секунду.
  • AdGuard DNS написан на языке Golang.
  • Около 75% DNS-трафика шифруется. Именно это отличает DNS-серверы, блокирующие контент, от других. Если вы посмотрите на статистику CloudFlare или Quad9, то увидите, что зашифрованный DNS-трафик составляет лишь небольшую долю всех запросов. Для AdGuard DNS всё совсем иначе, большая часть трафика шифруется.

Синтаксис правил фильтрации DNS

Блоклисты AdGuard DNS составляются с использованием специального "синтаксиса фильтрации DNS". Нас не устраивали ограничения блоклистов типа HOSTS-файлов, поэтому для AdGuard DNS мы использовали знакомый синтаксис в стиле блокировщика рекламы. Затем он был постепенно расширен модификаторами, специфичными для DNS.

Примеры правил фильтрации DNS. Полная спецификация доступна на Github

Просто чтобы продемонстрировать разницу. Слева приведена статистика для DNS-фильтра AdGuard (тот, который мы используем по умолчанию). Он относительно короткий, но на самом деле блокирует около 900 000 доменов. А слева мы видим другой блоклист — Energized Ultimate, который представляет собой HOSTS-файл с 500 000 доменов. И вот что он блокирует — 500 000 доменов.

Статистика по данным AdGuard DNS

Узел AdGuard DNS-сервера

Каждый узел AdGuard DNS-сервера состоит из нескольких частей. На клиентской стороне интерфейса — перенаправляющий DNS-сервер, написанный на языке Golang, который реализует всю логику, т.е. DNS-фильтрацию, кэширование и т.д. На программно-аппаратной части сервиса у нас есть экземпляр несвязанного сервера, который обеспечивает рекурсию DNS. Нагрузка на один узел сервера составляет от 5 000 до 40 000 ответов в секунду в зависимости от расположения узла (некоторые локации более популярны, чем другие).

Реализации движков фильтрации DNS

Реализации движков фильтрации DNS имеют открытый исходный код и доступны на Github. Их две. Первая называется urlfilter и представляет собой библиотеку Golang, которую мы используем в AdGuard DNS и AdGuard Home. Обеспечивает относительно высокую производительность и занимает мало памяти. Вторая — AdGuard DnsLibs, это библиотека C++, которую мы используем в наших клиентских приложениях. Помимо фильтрации DNS, она также обеспечивает реализацию DNS-шифрования.

Если вы хотите защитить себя от рекламы и трекеров с помощью AdGuard DNS, просто следуйте этому руководству по настройке.

Взгляд в будущее

Браузерные блокировщики контента можно назвать самыми популярными среди обычных пользователей, но не среди составителей блоклистов. Существует гораздо больше HOSTS-файлов и списков доменов, которые поддерживаются добровольцами, чем списков фильтров для браузерных блокировщиков. Это говорит о том, что у блокировки на уровне DNS большие перспективы.

Статистика по данным filterlists.com

.

Что ещё можно сказать о будущем этой технологии? Во-первых, рост DNS-блокировки контента ускорится. В Windows 11 появилась поддержка шифрования DNS, новые роутеры также поддерживают шифрование DNS, всё это облегчит пользователям его настройку и использование.

Уровень обхода блокировки DNS-контента будет расти, но он всё ещё будет незначительным. Чтобы обойти её, требуется много усилий с разных сторон, и чтобы это начало происходить, DNS-блокировка контента должна стать такой же популярной, как и браузерная блокировка. А этого, вероятно, не произойдет, несмотря на темпы роста.

DNS не заменит браузерные блокировщики по очевидным причинам. Но, тем не менее, DNS-блокировка останется и займёт достойное место в системе обеспечения конфиденциальности и безопасности пользователей в интернете.

Anastasiia Fedotova для AdGuard DNS Полезное
18 ноября 2021 г.
Загружая комментарии, вы соглашаетесь с условиями использования и политикой конфиденциальности.
AdGuard поддерживает популярность Zoom, блокируя рекламу на платформе
Zoom объявил о запуске рекламной программы для бесплатных пользователей тарифа Basic. Это скользкая дорожка, которая легко может привести к сбору данных и неизбежным утечкам.
Опять везде реклама, и от Facebook никуда не деться: дайджест AdGuard, мрачный, как сам ноябрь
Немного советов по избавлению от нежелательной рекламы в интернете и некоторые интересные факты в формате нашего дайджеста.
Загрузка AdGuard началась Нажмите на кнопку, на которую указывает стрелка, чтобы начать установку. Выберите «Открыть», нажмите «OK» и дождитесь загрузки файла. В открывшемся окне перетащите значок AdGuard в папку «Приложения». Спасибо за выбор AdGuard! Выберите «Открыть», нажмите «OK» и дождитесь загрузки файла. В открывшемся окне нажмите «Установить». Спасибо за выбор AdGuard! Установить AdGuard на мобильном устройстве: