Журнал LinuxFormat - перейти на главную

LXF126:Privoxy

Материал из Linuxformat
Перейти к: навигация, поиск
Hardcore Linux Проверьте себя на крутом проекте для продвинутых пользователей

Содержание

Privoxy: Рулим web-доступом

Шашанк Шарма надел латексные перчатки таможенника королевской службы для вскрытия, досмотра и санации web-страниц фильтрами Privoxy.

Нахождение сомнительного контента в Интернете не требует специальных знаний. Многие сайты, которые вы посещаете, содержат или ссылаются на вещи, неподходящие для показа в широком кругу. И мы говорим не только о сайтах-с-определенными-забавными-картинками: это может быть и нецензурный текст, надоедливые всплывающие окна иливредные сценарии JavaScript.

Privoxy может победить их вуду-магию: блокировать изображения и всплывающие окна, заменить на сайте текст, профильтровать содержимое, отключить JavaScript, а также многое другое, причем «на лету».

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

Большинство дистрибутивов имеют пакет Privoxy в своих репозиториях, и вы легко установите его одной из следующих команд (в зависимости от вашей системы).

sudo apt-get install privoxy
su -c “yum install privoxy”
su - -c “urpmi privoxy”

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


/etc/init.d/privoxy start

Финальный шаг – оповестить о нем ваш браузер. Если у вас Firefox, выберите вкладку Дополнительные в меню Правка > Настройки. Затем, кликнув в Сеть на Настроить, зададим параметры подключения Firefox к Интернету. Используйте ручную настройку прокси-сервера и введите 127.0.0.1 для HTTP прокси и 8118 для Порта. Нажмите OK.

Теперь вы получаете доступ к интерфейсу Privoxy через http://config.privoxy.org или http://p.p. Там показаны текущие настройки и документация, и мы настоятельно рекомендуем прочесть ее для понимания возможностей Privoxy.

В директории /etc/privoxy/ хранятся три конфигурационных файла, определяющих, как модифицировать содержимое просматриваемых страниц. Основной из них называется config. В нем необходимо изменить всего пару строк, а именно enforce-blocks и enable-edit-actions.

Privoxy включает контроль за web-страницами в двух видах: действия и фильтры. Фильтры могут перезаписать контент страницы, HTML или любой включенный в нее JavaScript. Правила определяют действия, выполняемые над cookies, блокируемыми баннерами, изображениями, всплывающими окнами и другими объектами, заданными в файле действий. Файл default.action содержит вышеуказанные правила, но изменять его не рекомендуется. Вы можете управлять только user.action, который имеет преимущество над остальными файлами действий, так как загружается последним.

Вы можете включать действия и выключать их, используя знаки + или - соответственно. Например, +block будет блокировать сайты, а -block – нет.

Ограничение доступа

При первом запуске Privoxy, без правок конфигурационных файлов, вы можете заметить, что загрузить ничего не получается. Вместо этого вам выдается сообщение: «Request blocked by Privoxy: Host matches generic block pattern. See why this block applies or go to the link anyway».

При щелчке на ссылке Why This Block Applies Privoxy отобразит настройки, которые используются для блокировки соответствующего содержимого. Каждый элемент в списке имеет ссылку на пояснение в руководстве пользователя, помогающее понять, зачем используется то или иное правило и как оно применяется к текущей странице.

К сожалению, самое распространенное применение Privoxy – это блокировка изображений и другого содержимого по его размеру. Например, в конфигурации по умолчанию Slashdot, Digg и другие сайты отображаются отлично от оригинала, иногда теряя рекламу от Google.

Так как не каждому понравится, что в сети завелся некто, пожирающий трафик, например, на просмотр роликов YouTube, то при работе с Privoxy вы можете создать список доверенных сайтов, и доступ будет разрешен только к ним. Самый простой, быстрый и по-настоящему действенный способ ограничить доступ – это добавить в файл user.action такой код:

{ +block }
/ # Так вы заблокируете *все* сайты

Эти команды блокируют доступ ко всем сайтам; но если с возрастом вы смягчились и согласны отрезать только некоторые, перечислите их после строки { +block }.


{ +block {Нечего тут глазеть. Работать надо} }
scorecard.example.com

Зайдя на scorecard.example.com, пользователь, кроме сообщения о блокировке, получит уведомление о ее причине. (Вы можете сделать его посмешнее, чем здесь – мы теориям комических сообщений об ошибках не обучались.)

Если вы предпочитаете использовать «белый» список вместо «черного», ваш код будет выглядеть так:


{ -block }
lxer.com
slashdot.org

Однако, несмотря на наличие «белого» списка, при использовании этого метода вы будете сильно ограничены в доступе к сайтам, потому что сможете попасть на slashdot.org, но не в его поддомены, такие как developers.slashdot.org.

Альтернативным вариантом будет использование механизма файла trust, в котором перечисляются все доверенные сайты. При занесении URL в файл trust необходимо предварить его знаком + или ~. Тильда (~) ограничивает доступ к сайту и его подпутям. Любые внешние ссылки на сайте или страницах будут запрещены. Скажем, ~lxer.com даст вам неограниченный доступ внутри lxer.com, но не позволит следовать по новостным ссылкам на внешние сайты.

