SQDR - редиректор к сквиду - v. 0.12a
(c) Евгений Коцюба, 2001

Проверено для "Squid 2.4 STABLE 2 for OS/2" by A. Leko
и Squid2 2.5 for OS/2 by Evgen

Для "Squid 2.3 STABLE 4 for OS/2 Release 20/07/2000" by Stauff
следует использовать sqdr10a ()


Что такое редиректор
--------------------

Редиректор - это специальная программа, работающая совместно с прокси
сервером Squid (http://www.os2.spb.ru/technology/squid/) и служащая
для преобразования URL в запросах сервера.

Зачем это нужно
---------------

Наиболее очевидный ответ: с помощью редиректора можно, например,
отсечь загрузку баннеров и порносайтов, в результате чего, 
возможно, произойдет снижение непроизводительного трафика 
сети :)

Как это работает
----------------

Каждый раз, перед обращением по очередному адресу, Squid передает
URL редиректору. Редиректор, сообразуясь с собственными настройками
либо оставляет URL без изменений, либо заменяет его на другой.
Нужно отметить, что эти замены не видны пользователю прокси сервера,
кроме, разве что, результата такой замены.

Где взять редиректор
--------------------

Ну, во первых, редиректор можно написать самостоятельно :) Или 
взять какой нибудь, написанный другим добрым человеком. 
Например, jesred. Но, поскольку вы читаете этот текст, jesred
вам не нужен, именно неудобство пользования им и подвигло
меня на написание SQDR.

Установка.
----------
Ставится  обычным образом,

в директорию [squid] записываются файлы sqredir.exe и  sqdrserver.exe,
в директорию [squid]\SQDR записываются файлы 
   redir.rules (основной файл с правилами),  
   blacklist.upd (сюда записывайте ваши правила относительно порносайтов),
   domain (черный список порнодоменов)
в эту же директорию будут писаться и логи.
Не забудьте создать SQDR\Clients - в эту директорию будут записываться 
логи клиентов

В redir.rules достаточно заменить  на ваши 

BaseRedirUrl=http://your.local.www
DefaultRedir=images/dot.gif

Остальное можно оставить без изменений. Кроме того, вам придется
внести ряд изменений и в конфигурационный файл сервера Squid:

  redirect_program  sqredir.exe
  redirect_children 5

Cледует отдельно остановиться на количестве запущенных редиректоров.
Когда один редиректор занят обработкой URL, Squid может обратится
со следующим запросом к другому. Таким образом, слишком маленькое
количество запущенных редиректоров может вызвать задержку обработки
запросов, слишком большое вызовет непроизводительную трату ресурсов
при том, что часть редиректоров будет просто простаивать без дела.
Способ решения - тот же что и для dns_nameservers, поставьте для
начала это значение побольше, а через какое то время посмотрите
статистику использования редиректоров и уберите неиспользуемые или
используемые слишком редко.
Если сквиду не хватает редиректоров, то он пишет об этом в логе.

Далее можно запускать squid, при изменении redir.rules sqdrserver издает
пик (бип).

Зависание сквида.
-----------------
Происходят в  зависимости от расположения звезд на небе, но в 99% случаев
связаны с редиректорами. При этом сквид может каким-то образом терять 
редиректоры. Т.е. до редиректора запрос доходит, он отвечает сквиду, 
но сквид этого не видит и пишет в лог, что ему не хватает редиректоров.
Запросы сachemgr сквид обрабатывает также через редиректор, так что что-либо
понять невозможно... Примерно после 20-25 запросов в таком "раскоряченном"
состоянии сквид сдается и делает себе харакири.  Причем это "заскоряченное"
состоянии может возникнуть даже при полном отсутствии пользователей,
например, в 3 часа ночи. Я борюсь с этим следующим образом:
запущен шедулер, который переодически опрашивает наличие сквида (через
go.exe) и, в случае отсутсвия, запускает заново. Кроме того, шедулер раз
в полчаса дергает сквид, закачивая  через wget картинку с прогнозом погоды 
(с rbc.ru). У меня на сервере (непрерывная работа, но интернет весьма падучий)
сквид попадает в "раскоряченное" состояние примерно раз в день-два... 
дома (загрузка сквида на время работы в диалапе) такого не происходит.

Использование локальных файлов для перенаправления
--------------------------------------------------
Можно написать в redir.rules
BaseRedirUrl=http://127.0.0.1:8080/squid-internal-static/icons
DefaultRedir=dot.gif

в \SQ\etc\mime.conf написать что-то вроде:
\.banner$       image/gif 			dot.gif 		- 	image

и поместить dot.gif в каталог 
\SQ\etc\icons

Однако. Однако сквид будет писать варнинги в лог и таки не работать
в оффлайне! Например, при запросе браузера http://ad.lbe.ru и наличии
правила 
ad. 
редиректор перенаправит запрос в 
http://127.0.0.1:8080/squid-internal-static/icons/dot.gif
однако сквид выдаст:
	ОШИБКА
	Запрошенный URL не может быть доставлен.

	Произошла следующая ошибка: 
	     Не удалось установить соединение. 

	Был получен ответ: 

	    (60) Connection timed out

	Удаленный сервер либо сеть не отвечают. Пожалуйста, повторите запрос. 


Отличие Squid 2.4s2 by A. Leko от Squid 2.3s4  by Stauff
--------------------------------------------------------
2.3s4  работает с редиректором через сокеты,
2.4s2 "почти" работает  с редиректором через сокеты, и просто работает через
stdin/stdout. В результате оказывается невозможным использование окна squid'а 
для выдачи информации sqdrserver.exe.(sqdrserver.exe использует stdout, 
который наследуется от вызвашего его клиента, в результате получается фигня,
и падает squid)
Для решения этой проблемы надо запустить
sqdrserver в отдельном окне, перед запуском sq

