Вам надоело бесконтрольно пускать юзеров на любые сайты и позволять им качать
что ни попадя? Или раздражают рекламные баннеры? А может и то и другое? В общем,
сегодня речь пойдет о высокопроизводительном контент-фильтре для Squid или
по-другому редиректоре — Rejik.
Проект не сказать чтобы очень резво развивается, но является на мой взгляд
довольно стабильным и законченым решением, с продуманной и простой настройкой,
возможностью создания индивидуальных правил, поддерживающий регулярные выражения
и т.д.
Squid, наверное самый популярный на сегодня прокси-сервер, позволяет
использовать внешнюю программу редиректор для фильтрации запросов клиентов.
Принцип действия редиректора таков: любой запрос клиентского браузера поступает
на прокси-сервер, где данные о запросе передаются на стандартный вход
редиректора. Редиректор анализирует поступившие данные и при соблюдении
соответствующих условий перенаправляет на требуемый ресурс.
Приведем пример: допустим Squid отдает редиректору такой запрос от клиента
(как видите это не запрос HTTP в чистом виде):
http://www.mp3.ru/pesna.mp3 192.168.1.100/- username GET
Посмотрите из чего состоит запрос:
http://www.mp3.ru/pesnya.mp3 — запрашиваемый url
192.168.1.100/- — ip адрес клиента/(имя хоста клиента или
«-»)
username — логин клиента, если нет авторизации, то «-»
GET — метод запроса
редиректор, по нашему замыслу должен привести его к такому виду:
http://127.0.0.1/antimp3.mp3 192.168.1.100/- username GET
В результате пользователь получает вместо вожделенной попсовой эмпэтришки,
эксклюзивную запись «владимирского централа» с последнего корпоратива в вашем
оригинальном исполнении под аккомпанемент караоке. Или можно подменить картинки
с порносайтов на ваше нагло улыбающееся лицо — тоже получится довольно забавно
Ну это лирика, ограничимся заменой рекламы на прозрачные .gif 1×1, а вместо
порно ресурсов и сайтов с mp3 просто выведем странички с сооответсвующими
запрещяющими надписями. Например: «Данный сайт содержит порнографические
материалы и заблокирован для просмотра в сети. В случае ошибочной блокировки
ресурса, рекомендуем обратиться к администратору сети».
Как всегда, пример будет для FreeBSD. Для Linux всё отличается в основном
путями, так что основные принципы неизменны. Для начала компилируем и
устанавливаем порт.
cd /usr/ports/www/rejik/
make install
По умолчанию программа будет установлена в /usr/local/rejik.
Теперь можно приступать к настройке. В качестве примера рассмотрим случай с
авторизацией пользователей в Squid по логину и паролю.
cd /usr/local/rejik
cp redirector.conf.dist redirector.conf
vi redirector.conf
error_log
/var/squid/rejik/redirector.err
change_log
/var/squid/rejik/redirector.log
make-cache
/usr/local/rejik/make-cache
allow_urls
/usr/local/rejik/banlists/allow_urls
<BANNER>
ban_dir
/usr/local/rejik/banlists/banners
url
http://127.0.0.1/ban/1x1.gif
logoff
<PORNO>
ban_dir
/usr/local/rejik/banlists/porno
url
http://127.0.0.1/ban/porno.html
<MP3>
ban_dir
/usr/local/rejik/banlists/mp3
url
http://127.0.0.1/ban/mp3.html
allow_id
f:/usr/local/rejik/banlists/noblock
<JS>
ban_dir
/usr/local/rejik/banlists/js
url
http://127.0.0.1/ban/js.js
logoff
Рассмотрим подробнее параметры конфига:
error_log /var/squid/rejik/redirector.err — параметр
определяющий путь к файлу, содержвщему ошибки выполнения, оставим включеным на
этапе настройки, при дальнейшей нормальной работе отключим.
change_log /var/squid/rejik/redirector.log — указывает где
будет вестись лог Rejik.
make-cache /usr/local/rejik/make-cache — при старте
запускается внешняя программа make-cache, которая создает urls.cache файлы для
всех urls файлов. Можно запускать и вручную.
allow_urls /usr/local/rejik/banlists/allow_urls — путь к
файлу разрешенных сайтов, никакие замены для сайтов, указанных в файле, не
производятся. Url сайтов прописываются по одному в каждой строке файла.
— <> означают секционные настройки. Внутри
<> пишется название секции, которое отобразится в логе при срабатывании
правила из этой секции.
ban_dir /usr/local/rejik/banlists/banners — путь к папке, в
которой находятся файлы с правилами.
url http://127.0.0.1/ban/1×1.gif — указываем чем заменить
страницы, попавшие под правила данной секции. В url можно указать специальные
переменные, которые будут заменены на данные из запроса клиента (подробности на
сайте разработчика)
log off — не записывать в лог замены, сделанные в этой
секции.
allow_id f:/usr/local/rejik/banlists/noblock — файл с
логинами для которых не производятся какие-либо замены исходя из правил данной
секции (в случае, когда пользователи авторизуются в squid по логину).
Для формирования бан-листов, в режике используется два типа правил: urls
(простые списки блокируемых сайтов) и pcre (на основе регулярных выражений).
Пример pcre-файла для запрета загрузки медийных файлов: