Вам надоело бесконтрольно пускать юзеров на любые сайты и позволять им качать что ни попадя? Или раздражают рекламные баннеры? А может и то и другое? В общем, сегодня речь пойдет о высокопроизводительном контент-фильтре для Squid или по-другому редиректоре — Rejik.
Проект не сказать чтобы очень резво развивается, но является на мой взгляд довольно стабильным и законченым решением, с продуманной и простой настройкой, возможностью создания индивидуальных правил, поддерживающий регулярные выражения и т.д.
Squid, наверное самый популярный на сегодня прокси-сервер, позволяет использовать внешнюю программу редиректор для фильтрации запросов клиентов. Принцип действия редиректора таков: любой запрос клиентского браузера поступает на прокси-сервер, где данные о запросе передаются на стандартный вход редиректора. Редиректор анализирует поступившие данные и при соблюдении соответствующих условий перенаправляет на требуемый ресурс.
Приведем пример: допустим Squid отдает редиректору такой запрос от клиента (как видите это не запрос HTTP в чистом виде):
http://www.mp3.ru/pesna.mp3 192.168.1.100/- 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
off
<PORNO>
ban_dir /usr/local/rejik/banlists/porno
//127.0.0.1/ban/porno.html
<MP3>
ban_dir /usr/local/rejik/banlists/mp3
//127.0.0.1/ban/mp3.html
allow_id f:/usr/local/rejik/banlists/noblock
<JS>
ban_dir /usr/local/rejik/banlists/js
//127.0.0.1/ban/js.js
Рассмотрим подробнее параметры конфига:
Для формирования бан-листов, в режике используется два типа правил: urls (простые списки блокируемых сайтов) и pcre (на основе регулярных выражений). Пример pcre-файла для запрета загрузки медийных файлов:
\.mpg([\W_]|$) \.mp3([\W_]|$) \.avi([\W_]|$) \.wav([\W_]|$) \.mpeg([\W_]|$)
Пример файла allow_urls. Список сайтов, для которых не производятся проверки.
goodsite1.ru goodsite2.ru 192.168.1.1
Пример файла noblock, содержаший логины на прокси-сервере
director admin OtherGoodUser
Осталось найти в конфигурационном файле Squid строку url_rewrite_program и привести её к такому виду:
url_rewrite_program /usr/local/rejik/redirector
Перезапускаем squid и теперь при попытке получить доступ на нежелательные страницы, пользователю будут выдаваться наши странички с предупреждениями.