@setlocal
set SQUID_DIRECTORY=M:\SQ
start "SQDR" /B /C %SQUID_DIRECTORY%\sqdrserver.exe
REM DosSleep 10
%SQUID_DIRECTORY%\bin\squid -D -s %1 %2 %3 %4 %5 %6 %7 %8 %9
@endlocal

Настройка правил преобразования URL
-----------------------------------
Основной файл с конфигурацией SQDR - Redir.rules, кроме него могут 
использоваться файлы, задаваемые параметрами  BlackList и UpdateBlack_List.
Redir.rules отличается от остальных файлом наличием заголовочной части,
в которой описываются некоторые базовые параметры.
Правила преобразования делятся пока на две категории - общая и порно,
при этом общая категория правил  описывается в Redir.Rules, а порно - 
BlackList и UpdateBlack_List.

-----------
комментарии начитаются с #

правила очень простые:
[*|!]url[$] [[http://]redirUrl]

ad.doubleclick.net/ad 
- редиректится на DefaultRedir все, что начинается на 
                   ad.doubleclick.net/ad или на 
             ad[1-99].doubleclick.net/ad 
          www[1-9].ad.doubleclick.net/ad
            level1.ad.doubleclick.net/ad
   www[1-9].level1.ad.doubleclick.net/ad
  обозначение [1-9] означает, что может стоять любой символ от "1" до "9",
  а может и не стоять, level1 обозначает любой поддомен 
*.lbe.ru/bb.cgi
- редиректится на DefaultRedir все, что содержит .lbe.ru/bb.cgi

!agt.net
 - домен agt.net и level1.agt.net исключается из дальнейшей проверки для
   данной категории сайтов.

.mpeg$ images/PAPER1.JPG
         - редиректится на BaseRedirUrl/images/PAPER1.JPG все, 
           что кончается на .mpg

если redirUrl начинается с http:// , то к нему не добавляется BaseRedirUrl


Проверка правил на уникальность
--------------------------------

sqdrserver.exe -r 

записывает обратно файлы с правилами, отфильтрованными на уникальность.
Рекомендуется выполнять при значительном обновлении правил.
(Не забудьте предварительно сохранить старые redir.rules, domain и
blacklist.upd).
Напрмер, при наличии в базе правил
   pantyhose.
  [......]
   pantyhose.st
   и запросе клиента pantyhose.sk двоичный поиск выдаст "ближайшее наименьшее"
   как pantyhose.st и в результате получится промах. В тоже время само
   pantyhose.st подпадает под действие правила с pantyhose.


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

#max pornohits per Hour for  Wait pause 
MaxHitsPerHourBlack_List=20  
  -  сколько раз в час пользователь может случайно попасть на порноссылки
     без блокировки

Wait_minBlack_List=1
  - сколько минут блокировать пользователя
WaitUrlBlack_List=images/porno_stop.gif
  - что показывать блокируемому пользователю, в apache\htdocs\images
    вашему вниманию предлагается набор из трех картинок на выбор.

черный список порносайтов можно брать с
ftp://ftp.ost.eltele.no/pub/www/proxy/squidGuard/contrib/blacklists.tar.gz

Настройка правил для конкретных пользователей
---------------------------------------------
производится в файле, задаваемом параметром UsersInfo, по умолчанию -
SQDR\Users.conf

Формат файла UsersInfo:
# комментарий 
UserAddress UserName [[Wait_minBlack_List] MaxHitsPerHourBlack_List]

максимальное  количество пользователей - 256, может быть изменено при
перекомпиляции (константа MAX_USERS)
если значения Wait_minBlack_List или MaxHitsPerHourBlack_List не указаны,
будут использоваться глобальные значения.


Для запуска сервера на другом компьютере в локальной сети
----------------------------------------------------------
создайте файл

SQDR/client.cfg

и запишите в нем имя компьютера, на котором будет работать сервер редиректора
(sqdrserver.exe). Имя компьютера узнается по net who


Понимание логов и вывода программы:
-----------------------------------
Формат логов:
при выводе на консоль: 
  код[время]  Url [ redirUrl user (Line,Nfile,Classification) ]
при выводе в файл:
  код  Url [ redirUrl user ] время [(Line,Nfile,Classification)]

код =
   n - (none) перенаправление не нужно
   B - сработало перенаправление по началу url'а
   E - сработало перенаправление по концу  url'а
   S - сработало перенаправление по подстроке url'а
время 
   в  миллисекундах, если оно больше нуля, затраченное на обработку
Url
  исходный url. может быть обрезан при срабатывании редиректора и выводе на экран
User 
  адрес пользователя
Line 
 номер строки файла со сработавшим правилом
Nfile
 номер файла со сработавшим файлом
Classification
 индекс классификации 

например:
B http://www.mp3sound.com/  images/dot.gif  127.0.0.1 0 (58669,1,0)

---------
Последние версии программы -
http://www.laser.ru/evgen/soft/SQDR
смотри также 
http://www.laser.ru/evgen/soft/Squid2

---------
[Q:] догадываюсь. кстати, а чем jesred не устраивал?
[A:]
    (a) очень много работы ручками 
    (б) нифига я не понимаю, как эти регекспы работают, 
    (в) на ходу рулесы не меняются, 
    (г) текущая активность узеров не видна, 
    (д) в логе хрен поймешь, какое правило сработало (там номер
правила, а не номер строки) 
    (e) терзали смутные сомнения насчет тормознутости jesred'а

Благодарности: анонимному автору jesred\JesRed.Rus, за использование части текста
