Как считать трафик на 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 для просмотра
своей статистики по трафику.