Statman: Система управления пользователями Squid
18.07.2003 | khomya

Общие принципы

Программа состоит из 2-х частей серверной части и клиентской. Роль серверной части выполняет СУБД PostgreSQL. Клиентская часть состоит из следующих модулей:

  1. контрольный – выполняется на прокси-сервере. Цели – проверка access.log, изменение squid.conf, обновление данных на сервере баз данных.
  2. информационный – состоит из модуля работающего через Web-интерфейс. Сюда входит выдача информации по конкретному пользователю.
  3. управляющий – создание новых пользователей, обновление лимита, обновление данных о пользователе.

Система реализована на СУБД PostgreSQL, для доступа используется стандартный порт 5432.

Формат полей

База: main_db Таблица: squid_users

Имя поля Тип поля Описание
user_name varchar(10) имя пользователя в системе SQUID
user_desc varchar(60) описание пользователя (ФИО)
user_unit int4 подразделение
user_mail varchar(30) адрес электронной почты
user_phone varchar(12) телефон
user_pwd varchar(12) пароль
total_size float общий размер выкачанного пользователем (используется для анализа и передается в контрольный модуль), байт
user_limit float лимит пользователя глобальный (используется для анализа и передается в контрольный модуль), байт
limit_of_pay float последний оплаченный лимит пользователя, байт
date_of_pay date дата последнего платежа
state int4 состояние пользователя (включен/отключен)
size_current float общий размер выкачанного пользователем на текущий момент, байт
new_pw_req int4

База: main_db Таблица: squid_funds

Имя поля Тип поля Описание
user_name varchar(10) имя пользователя в системе SQUID
date_of_pay date Дата последнего платежа
funds_virtual float Сумма платежа при безналичном расчете
funds_cache float Сумма платежа при наличном расчете

База: main_db Таблица: squid_sizes

Имя поля Тип поля Описание
user_name varchar(10) имя пользователя в системе SQUID
date_of_check date Дата
date_size float Выкачанный объем, Мб

База: main_db Таблица: units

Имя поля Тип поля Описание
id int4 serial
unit varchar(60) подразделение

База: main_db Таблица: prices

Имя поля Тип поля Описание
amount float Объем, байт
cost float Стоимость 1Мб

Для создания таблиц можно воспользоваться программой psql (Postgres Interactive Terminal), которая поставляется вместе c PostgreSQL, и скриптом на языке SQL (поставляемым вместе с серверной частью). Перед выполнением импорта таблиц советую поменять пароли установленные по умолчанию как «changethis» в файле create_tables.sql:

$ /usr/local/pgsql/bin/createdb -E KOI8 main_db
$ /usr/local/pgsql/bin/psql main_db
Welcome to psql, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

main_db=# \i create_tables.sql

По умолчанию раздел создания пользователей и раздача прав на доступ к таблицам закомментирован.

Безопасность

Авторизация пользователей реализована двумя путями:
1) через PAM-механизм SQUID (кроме FreeBSD 5.4 и выше – порушена поддержка libpam_pgsql). Ниже показано в какие файлы нужно внести изменения:
squid.conf:

auth_param basic program /usr/local/libexec/squid/pam_auth -n squid
auth_param basic children 30
auth_param basic realm Access Server
auth_param basic credentialsttl 2 hours
acl public proxy_auth REQUIRED
http_access allow public

/etc/pam.conf

squid auth required pam_pgsql.so
squid account required pam_pgsql.so

/etc/pam_pgsql.conf

host = database
database = statman_db
user = ctl_user
password = changethis
table = squid_users
user_column = user_name
pwd_column = user_pwd
expired_column = state
newtok_column = new_pw_req

2) через собственный auth-helper:

$ cc -c -I pgsql_auth.c
$ cc -o pgsql_auth pgsql_auth.o -L -lpq
# cp pgsql_auth /usr/local/bin/

/usr/local/etc/pgsql_auth.conf

hostaddr=10.0.0.1
port=5432
dbname=squiddb
dbuser=testuser
dbpwd=testpwd

squid.conf

auth_param basic program /usr/local/bin/pgsql_auth /usr/local/etc/pgsql_auth.conf

