Библиотека сайта rus-linux.net
15. Редиректоры
15.1 Что такое редиректор?
Squid имеет возможность переписывать запрашиваемые URL. Squid может быть сконфигурирован так, чтобы пропускать входящие URL через процесс редиректора выполняемого как внешний процесс (подобно dnsserver), который возвращает новый URL или пустую строку, обозначающую отсутствие изменений.
Редиректор - это НЕ ЯВЛЯЕТСЯ стандартной частью пакета Squid. Однако ниже представлено несколько его образцов, коорые также можно найти в директории "contrib/" дистрибутива. Так как потребности у всех разные, каждый администратор может использовать его по собственному усмотрению.
15.2 Почему используют редиректор?
Редиректор предоставляет администратору контроль за передвижениями пользователей. Использование редиректора в сочетании с прозрачным проксированием дает простой, но эффективный контроль, над доступом к порно.
15.3 Как это работает?
Программа-редиректор должна читать URL-лы (один на строку) со стандартного входа и записывать измененные URL-лы или пустые строки на стандартный выход. Заметьте, что программа-редиректор не может использовать буферизированный I/O. Squid дописывает дополнительную информацию после URL, которую редиректор может использовать для принятия решения. Входящая строка состоит из 4-х полей:
URL ip-address/fqdn ident method
А примеры имеются ?
Простой и очень быстрый редиректор, называемый SQUIRM - хороший выбор для начала, он использует библиотеку regex lib для проверки сопадения шаблона.
Также см. jesred.
Следующий скрипт на Perl может использоваться как шаблон при написании собственного редиректора:
#!/usr/local/bin/perl $|=1; while (<>) { s@http://fromhost.com@http://tohost.org@; print; }
15.4 Can I use the redirector to return HTTP redirect messages?
Обычно возможности редиректора используются для подмены запрошенных URL-лов. Squid прозрачно запрашивает новые URL. Однако в некторых ситуациях может потребоваться возвращать клиенту сообщения о пренаправлении HTTP "301" или "302". Это возможно начиная с версии Squid 1.1.19.
Просто измените вашу программу-редиректор, чтобы она подставляла "301:" или "302:" перед новым URL. К примеру, следующий скрипт может использоваться для направления внешнего клиента к внутреннему документу на секрьюрном Web-сервер:
#!/usr/local/bin/perl $|=1; while (<>) { @X = split; $url = $X[0]; if ($url =~ /^http:\/\/internal\.foo\.com/) { $url =~ s/^http/https/; $url =~ s/internal/secure/; print "302:$url\n"; } else { print "$url\n"; } }
Please see sections 10.3.2 and 10.3.3 of RFC 2068 for an explanation of the 301 and 302 HTTP reply codes.
15.5 FATAL: All redirectors have exited!
Просесс редиректора никогда не должен заканчиваться (прекращать выполение). Если вы видите сообщение ``All redirectories have exited'', это скорее всего значит, что в вашем редиреторе есть баг. Возможно не хватает памяти или есть ошибка при обращении к ней. Если хотите, можете протестировать ваш редиректор вне сквида с большими входящими списками, взятыми к примеру из вашего access.log . Также проверьте файл coredump вашего редиректора.
15.6 Redirector interface is broken re IDENT values
I added a redirctor consisting of
#! /bin/sh /usr/bin/tee /tmp/squid.logand many of the redirector requests don't have a username in the ident field.
Squid does not delay a request to wait for an ident lookup, unless you use the ident ACLs. Thus, it is very likely that the ident was not available at the time of calling the redirector, but became available by the time the request is complete and logged to access.log.
If you want to block requests waiting for ident lookup, try something like this:
acl foo ident REQUIRED http_access allow foo
Вперед Назад Содержание