Squid2MySQL для FreeBSD 5.2 (08.07.2004 г) Что такое Squid2MySQL? Это авторизация и учет траффика пользователей в Интернет. Есть proxy-сервер Squid (http://www.squid-cache.org/) и база данных MySQL, (http://dev.mysql.com/) Squid занимается кэшированием информации, а MySQL хранит информацию о пользователе (имя, пароль, скаченные URL и т.д). Связующее звено - это Squid2MySQL (http://evc.fromru.com/squid2mysql/download.html) 1.0.0 от Eugene V. Chernyshev для Linux. Для тех, кто использует Linux в качестве OS для серверов - лучше будет посетить сайт автора Squid2MySQL и использовать информацию с авторского (http://evc.fromru.com/squid2mysql/download.html) сайта. Я лишь портировал squid2mysql под FreeBSD и исправил несколько ошибок, о них было сообщено автору в переписке по e-mail. Данная статья описывает этапы и особенности установки исправленной версии squid2mysql под FreeBSD. Поехали ... 1) Должен быть установлен MySQL, Squid и Perl. Проверьте работоспособность данных программ: зайдите в MySQL, сделайте простой запрос к таблице mysql; проверьте Perl командой perl -v; не забудьте сделать для Squid базы командой squid -z. Проверьте DNS командой nslookup host, если с DNS будут проблемы, то не будет работать Squid. 2) Скачайте архив squid2mysql (http://www.uvsw.narod.ru/project/squid2mysql_v.tar.gz) под FreeBSD (~600 Kb) и распакуйте # tar -zxvf squid2mysql_v.tar.gz 3) Зайдите в появившийся каталог squid2mysql_v. Перейдите в подкаталог for_perl и установите модули для Perl DBI-1.42.tar.gz и Msql-Mysql-modules-1.2219.tar.gz или скачайте более новые. # tar -zxvf DBI-1.42.tar.gz # cd DBI-1.42 # perl Makefile.PL # make # make test # make install аналогично установите модуль Msql-Mysql-modules-1.2219.tar.gz 4) Прочтите файл squid2mysql_v/install_info/INSTALL. Скопируйте perl-скрипт squid2mysql и sh-скрипт sqauth в каталог с squid. Например, # cp squid2mysql /usr/local/squid/sbin/squid2mysql # cp sqauth /usr/local/squid/sbin/sqauth Измените при копировании путь к squid, если он у вас в другом каталоге. Perl-скрипт squid2mysql - разбирает логи от Squid и заносит в базу MySQL. Sh-скрипт sqauth - авторизационный скрипт проверяет имя, пароль и сравнивает скаченный объем с лимитом. Если все OK - то скрипт возвращает OK и Squid пускает в Интернет, иначе ERR. Этот скрипт писал я (оригинальный скрипт больше и позволяет лимитировать по дням и неделям), так что по его работе претензии предъявляйте мне на e-mail. (mailto:vasilisc@rambler.ru?Subject=squid2mysql) 5) Создайте командой mkfifo pipe-канал. # mkfifo /var/log/squid/access.log Рекомендую путь оставить таким какой он есть. Автор применил красивый ход. Вместо текстового файла будет находится pipe-канал. Ничегонеподозревающий Squid будет писать логи о юзерах в один конец трубы, а perl-скрипт squid2mysql считывать из другого конца трубы, разбирать и заносить в базу данных MySQL. Если MySQL будет не доступен, то информация временно будет записана в файл /var/log/squid/backup.log 6) Скопируйте mysql.sh и squid.sh из каталога squid2mysql_v/install_info/ в каталог /usr/local/etc/rc.d/ Сделайте эти скрипты запускаемыми для автозапуска MySQL и Squid после рестарта FreeBSD. # chmod +x mysql.sh # chmod +x squid.sh Посмотрите содержимое squid.sh с комментариями #!/bin/sh case "$1" in # разбираем параметр start) /usr/local/squid/sbin/squid2mysql < /var/log/squid/access.log & # Читаем логи Squid через pipe-канал /usr/local/squid/sbin/squid # запускаем Squid echo "Squid starting" # информируем ;; stop) /usr/local/squid/sbin/squid -k shutdown # останавливаем Squid echo "Squid stoping" # информируем ;; *) /usr/local/squid/sbin/squid -k reconfigure # рестартуем Squid echo "Squid restarting" # информируем ;; esac exit 0 7) Каталог site_php - это web-интерфейс для управления пользователями. Для их работы нужно установить Apache и PHP, нужно в php.ini прописать globalregister = on. Мне удобнее управляться с помощью SQL запросов непосредственно к базе данных или с помощью графических программ, поэтому я отказался от их использования. С помощью данных скриптов вы можете дать возможность пользователям менять свой пароль и смотреть свою (и только свою) статистику. Отредактируйте include.php по своему усмотрению. Если у вас возникают вопросы по поводу работы web-интерфейса для squid2mysql, то обращайтесь на авторский (http://evc.fromru.com/squid2mysql/download.html) сайт. 8) Скопируйте squid2mysql_v/var_arch/sqlogarch в /var/arch/squid/sqlogarch squid2mysql_v/var_arch/sqlogupload в /var/arch/squid/sqlogupload Данные скрипты используются из php-скриптов web-интерфейса для управления backup и restore логов. 9) Для того чтобы Squid работал с squid2mysql нужно в squid.conf прописать следующие параметры: # параметры авторизации auth_param basic program /usr/local/squid/sbin/sqauth # путь с скрипту, # который возвращает OK или ERR auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours # ВСЕХ загоняем под proxy acl all src 0.0.0.0/0.0.0.0 acl users proxy_auth REQUIRED http_access allow users http_access deny all # Заставляем Squid проверять не перекачал ли кто ? authenticate_ttl 60 seconds 10) Запустите /usr/local/mysql/bin/mysql. Если вы достаточны сильны в MySQL, то подредактируйте файл squid2mysql.sql Например, такая строка разрешает подсоединяться к базе под именем vasilisc и паролем 123456 c любого хоста сети. GRANT ALL PRIVILEGES ON *.* TO vasilisc@"%" IDENTIFIED BY `123456`; Такая строка дает по умолчанию 30 Mb в месяц лимит maxmonthly bigint(15) NOT NULL default `31457280` Примените схему, которая создаст необходимые таблицы. mysql>\. /path_to/squid2mysql_v/install_info/squid2mysql.sql Могут появляться сообщения об ошибках, но это нормально, так как схема squid2mysql.sql содержит SQL команды удаления таблицы (DROP TABLE) и создания новой (CREATE TABLE) с таким же именем. Но в первый раз таких таблиц НЕТ, поэтому появляются сообщения об ошибках. 11) Рекомендую сделать в squid.conf следущее: cache_effective_user nobody cache_effective_group nogroup То есть Squid будет работать от пользователя nobody и группа nogroup. Не забудьте сделать nobody владельцем каталога Squid. # chown -R nobody:nogroup /usr/local/squid/ Обеспечьте доступ пользователю nobody в каталоги: /var/log/squid/ /var/arch/squid/ 12) Добавьте тестового пользователя в базу данных либо с помощью php-скриптов из каталога site_php, либо непосредственно с консоли MySQL. mysql>\u squidlog mysql>INSERT INTO auth VALUES(`vasilisc`,PASSWORD(`123456`),`N`,0,0,31457280); mysql>INSERT INTO usernames VALUES(`vasilisc`,`Alekseenko V N`,`simple user`,`OVIT`,`11-22-33`,`s@s.ru`,`2004-08-01`); Или подправьте файл insert_user.sql и вызовите его. mysql>\. /path_to/insert_user.sql Проверьте работоспособность! Если не заработало пройдите все этапы еще раз внимательно. Прочтите логи Squid, MySQL, FreeBSD. Просмотрите содержимое файлов, особенно include.php, sqauth, perl-скрипт squid2mysql, squid.conf. Загляните на оффициальные сайты продуктов, прочтите FAQ. Мои комментарии: 1) Я изменил во всех скриптах имя пользователя для коннекта к MySQL. Был пользователь squidroot с паролем sqroot стал root (это не FreeBSD root, а root MySQL - это разные вещи) c пустым паролем. Это связано с тем, что портирование под FreeBSD происходило нелегко, прибавьте баги в оригинальных скриптах. 2) sqauth - написанный мной авторизационный sh-скрипт. Его работоспособность на моей совести. Он пока упрощен до определения месячного лимита, хотя оригинальный скрипт проверял недельный и дневной лимиты. 3) perl-скрипт squid2mysql - был мной изменен, так как там был баг с удвоением первой URL. Вы посетили сайт первый раз в этот день и размер скаченой html удваивался, потом проблема исчезала до следущего дня. Вот и все, надеюсь все установилось и работает вам на благо! Cкажите спасибо Eugene V. Chernyshev за Squid2MySQL (http://evc.fromru.com/squid2mysql/).