В таблице squid_users лежат имена и пароли пользователей и статус учетной записи (state), меняя значение state на 1 мы указываем SQUID что бюджет пользователя истек.
Доступ к БД реализован на 3 уровнях: пользователи обращающиеся за своей статистикой могут только просматривать поля БД; управляющий имеет полный доступ к данным; контрольный модуль только изменение данных, просмотр и удаление(не допускается создание новых записей). Эта функциональность реализуется созданием как минимум 3-х пользователей для работы с базой данных:

  • для просмотра баланса
  • для учета трафика
  • для работы с пользователями (добавление, удаление,пополнение баланса)

Установка

Что не рассматривается в этом разделе:

Компиляция, настройка и установка БД PostgreSQL, SQUID, Apache, настройки сети, команды работы с файловой системы UNIX и прочие тривиальные вещи.

Процесс установки

Установку системы управления проще разбить на несколько этапов:

  1. Выкачать для начала все необходимое
  2. Настроить PAM-механизм авторизации пользователей (см. выше)
  3. Создать БД и таблицы (формат полей см.выше).
  4. Создать каталог(/usr/local/statman2) на прокси-сервере, и скопировать туда control.pl ctl_periodic.pl control.conf. Установить, если необходимо Perl-модули:  DBI и DBD:Pg для работы с БД, Mail::SMTP – для генерации ежесуточных отчетов
  5. Поправить под себя control.conf (см. Модуль автоматического управления и мониторинга)
  6. В squid.conf описать механизм авторизации и группу пользователей (название группы может быть любым, главное чтобы почледние две строчки выглядели так же как показано ниже):

    auth_param basic children 30
    auth_param basic realm Access Server
    auth_param basic credentialsttl 2 hours
    acl public proxy_auth REQUIRED
    http_access allow public
  7. Настроить запуск скриптов (control.pl и ctl_periodic.pl) по crontab
  8. На Web-сервер установить Perl-модули: DBI,DBD-Pg,HTML::Template, Digest::MD5
  9. Для снятия пользователями статистики работы и административных задач, в каталог cgi-bin Web-сервера положить каталог statman из установочного пакета
  10. Не забыть поправить в конфигурационном файле statman.conf параметры БД – сервер, порт, имя БД, имя таблицы, имя пользователя и пароль для доступа и т.д.
  11. Поправить на свой вкус шаблоны
  12. Зайти на страницу администрирования, настроить тарифы и подразделения

Модуль автоматического управления и мониторинга

Описание работы

Запуск модуля производится по crontab’у, причем интервалы запуска имют значения для более оперативного реагирования на превышения лимита пользователем, временем задержки при внесении в базу нового пользователя и при удалении пользователя из базы. Мои условия работы SQUID:

  • ежесуточная перезапись лог-файла
  • до 200 зарегистрированных пользователей
  • до 30 постоянно находящихся в режиме online
  • пользователи получают доступ к И-нет не только со своих компьютеров, но и с любого компьютера подключенного к сети

Вследствие этих причин, периодичность запуска по crontab 5 минут, с перерывом на 1 час. Во время перерыва производится окончательная калькуляция суточных данных о пользователях, после этого производится перезапись логфайла. А теперь, перейдем собственно к описанию работы. После запуска модуль соединяется с базой данных, получает данные о пользователях, проводит парсинг логфайла SQUID и анализирует полученную информацию по каждому пользователю. Анализ заключается в проверке превышения лимита суммой трафика полученного из access.log и общего объема уже выкачанного трафика по прошедшие сутки, при превышении «бит состояния» пользователя переводится в состояние 1. После подсчета обновляется база данных, т.е. вносятся значения текущего выкачаннго объема состояние пользователя. Для обнуления ежесуточных объемов пользователей разработан дополнительный скрипт. Его функции заключаются в сохранении отработанного объема за сутки в базе и помещение этого объема(за истекшие сутки) в поле общего объема выкачанного пользователем, и отправляется суточный отчет администратору.

Файл конфигурации модуля

