Проект переехал на http://iclub.keepweb.ru

Разработка программного комплекса для управления интернет-клубом, работающем под GNU/Linux

Введение

В настоящее время подавляющее большинство интернет/игровых-клубов работают под управлением ОС семейства windows®. В качестве программного комплекса для управления клубом, как правило, используются коммерческие программные продукты «astalaViSta Money Saver», «astalaViSta SuperViSor»(http://www.astalavista.ru), либо «ClubControl»(http://www.clubcontrol.ru).
До миграции в клубе использовался комплекс «astalaViSta SuperViSor».
Этот продукт позволяет практически полностью автоматизировать деятельность интернет-клуба, но разработан для работы в среде windows®. Кроме того это коммерческий продукт с закрытым кодом.
В связи с решением о миграции интернет-кафе на GNU/Linux возникла необходимость в аналогичной по функционалу системе для *nix-like ОС.
После того, как поиск в интернете не дал результатов, руководство клуба поставило задачу разработать подобную систему.

В настоящее время разработанная система прошла внедрение и успешно эксплуатируется в трёх интернет-клубах.
Интернет-клуб Linux

Постановка задачи

Программный комплекс должен выполнять следующие функции:

  1. блокирование доступа к компьютеру, до факта «посадки» клиента
  2. блокирование доступа к компьютеру по истечении оплаченного клиентом времени
  3. возможность «посадки» клиента «по завершению»
  4. включение/блокировка доступа к интернет
  5. детальный отчёт по трафику клиента с разбивкой по посещённым им сайтам(на случай возникновения конфликтных ситуаций)
  6. итоговый отчёт по сессии работы с клиентом
  7. возможность динамически добавлять/уменьшать время сессии
  8. поддержка сеансов работы операторов
  9. протоколирование всех действий оператора
  10. ведение финансовой отчётности
  11. поддержка тарифным планов
  12. управление биллингом(добавление новых машин, управление тарифными планами) без участия программиста
Кроме того консоль оператора должна работать не только под unix, но и под windows® Т.е. по сути, должна быть кроссплатформенной.

Структура


Интернет-клуб на Linux

Реализация

Система реализована на языках perl и php4.
Серверная часть написана под FreeBSD.
Используемая СУБД - mysql.
Интернет-клуб Linux

Управления клиентскими хостами.

Задача - открытие/блокировка клиентских хостов ядром биллинга, либо с консоли оператора.

Клиентская часть как таковая отсутствует. Согласно принципам unix-way управление осуществляется комбинацией штатных приложений.

I. Для управления авторизации было принято решение использовать pam-mysql(http://pam-mysql.sourceforge.net/)

прим. Библиотека Pluggable Authentication Modules (PAM) является обобщённым API для служб, связанных с аутентификацией, которые позволяют системному администратору добавлять новые методы аутентификации простой установкой новых модулей PAM, и изменять политику аутентификации посредством редактирования конфигурационных файлов.
Таким образом, можно заставить менеджер входа в систему принимать решение об авторизации пользователя по значению поля в таблице на сервере, что в свою очередь даёт возможность скриптам биллинга управлять исходом авторизации хостов меняя значение в поле таблицы СУБД.

настройка:
  • устанавливаем пакет pam-mysql
  • создаём /etc/pam.d/kdm(в случае использования KDM) следующего содержания:
    auth optional pam_mysql.so user=pam passwd=secret db=bill host=192.168.1.101 table=pam usercolumn=login passwdcolumn=passwd where=active=1&&host_id=2 plain
    account required pam_mysql.so user=pam passwd=secret db=bill host=192.168.1.101 table=pam usercolumn=login passwdcolumn=passwd where=active=1&&host_id=2 plain
    password required pam_stack.so service=system-auth
    session required pam_stack.so service=system-auth
    session optional pam_console.so
Таким образом, display manager не пустит пользователя в систему, пока значение поля active таблицы pam на сервере не будет установлено в '1'
Авторизация проходит с пустым паролем, дабы у пользователя не возникало вопросов "как мне войти в систему?".

II. Завершение сессии осуществляется через rsh(remote shell)
настройка:
  • устанавливаем пакеты rsh и rsh-server
  • активируем rsh-server в /etc/xinetd.d/rsh
  • добавляем в /etc/hosts ip и hostname сервера:
    192.168.1.101 www.local
  • создаём /etc/hosts.equiv следующего содержания:
    www.local
    localhost host-02.local

  • создаём пользователя www и через sudo даём ему права без пароля вызывать killall:
    www ALL=(root) NOPASSWD:/usr/bin/killall
Таким образом, для того чтобы заблокировать хост достаточно вызвать на сервере rsh -l www ip sudo -u root /usr/bin/killall -u user

назначение скриптов

core.pl - ядро биллинга.
функции:
  • согласно выбранному тарифному плану вычисляет текущий баланс клиента
  • автоматически завершает сеанс, при истечении времени
запускается каждые 10 секунд.
counter.pl - учёт трафика.
функции:
  • снимает показания счётчиков с правил ipfw для хостов, при посадке на которые был выбран тарифный план с интернетом.
  • проверяет доступность хостов(через icmp)
запускается каждые 10 секунд.

index.php - интерфейс консоли оператора.
func.php - реализация часто используемых функций.
report.php - скрипт, формирующий детальные отчёты по трафику.
last.php - скрипт, формирующий итоговый отчёт.
prolong.php - скрипт, позволяющий увеличить время сессии.
decrease.php - скрипт, позволяющий уменьшить время сессии.
calc.php - реализация программы-калькулятора, позволяющей оператору расчитать исходя из суммы время сессии с учётом разных тарифных планов.
calendar.php - скрипт, формирующий календарь. вызывается при бронировании хоста.
bron.php - скрипт, управляющий бронированием хостов на ночь.

Учёт трафика

Каждые 10 секунд данные по трафику снимаются скриптом counter.pl со счётчиков правил ipfw типа count и заносяться в таблицу sessions. Для этого для каждого хоста заводиться три правила:

  • /sbin/ipfw add N*100 deny ip from 192.168.1.N to any
    - в случае если клиент садиться на тарифный план с интернетом, правило удаляется.
  • /sbin/ipfw add N*100+1 count tcp from any to 192.168.1.N via vr0
    - входящий трафик
  • /sbin/ipfw add N*100+2 count tcp from any to 192.168.1.N via vr0
    - исходящий трафик
где N - идентификатор хоста.

При посадке клиента скрипт index.php, вызывая /usr/local/bin/sudo /sbin/ipfw zero NUM, обнуляет счётчики этих правил.

Для получения детальной статистики используется transparet proxy.
Скрипт report.php вынимает из таблиц sessions и hosts поля tm0, tm1, hid и ip для сессии клиента, затем анализирует логи squid и выбирает лишь те значения, которые совпадают со временем сессии.

Консоль оператора

С целью избежания перехвата пароля оператора по сети, доступ к консоли осуществляется по https протоколу.

Внешний вид главного окна консоли оператора

Консоль имеет интуитивно понятный интерфейс и позволяет оператору производить следующие операции:

  • начало/завершение сессии
  • оперативный контроль времени/трафика сессии
  • возможность добавлять/уменьшать время сессии
  • формирование детальных отчётов по трафику
  • формирование итогового отчёта по сессии
    (доступно только после завершения сессии)
  • контроль состояния хоста
Linux FreeBSD Интернет-клуб
В случае неисправности хоста, все элементы управления им блокируются автоматически.



детальный отчёт по трафику итоговый отчёт


календарь управление бронированием

Интернет-клуб на ОС Linux и FreeBSD.

Сайт проекта http://iclub.keepweb.ru


Каталог ИТ