Rejik — блокируем нежелательный контент

Декабрь, 12th 2009Рубрика: *NIX 26776
Подписаться на комментарии по RSS

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

Вам надоело бесконтрольно пускать юзеров на любые сайты и позволять им качать что ни попадя? Или раздражают рекламные баннеры? А может и то и другое? В общем, сегодня речь пойдет о высокопроизводительном контент-фильтре для 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
log off
<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
log off

Рассмотрим подробнее параметры конфига:

  • 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/1x1.gif - указываем чем заменить страницы, попавшие под правила данной секции. В url можно указать специальные переменные, которые будут заменены на данные из запроса клиента (подробности на сайте разработчика)
  • log off - не записывать в лог замены, сделанные в этой секции.
  • allow_id f:/usr/local/rejik/banlists/noblock - файл с логинами для которых не производятся какие-либо замены исходя из правил данной секции (в случае, когда пользователи авторизуются в squid по логину).

Для формирования бан-листов, в режике используется два типа правил: 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 и теперь при попытке получить доступ на нежелательные страницы, пользователю будут выдаваться наши странички с предупреждениями.

Подписывайтесь на канал Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.

Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.

ваш комментарий будет опубликован после проверки
на указанный адрес будет отправлено письмо с кодом активации. Вы можете настроить собственный профиль и стать активным участником или автором.