Ключевые слова:traffic, freebsd, squid, (найти похожие документы)
From: Василий <vasilisc at rambler.ru>
Newsgroups: email
Date: Mon, 10 Jul 2004 18:21:07 +0000 (UTC)
Subject: Squid2MySQL для FreeBSD 5.2 для учета трафика через squid
Оригинал: http://www.uvsw.narod.ru/project/squid2mysql.html
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/).
хм, насколько я могу понять из описания, набольшой нагрузке это будет падать, squid может писать лог быстрее чем будет считывать скрипт и squid будет впадать в ступор...
Все сделал как надо. Работает. Вопрос: если при авторизации в конце имени пользователя добавить пробел, то авторизатор его не учитывает и пускает, а в логи пишется "Пользователь%20", соответственно пользователь с пробелом в конце это уже другой пользователь и трафик не учитывается. Кто может посоветовать вариант решения этой проблемы?
да, чорт ево дери, теряется пайп. Но мне кажется, что стороны пайпа в этой данной строчке перепутаны местами. Вообще кто пробовал?
/usr/local/squid/sbin/squid2mysql | tail -f /var/log/squid/access.log &
вот такая шняга при попытке доступа к базе через админку - а перловое все нормально работает и коннектится и юзеров пускает....
Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in /usr/local/www/data-dist/admin/include.php on line 18
Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/data-dist/admin/include.php:18) in /usr/local/www/data-dist/admin/index.php on line 10
Warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/data-dist/admin/include.php:18) in /usr/local/www/data-dist/admin/index.php on line 11
вопрос на засыпку.
если я делаю (совершенно случайно)
killall -HUP squid
либо
squid -k reconfigure
то пайп разрывается. как отследить это деляние в perl'овом скрипте?
Has any one installed squid2mysql and got it working?
I need some help on it. The problem is the when we try
to login as squidroot it does not authenticate and
keeps giving back the authentication screen. Please
help.