Прокси для офиса с эвристическим фильтром рекламы

()

Да-да. Именно так. Программы, позволяющие отсеивать рекламу используя интеллектуальные алгоритмы вместо чёрных списков существуют достаточно давно. Есть они и для Linux.

В этой заметке будет рассмотрена установка прозрачного прокси сервера, позволяющего отсеивать рекламу используя интеллектуальное распознавание рекламы вместо чёрных список адресов. Решение будет описано на базе системы Gentoo Linux и в его основе будет прокси-сервер bfilter.

Сначала несколько слов о преимуществах интеллектуального распознавания рекламы по сравнению с чёрными списками:

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

Хорошими характеристиками и функционалом обладает прокси-сервер bfilter, который может работать и как системный демон, и как пользовательское приложение. В последнем случае он показывает свою иконку в системном лотке и имеет полноценный графический интерфейс для конфигурирования. Но такой способ подходит скорее для персонального использования и рассматриваться здесь не будет.

У bfilter есть два недостатка:

  1. Не поддерживются нормальные acl. Т.е. фактически он работает как анонимный прокси.
  2. Не поддерживается кэширование, которое было бы весьма полезным.

Для решения обеих этих проблем можно собрать каскад из двух прокси-серверов: bfilter и squid. Первый будет убирать рекламу, а второй управлять доступом пользователей и кэшировать запросы. Поскольку squid так же может работать в "прозрачном" режиме, то прокси можно установить не меняя настроек на клиентских машинах.

Итак. Приступим. Допустим что Gentoo Linux уже установлен на уровне базовой системы и в ядре включена поддержка iptables. Теперь установим bfilter, squid и iptables:

emerge bfilter squid iptables

Далее приступаем к настройке. Сначала настраиваем bfilter. По умолчанию он запускается в chroot-окружении, но не работает:) Для решения этой проблемы "достаём" его из chroot. Для этого в файле /etc/conf.d/bfilter заменяем строчку:

BFILTER_OPTS="-u bfilter -g bfilter -r /etc/bfilter"

На строку:

BFILTER_OPTS="-u bfilter -g bfilter"

Затем открываем в редакторе файл /etc/bfilter/config и правим следующим образом: меняем значение параметра "ad_border" на "none", т.е. отключаем отображение границ вырезаной рекламы (уж больно не эстетично они выглядят:)). Так же меняем значение параметра "page_cleanup" на "safe", чтобы не просто блокировать рекламу, но и по возможности вырезать её код, из кода загружаемых страниц. Здесь так же ещё возможно значение "maximum", но в этом случае возможны поломки кода, что нежелательно.

На этом настройка bfilter заканчивается и можно его запускать:

rc-update add bfilter default
/etc/init.d/bfilter start

Переходим к настройке squid. Тут тоже нет ничего сложного. Открываем файл /etc/squid/squid.conf в редакторе и приступаем:) Во-первых указываем порт, на котором слушать:

http_port 3128 transparent

Параметр "transparent" пригодится при настройке прозрачного проксирования. Далее указываем что все запросы необходимо пересылать на bfilter:

cache_peer 127.0.0.1 parent 8080 0 no-query no-digest

Ну и на последок разрешим использование нашего прокси-сервера нашей же локальной сетью:

acl localnet src 192.168.100.0/255.255.255.0
http_access allow all localnet

Запускаем squid:

rc-update add squid default
/etc/init.d/squid start

Практически всё готово. Осталось настроить правила iptables. Для этого создадим скрипт ~/firewall.sh следующего содержания:

#!/bin/sh

# Сбрасываем цепочки правил
iptables -F
iptables -F -t nat

# Устанавливаем политики по умолчанию: запрет входящих запросов и разрешение исходящих
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

# Разрешаем принимать ответы на запросы
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Полностью разрешаем весь трафик на loopback
iptables -A INPUT -i lo -j ACCEPT

# Разрешаем трафик со стороны локальной сети (она подключена интерфейсу eth1)
iptables -A INPUT -s 192.168.100.0/255.255.255.0 -i eth1 -j ACCEPT

# Все запросы на 80-й порт перенапрвляем на squid
iptables -t nat -A PREROUTING -s 192.168.100.0/255.255.255.0 -p tcp -m tcp --dport 80   -j REDIRECT --to-ports 3128

# NAT для всех остальных запросов
iptables -t nat -A POSTROUTING -s 192.168.100.0/255.255.255.0 -j MASQUERADE

Остаётся только применить эти правила:

rc-update add iptables boot
/etc/init.d/iptables start
~/firewall.sh
/etc/init.d/iptables save

Всё. Офис может спокойно вздохнуть, избавившись от потока рекламы и начав экономить на трафике:)

Автор не претендует на истинность всё написанного. Однако всё это было реализовано автором в реальных условиях и проблем замечено не было.

Ключевые слова: squid, bfilter, iptables.

Комментарии:

Shlomo 2007-11-26 21:15:33 (#)

Как насчет отзывов, насколько правильно работает? Флеш режет?

MooSE 2007-11-27 10:50:29 (#)

Я использую. Режет. Замечательно всё:)

PycmaM 2008-06-27 10:43:59 (#)

Отличная статья, спасибо. Прозрачный сквид с большущим кэшем уже стоял, прикрутил bfilter за 3 минуты, все отлично работает(:

Тамбовчанин 2008-10-30 14:26:23 (#)

Вопрос с другой стороны провода. :-)

Поставил на домашнем сервере. Выяснилось, что на первой странице фирменного сайта (причем только на первой) режет картинки и кнопки счетчиков.

Где почитать о том, как правильно верстать страницу, чтобы не резал то, что рекламой не является?

MooSE 2008-11-01 07:08:33 (#)

А разве счётчики нужны простому пользователю?:)

А верстать... Ну попробуй размеры сделать отчличными от стандартных. Например не 88x31 а 87x32 и всё будет нормально:)

Anonymous 2009-12-03 13:41:55 (#)

bfilter не работает с ftp
этот большой минус как бы все забыли
весь инет перерыл, а ответ так и не найден

MooSE 2009-12-03 18:47:29 (#)

bfilter умеет пересылать запросы на родительский прокси. если родитель поддерживает ftp - bfilter спокойно их пропускает

Anonymous 2010-04-14 16:03:22 (#)

>bfilter умеет пересылать запросы на родительский прокси.
>если родитель поддерживает ftp - bfilter спокойно их
>пропускает

Можно пример файлов конфигураций?

Anonymous 2010-10-05 16:47:18 (#)

В связке со сквидом ето просто зверь! Единственное не понял куда он логи пишет, в трее когда висел всё было видно что он резал, теперь перенес на сервер и логи остались только сквида который стоит за ним. Естественно запросов на get баннеров к нему уже не попадает но как узнать что именно он урезал?

MooSE 2010-10-05 18:12:17 (#)

Цитата:

В связке со сквидом ето просто зверь! Единственное не понял куда он логи пишет, в трее когда висел всё было видно что он резал, теперь перенес на сервер и логи остались только сквида который стоит за ним. Естественно запросов на get баннеров к нему уже не попадает но как узнать что именно он урезал?


Насколько я помню он вообще не умеет в серверной версии логи писать.

Anonymous 2013-02-16 01:49:34 (#)

Добрый вечер.
на дворе уже 2013 год; Использование bfiltr-а не потеряла еще актуальность или есть что либо более современное для убирания рекламы для работы в паре с squid ?

MooSE 2013-02-16 17:57:22 (#)

Цитата:

Добрый вечер.
на дворе уже 2013 год; Использование bfiltr-а не потеряла еще актуальность или есть что либо более современное для убирания рекламы для работы в паре с squid ?


К сожалению принципиально нового пока ничего не придумали. Если не нравится bfilter то можно попробовать прикрутить к squid что-нибудь вроде adzaper. Но у bfilter ИМХО фильтрация куда лучше. Даже не смотря на то что проект уже давно не развивается.

Anonymous 2013-02-16 18:24:43 (#)

Цитата:


Но у bfilter ИМХО фильтрация куда лучше. Даже не смотря на то что проект уже давно не развивается.


По описанию bfilter нравится, но смущает то что он уже несколько лет не развивается и непонятно что будет дальше. или тех алгоритмов которые используются хватит еще надолго ?А если посмотреть на privoxy ?

MooSE 2013-02-16 20:03:56 (#)

Цитата:

По описанию bfilter нравится, но смущает то что он уже несколько лет не развивается и непонятно что будет дальше. или тех алгоритмов которые используются хватит еще надолго ?А если посмотреть на privoxy ?


вроде бы в privoxy есть похожие механизмы. но я никогда их не настраивал и потому впечатлениями тут поделиться не могу:)

Anonymous 2013-02-16 22:24:38 (#)

Цитата:

вроде бы в privoxy есть похожие механизмы. но я никогда их не настраивал и потому впечатлениями тут поделиться не могу:)


да я просто не могу поставить себе bfilter сейчас на сервер. у меня крутиться ubuntu 12.04.2 LTS а в его репозитариях нету пакета bfilter. надо брать сорцы и компилить, но в системе нету необходимых компонентов поэтому сорцы увы не компилируются .... а забивать рабочий сервер дополнительными утилитами не совсем хочется.
вот и ищу то, что может быть интересно и что есть в репозитариях

MooSE 2013-02-17 01:18:42 (#)

Цитата:

да я просто не могу поставить себе bfilter сейчас на сервер. у меня крутиться ubuntu 12.04.2 LTS а в его репозитариях нету пакета bfilter. надо брать сорцы и компилить, но в системе нету необходимых компонентов поэтому сорцы увы не компилируются

И не получится:) Я сам некоторое время назад пробовал и обнаружил что с новыми версиями библиотек он не собирается. А править исходники мне было лень и я забил.

Цитата:

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


кстати какова у тебя основная цель? ну т.е. зачем ты хочешь прокси поднять? убирать рекламу - есть adblock для браузеров. экономить трафик - достаточно squid. какие ещё варианты?:)

Anonymous 2013-02-17 03:11:32 (#)

Цитата:


кстати какова у тебя основная цель? ну т.е. зачем ты хочешь прокси поднять? убирать рекламу - есть adblock для браузеров. экономить трафик - достаточно squid. какие ещё варианты?:)

у меня цель простая. разгрузить канал через squid и убирать рекламу. но тут просто adblock для браузеров не подходит ибо в сети существуют пользователи с разными платформами (pc, mac, android, ios); поэтому задача: поднять прозрачный прокси и по возможности убрать рекламу. сейчас наткнулся вот на такую вещь http://www.quintolabs.com/ буду пробовать прикрутить к squid-у. посмотрел документацию на эту вещь, подписки используются те же что и у adblock-а, поэтому есть вероятность что все получится.

MooSE 2013-02-18 03:28:05 (#)

Цитата:


у меня цель простая. разгрузить канал через squid и убирать рекламу. но тут просто adblock для браузеров не подходит ибо в сети существуют пользователи с разными платформами (pc, mac, android, ios); поэтому задача: поднять прозрачный прокси и по возможности убрать рекламу. сейчас наткнулся вот на такую вещь http://www.quintolabs.com/ буду пробовать прикрутить к squid-у. посмотрел документацию на эту вещь, подписки используются те же что и у adblock-а, поэтому есть вероятность что все получится.


ну тогда наверное privoxy. хотя может и adzapper тебя удовлетворит.

Anonymous 2013-02-18 18:35:38 (#)

Цитата:


ну тогда наверное privoxy. хотя может и adzapper тебя удовлетворит.
adzapper не удовлетворил. либо я его не смог приготовить либо много хочу.
как то мне показалось что он мало рекламы режет.

А с privoxy не приходилось сталкиваться ? меня интересует как фильтры добавлять, а то из тех описаний что нашел понял, что надо анализировать лог и из него добавлять. а это совсем не то, что мне надо

MooSE 2013-02-20 02:03:19 (#)

Цитата:


А с privoxy не приходилось сталкиваться ? меня интересует как фильтры добавлять, а то из тех описаний что нашел понял, что надо анализировать лог и из него добавлять. а это совсем не то, что мне надо


К сожалению нет. Режу рекламу с помощью adblock сейчас. А офисный проксей я не касаюсь уже года четыре как... :)

Anonymous 2013-02-26 21:31:37 (#)

Цитата:


К сожалению нет. Режу рекламу с помощью adblock сейчас. А офисный проксей я не касаюсь уже года четыре как... :)


Понятно.
а я плюнул на этот privoxy и прикрутил к squid-у squidguard ....
некоторого эффекта добился все таки. теперь банеры не выпрыгивают и некоторый контент блокируется.

Anonymous 2014-08-23 02:22:31 (#)

privoxy, adzapper, что бы не говорили, но рекламу они режут ужасно слабо. может, сказывается то, что не очень хорошо лупят часть css кода. смотрят по html и все.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE