Руководство по установке squid2mysql под FreeBSD
Программное обеспечение
Статья была опубликована 1 февраля 2010 года в 00:00, а последний раз правилась 1 февраля 2010 года в 10:46.
Постоянная ссылка: http://www.nixp.ru/articles/31.html
Данная статья описывает этапы и особенности установки исправленной версии squid2mysql под FreeBSD.
Что такое Squid2MySQL? Это авторизация и учет трафика пользователей в Интернете. Есть proxy-сервер Squid и база данных MySQL, Squid занимается кэшированием информации, а MySQL хранит информацию о пользователе (имя, пароль, скаченные URL и т.д).
Связующее звено — это Squid2MySQL 1.0.0 от Eugene V. Chernyshev для Linux. Для тех, кто использует Linux в качестве OS для серверов, лучше будет посетить сайт автора Squid2MySQL и использовать информацию с авторского сайта. Я лишь портировал 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 под 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 и пускает Squid в Интернет, иначе — ERR. Этот скрипт писал я (оригинальный скрипт больше и позволяет лимитировать по дням и неделям), так что по его работе претензии предъявляйте мне на e-mail.
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 & /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, то обращайтесь на авторский сайт.
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.
-
Популярные в этом разделе:
- «Обзор системы фильтрации спама rspamd: возможности, конфигурация, работа»,
- «Защищаем себя средствами GnuPG»,
- «Своё интернет-радио с Icecast».
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Проект давно мёртв? У меня было оно сделано года 3 назад на фрюхе, потом фрюха умерла, попытался завести на Убунте, но возникли проблемы и отсутствие свободного времени :( А так очень нравилось!