В свою очередь, + описывает сайт как заслуживающий доверия. Преимущество здесь в том, что на недоверенные сайты – а это все сайты, не перечисленные в файле trust – можно попасть только с ссылающегося на них сайта со знаком +. Так, +lxer.com означает, что вы можете проследовать по всем внешним ссылкам, и они будут автоматически добавлены в список доверенных. Например, чтобы позволить доступ к example.com и чтобы «белый» список был заполнен доменами по ссылкам с example.com, используйте такую строку:

# Пример: для разрешения доступа к example.com и появления белого списка доменов
# на основе ссылок с example.com, расскомментируйте эту строку:
# +example.com
+lxer.com
# Следующие две строки дают пользователям доступ
# к CGI страницам Privoxy, без автоматического доверения ссылок
~config.privoxy.org
~p.p
~tags.expo9.exponential.com # По ссылке с: http://lxer.com/
~www.unixmen.com # По ссылке с: http://lxer.com/module/newswire/view/124423/index.html

Заметьте, что новые ссылки в конце файла начинаются со знака ~, то есть они не являются доверенными. Обычно ваш файл trust растет со временем, в зависимости от того, насколько либерально вы расставляете знак +.

Редактируем в браузере

Privoxy позволяет редактировать свои файлы конфигурации через web-интерфейс в браузере. Эта функция отключена по умолчанию, но может быть активирована путем правки файла config.

Пролистайте вниз до раздела 4.5 файла config, озаглавленного enable-edit-actions, и измените в строке enable-edit-actions 0 на 1, не забыв сохранить изменения.

Теперь, вновь зайдя на страницу http://config.privoxy.org/show-status, вы заметите кнопку Правка [Edit] рядом с текущим используемым файлом.

Разумеется, пользователям локальной сети незачем разрешать редактирование файлов конфигурации.

Блокируем cookies и баннеры

Если вы параноидально относитесь к безопасности, или просто хотите обеспечить блокировку всех cookies со всех просматриваемых сайтов, воспользуйтесь +crunch-incoming-cookies для их отключения. Это удалит заголовок Set-Cookie: HTTP из всех запросов сервера. +crunch-outgoing-cookies работает похоже, отключая возможность сайтов читать любые HTTP-cookies с вашей машины и удаляя все заголовки Cookie: HTTP из клиентских запросов. Эти правила заданы по умолчанию в файле default.action. Чтобы создать из них исключение – например, разрешить cookies от некоторых сайтов, блокируя остальные – следует дописать в user.action нечто вроде.

-crunch-incoming-cookies
.linuxquestions.org
.en.wikipedia.org

Есть несколько способов записи URL-адресов для web-сайтов внутри файла действия. Так, точка в начале будет означать применение правила ко всем поддоменам, которые заканчиваются на .url.com. При задании URL допускаются также символы подстановки. Например *ing.com будет совпадать с bling.com, ring.com и т. д.

Избавление от баннеров, похоже, является основной целью Privoxy, но при этом, без правки конфигурации по умолчанию, содержимое некоторых сайтов не будет видно вообще – из-за правила all-encompassing в файле default.actions. Поэтому для таких сайтов нужно будет добавить исключения в файл user.actions. Для блокировки баннеров используются две основные техники – banners-by-size [баннеры-по-размеру] и banners-by-link [баннеры-по-ссылкам]. Оба метода заданы в файле default.filter.

По умолчанию Privoxy удаляет баннеры основных размеров, а именно, вертикальные 160 × 600, 250 × 250, 300 × 250, 468 × 60, и многие другие. Это покрывает почти всю известную баннерную рекламу, но иногда приводит к ошибочному отключению не рекламных изображений. Если это произошло, или вы не хотите блокировать рекламу на определенных сайтах, можете написать исключение.

Соответствующий фильтр в файле action имеет вид +filter{имя}. То есть, если вы не хотите применять фильтр к каким-либо сайтам, создайте новый раздел -filter{banner-by-size} в файле user.action и перечислите сайты ниже.

Поскольку основным (читай: единственным) источником дохода в Интернете является реклама, мы полагаем, что блокировать объявления исключительно на основе их размера негуманно. Фильтра banners-by-link должно быть достаточно длябольшинства пользователей, если вы хотите удержать популяцию кликозависящих сайтов в рамках.

Заменяем «на лету»

Когда дело касается web-страниц, файл default.filters начинает вести себя как Судья Дредд: судит, приговаривает и приводит в исполнение. Он не слушает доводов. Судейство – не повод для дискуссии и не может быть обжаловано.

Многие из фильтров, описанных в default.filter, легки в интерпретации и понимании. Так, jumping-windows защищает окна от изменения размера. Фильтр all-popups блокирует всплывающие окна HTML и JavaScript. Это, однако, следует использовать с осторожностью, так как многие сайты используют JavaScript для открытия новых полезных окон. Бывали на сайте знакомств? Вы не сможете посмотреть профиль человека и взглянуть на его физиономию, если отключите всплывающие окна.

