Как сделать свой блокировщик рекламы

Собственный блокировщик рекламы начинается с простейшего расширения для браузера: файла manifest.json и нескольких строк JavaScript, которые скрывают рекламные элементы на странице. Такой вариант можно собрать за вечер, не имея глубокого опыта программирования, и он будет работать не хуже базовых решений из магазина расширений.

Есть и более продвинутые пути: фильтрация на уровне системы через файл hosts или собственный DNS-сервер вроде Pi-hole. Каждый подход решает свою задачу — от скрытия баннеров в одном браузере до блокировки рекламы на всех устройствах домашней сети. Разберём все три способа по порядку, от простого к сложному.

Как работает блокировщик рекламы

Прежде чем писать код, полезно понять механику. Реклама попадает на страницу двумя основными путями: как отдельный сетевой запрос к рекламному домену (скрипты, баннеры, трекеры) и как HTML-элемент внутри уже загруженной страницы. Соответственно, и блокировать её можно на двух уровнях.

Первый уровень — сетевая фильтрация: запрос к рекламному домену прерывается до загрузки. Второй — косметическая фильтрация: элемент уже загружен, но скрывается через CSS-правила. Полноценный блокировщик обычно совмещает оба подхода, и ваш самодельный инструмент тоже может это делать.

Способ 1: расширение для браузера своими руками

Самый доступный вариант — написать собственное расширение. Для Chrome, Edge и других браузеров на движке Chromium потребуется создать папку с двумя файлами. Первый — манифест с описанием расширения:

{

"manifest_version": 3,

"name": "My Ad Blocker",

"version": "1.0",

"permissions": ["declarativeNetRequest"],

"host_permissions": ["<all_urls>"]

}

Второй файл — набор правил блокировки в формате JSON. В Manifest V3 сетевые запросы блокируются через API declarativeNetRequest: вы заранее объявляете список доменов и шаблонов, которые браузер должен отклонять. Это отличается от старого подхода с webRequest, где расширение перехватывало каждый запрос «на лету».

