Здравствуйте, хабровчане! Получив от руководства задачу заблокировать сотрудникам рекламу на интернет-сайтах, я решил подойти к процессу творчески: разобраться, как технически транслируется та или иная реклама, какие способы блокировки существуют, их плюсы и минусы. Также привожу в качестве примера реализацию блокировки у нас на уровне шлюза, с использованием Traffic Inspector Next Generation, а также использование для этих целей на локальном уровне опции блокировки рекламы в Kaspersky Internet Security (далее — KIS) и браузерными приложениями AdBlock и Adblock Plus. Статья будет интересна сисадминам и другим спецам, работающим с локальными сетями.




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

Сначала в двух словах, как можно блокировать рекламу.

Во-первых, есть приложения для браузеров, в которых используются десятки различных алгоритмов и схем под каждый тип контента и даже под некоторые отдельно взятые площадки (Facebook, например). Наиболее популярные резалки — AdBlock и Adblock Plus (далее — ADP). На мой взгляд, более эффективен из них ADP, но под его мощный каток иногда попадает и полезный контент (об этом — в конце). Для меня недостаток всех подобных решений в том, что они ставятся на каждый комп и, более того, на каждый браузер. Когда у тебя в локалке сотни компов, это становится проблемой.

Во-вторых, во многих антивирусах (к примеру, мы используем «Касперского») есть встроенная опция блокировки рекламы. Достоинство такого способа в том, что раз уж вы пользуетесь антивирусом, то ничего на компьютер дополнительно ставить не надо — просто активируете функцию в меню. Но поскольку эта функция не основная, работает она хуже, чем специально заточенные под это дело приложения.

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

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

SEO и всякие там email-рассылки нам сейчас неинтересны. Нас интересует реклама, которая транслируется вместе с полезным контентом. По этому принципу я разбил ее на следующие типы:

1. Встраиваемые рекламные блоки таких сервисов, как «Рекламная сеть «Яндекса» и Google.Adsense.

Это текстовые, текстово-графические модули и просто баннеры, которые размещают владельцы площадок для заработка. На мой взгляд, это самый вредный тип рекламы, потому что он: а) часто мимикрирует под полезный контент и перемешивается с ним для увеличения кликабельности; б) показывает пользователю то, что ему, скорее всего, будет интересно (все мы знаем про big data, поведенческий фактор и т. д. и т. п.); в) показывает то, что пользователю (в нашем случае — сотруднику) в данный момент не нужно, то есть отвлекает от работы.

Возьмем несколько ресурсов с подобным типом рекламы:

1.1. sharpologist.com/2018/08/whats-menthol-shaving-stuff.html
Баннер Google был аккуратно вырезан средствами KIS — верстка не пострадала, никаких пустот не образовалось:



1.2. Также попадаются блоки, использующие запросы пользователя, которые он вводил ранее в поисковике (например, на zmoe.ru):



1.3. www.bestfree.ru — прекрасный пример переоптимизированного SEO-сайта, ожидаемо забитого под завязку рекламой. Красными прямоугольниками отмечены рекламные блоки (см. картинку слева). Все они были заблокированы (см. справа):







1.4. Неудачный пример блокировки рекламы — почта Mail.ru. На странице входящих писем «Рекламная система «Яндекса» проявляет себя дважды: информационной строкой над списком писем и рекламным блоком слева. Ни одна вставка не была заблокирована ни одним из применяемых мною способов:



2. Баннерообменные, тизерные, RTB-сети типа Rotaban, advmaker.net, Marketgid и т. п.
Персонализированную рекламу, как Google или «Яндекс», они показывать не могут, но берут своей назойливостью.

2.1. Баннер-растяжка на adindex.ru (рекламная сеть Adriver) был вырезан браузерным приложением AdBlock:



Заметьте, что AdBlock вырезает целиком div и iframe, так что даже белого прямоугольника не остается.

2.2. Вот пример другого блока сети AdIndex, мимикрирующего под контент, который был так же хладнокровно вырезан браузерным плагином:



3. Всплывающие окна

Самый сильно бесящий формат рекламы, особенно когда всплывающее окно не дает зайти на сайт или закрывает часть контента. Из сайтов с поп-апами ничего приличного для теста я не нашел, поэтому использовал трешовый megashara.com. Браузерные приложения справились с задачей на отлично. А вот с сетевым шлюзом не так все просто. С одной стороны, «мегашара» посылает HTTP-запросы, по которым поп-апы теоретически можно блокировать, но, с другой стороны, она постоянно выдает зеркала с разными URL, так что на практике это сделать невозможно. А если всплывающие окна работают через JavaScript, то на уровне шлюза заблокировать их вообще нереально. (Впрочем, megashara.com в моей локалке заблокирована целиком и полностью.)