host= DNS имя сервера базы данных
port= порт БД
user= имя пользователя имеющего право на изменение и запрос данных из БД
pwd= пароль
database= имя базы данных
table= имя таблицы
squid_access_log= полный путь к лог-файлу SQUID
mail_host= адрес почтового сервера (используется для отправки отчетов администратору)
mail_sender= адрес электронной почты используемый при отправке отчетов
mail_rcpt= адрес электронной почты администратора
debug_output=[0,1] вывод отладочных сообщений (0-выкл/1-вкл)

Пример конфигурации

host=data-center.inner.ru
port=5432
user=control
pwd=BigBrother
database=service_db
table=squid_users
squid_access_log=/usr/local/squid/logs/access.log
mail_host=mail.inner.ru
mail_sender=squid-stat@inner.ru
mail_rcpt=squid-admin@inner.ru
debug_output=0

Web-интерфейс управления

Описание работы

Программа разработана на Perl с использованием модулей DBI, HTML::Template, CGI, Digest::MD5. Для конфигурирования используется файл statman.conf, располагающийся в том же каталоге что и statman.cgi.При удачной аутентификации производится запрос данных с сервера и последующий вывод пользователю в табличной форме. В программе разработаны функции добавления нового пользователя, удаление пользователя, увеличение лимита пользователя (доплата), изменение информации о пользователе, тарифы на оплату (в зависимости от покупаемого объема данных), смена пароля и группы пользователя.

Файл конфигурации

Синтаксис по большей части аналогичен control.conf, за исключением следующих полей:
user=webuser – имя пользователя используется stat.cgi
pwd=changethis – пароль пользователя используется stat.cgi
infodb= имя альтернативной базы данных где хранятся данные о подразделениях*
infodb_rw= режим доступа к альтернативной базе данных (0-RO/1-RW*
table=squid_users
units_table=user_units
grps_table=squid_groups
funds_table=squid_funds
prices_table=prices
sizes_table=squid_sizes
domain_table=squid_domains
template_path=./tmpl
* если альтернативная БД не используется, то _должно быть_ такое же значение как в database, режим доступа

Добавление пользователя

Для успешного добавлении пользователя необходимо заполнить поля имя пользователя (только латиница до 10 символов, если больше производится обрезание до 10 символов), величина оплаты (автоматически производится пересчет по соответствующему тарифу, также желательно указывать вид оплаты наличный или безналичный), описание пользователя (ФИО или подразделение), подразделение пользователя (выбирается из ниспадающего списка, если отсутствует, то вводится вручную, а затем для запоминания нажать кнопку справа от строки ввода), пароль (генерируется автоматически, вводится два раза и проверяется на идентичность). После нажатия кнопки ОК проводится добавление пользователя в БД и повторный запрос данных с сервера (этим объясняется задержка после добавления пользователя). Реально пользователь сможет работать сразу после регистрации.

Просмотр информации о пользователе

Для просмотра необходимо нажать на имя пользователя.
Можно просмотреть детализированную информацию о пользователе, при необходимости изменить ФИО пользователя, подразделение, телефон, адрес электронной почты, подразделение, пароль. Соответственно любой пользователь зарегистрированный в системе SQUID может просмотреть статистику своей работы при установленном на Web-сервере организации модуля stat.cgi.
Для распечатки информации о пользователе необходимо нажать на кнопку «>».

Доплата

Для доплаты нужно выбрать в таблице нужного пользователя и нажать кнопку «+». В доплате можно вводить сумму платежа. После нажатия кнопки ОК проводится обновление данных пользователя в БД и повторный запрос данных с сервера (этим объясняется задержка после добавления пользователя). Реально пользователь сможет работать сразу после внесения денег на счет.

Удаление

Пользователь удаляется без предупреждающих сообщений после нажатия на кнопку «-»

Настройка

По умолчанию таблица prices БД поставляется без тарифов, для изменения зайти в меню «Тарифы», нажать кнопку «Новый». Соответственно настраивается подразделения пользователей (в новой версии появилась брать подразделение пользоваителя из другой БД, подробнее см.информацию о конфигурационном файле).

см. Файлы » Софт » Биллинги » Statman 1.05

Просмотров новости: 2 548  <, , , >


-->