После подготовки файлов откройте в браузере страницу управления расширениями (в Chrome это chrome://extensions), включите режим разработчика и нажмите «Загрузить распакованное расширение», указав вашу папку. Если расширение не появилось в списке — проверьте синтаксис JSON: лишняя запятая или незакрытая скобка — самая частая причина ошибки загрузки.

☑️ Сборка собственного расширения-блокировщика

Выполнено: 0 / 4

Косметическая фильтрация: скрываем баннеры через CSS

Сетевая блокировка не справляется с рекламой, встроенной прямо в код страницы. Здесь помогает контентный скрипт, который находит рекламные блоки по CSS-селекторам и скрывает их. В манифест добавляется секция content_scripts, а сам скрипт выглядит примерно так:

const adSelectors = ['.ad-banner', '[id*="banner"]', '.adsbygoogle'];

adSelectors.forEach(sel => {

document.querySelectorAll(sel).forEach(el => el.remove());

});

Имейте в виду: список селекторов придётся поддерживать вручную. Сайты регулярно меняют разметку, и вчерашний фильтр сегодня может ничего не находить. Чтобы подобрать актуальные селекторы, откройте инструменты разработчика (клавиша F12), выделите рекламный блок и посмотрите его классы и атрибуты.

⚠️ Внимание: слишком широкие селекторы вроде div[class*="ad"] могут скрыть полезный контент — например, блоки «адрес» или «администрация». Всегда проверяйте страницу после добавления нового правила.
📊 Какой способ блокировки рекламы вам ближе?
Расширение для браузера
Файл hosts на компьютере
DNS-фильтрация для всей сети
Пока выбираю

Способ 2: блокировка через файл hosts

Файл hosts — системный механизм сопоставления доменов и IP-адресов, который проверяется раньше, чем DNS-запрос уходит в сеть. Если прописать рекламный домен с адресом 0.0.0.0, запрос к нему будет обрываться на уровне операционной системы — для всех браузеров и большинства программ сразу.

В Windows файл находится по пути C:\Windows\System32\drivers\etc\hosts, в Linux и macOS/etc/hosts. Для редактирования нужны права администратора: откройте блокнот «от имени администратора» и добавьте строки вида:

0.0.0.0 ads.example.com

0.0.0.0 tracker.example.com

Готовые подборки рекламных доменов публикуются в открытых проектах — их можно взять за основу, но перед добавлением большого списка сделайте резервную копию исходного файла. После сохранения может потребоваться сброс DNS-кэша: в Windows это команда ipconfig /flushdns в командной строке с правами администратора.

Способ 3: собственный DNS-фильтр для всей сети

Наиболее масштабное решение — поднять DNS-сервер с фильтрацией, например Pi-hole на Raspberry Pi или любом компьютере с Linux. Все устройства в домашней сети направляют DNS-запросы на этот сервер, а он отсекает запросы к доменам из чёрного списка. Реклама блокируется даже на смартфонах, Smart TV и планшетах, где нельзя установить расширение.

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

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

Сравнение подходов

Чтобы выбрать подходящий метод, оцените трудозатраты и охват каждого варианта:

МетодОхватСложностьОграничения
Расширение браузераОдин браузерНизкаяНе работает в других программах
Файл hostsВесь компьютерНизкаяТолько целые домены, без косметической фильтрации
DNS-фильтр (Pi-hole)Вся домашняя сетьСредняяНужен отдельный сервер или устройство
Гибридный вариантСеть + браузерСредняяТребует поддержки двух инструментов

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

Почему нельзя просто скопировать фильтры uBlock Origin

Списки фильтров вроде EasyList распространяются свободно, и их можно подключить к своему проекту. Однако синтаксис правил (с $-модификаторами, регулярными выражениями и косметическими фильтрами) потребует написать собственный парсер — это заметно сложнее базовой блокировки доменов. Для первого проекта проще начать с простого списка доменов.

Поддержка и обновление фильтров

Блокировщик — не разовая настройка, а инструмент, который нужно поддерживать. Рекламные сети меняют домены, сайты обновляют вёрстку, и фильтры постепенно теряют эффективность. Полезные привычки:

  • 🔍 Раз в несколько недель проверяйте, не появилась ли реклама на часто посещаемых сайтах
  • 📝 Ведите собственный список доменов в текстовом файле с комментариями — откуда взялось каждое правило
  • 🧪 Тестируйте новые правила на одном сайте, прежде чем добавлять в общий список
  • ⬜ Держите под рукой «белый список» для сайтов, которые ломаются от блокировки
  • 💾 Сохраняйте резервные копии конфигурации перед крупными обновлениями списков

Если какой-то сайт перестал работать корректно — не загружаются видео, не нажимаются кнопки — первым делом временно отключите свои фильтры для этого домена. Так вы быстро поймёте, виноват блокировщик или сам сайт.

Частые вопросы

Законно ли создавать и использовать собственный блокировщик рекламы?

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

Нужно ли уметь программировать, чтобы сделать свой блокировщик?

Для варианта с файлом hosts или готовыми списками доменов достаточно умения редактировать текстовые файлы. Написание расширения потребует базовых знаний JavaScript, но объём кода минимален и под силу новичку.

Почему мой блокировщик не убирает рекламу в видео?

Видеореклама часто загружается с тех же доменов, что и основной контент, поэтому сетевая блокировка её не отсекает — иначе перестало бы работать и само видео. Такая реклама требует более сложных методов фильтрации на уровне отдельных запросов.

Можно ли использовать списки фильтров от AdBlock или uBlock Origin?

Открытые списки вроде EasyList свободно доступны, но их формат рассчитан на полноценные движки фильтрации. Для самодельного решения проще извлечь из них только список доменов и использовать его в hosts или DNS-фильтре.

Замедлит ли собственный блокировщик работу браузера?

Обычно наоборот: блокировка лишних запросов ускоряет загрузку страниц. Замедление возможно разве что при очень больших списках правил с неэффективной обработкой — в этом случае стоит оптимизировать структуру фильтров.