Squid2MySQL для FreeBSD 5.2 для учета трафика через squid

OSzone.net » Видео » Unix » Интернет » Разное » Squid2MySQL для FreeBSD 5.2 для учета трафика через squid
Автор: Алексеенко Василий aka vasilisc
Иcточник: http://uvsw.narod.ru/project/squid2mysql.html
Опубликована: 05.03.2005
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/).


Ссылка: http://www.oszone.net/2855/