Pull to refresh
0
Smart-Soft
Программируем безопасность с 2003 года

Опыт блокировки интернет-рекламы в локальной сети компании

Reading time8 min
Views49K
Здравствуйте, хабровчане! Получив от руководства задачу заблокировать сотрудникам рекламу на интернет-сайтах, я решил подойти к процессу творчески: разобраться, как технически транслируется та или иная реклама, какие способы блокировки существуют, их плюсы и минусы. Также привожу в качестве примера реализацию блокировки у нас на уровне шлюза, с использованием 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 обсуждается добавление специального плагина для управления такими списками, но пока это не в продакшене.
Tags:
Hubs:
+4
Comments25

Articles

Change theme settings

Information

Website
www.smart-soft.ru
Registered
Founded
Employees
31–50 employees
Location
Россия
Representative
SupportSmartSoft