howtoРежем рекламу с помошью privoxy

Так сложилось, что многими весьма полезными сайтами очень трудно пользоваться из-за огромного количества всплывающей рекламы, баннеров итд. Для многих популярных браузеров существуют плагины, фильтрующие «нежелательный» котнент. Также некоторые несвободные брэндмауэры фильтруют рекламу. Однако как быть, если используешь несколько браузеров, компьютеров, или серфишь интернет с КПК? Отличный вариант — сложить работу по фильтрации на веб-прокси.
Для моих целей идеально подошел некэширующий веб-прокси Privoxy, который берет на себя заботу по удалению рекламы, блокировке нежелательных сайтов и cookies.
Настройки установленные по умолчанию обеспечивают оптмальный баланс комфорта и функционнальности. Тоесть реклама блокируется не вся, но зато при этом почти не происходит блокирование полезного содержимого. Если ужесточить фильтры, то при этом будет блокироваться больше рекламы, но повысится вероятность ошибочных срабатываний на нерекламное содержимое. Однако очистить конкретный сайт достаточно легко.
Учитывая возможность ручной очистки конкретных сайтов можно сазать, что с помошью Privoxy достаточно сложно заблокировть всю рекламу, гораздо проще создать некую «свободную зону», состоящую из заранее очищенных сайтов.
Так же Privoxy может не принимать cookies, или убирать дату, когда истекает их действие, вследствие чего большинство браузеров не будут их хранить.

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

Настройка
Описанные сдесь настройки могут немного отличаться от настроек вашей версии, так как я использую Debian, то установленая мной версия 3.0.9, а последняя, доступная на сайте — 3.0.13 (beta).

Главный файл настройки /etc/privoxy/config соержит немного настроек и подробные комментарии. Если кого-либо затрудняет чтение комментариев на английском можно воспользоваться русским переводом User Manual.

Большинство настроек можно не менять, однако про некоторые я расскажу.

По умолчанию Privoxy настроен на работу с одним компьютером и слушает только localhost. Если вы планируете использовать его с нескольких компьютеров, то надо поменять адрес, на котором слушает прокси.
#4.1. listen-address
listen-address 127.0.0.1:8118

Если включить опции
enable-remote-toggle 1
enable-edit-actions 1

, то можно будет изменять настройки и останавливать прокси прямо из браузера, зайдя по адресу config.privoxy.org или его сокращению p.p

Режем рекламу
Рассмотрим настройку Privoxy на примере world-art.ru.
Без использования прокси страница выглядит так:

В рамочки я обвел рекламу.
Тут присутствует баннер сверху, два баннера справа и всплывающий баннер посередине.
Если же включить Privoxy с настройками по умолчанию, то страница будет выглядеть так:

Как видим Privoxy смог убрать только всплывающий баннер. Как же убрать остальную рекламу?

Для начала определимся с возможностями и настройкой Privoxy.
Настройку, как и в большинстве программ под *nix можно осуществлять радактированием конфигурационных файлов. Но в случае с Privoxy удобнее использовать веб-интерфейс. config.privoxy.org/show-status
Не рекомендуется менять никакие файлы действий, кроме user.action, так как это единственный файл, который не заменяется при обновлении Privoxy.
Мы видим несколько секций вида:

Actions это действия, которые Privoxy будет делать со страницами, чей адрес соответствует шаблону из "URL patterns"
Список и описание доступных действий можно посмотреть тут.
Действия можно включать (+) и выключать (-).
Правила из файла user.action имеют более высокий приоритет, чем правила из любого другого файла действий. Этим мы воспользуемся и выключим правило deanimate-gifs. Это правило по умолчанию действует на все сайты и замещает все анимированные gif файлы статическими. Получается это фигово не очень хорошо.
Создадим новую секцию со следующим содержимым:
Actions:
-deanimate-gifs
URL patterns:
/

Шаблону / соответствют все url и поэтому правило deanimate-gifs будет выключено для любых запросов.

Для блокировки запросов нам потребуется секция с одним правилом +block. Если она отсутствует ее можно создать с помошью Insert new section below.

Если блокировать картинки одним правилом +block, то вместо картинки будет отсылаться «шахматная доска». В дополнении к правилу +block можно использовать +set-image-blocker. set-image-blocker устанавливает, что будет отсылаться вместо заблокированной картинки. Есть 3 варианта: «pattern» — «шахматная доска», «blank» — изображение размера 1х1, «target-url» — картинка по заданному адресу.

Этих знаний будет достаточно для блокирования рекламы.

Теперь определимся, что же мы хотим блокировать. Разберемся сначала с верхним баннером. Нетрудно увидеть, что их всего два варианта:
http://www.world-art.ru/bipack/101.jpg
http://www.world-art.ru/bipack/102.jpg

Достаточно добавить в секцию с правилом +block шаблон www.world-art.ru/bipack/ и верхнего баннера не будет.


Но далеко не все адреса рекламы легко найти сразу. Можно поискать нужную информацию в исходном коде страницы, но есть более изящный способ. Еще раз обратимся к настройкам программы. Нас интересует параметр debug 1 — если он включен, то в лог пишется каждый запрос, проходящий через прокси.
Теперь откроем логи и загрузим исследуемую страницу.
tail -s1 -f /var/log/privoxy/logfile

Request: world-art.ru/
Request: www.world-art.ru/favicon.ico
Request: world-art.ru/style.css
Request: an.yandex.ru/code/22832?rnd=29389&direct-style=0&direct-limit=2&market-style=0&market-limit=9
Request: ad.adriver.ru/cgi-bin/erle.cgi?sid=71654&bt=16&target=blank&tail256= crunch! (Blocked)
Request: world-art.ru/animation/img/pixel.gif
Request: world-art.ru/img/logo.gif
Request: www.world-art.ru/bipack/101.jpg crunch! (Blocked)
Request: world-art.ru/bipack/32.swf                  
Request: world-art.ru/cinema/img/converted_images_20000/optimize_a/18292-1-optimize_a.jpg
Request: world-art.ru/img/people/40000/34001_mini.jpg
Request: www.world-art.ru/img/mail_1.gif
Request: world-art.ru/bipack/8.swf                  

Как видим происходит блокировка верхнего баннера «www.world-art.ru/bipack/101.jpg» и скрипта загрузки всплывающего баннера «ad.adriver.ru/cgi-bin/erle.cgi?sid=71654&bt=16&target=blank&tail256=».
Так же идет два запроса на файлы swf — это и есть боковые баннеры. Осталось заблокировать адрес «world-art.ru/bipack/».
Теперь главная страница очищена от рекламы.

Теперь рассмотрим другой вариант вставки рекламы. Отличный пример — сайт bash.org.ru. Посмотрим, что грузится при открытии сайта.
Request: bash.org.ru/
Request: s.bash.org.ru/favicon.ico
Request: s.bash.org.ru/mtools.js
Request: s.bash.org.ru/screen.css
Request: s.bash.org.ru/mobile.css
Request: s.bash.org.ru/logo.gif
Request: lol.bash.org.ru/b/adx.js
Request: lol.bash.org.ru/_ad.php?zone=zone:1
Request: lol.bash.org.ru/b/adjs.php?n=260603361&what=zone:2&exclude=, crunch! (Blocked)
Request: lol.bash.org.ru/_ad.php?zone=zone:3
Request: tools.spylog.ru/counter_cv.js crunch! (Blocked)
Request: www.google-analytics.com/ga.js crunch! (Blocked)
Request: config.privoxy.org/send-banner?type=auto crunch! (CGI Call)
Request: top.list.ru/counter?id=901403;t=49;l=1 crunch! (Blocked)
Request: s.bash.org.ru/img/ddestiny.ru-294-574-240x180-01.gif
Request: anetru.tradedoubler.com/anet?type(js)loc(14921)981649993

Блокируется два счетчика и один скрипт. Есть два баннера, которые грузятся с различных сайтов. Заблокировать все эти баннеры очень сложно. Но можно догадаться, что реклама грузится одним из скриптов. Осталось вычислить каким и заблокировать его. Можно просмотреть их содержимое или блокировать по одному и таким образом вычислить «вредный» скрипт. В данном случае его видно прямо по названию «lol.bash.org.ru/_ad.php». Блокируем его.
Теперь вместо этих баннеров будет красоваться текст
Request blocked by Privoxy: Nasty ads. 
See why this block applies to http://lol.bash.org.ru/_ad.php?zone=zone:1

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

Но остается еще текстовая реклама, которая встроена в исходный код страницы. Я так подозреваю, что эту рекламу с помошью privoxy не убрать. Остается смотреть в сторону Greasemonkey.

Также обнаружил досадную неприятность для любителей большого количества открытых вкладок в Opera. Возможно эта проблема имеет место и в других браузерах. При старте происходит обновление всех открытых вкладок. В обычном режиме Opera обращается ко всем серверам одновременно, при включеном прокси запросы выстраиваются в очередь и отправляются по одному. Очередь легко достигает значения в 100 и более запросов, а это обрабатывается достаточно долго (по крайней мере на моем канале). Поэтому загрузка сайтов после открытия оперы происходит дольше чем обычно. Ведь при открытии сайта производится несколько запросов и каждый стоит в очереди. Конечно можно отключить обновление страниц при загрузке браузера, но так лень. Поэтому я надеюсь, что приучу себя закрывать лишние вкладки.

Маленький бонус
Название Privoxy как бы говорит о том, что этот продукт должен защищать личные данные от посторонних глаз. Среди действий есть hide-user-agent — оно позволяет менять информацию о браузере и операционной системе. Конечно для полной анонимности в интернете этого не достаточно, да и не на всех сайтах имеет смысл менять это поле, так как может поплыть разметка. Но есть у этого действия другое интересное применение.
Так сложилось, что у меня есть КПК и периодически я читаю новости с него, так как это быстрее и проще. А горячо нами любимый open-life.org при заходе через один популярный браузер показывает только это. Бесплатных аналогов стандартному браузеру нет, поэтому пришлось искать решение. Как вы уже догадались именно hide-user-agent стало спасительным действием в этой ситуации. После добавления простого правила прокси не сообщает что я сижу с «неправильного» браузера. После этого у меня появилась возможность читать open-life.org с КПК, правда выглядит оно ужасно, но это уже виноват браузер.
  • +7
  • f0VM
  • 16 июля 2009, 23:38

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

Это для каждого сайта фильтры прописывать? :D Жуть. Лучше использовать портейбл-версию огнелиса и AdBlock Plus.
Ну это чтоб свсем очистить. =)
Гугл эдс режет сходу, еще некоторую рекламу.
Например urbanterror, про который недавно была статья — полностью очищает.
Полностью согласен. Может для каких-то целей и подойдёт вышеописанное но AdBlock Plus в подавляющем большинстве случаев — лучше и проще. Блокирует, кстати, отлично, именно рекламу.
Плюс к AdBlock Plus использовать NoScript — это уж точно контрольный выстрел в рекламу!
У меня неплохо работает связка squid+adzapper. Шаблонов в базе банерорезалки прям немало.
Кто минусует просьба отписаться за что.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.