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