Что выделяет этот и другие основные фильтры – это оператор Perl s///. Вы можете создать фильтр и использовать синтаксис оператора s///, заменяя любые части в web-странице, включая JavaScript:


FILTER: js-events Убивает все JS события и таймеры
(Очень разрушительно! Только для экстра-грязных сайтов).
s/(on|event\.)((mouse(over|out|down|up|move))|(un)?load|
contextmenu|selectstart)/never/ig
# Не события, но тоже могут применяться во вред:
s/(alert|confirm)\s*\(/concat(/ig
s/settimeout\(/concat(/ig
# Убить всплывающие окна OnUnload. Ура!
s/(<body\s+[^>]*)onunload/$1never/siU
s|(<script.*)window\.onunload(?=.*</script>)|$1never|sigU

Вы можете использовать похожий синтаксис для замены каждого вхождения слова ‘просто’ на ‘жуть’ с помощью s/просто/жуть/g.

Используем псевдонимы

Мы упоминали, что файл default.actions редактировать нельзя и что все исключения и новые правила должны быть добавлены в файл user.action. Теперь приведем причину такого поведения.

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

cookiesads = -crunch-all-cookies
-session-cookies-only
-filter{content-cookies}
-filter{banners-by-size}
-filter{banners-by-link}

– это псевдоним для нескольких различных действий. Каждый раз, когда нужно описать каждое из этих действий для сайта, вы можете использовать псевдоним в файле user.action:

{cookieads}
.linuxquestions.org
.digg.com
.slashdot.org

Вам не нужно использовать псевдонимы со знаками + или -, так как они превращаются в реальные действия подстановкой. Вы можете назвать псевдоним как угодно, без ограничений на длину, но не используя пробелы, табуляцию, фигурные скобки или знак =. Псевдонимы уникальны для каждого файла action и задаются в его начале.

Обходим цензуру


Одна из популярных схем заключается в использовании Privoxy совместно с Tor. Вы можете рассматривать Tor (The Onion Router) как телефонную будку для супергероев: он дает каждому новое лицо. Вы входите в Tor с вашим собственным IP-адресом, а выходите с другим. Иначе говоря, вас нельзя отследить.

Сеть Tor состоит из ретрансляторов, запущенных добровольцами по всему миру. Вы получаете к ней доступ с помощью специального прокси (также называемого Tor) на вашей машине. Идея заключается в передаче данных через различные узлы сети, прежде чем они достигнут назначения. Для защиты данных и их источника Tor применяет шифрование на каждом из узлов. С точки зрения пункта назначения трафик идет из последнего узла.

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

su -c “yum install tor”
sudo apt-get install tor
su - -c “urpmi tor”

Вам, возможно, понадобится Torbutton, расширение Firefox для включения и выключения Tor, а также Tork – графический инструмент настройки Tor.

Расширение Torbutton добавит кнопку в нижний правый угол окна Firefox в строку состояния. Следующим шагом будет настройка Privoxy для Tor, поэтому откройте файл config в вашем любимом текстовом редакторе и пролистайте его до Раздела 5.2:

# Для соединения Privoxy и Tor, если оба запущены на одной машине,
# вы должны использовать что-то типа этого:
# forward-socks4a / 127.0.0.1:9050 .

Останется только раскомментировать последнюю строку. Так как Tor использует публичную сеть Tor для анонимизации вашего трафика, вы не можете применять его для доступа к вашей локальной сети. Поэтому, если доступ к ней вам все-таки нужен, раскомментируйте в файле config Privoxy такие строки:

# forward 192.168.*.*/ .
# forward 10.*.*.*/ .
# forward 127.*.*.*/ .

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

Но Privoxy позволяет гораздо больше в части контроля web-страниц. Если принять во внимание все его параметры и тот факт, что многие «умолчания» ссылаются на отличную документацию, в итоге вы получите весьма впечатляющий и полезный инструмент.

Шаг за шагом: Установка Privoxy из исходных кодов

Шаг 1

1 Загрузите архив
Некоторые дистрибутивы до сих пор содержат в своих репозиториях бета-версию Privoxy, и вы не найдете текущий стабильный релиз в Jaunty. Поэтому скачайте архив исходных текстов 3.0.12.tar.gz с сайта проекта.

Шаг 2

2 Сделайте меня
Перед make install вы должны запустить autoheader, autoconf, ./configure и make. Запустите make сразу, и вас попросят выполнить остальные. Если вам не нужно передавать в ./configure никакие параметры, наберите y и нажмите Enter.

Шаг 3

3 Задайте пользователя
Privoxy предлагает создать отдельного пользователя и группу Privoxy и использовать их на этапе установки. Иначе, наберите make install USER=linuxlala, чтобы настроить Privoxy для указанного пользователя.
Персональные инструменты
купить
подписаться
Яндекс.Метрика