Privoxy: прокси-сервер с расширенными возможностями по фильтрации Интернет-контента

12 Янв
2008

Статья напечатана в журнале Хакер

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

Прокси-сервер Privoxy

Если спросить на одном из тематических форумов, какой из прокси-серверов порекомендуют для использования в Linux, в 99 из 100 случае получаем ответ – squid. Действительно это отличный кэширующий прокси-сервер обладающий многими полезными возможностями. Но на домашнем компьютере все его преимущества практически не заметны, ведь кэширование информации для одного компьютера часто не имеет смысла. Ведь только по забывчивости, можно посещать несколько раз один и тот же ресурс. Обычному пользователю ведь нужно то ничего — отсутствие банеров, защита от всплывающих окон и скрытого html-кода, фильтрация cookies ну и естественно анонимность, ведь браузер на любом веб-ресурсе оставляет след сравнимый с отпечатком пальца. Все это реализуется и с помощью squid, но с настройками в этом случае придется немного повозиться. Зачем? Ведь есть специально обученный прокси-сервер Privoxy (www.privoxy.org), который отлично справляется с большинством поставленных задач даже режиме работы по умолчанию. А если его еще и немножечко подстроить …

Установка Privoxy

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

$ sudo apt-get install privoxy

Вот собственно и все премудрости. Кроме основного пакета в Интернет можно найти патчи к Privoxy, несколько расширяющие его возможности, не всегда в репозитариях доступен именно патченый вариант. В этом случае другого выхода кроме компиляции естественно и нет. Privoxy стартует сразу же после установки в настройках по умолчанию, ожидая соединения на 8118 порту. Его конфигурационные файлы находятся в каталоге /etc/privoxy. Основной файл называется не иначе как config, отдельные настройки (фильтры, действия) производятся в нескольких файлах имеющих расширение action и filter, которые подключаются в config. Кроме того, основные настройки можно произвести через веб-интерфейс, набрав в строке браузера config.privoxy.org (в короткой форме p.p). Но перед этим необходимо настроить веб-браузер так чтобы он выходил в Интернет не напрямую, а через Privoxy. Запускаем Firefox, выбираем в меню “Правка-Настройки” и затем во вкладке “Основные” нажимаем кнопку “Параметры соединения”. В появившемся окне устанавливаем флажок “Настройка прокси вручную”, в полях HTTP-прокси и SSL-прокси вводим адрес localhost и порт 8118. Нажимаем ОК и выходим из настроек. Можно пробовать соединиться с Интернет или обратиться к настройкам Privoxy. Команды ручной остановки или запуска Privoxy стандартные:

$ sudo /etc/init.d/privoxy stop
$ sudo /etc/init.d/privoxy start

Да и в каталоге /usr/share/doc/privoxy, теперь полно документации.

Веб-интерфейс Privoxy

Конфигурационный файл config

Главный конфигурационный файл config управляет работой самого Privoxy. Большинство параметров кроме confdir и logdir, являются необязательными, но заглянуть внутрь стоит. Файлы имеют стандартную для Unix структуру. Строка начинается с параметра, за которым следует значение. Строка, начинающаяся со знака #, является комментарием, все идущее за ним игнорируется. Каталог, в котором Privoxy будет искать конфигурационные файлы, если не использован полный путь, указывается в переменной confdir, аналогично журналы работы прокси-сервера будут размещены в logdir. Реакция Privoxy при совпадении правила, описывается в файлах действий, определяемых переменной actionsfile, при этом можно использовать несколько таких файлов, перечисляя их по одному в строке. По умолчанию в списке присутствует три таких файла:

actionsfile standard # для внутреннего использования, трогать не рекомендуется
actionsfile default # основной файл настроек, обеспечивает базовую функциональность
actionsfile user # а сюда можно заносить свои правила