4. Партнерские программы

Обычно они распространяются крупными интернет-магазинами и сервисами лидогенерации. Например, если вы владелец портала про книги, то вы можете воспользоваться партнеркой «Лабиринта» и разместить их код на своем сайте — с каждого перехода интернет-магазин будет платить вам деньги. Так, например, поступил сайт marketopedia.ru. Вот как выглядит партнерский модуль:



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

А вот партнерка от Amazon на sharpologist.com была успешно заблокирована браузерными приложениями:



5. Реклама в YouTube.

Прежде всего это ролики, предваряющие просмотр основного видео, ролики, прерывающие просмотр, и рекламные объявления, выскакивающие поверх видео.

Я взял первый попавшийся ролик — вначале выскочило рекламное видео:



Рекламное видео собиралось вещать целую минуту; хорошо, что пропустить его можно было уже через 10 секунд. Затем я увидел полный фарш: и баннер, и встроенные рекламные ролики:



Запускаю ADP — и вуаля, ничего этого нет:



6. Встроенные баннеры

С точки зрения блокировки это самый трудный случай, ведь блокировщику, по сути, надо забанить картинку. Как среди всех картинок на странице найти именно рекламную, не затронув остальные? В браузерных приложениях есть анализ их размеров, ведь баннеры, как правило, имеют стандартные размеры. Очевидно, что такой способ не сработает, если баннер нестандартных пропорций.

6.1. Для начала я взял cnews.ru, вот как обстоит с ним дело:



Как видим, AdBlock успешно порезал все баннеры, включая рекламу самого cnews.ru :)

6.2. А вот менее успешный пример — партнерский баннер на сайте lezvie.info:



Его не заблокировал ни один наш фильтр. Смотрим код:



Размеры 300х416 — это нестандартный формат (во всяком случае, в списке стандартных размерах Google.Adsense его нет), поэтому баннер предсказуемо остался на своем месте.

7. Контекстная реклама в поиске

На мой взгляд, это самый безобидный вид рекламы, который я бы вообще не блокировал. Если человек что-то ищет в поисковике и ему показывают релевантные объявления, ничего плохого тут нет. Наоборот, они помогают найти то, что нужно, особенно если запросы коммерческие.
Ради интереса посмотрел, блокируют ли контекстные объявления браузерные приложения:



Как видим, объявления и баннеры были заблокированы, но остались предложения из «Яндекс.Маркета».

8. Реклама в соцсетях

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

Что лучше блокирует?

Самым эффективным способом оказалась блокировка браузерным приложением, причем ADP проявил себя лучше, чем AdBlock. Но есть три момента, которые сильно меня смущают.

Проблема ADP №1 Режет все подряд, включая полезный контент. Взять, например, сайт vedomosti.ru — на нем есть не только чисто рекламные, но и полурекламные баннеры с анонсами мероприятий, которые могут быть полезны читателю. А есть и вовсе безобидные баннеры-ссылки. Все порезано под ноль.



Иконка ADP в шапке браузера показывает, сколько баннеров вырезал на плагин на данной странице, только какая от этого польза? Ощущение того, что не видишь что-то важное, заблокированное по ошибке, не оставляет.

Проблема ADP №2 Сталкивался с сайтами, которые просят отключить блокировку рекламы, прежде чем показывают контент. И это не какие-нибудь отстойные ресурсы, а сайты вроде forbes.com. В WordPress даже есть плагин Block Adblock, который блокирует контент для тех, кто пользуется «Эдблоком».



Со шлюзовым блокировщиком такой проблемы, естественно, нет.

Проблема ADP №3 Плагины надо установить на каждый комп и на каждый браузер. И мало установить — придется потом бегать по каждому запросу: у кого-то заблокировано что-то полезное, у кого-то не открывается сайт. Оно мне надо?

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

Блокировка сетевым шлюзом, как я уже сказал, происходит за счет перенаправления запросов, направленных на сайты с рекламой, на адрес 0.0.0.0. Я использовал железку Traffic Inspector Next Generation S100, работающую на OPNsense.

Опишу в двух словах, как я настраивал блокировку (инструкция тут>>). С использованием ssh зашел на железку и установил пакет curl (https://curl.haxx.se/) командой: pkg install curl.



Потом запустил скрипт инициализации списка блокируемых веб-ресурсов update-hosts.sh. После формирования списка запустил функцию Unbound DNS для Traffic Inspector Next Generation, выбрал в веб-интерфейсе «Службы» -> «Unbound DNS» -> «Общие настройки». Включил DNS-преобразователь, переадресацию DNS-запросов, регистрацию DHCP. В пользовательских настройках указал файл списка блокируемых веб-ресурсов /var/unbound/ad-blacklist.conf. Сохранил настройки. Теперь железка стала DNS-сервером.



Затем установил новоиспеченный DNS-сервер в качестве DHCP-сервера: «Службы» -> «DHCP v4» -> «LAN» -> «Включить DHCP-сервер на LAN-интерфейсе». На компьютерах юзеров DHCP-серверы должны быть указаны Traffic Inspector Next Generation, тогда железка автоматически пропишется в качестве DNS-сервера:



Теперь в случае перенаправления на страницы с рекламой происходит ее блокировка.
Список блокируемых ресурсов по умолчанию подкачивается из файла http://winhelp2002.mvps.org/hosts.txt. Но к этому списку у меня много вопросов. Например, почему в нем по умолчанию отсутствуют адреса, которые используют «Яндекс» и Google в своих рекламных сетях? А это значит, что самый назойливый вид рекламы (см. пункт 1) заблокирован не будет. Пришлось их прописывать вручную. Для того чтобы добавить новый адрес для блокировки, необходимо в файл настройки добавить адрес в формате: server: local-data: “<адрес блокируемого ресурса> A 0.0.0.0” и перезапустить Unbound DNS-сервис.

Вместо резюме

Мой рецепт блокировки рекламы в локальной сети прост:

1. Активируем блокировку на уровне шлюза.

2. Прописываем в блокируемые адреса рекламные сети «Яндекс» и Google (или убеждаемся в том, что они там присутствуют), а также другие адреса, какие хотите.

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

4. Блокируем на уровне шлюза соцсети, сайты поиска работы и другие нецелевые ресурсы, и тогда проблема блокировки рекламы на них отпадет сама собой:)

P.S. Как я написал выше, список блокируемых HTTP-запросов в Traffic Inspector Next Generation подтягивается из файла winhelp2002.mvps.org/hosts.txt, но этот список не такой полный, каким мог бы быть. Если среди читателей окажутся прошаренные специалисты, которые знают, где взять более актуальные списки (особенно с учетом специфики Рунета), просьба написать в комментах. Если такие списки найдутся, я пропишу их в скрипте. Кстати, в техподдержке мне сообщили, что в OPNsense обсуждается добавление специального плагина для управления такими списками, но пока это не в продакшене.

Комментарии (25)


  1. magdelta
    27.09.2018 07:12

    Использую untangle, шлюз, блокировщик рекламы и многое другое. Есть платные плагины. Очень удобно.


  1. Temmokan
    27.09.2018 07:18

    Мои пять копеек — uBlock Origin оказался наиболее вменяемым после серии опытов, плюс дополнительно Privacy Badger, хотя он из немного другой оперы.


  1. sohmstyle
    27.09.2018 09:57

    С давних времён пользовался AdBlock Plus. Но потом ушёл с него на uBlock Origin по причине меньшего потребления оперативной памяти и лучшей фильтрации.

    Сейчас для блокировки рекламы у себя в Firefox я использую:
    uBlock Origin
    NoScript
    uMatrix
    Decentraleyes
    PrivacyBadger
    CanvasBlocker
    Smart Referer
    Cookie AutoDelete
    Некоторые настройки в about:configs

    Также дополнительно использую файл hosts от StevenBlack в качестве фильтрации по ip.
    NoScript и uMatrix выполняют очень похожие функции, но есть вещи, которые блокирует один, но не блокирует другой. Поэтому они дополняют друг друга, хоть и с перекрытием функций.С давних времён пользовался AdBlock Plus. Но потом ушёл с него uBlock Origin по причине меньшего потребления оперативной памяти и лучшей фильтрации.

    Сейчас для блокировки рекламы у себя на компьютере я использую:
    uBlock Origin

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


    1. AndreDeBonk
      29.09.2018 02:23

      Отпишусь под коментом, чтобы потом найти этот список :)

      Не могли бы Вы также рассказать что для чего, и основные этапы по настройке всего этого?
      И как сильно влияет наличие всего этого на нагрузку? Или наоборот стало шустрее работать?


      1. sohmstyle
        29.09.2018 21:50

        uBlock — косметическая фильтрация
        NoScript — блокирует Javascript
        uMatrix — блокировка межсайтовых скриптов и много чего ещё . Требует кропотливой настройки.
        Decentraleyes — защита от отслеживания через CDN
        PrivacyBadger — защита от трекеров
        CanvasBlocker — защита от отслеживания через отпечаток Canvas
        Cookie AutoDelete — автоудаление кук. Есть белые списки.

        В принципе описание каждого плагина есть на сайте Mozilla.
        Нагрузка с этими плагинами несущественная для меня. С одной стороны работают плагины, а с другой стороны сайты становятся легче из-за блокировки различных скриптов. Я держу обычно много вкладок, поэтому вес плагинов относительно общей потребляемой памяти Firefox ничтожен.

        Когда открывается ранее ненастроенный сайт, но полноценно он не работает, то я сначала разрешаю его в NoScript, проверяю, а затем, если не помогло, то пошагово включаю разные скрипты в uMatrix. Очень редко когда требуется влезать в настройки uBlock.


        1. alexanster
          29.09.2018 23:46

          Использую uBlock и NoScript. Порой, чтобы заставить корректно работать некоторые сайты, приходится последовательно разрешать в одном только NoScript и 10, а то и 20 непонятных промежуточных. И uBlock отключать. Те ещё танцы с бубном. Но вот чтобы настраивать одних программ 7 штук, это я себе только в страшном сне могу представить. Снимаю шляпу.


  1. wodmeph
    27.09.2018 10:29

    Насчёт перенаправления запросом — хочу посоветовать списки отсюда. Туда уже входят список winhelp2002, а также многие другие, например, список Unified hosts + fakenews + gambling + porn примерно в четыре раза больше, чем один только winhelp2002, всякие googleads тоже уже есть.
    Из минусов — маленький охват русскоязычных сайтов, почти все «плохие» сайты смогут работать.


    1. Smart_Soft Автор
      27.09.2018 12:43

      Спасибо, посмотрим, изучим. Вполне возможно, добавим их в наше решение.


    1. KYKYH
      27.09.2018 16:47

      Я тоже этим списком пользуюсь. Есть нарекание — плохое покрытие ютубовских реклам. Без ублока на ютуб смотреть без слёз очень трудно. В основном из-за качества рекламных роликов.


  1. miffo
    27.09.2018 10:29

    Списки блокируемых хостов удобно брать тут. Питоном собирает и парсит дубликаты по всем популярным спискам блокировок. Спасает на уровне шлюза (хотя у меня и в мобильном телефоне блочит), разливать и обновлять удобно любым доступным способом: ансибл, крон+баш и т.д.


    1. Smart_Soft Автор
      27.09.2018 12:44

      Спасибо за ссылку! Поставили себе задачу на их изучение.


  1. AndreyYu
    27.09.2018 10:42

    У нас на терминальном сhrome стоит ghostery и проблем нет.


  1. plm
    27.09.2018 11:54

    А не получится так, что блокировка сетевым шлюзом вырубит какой-то функционал какого-то очень срочно нужного сайта? На своем-то компе uBlock отключил и вперед…


    1. Smart_Soft Автор
      27.09.2018 12:56

      Теоретически — да, возможно. Практически — нужно снизить до 0 вероятность этого. Но админ должен быть готов решать такие проблемы.


      1. plm
        27.09.2018 13:11

        «Снизить до 0» — это не практика, это фантастика. Даташит положили рядом с рекламными картинками, или кто-то запихнул адрес сервиса коротких ссылок в список рекламы и т.п. А если приходится искать админа — что-то сделано неправильно изначально.


    1. dartraiden
      27.09.2018 16:23

      Именно такое практикуется, например, на overclockers.ru. Если по какой-то причине реклама не показа — доступ к контенту блокируется.


  1. llIaman
    27.09.2018 12:45

    Я беру тут список беру


    1. Smart_Soft Автор
      27.09.2018 12:46

      Тоже посмотрим


  1. zigrus
    27.09.2018 13:12

    на микротике настроил AdGuard DNS + uBlock Origin в браузере


  1. dollar
    27.09.2018 13:27

    У себя на компе использую AdGuard DNS + uBlock Origin + Ghostery.
    А в сети настроил SkyDNS (платно, но дёшево), в основном для мобильных устройств, который режет не только рекламу, но и некоторые нежелательные категории.


  1. vanyas
    27.09.2018 15:42

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


    1. sohmstyle
      27.09.2018 16:08

      Тут ещё важно доверять этим DNS серверам. Я, например, беру файл hosts от StevenBlack и конвертирую его в формат для DNS-сервера Unbound, который работает у меня на компьютере. В качестве бонуса получаю локальный кэширующий DNS-over-TLS. Но это не всем подходит.


  1. dartraiden
    27.09.2018 16:25

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


  1. timlok
    27.09.2018 16:37

    Я по dhcp выдаю рабочим станциям dns-сервер с nxfilter. И в нём в качестве блэклиста использую shallalist. Правда, для Рунета приходится периодически обновлять-дополнять список своими урлами (выделено в отдельную категорию, для удобства).


  1. PbIXTOP
    28.09.2018 05:58

    Для таких блокировок также можно также воспользоваться https://pi-hole.net/, но к сожалению в решения с DNS не дают возможности производить блокировку по URL. только если гнать весь трафик через proxy, что тоже неудобно.