Как считать трафик на FreeBSD. Часть третья. Веб-интерфейс для пользователей
Автор TMeter
В предыдущих статьях я рассказал о том, как заносить
трафик в MySQL таблицу и построить веб-интерфейс просмотра счетчиков
трафика для сисадмина. Но мы пойдем дальше. Теперь задача усложнена до предела -
предоставить возможность пользователям самим смотреть свою статистику
через веб-браузер, причем одному пользователю может принадлежать несколько
IP адресов и ему разрешено смотреть статистику только по своим адресам.
Кроме того, каждый пользователь должен пройти аутентификацию перед
просмотром статистики. А на сисадмина возлагается почетная обязанность
управлять пользователями - добавить нового, изменить пароль пользователю,
назначить новый IP адрес - и это все через веб-интерфейс.
Требования к программному обеспечению
Сначала нам потребуется сервер Apache с включенными модулями
PHP и mod_auth_mysql (модуль для аутентификации с возможностью хранения
базы пользователей и паролей в MySQL базе данных). mod_auth_mysql можно
использовать от Zeev Suraski, который в FreeBSD находится
в /usr/ports/www/mod_auth_mysql.
Проектирование таблиц базы данных
Прежде всего, у нас есть таблица traffic, в которой хранится
трафик по каждому интересному для нас IP адресу. Формат этой таблицы
описан в предыдущей статье. Другая таблица
(назовем ее mysql_auth) будет содержать сведения о пользователях
для аутентификации средствами Apache. Ее формат:
Имя поля | Тип поля | Назначение поля |
userid | int, primary key, AUTO_INCREMENT | Идентификатор пользователя |
username | char(25) | Имя пользователя |
passwd | char(25) | Пароль пользователя в plaintext |
groups | char(25) | Группа для пользователя (требование mod_auth_mysql, в нашей системе не используется) |
descr | char(100) | Описание пользователя |
Рис. 1. Формат таблицы mysql_auth
И, наконец, потребуется таблица, которая бы "привязывала" пользователей
к IP адресам из таблицы traffic. Такая связь называется "один-ко-многим":
Имя поля | Тип поля | Назначение поля |
userid | int | Идентификатор пользователя |
ip | char(16) | IP адрес |
Рис. 2. Формат таблицы users2ip
Шаг 1. Настройка виртуальных серверов
Нам потребуется два виртуальных сервера. Первый (например,
lanadmin.tmeter.ru) - для сисадмина, где можно будет просматривать
статистику по всем IP адресам и управлять пользователями. Второй
(например, stat.tmeter.ru) - для пользователей. Используя свой пароль, пользователи могут здесь
посмотреть статистику по разрешенным для них
IP адресам. Сервер stat.tmeter.ru необходимо сконфигурировать так,
чтобы доступ к нему осуществлялся только аутентифицированным пользователям
используя модуль mod_auth_mysql. Естественно, что база данных пользователей
и паролей должна храниться в таблице MySQL.
Например:
<VirtualHost *>
DocumentRoot /usr/local/virtual/stat/htdocs
ServerName stat.tmeter.ru
ErrorLog /usr/local/virtual/stat/logs/error.log
CustomLog /usr/local/virtual/stat/logs/access.log common
DirectoryIndex index.php index.htm index.html
AddType application/x-httpd-php .php
<Directory /usr/local/virtual/stat/htdocs>
AuthName "LanStatSQL"
AuthType Basic
Auth_MySQL_DB ipacc
Auth_MySQL_Password_Table mysql_auth
Auth_MySQL_Encryption_Types Plaintext
Auth_MySQL_Encrypted_Passwords off
Auth_MySQL on
<Limit GET POST>
require valid-user
</Limit>
</Directory>
</VirtualHost>
|
Шаг 2. Настройка виртуального сервера для сисадмина
Распакуйте содержимое архива ipacc_trafd3_lanadmin.tgz
в корневую директорию сервера lanadmin.tmeter.ru и отредактируйте параметры
подключения к базе данных в заголовке скрипта "inc/procs.inc". Создайте пустые
таблицы mysql_auth и users2ip.
Шаг 3. Настройка виртуального сервера для пользователей
Распакуйте содержимое архива ipacc_trafd3_stat.tgz
в корневую директорию сервера stat.tmeter.ru и отредактируйте параметры
подключения к базе данных в заголовке скрипта "inc/procs.inc".
Откройте страницу http://lanadmin.tmeter.ru, создайте пользователей
и назначьте им IP адреса. После чего, пользователи внесенные в базу данных,
mysql_auth могут заходить на сервер http://stat.tmeter.ru для просмотра
своей статистики по трафику.