Обратите внимание, что суффикс .action при описании файлов не используется. Подробнее об этих файлах поговорим чуть дальше. Аналогично параметр filterfile описывает файлы с расширением .filter, в этих файлах на основе регулярных выражений описываются модификации информации в обрабатываемых веб-страницах. Фактически любой знак, слово, выражением может быть распознано и при необходимости заменено другим значением. По умолчанию подключен только один файл default.filter. Параметры комментированы и при необходимости лишнее, можно отключить, как впрочем, и добавить свои настройки. Например, таким образом, отбираются Cookies, которые устанавливаются с помощью HTML кода.

s|<meta\s+http-equiv=['"]?set-cookie.*>|<!— ZappedCookie —>|igU

В первой части описано регулярное выражение, если Privoxy найдет его в html-странице, оно будет заменено на слово ZappedCookie. При желании можно создать такой файл самому и экспериментировать с настройками. Кстати самому можно ничего не выдумывать, а взять готовые установки с русского ресурса поддержки Privoxy (privoxy.org.ru). В архиве есть файл user.filter, помещаем его в /etc/privoxy и подключаем параметром:

filterfile user.filter

Регулярные выражения находящиеся внутри позволяют блокировать графику, удалять изображения, скрипты и скрытые Frame теги. Фильтры затем используются в файлах action для дополнительного описания контента, к которому необходимо применить действие. Кстати перехваченные Cookies не удаляются, а сохраняются в файле, на который указывает переменная jarfile, со временем этот файл может вырасти до огромных размеров. Следующим по списку идет закомментированный параметр trustfile. С помощью его можно подключить файл с описаниями “белого” списка ресурсов разрешенных для посещения. В таком файле сайты могут быть записаны в двух формах. Если перед именем стоит знак тильды “~”, это означает, что все сайт принадлежащие этому домену являются доверенными, все внешние ссылки блокируются:

~ www.example.com

Если же нужно разрешить переход по внешним ссылкам с доверенного ресурса, ставим перед именем знак “+”, в этом случае такие сайты будут автоматически заноситься в trustfile. В случае блокировки ресурса пользователю будет выводиться страница, указанная в переменной trust-info-url.
Параметр debug отвечает за выводимую в журнал отладочную информацию, после него стоит код, значение которого можно узнать в этом же в файле. Например, по умолчанию прописаны следующие инструкции:

debug 1 # вывод каждого GET/POST/CONNECT запроса
debug 4096 # предупреждения и запуск процесса
debug 8192 # Ошибки

Есть и другие варианты, после окончательной настройки можно оставить только вывод сообщений с кодом 8192. По умолчанию Privoxy разрешает подключение только с локальной машины, но с его помощью можно легко настроит совместный доступ в сеть. Заменяем IP-адрес в инструкции:

listen-address 127.0.0.1:8118

На адрес сетевого интерфейса компьютера. Например, если адрес 192.168.1.58, то строка будет выглядеть так:

listen-address 192.168.1.58:8118

При необходимости можно использовать и другой порт. Но теперь чтобы через Privoxy не могли выйти в сеть, все кому попало, используя параметры permit-access и deny-access, указываем соответственно кому можно, а кому нельзя соединяться с Privoxy:

permit-access 192.168.1.0/24
deny-access 192.168.1.2 192.168.1.3 www.vasja.com

Чтобы быть в курсе всех событий, желательно активировать параметр admin-address, указав свой адрес электронной почты, на который будут приходить сообщения Privoxy. И наконец еще одна полезность Privoxy – возможность перенаправлять пользователей на другой прокси-сервер. Это может быть как обычный (анонимный) так и SOCKS прокси. Для этого идем в самый конец файла и вписываем примерно такую строку, проставляя адрес любимого прокси-сервера, можно, кстати, вписывать сразу несколько прокси-серверов через пробел, тогда будет произведена попытка соединения с каждым. При необходимости ресурсы, при посещении которых используется или наоборот не используется внешний прокси конкретизируются. Точка означает отсутствие перенаправления, а / — все URL. Например, разрешим использование прокси при посещении обычных сайтов, и отключим для ресурсов работающих через SSL и для сайта provider.com:

forward / normandintransit.com:80 pandora.teimes.gr:8080
forward . provider.com .
forward :443 .

Это не все параметры, которые можно изменить в файле config, но пора идти дальше.

Сокрытие информации с помощью Privoxy

Настроек, как и возможностей у Privoxy очень много, поэтому разберем, лишь некоторые вопросы и начнем с сокрытия информации о системе и веб-браузере пользователя. Удобнее при редактировании пользоваться веб-интерфейсом, в этом случае все параметры будут видны на одной странице, справа даны краткие комментарии на английском. Действия, производимые Privoxy при совпадении правила описаны в файле default.action, для пользовательских настроек предназначен user.action. Загружаем веб-интерфейс, нажимаем ссылку “View & change the current configuration” в появившейся странице в поле Actions Files выбираем нужный файл и нажимаем кнопку Edit. Хочу добавить, что Privoxy имеет три предустановленных профиля агрессивности: Cautious, Medium и Adventuresome. Первый более лояльный, а уровень Adventuresome блокирует практически все, что не хочется видеть на загруженой странице. Их можно выбрать на появившейся странице, нажав кнопку вроде “Set to Adventuresome”. Иначе нажимаем еще раз Edit и переходим в окно Edit Actions. Для включения параметра ставим флажок в Enable, для отключения в Disable и если значение следует оставить без изменений в No Change.
Для блокировки исходящих и входящих cookies активируем crunch-incoming-cookies и crunch-outgoing-cookies.
Cамые продвинутые, вероятно захотят редактировать параметры вручную. В настройках разобраться легко, если параметр требуется активировать, снимаем знак комментария и добавляем спереди знак “+”:

+crunch-incoming-cookies
+crunch-outgoing-cookies

Можно использовать псевдонимы:

+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies

Кроме того, за параметром в скобках может быть указано уточняющее значение. Некоторые сайты требуют обязательного использования Cookies, тогда вместо этих параметров следует использовать session-cookies-only. В этом случае Cookies будут приниматься, и помечаться как временные, поэтому отслеживать серфинг с их помощью будет невозможно. Дополнительно можно активировать send-vanilla-wafer, в этом случае на все запросы будет передаваться некий стандартный cookies. Параметр hide-forwarded-for-headers блокирует передачу заголовка X-Forwarded-for, который выдает использование прокси. Аналогично активация hide-referrer позволит скрыть адрес раннее посещенного ресурса, передаваемого посредством referrer. Включение hide-from-header блокирует передачу адреса электронной почты, характерное поведение для некоторых старых версий веб-браузеров. И, наконец, еще одна полезная возможность – сокрытие используемого веб-браузера. Для этого включаем hide-user-agent, в появившейся строке User Agent string to send, можно заменить значение Privoxy/3.0 (Anonymous), которым будет подменяться название и версия вашего веб-браузера на любое понравившееся значение (Internet Explorer 8.0 будет в самый раз). По окончании настроек нажимаем Submit, сохраняем результат. Теперь можно зайти на сайт вроде ipid.shat.net и посмотреть результат. Но выходить из окна настроек еще рано.

Блокируем контент

Как уже говорилось с помощью Privoxy можно заблокировать загрузку изображений, всплывающих окон и прочих украшений нагружающих канал. Займемся обрезанием. Чтобы остановить GIF анимацию на первом или последнем фрейме, включаем deanimate-gifs. Можно Активация handle-as-image позволит подменять изображения вместо скачаных с Интернета, файлом указанным в set-image-blocker. В последнем случае можно конкретизировать, чем собственно заменять: использовать 1х1 GIF файл, или заранее подготовленный рисунок. Для блокировки всплывающих окон включаем kill-popups. Также включаем filter {banners-by-size}, filter {shockwave-flash} и filter {quicktime-kioskmode} и возможно другие filter. Это общие настройки, которые удобно производить с помощью веб-интерфейса. В файле default.action они описываются следующей конструкцией:

# Defaults
{ \
-add-header \
-block \
-crunch-outgoing-cookies \
-crunch-incoming-cookies \
+deanimate-gifs{last} \
……
+session-cookies-only \
+set-image-blocker{pattern} \
}
/ # все URL

Для более тонкой работы Privoxy лучше использовать прямое редактирование action файлов. Тогда получаем возможность, указать конкретное поведение прокси вплоть до каждого ресурса. Формат записи следующий, вначале идут параметры в фигурных скобках, за которыми следует список ресурсов, к которым они будут применены. Например, разрешим Google использовать только временные cookie, тогда любой севший за компьютер не сможет, воспользовавшись историей получить доступ к почте или параметрам поиска. Пишем так.

{ -crunch-outgoing-cookies \
-crunch-incoming-cookies \
+session-cookies-only \
}
.google.com

В фигурных скобках можно задействовать весь арсенал filter файлов, в которых названия фильтров следует за ключевым словом FILTER:

FILTER: banners-by-size

Затем идет его краткое описание, достаточное чтобы понять, что он делает. Вот в принципе и все.
Хотелось бы отметить, что Privoxy не смотря на всю свою “домашность” востребован и профессиональными администраторами, которые часто его используют в качестве прокси-сервера «второго эшелона», позволяющего благодаря свои возможностям существенно снизить затраты организаций на оплату порожнего трафика.

Плагин к Firefox SwitchProxy

Тому, кому часто приходится менять режим работы с прокси-серверами, вероятно по вкусу придется плагин ко всем Mozilla — SwitchProxy (mozmonkey.com/packages/switchproxy). Правда с его установкой может возникнуть маленькая проблема. Дело в том, что этот плагин давно не развивался, последняя версия совместима с Firefox до версии 1.5. Между тем на рынке уже доступна вторая версия этого браузера, в которой плагин устанавливаться откажется. Но это легко подправить. Открываем файл switchproxy.xpi в любом архиваторе и в файле install.rdf меняем параметр maxVersion цифру 1.5 на 2.х и сохраняем результат. Не которые плагины после этого все равно не работают, но SwitchProxy это не касается. После установки заходим в Tools-SwitchProxy-Manage Proxies. В появившемся окне нажимаем Add для создания нового соединения. SwitchProxy позволяет настроить соединения к двум типам прокси: Standart (обычному) и Anonymous. После ввода настроек и сохранения результата для смены прокси выбираем в выпадающем списке Proxy, имя прокси и нажимаем Apply.

Конкуренты Privoxy

Естественно Privoxy не единственный доступный вариант. Например, MiddleMan (middle-man.sf.net) позволяет не только обрабатывать запросы, фильтруя контент, но и производит эффективное кэширование, причем не только http, но и ftp. Для настройки параметров работы пользователю также предложен веб-интерфейс. Хотя стоит отметить, что он менее удобен, чем у Privoxy и вероятно потребуется некоторое время на его освоение. Но зато функциональность. Здесь Privoxy явно проигрывает. Другим конкурентом по части фильтрации трафика называют DansGuardian (www.DansGuardian.org), который может обставить всех по количеству методов фильтрации: по ссылке, IP-адресу, домену и пользователю, содержимому, расширению файлов, метке PICS (Platform for Internet Content Selection — www.w3.org/PICS) и типу MIME. Дополнительно POST контроль позволяет ограничивать или вообще блокировать загрузку. Может работать в режиме белого списка, когда блокируются все сайты кроме занесенных в этот список. Его функциональность легко может быть расширена с помощью многочисленных логинов, среди которых есть антивирус, анализаторы журналов, шаблоны страниц и рисунков, blacklist и скрипты для их автоматического обновления.

Комментировать

Наверх