Глава 4. Настройка системы

После инсталляции система должна быть подвергнута процедуре настройки. Обычно следует начинать с настройки сервера.

Основные конфигурационные файлы сервера по умолчанию находятся в каталоге /etc/stargazer. Они включают в себя: основной конфигурационный файл stargazer.conf, файл описания направлений тарификации rules, набор скриптов On* и два каталога — conf-available.d и conf-enabled.d, содержащих конфигурационные файлы отдельных модулей. Для включения какого-либо модуля нужно сделать символическую ссылку на его конфигурационный файл в каталоге conf-enabled.d или прописать его конфигурационную секцию в разделе <Modules> файла stargazer.conf.

Конфигурационный файл /etc/stargazer/stargazer.conf

Файл имеет текстовый формат, содержащий пары ПАРАМЕТР = ЗНАЧЕНИЕ и секции <ИМЯ_СЕКЦИИ ПАРАМЕТРЫ_СЕКЦИИ>. Комментарии в файле начинаются с символа #. В файле описываются общие параметры, которые являются глобальными значениями для всего сервера биллинга, а также параметры соответствующих модулей. Параметры модулей должны быть заключены в секции:

    <Module имя_модуля>
      список параметров модуля
    </Module>
    

Имя модуля представляет собой имя файла этого модуля без префикса mod_ и суффикса .so. Например, секция конфигурации модуля remote_script (имя файла: mod_remote_script.so) может выглядеть так:

    <Module remote_script>
      SendPeriod = 15
      SubnetFile = subnets
      Password = 123456
      UserParams = Cash Tariff EnabledDirs
      Port = 9999
    </Module>
    

Описание глобальных параметров параметров:

  • Rules – обязательный параметр, указывающий серверу, где находится файл с правилами для подсчета трафика клиентов. Стандартное значение: /etc/stargazer/rules.

  • LogFile – обязательный параметр, указывающий серверу расположение файла, в который будут заноситься все сообщения системы. Стандартное значение: /var/log/stargazer.log.

  • PidFile — необязательный параметр, указывающий серверу где находится файл хранящий PID (идентификатор процесса) дэмона. По умолчанию это /var/run/stargazer.pid. Используется скриптами запуска/останова.

  • ModulesPath – обязательный параметр, указывающий серверу путь, где находятся подключаемые модули (плагины). Стандартное значение: /usr/lib/stg.

  • DetailStatWritePeriod – обязательный параметр, указывающий серверу через какое время должна записываться детальная статистика клиента. Стандартное значение: 1/6. Данный параметр может принимать следующие значения: 3 - раз в три часа, 2 - раз в два часа, 1 - раз в чаc, 1/2 - раз в пол часа, 1/4 - раз в 15 минут, 1/6 - раз в 10 минут.

  • StatWritePeriod – необязательный параметр, указывающий серверу периодичность записи в БД информации о статистике пользователя в минутах. При большом количестве пользователей эту величину стоит увеличить, так как запись в БД может занимать длительное время. По умолчанию имеет значение 10.

  • DayFee – обязательный параметр, указывающий серверу, в какой день месяца снимать с клиентских счетов сумму абонплаты, в соответствии с тарифными планами клиентов. Может принимать значения от 0 до 31, стандартное значение: 1. Следует помнить, что в некоторых месяцах не более 28 дней. Значение 0 соответствует последнему дню месяца по календарю.

  • DayResetTraff – обязательный параметр, указывающий серверу в какой день месяца сбрасывать помесячную статистику клиентов и осуществлять переход на новый тариф, если он был изменен у клиента. Может принимать значения от 0 до 31, стандартное значение: 1. Следует помнить, что в некоторых месяцах не более 28 дней. Значение 0 соответствует последнему дню месяца по календарю.

  • SpreadFee – обязательный параметр, указывающий серверу производить ли «размазанное» снятие абонплаты. Может принимать значения yes и no. При указании значения yes сумма абонплаты указанная в тарифе пользователя будет сниматься не раз в месяц, а каждый день равными долями. Стандартное значение: no.

  • FreeMbAllowInet – обязательный параметр, указывающий серверу выполнять ли для пользователя скрипт OnConnect, если у него на балансе отсутствуют средства, но остался предоплаченный трафик. Может принимать значения yes и no. Стандартное значение: no.

  • WriteFreeMbTraffCost – обязательный параметр, определяющий как будет писаться стоимость трафика в детальной статистике. Может принимать значения yes и no, стандартное значение: no. При указании значения yes в детальной статистике пользователя стоимость трафика будет писаться в любом случае, даже если он попадает в FreeMb. При указании значения no доя исчерпания FreeMb в детальной статистике будет указана нулевая стоимость трафика.

  • DayFeeIsLastDay – обязательный параметр, указывающий серверу когда снимать абонплату. Может принимать значения yes и no, стандартное значение: yes. Это влияет на то, как будет снята абонплата (АП) при переходе на новый тариф. Если у пользователя был тариф A с АП=100 и он хочет перейти на тариф B с АП=200, то при переходе на новый тариф со счета пользователя снимется 100, если указано значение yes (абонплата снята до смены тарифа), и 200, если указано значение no (абонплата снята перед сменой тарифа).

  • ExecutersNum – необязательный параметр который определяющий сколько скриптом может выполняться одновременно (регулирует количество процессов stg-exec). По умолчанию имеет значение 1. Если выполнение ваших скриптов занимает много времени имеет смысл увеличить это значение. Каждый исполнитель скриптов блокируется на время, пока отработает скрипт. Если исполнителей несколько — они принимают скрипты на выполнение по принципу «кто успел».

  • StgMsgKey – необязательный параметр отвечающий за идентификатор очереди сообщений для исполнителя скриптов. По умолчанию данный параметр имеет значение 5555. Рекомендуется не изменять значение параметра без нужды. Его изменение целесообразно лишь в том случае, если в системе требуется запустить более одной копии сервера биллинга.

  • ShowFeeInCash – необязательный параметр, определяющий как будет показано состояние счета абонента в авторизаторе и сколько денег ему будет разрешено использовать в текущем месяце. Может принимать значения yes и no, по умолчанию имеет значение yes. При указании no в авторизаторе будет показано состояние счета без учета следующего снятия абонплаты. Так же эти деньги нельзя будет использовать для оплаты трафика в текущем месяце. Пример: у абонента на счету 200 денег при абонплате в 50 денег — в этом случае ему будет показано 150 денег в авторизаторе и он сможет в текущем месяце израсходовать только 150 денег, но снятие абонплаты не уведет его в «минус».

  • FullFee – необязательный параметр, указывающий серверу снимать полную абонплату, даже если учетная запись абонента была заморожена (или не существовала) часть учетного периода. Принимает значения yes и no, по умолчанию установлен в no.

  • MessagesTimeout — необязательный параметр, устанавливающий время жизни не отправленных сообщений абонентам. Время указывается в сутках. При превышении этого времени сообщение будет удалено, в т. ч. из БД. Если указано значение 0 то не отправленные сообщения никогда не будут удаляться из базы (в частности, это приведет к постепенному росту размера базы, увеличению нагрузки на сервер при авторизации абонентов и к тому что долго отсутствовавший абонент при авторизации получит все пропущенные сообщения). По умолчанию имеет значение 0.

  • FeeChargeType — необязательный параметр, регулирующий процесс снятия абонплаты. Может принимать значения 0, 1 и 2, по умолчанию имеет значение 0. При значении 0 абонплата снимается как обычно, при значении 1 абонплата снимается только если баланс пользователя положительный или равен нулю, при значении 2 абонплата снимается только если баланс пользователя больше или равен абонплате. Значение 2 следует использовать с осторожностью, т. к. при этом на безлимитных тарифах абоненты получат услугу бесплатно.

  • ReconnectOnTariffChange — необязательный параметр, указывающий серверу выполнить переподключение пользователя при смене тарифа. Может принимать значения yes и no, по умолчанию имеет значение no. При указании значения yes подключенные пользователи будут отключены непосредственно перед сменой тарифа и подключены сразу после нее. Может быть полезно для управления шейпером.

  • ScriptParams — необязательный параметр, который определяет дополнительный набор данных передаваемых в скрипты OnConnect и OnDisconnect. По умолчанию этот параметр пуст. В нем можно указать названия полей записи пользователя, разделенных пробелами, значения которых будут переданы в скрипты после стандартного набора, включающего login, ip, cash, id и dirs. Допустимые имена полей:

    "cash", "upload", "download", "lastCashAdd", "passiveTime", "lastCashAddTime", "freeMb", "lastActivityTime", "password", "passive", "disabled", "disabledDetailStat", "alwaysOnline", "tariffName", "nextTariff", "address", "note", "group", "email", "phone", "realName", "credit", "creditExpire", "ips", "userdata0" ... "userdata9".

    Так, например, если указать ScriptParams = tariffName userdata0 то список параметров передаваемых в скрипты будет: login, ip, cash, id, dirs, tariffName, userdata0. Названия параметров регистронезависимые.

  • DisableSessionLog — необязательный параметр позволяющий отключать запить сессий пользователя в БД. Может принимать значения yes и no. По умолчанию установлен в no, то есть запись сессий включена.

  • FilterParamsLog — необязательный параметр который позволяет фильтровать запись в журнал изменений параметров. Может принимать значения "*" (разрешена запись жернала для всех параметров) или список названий полей записи пользователя, разделенный пробелами. Допустимые имена полей такие-же как и для ScriptParams. По умолчанию имеет значение "*", то есть разрешено журналирование всех параметров. Если указать FilterParamsLog = cash tariffName password то в журнал изменений будут попадать только изменения параметров cash, tariffName и password. Изменения других параметров, например note, group или address в журнал не попадут.

  • Для именования направлений учета трафика в конфигурационном файле используется секция DirNames:

          <DirNames>
            DirName0 = «ИМЯ НАПРАВЛЕНИЯ»
            ...
            DirName9 = ПОСЛЕДНЕЕ_НАПРАВЛЕНИЕ
          </DirNames>
          

    Всего предусмотрено 10 направлений с нумерацией от 0 до 9. Направления, наименование которых состоит из нескольких слов, должны быть заключены в кавычки. Если наименование направления не указано, то система считает что данное направление не используется и не будет производить по нему никаких действий. Пример: DirName0 = Мир, DirName5 = "Локальные игры". Необходимо заметить, что текущая версия системы требует, чтобы имена направлений были указаны в кодировке KOI8-R. В противном случае абоненты не смогут их прочитать в статистике авторизатора, а администраторы — в конфигураторе.

Настройки всех модули (кроме store module), которые необходимо подключить к серверу в момент старта должны быть указанны внутри секции Modules:

    <Modules>
      <Module имя_модуля>
      список параметров модуля
      </Module>

      <Module имя_модуля>
      список параметров модуля
      </Module>
    </Modules>
    

Если модуль не имеет настраиваемых параметров, то он все равно должен быть указан. Некоторые модули, такие как store module, обязательно требуются при старте и без их подключения система не может быть запущена. По умолчанию для указания конфигурации модулей используются отдельные файлы из каталога conf-enabled.d. Для этого используется директива <IncludeFile ПУТЬ_К_ФАЙЛУ></IncludeFile>. Одна директива указана в секции Modules, а вторая в корне файла конфигурации (для store module).

Описание параметров модуля InetAccess (auth_ia) для работы с авторизаторами абонентов:

  • Port – обязательный параметр, определяющий на каком порту сервер будет принимать обращения авторизаторов абонентов. Стандартное значение: 5555.

  • UserTimeout – обязательный параметр, указывающий серверу, через какое время в секундах абонент будет отключен если авторизатор не отвечает серверу на запросы. Может принимать значения от 15 до 1200, стандартное значение: 65.

  • UserDelay – обязательный параметр, указывающий серверу время в секундах, через которое происходит опрос авторизатора абонента. Сервер шлет абоненту запрос подтверждения работы авторизатора, а авторизатор абонента должен прислать ответ что он находится в рабочем состоянии. Так же это время, через которое в авторизаторе обновляется статистика. Может принимать значения от 5 до 600, стандартное значение: 60. Следует заметить что значение UserDelay должно быть меньше чем значение UserTimeout.

  • FreeMb – обязательный параметр, определяющий в каком виде абоненту будет показано значение FreeMb. Данный параметр может принимать следующие значения:

    • 0 - количество бесплатных мегабайт в пересчете на цену нулевого направления;

    • 1 - количество бесплатных мегабайт в пересчете на цену первого направления;

    • 2 - количество бесплатных мегабайт в пересчете на цену второго направления;

    • ...

    • 9 - количество бесплатных мегабайт в пересчете на цену девятого направления;

    • cash - количество денег на которые клиент может бесплатно работать;

    • none - ничего не передавать.

  • LogProtocolErrors – не обязательный параметр, включающий расширенное журналирование ошибок протокола. Может принимать значения yes или no, значение по умолчанию: no.

Обмен данными авторизатора с сервером осуществляется по протоколу UDP. Можно указать несколько модулей авторизатора auth_ia для авторизации с разных портов.

Модуль авторизации auth_ao.

Модуль параметров не имеет. Используется для поддержки режима Always Online у абонентов. Без включения этого модуля установка параметра alwaysOnline для абонента эффекта иметь не будет. В режиме Always Online абонент находится в авторизованном состоянии все время, независимо от использования авторизатора. Тем не менее он может быть отключен по причине отсутствия средств на счету, заблокирован администратором или «заморожен». В этом режиме так же возможно использование авторизатора за одним исключением — абонент не может сам вызвать «отключение».

Описание параметров модуля SGConfig (conf_sg) для работы с конфигуратором:

  • Port – обязательный параметр, определяющий, на каком порту сервер будет принимать обращения конфигураторов. Стандартное значение: 5555.

Обмен конфигуратора с сервером осуществляется по протоколу TCP. Можно указать несколько модулей конфигуратора с указанием разных портов.

Описание параметров модуля файловой БД:

  • WorkDir – обязательный параметр, указывающий серверу где находится рабочая директория с файлами БД. Стандартное значение: /var/stargazer.

  • ConfOwner, ConfGroup, ConfMode – обязательные параметры, описывающие владельца, группу и права доступа на файлы конфигурации (conf) абонента соответственно. ConfOwner должен содержать корректное имя пользователя системы (см. файл /etc/passwd), стандартное значение: root. ConfGroup должен содержать корректное название группы в системе (см. файл /etc/group), стандарное значение: root. ConfMode должен содержать корректные права на файл (только ugo-биты), стандартное значение: 640.

  • StatOwner, StatGroup, StatMode – обязательные параметры, описывающие владельца, группу и права доступа на файлы статистики (stat) абонента соответственно. StatOwner должен содержать корректное имя пользователя системы (см. файл /etc/passwd), стандартное значение: root. StatGroup должен содержать корректное название группы в системе (см. файл /etc/group), стандарное значение: root. StatMode должен содержать корректные права на файл (только ugo-биты), стандартное значение: 640.

  • UserLogOwner, UserLogGroup, UserLogMode – обязательные параметры, описывающие владельца, группу и права доступа на файлы журналов (log) абонента соответственно. UserLogOwner должен содержать корректное имя пользователя системы (см. файл /etc/passwd), стандартное значение: root. UserLogGroup должен содержать корректное название группы в системе (см. файл /etc/group), стандарное значение: root. UserLogMode должен содержать корректные права на файл (только ugo-биты), стандартное значение: 640.

При создании каталогов (например для записи детальной статистики) используются те-же права, но с добавлением x-бита для всех ненулевых полей. Например: для 640 будут права 750, а для 644 будут 755. Для записи детальной статистики используются параметры StatOwner, StatGroup и StatMode. Для записи сообщений используются параметры ConfOwner, ConfGroup и ConfMode.

Описание параметров модуля для работы с СУБД Firebird:

  • Server – необязательный параметр, описывающий адрес сервера, на котором расположена СУБД. Может быть доменным именем или IP-адресом. Значение по умолчанию: localhost.

  • Database – необязательный параметр, описывающий путь к БД на сервере или ее псевдоним (alias). Значение по умолчанию: /var/stg/stargazer.fdb.

  • User – необязательный параметр, описывающий имя пользователя БД. Значение по умолчанию: stg.

  • Password – необязательный параметр, описывающий пароль пользователя БД. Значение по умолчанию: 123456.

  • IsolationLevel — Не обязательный параметр, описывающий уровень изоляции транзакций. Может принимать значения:

    • Concurrency (используется по умолчанию);

    • DirtyRead;

    • ReadCommitted;

    • Consistensy.

  • LockResolution — Не обязательный параметр, описывающий действие при блокировке. Может принимать значения значения:

    • Wait (используется по умолчанию);

    • NoWait.

Описание параметров модуля для работы с СУБД PostgreSQL:

  • Server – необязательный параметр, описывающий адрес сервера, на котором расположена СУБД. Может быть доменным именем или IP-адресом. Значение по умолчанию: localhost.

  • Database – необязательный параметр, описывающий имя БД. Значение по умолчанию: stargazer.

  • User – необязательный параметр, описывающий имя пользователя БД. Значение по умолчанию: stg.

  • Password – необязательный параметр, описывающий пароль пользователя БД. Значение по умолчанию: 123456.

  • Retries — необязательный параметр, описывающий количество попыток переподключения к СУБД в случае потери связи. Попытки производятся с интервалом в 1 секунду. Значение по умолчанию: 3.

Описание параметров модуля для работы с СУБД MySQL:

  • Server – обязательный параметр, описывающий адрес сервера, на котором расположена СУБД. Стандартное значение: localhost.

  • Database – обязательный параметр, описывающий название БД. Стандартное значение: stg.

  • User – обязательный параметр, описывающий имя пользователя БД. Стандартное значение: stg.

  • Password – обязательный параметр, описывающий пароль пользователя БД. Стандартное значение: 123456.

Описание параметров модуля ping для пингования абонентов:

  • PingDelay – обязательный параметр, определяющий, время в секундах между пингами одного и того же абонента. Стандартное значение: 15.

Описание параметров модуля Remote Script Executer (remote_script) для передачи команд на исполнение скриптов на NAS:

  • SendPeriod – обязательный параметр, определяющий время в секундах между посылками подтверждений того, что клиент находится в состоянии Online. Стандартное значение: 15.

  • Password – обязательный параметр, определяющий пароль для шифрования обмена между сервером биллинга и клиентом. Стандартное значение: 123456.

  • UserParams – обязательный параметр, определяющий какие параметры и в каком порядке передаются на NAS. Названия параметров должны быть разделены пробелом. Доступными параметрами являются: Cash, FreeMb, Passive, Disabled, AlwaysOnline, TariffName, NextTariff, Address, Note, Group, Email, RealName, Credit, EnabledDirs, Userdata0...Userdata9. Стандартное значение: Cash Tariff EnabledDirs.

  • Port – обязательный параметр, определяющий номер порта через который будет происходить обмен данными между сервером биллинга и клиентом. Может принимать значения от 1 до 65535, стандартное значение: 9999.

  • SubnetFile — обязательный параметр, представляющий собой путь к файлу с описанием соответствия сетей и NAS'ов. Стандартное значение: subnets. При указании относительного пути поиск будет производиться в каталоге с настройками (обычно это /etc/stargazer, но может быть переопределено указанием пути в качестве параметра при старте дэмона). Файл имеет формат: <сеть в CIDR-нотации> <адрес NAS'а>. Количество сетей не ограничено. Файл перечитывается заново при посылке процессу сигнала SIGHUP. Если файл содержит ошибки при старте дэмона — система не будет запущена. Если файл содержит ошибки при перечитывании — будут использоваться старые значения.

Описание параметров модуля radius для поддержки авторизации и аккаунтинга пользователей через сервер FreeRADIUS:

  • Port — обязательный параметр, определяющий порт, на который будут приходить запросы от FreeRADIUS. Может принимать значение от 1 до 65535, стандартное значение: 6666.

  • Password — обязательный параметр, задающий пароль для шифрования данных, передаваемых на FreeRADIUS. Должен совпадать с паролем в настройке плагина FreeRADIUS (rlm_stg.so). Стандартное значение: 123456.

  • AuthServices — необязательный параметр, задающий список сервисов которым будет позволена только авторизация с использованием БД Stargazer. При успешной авторизации абонент не переходит в состояние Online и для него не производится подсчет трафика. Названия сервисов в списке должны разделяться пробелами, по умолчанию этот параметр пуст.

  • AcctServices — необязательный параметр, задающий список сервисов, по которым будет производится аккаунтинг. При успешной авторизации в этих сервисах абонент переходит в состояние Online и для него производится подсчет трафика. Необходимо заметить, что в этом случае трафик захватывается как обычно, без использования возможностей протокола RADIUS (через пакет аккаунтинга InterimUpdate), т.к. это не позволяет классифицировать полученный трафик по направлениям. Названия сервисов в списке должны разделяться пробелами, по умолчанию этот параметр пуст.

Обмен данными между плагином и FreeRADIUS происходит по протоколу UDP.

Описание параметров модуля XML-RPC (conf_rpc) для поддержки протокола управления XML-RPC:

  • Port — обязательный параметр, определяющий порт на который будут приходить запросы XML-RPC. Может принимать значения от 1 до 65535, стандартное значение: 8080.

  • CookieTimeout — необязательный параметр, задающий время существования авторизационного Cookie в случае отсутствия активности в секундах. Значение по умолчанию: 1800 (30 минут).

Модуль захвата трафика cap_ether (только для ОС Linux).

Модуль не имеет параметров. Для захвата трафика используются так называемые «raw sockets», которые позволяют получить доступ к Ethernet-фреймам. Перехватывается весь трафик попадающий в сетевую подсистему ядра. При использовании обычной маршрутизации трафик будет посчитан два раза: на входящем интерфейсе и на исходящем. При использовании NAT удвоения трафика не происходит, так как NAT заменяет адрес источника. При интенсивном сетевом обмене или при высокой нагрузке на сервер, на котором происходит захват трафика, модуль может терять отдельные пакеты. Процент потерь тем выше чем выше скорость прохождения пакетов и чем выше загрузка сервера. Модуль рекомендуется использовать для ознакомления или в небольших сетях до 100 абонентов с трафиком до 100 Мбит.

Модуль захвата трафика cap_ipq (устаревший, только для ОС Linux).

Модуль не имеет параметров. Для захвата трафика используются передача пакетов из пространства ядра в пространство пользователя посредством очередей (ip queue). Для его работы требуется поддержка ip queueing в ядре (модуль ip_queue.ko) и специальная настройка файрвола (правило QUEUE для iptables). Следует обратить внимание на то что обычно требуется два правила в файрволе для полного перехвата: одно для входящих пакетов и одно для исходящих. Модуль гарантирует 100% перехват трафика, но так как пакет перед отправкой обязательно проходить через плагин — может приводить к снижению пропускной способности роутера. При этом следует обратить внимание на нагрузку на процессор, возможно имеет смысл заменить его на более производительный. В противном случае стоит рассмотреть использование модуля cap_nf для захвата трафика.

Описание параметров модуля захвата трафика cap_nfqueue (только для ОС Linux).

  • queueNumber — не обязательный параметр, определяющий номер очереди netfilter из которой будет происходить захват трафика.

Для захвата трафика используются передача пакетов из пространства ядра в пространство пользователя посредством очередей (netfilter queue). Модуль является заменой устаревшего cap_ipq. Для его работы требуется поддержка netfilter queueing в ядре (модуль xt_NFQUEUE.ko) и специальная настройка файрвола (правило NFQUEUE для iptables). Следует обратить внимание на то что обычно требуется два правила в файрволе для полного перехвата: одно для входящих пакетов и одно для исходящих. Модуль гарантирует 100% перехват трафика, но так как пакет перед отправкой обязательно проходить через плагин — может приводить к снижению пропускной способности роутера. При этом следует обратить внимание на нагрузку на процессор, возможно имеет смысл заменить его на более производительный. В противном случае стоит рассмотреть использование модуля cap_nf для захвата трафика.

Описание параметров модуля cap_bpf для захвата трафика (только для ОС FreeBSD):

  • iface — обязательный параметр, определяющий на каком интерфейсе будет происходить захват трафика. Параметр может быть задан более одного раза.

Для захвата трафика используется инфраструктура Berkeley Packet Filter, представляющая собой «продвинутый» аналог «raw sockets». Так как интерфейсы для перехвата указываются явно, дублирования трафика при обычной маршрутизации не наблюдается. Фильтрование пакетов не используется, перехват происходит по мере возможности, по этому этот модуль, как и cap_ether, тоже может терять пакеты при высокой нагрузке на сервер или высокой скорости прохождения пакетов. Рекомендуется использовать для ознакомления или для небольших сетей до 100 абонентов с трафиком до 100 Мбит.

Модуль захвата трафика cap_divert (только для ОС FreeBSD).

  • Port — необязательный параметр, указывающий порт на который будет происходить перенаправление трафика. Значение по умолчанию: 15701.

  • DisableForwarding — необязательный параметр, отключающий форвардинг пакетов. Значение по умолчанию: no.

Для захвата трафика используются divert-сокеты. Как и IPQ эта технология использует прохождение пакетов через пространство пользователя. Для работы модуля требуется поддержка divert-сокетов в ядре и специальная настройка файрвола. Для передачи пакета в пространство пользователя в файрволе используется правило divert или tee. Первое правило работает аналогично цели QUEUE для iptables — пропускает пакет через пространство пользователя перед отправкой. Соответственно, это может вызвать те-же проблемы с пропускной способностью роутера. Правило tee передает в пространство пользователя копию пакета, а оригинал отправляет дальше. Такой подход позволяет избежать снижения пропускной способности сервера при высокой нагрузке на него, так как исключается ожидание пакета в время его нахождения в пространстве пользователя. При использовании правила tee рекомендуется отключать форвардинг пакетов.

Описание параметров модуля cap_nf для захвата трафика:

  • TCPPort — необязательный параметр, указывающий порт который будет использоваться для приема данных при работе с NetFlow-proxy. Стандартное значение: 9996. Если параметр не указан — прием по протоколу TCP производиться не будет.

  • UDPPort — необязательный параметр, указывающий порт для приема NetFlow-дагарамм. Стандартное значение: 9996. Если параметр не указан — прием датаграмм по протоколу UDP производиться не будет.

В явном виде захват трафика не происходит. Данные о нем поступают от NetFlow-сенсора посредством протокола NetFlow. Это позволяет физически разделить перехват трафика и его учет. NetFlow-сенсор перехватывает трафик, и собирает данные о сессиях (в контексте UDP это передача данных между двумя портами в одном направлении). Информация о сессии включает в себя IP-адреса источника и назначения потока пакетов, номера портов источника и назначения, суммарную длину пакетов и различные дополнительные данные. NetFlow-трафик существенно меньше трафика, который он описывает, так как передается мета-информация а не сами данные. С учетом этого факта и того что биллинговый сервер теперь может не заниматься маршрутизацией пакетов и NAT'ом это существенно снижает нагрузку на него. Этот плагин рекомендуется использоваться в крупных сетях с развитой топологией, включающей несколько NAS'ов. Возможно использование совместно с аппаратными маршрутизаторами Cisco (они единственные имеют лицензию на аппаратную реализацию NetFlow). В качестве NetFlow-сенсоров можно использовать такие утилиты как fprobe, softflowd или ipcad. Так же можно использовать модуль ядра ipt_netflow (Linux) или ng_netflow (FreeBSD).

  • Server — обязательный параметр, указывающий IP-адрес сервера на котором находится snmpd. Стандартное значение: 127.0.0.1.

  • Port — обязательный параметр, указывающий порт на сервере через который будет происходить взаимодействие с snmpd. Стандартное значение: 199.

  • Password — необязательный параметр, задающий пароль для авторизации плагина в snmpd. По умолчанию пароль не используется.

Описание параметров модуля smux для мониторинга состояния Stargazer:

Модуль позволяет производить мониторинг биллинга средствами протокола SNMP. Он не реализует полноценный SNMP-сервер а лишь взаимодействует с существующим дэмоном snmpd, регистрируясь в нем для обслуживания определенного дерева параметров. В комплекте с биллингом идет MIB, описывающий доступные параметры для мониторинга. Параметры разделены на 6 секций, находящихся в узле stg24:

  • users (1) — секция, содержащая параметры относящиеся к абонентам:

    • totalUsers (1) — параметр, описывающий общее количество абонентов в системе;

    • onlineUsers (2) — параметр, описывающий количество подключенных абонентов;

    • authorizedUsers (3) — параметр, описывающий количество авторизованных абонентов в системе;

    • alwaysOnlineUsers (4) — параметр, описывающий количество абонентов работающих в режиме always online;

    • noCashUsers (5) — параметр, описывающий количество абонентов с нулевым или отрицательным балансом;

    • disabledDetailStatsUsers (6) — параметр, описывающий количество абонентов с отключенным учетом детальной статистики;

    • disabledUsers (7) — параметр, описывающий количество принудительно отключенных абонентов;

    • passiveUsers (8) — параметр, описывающий количество «замороженных» абонентов;

    • creditUsers (9) — параметр, описывающий количество абонентов с положительным кредитом;

    • freeMbUsers (10) — параметр, описывающий количество абонентов с неизрасходованными «бесплатными мегабайтами»;

    • tariffChangeUsers (11) — параметр, описывающий количество абонентов у которых с началом месяца будет изменен тариф;

    • activeUsers (12) — параметр, описывающий количество абонентов у которых имеется посчитанный трафик за сессию.

  • tariffs (2) — секция, содержащая параметры относящиеся к тарифам:

    • totalTariffs (1) — параметр, описывающий общее количество тарифов;

    • tariffUsageTable (2) — таблица использования тарифов, состоит из записей вида:

      • tariffIndex (1) — числовой индекс в таблице;

      • tariffName (2) — название тарифа (строка);

      • userCount (3) — количество абонентов использующих этот тариф.

  • admins (3) — секция, содержащая параметры относящиеся к администраторам системы:

    • totalAdmins (1) — параметр, описывающий общее количество администраторов, зарегистрированных в системе.

  • services (4) — секция, содержащая параметры относящиеся к услугам:

    • totalServices (1) — параметр, описывающий общее количество услуг по которым ведется учет в системе.

  • traffcounter (6) — секция, содержащая параметры относящиеся к учету трафика:

    • totalRules (1) — параметр, описывающий общее количество правил классификации трафика.

К параметрам можно обращаться по цифровым OID'ам или по именам. Для обращения к параметрам по именам нужно предоставить системе файл STG-MIB.mib содержащий информацию об именах, типах и OID'ах параметров с кратким описанием. Этот файл можно поместить в каталог ~/.snmp/mibs (в этом случае он будет доступен лишь одному пользователю) или в каталог /usr/share/snmp/mibs (в этом случае он будет доступен всем пользователям системы). Так же большинство утилит позволяют загружать mib-файлы из произвольного места явным указанием пути к ним. Для доступа к параметрам можно использовать утилиты из пакета NetSNMP (http://net-snmp.sourceforge.net/). Для того чтобы просмотреть иерархию параметров можно выполнить такую команду: snmptranslate -m +STG-MIB -Tp -IR stg24. Вывод команды должен быть приблизительно таким:

    +--stg24(1)
       |
       +--users(1)
       |  |
       |  +-- -R-- Integer32 totalUsers(1)
       |  +-- -R-- Integer32 onlineUsers(2)
       |  +-- -R-- Integer32 authorizedUsers(3)
       |  +-- -R-- Integer32 alwaysOnlineUsers(4)
       |  +-- -R-- Integer32 noCashUsers(5)
       |  +-- -R-- Integer32 disabledDetailStatsUsers(6)
       |  +-- -R-- Integer32 disabledUsers(7)
       |  +-- -R-- Integer32 passiveUsers(8)
       |  +-- -R-- Integer32 creditUsers(9)
       |  +-- -R-- Integer32 freeMbUsers(10)
       |  +-- -R-- Integer32 tariffChangeUsers(11)
       |  +-- -R-- Integer32 activeUsers(12)
       |
       +--tariffs(2)
       |  |
       |  +-- -R-- Integer32 totalTariffs(1)
       |  |
       |  +--tariffUsageTable(2)
       |     |
       |     +--tariffUsageTableEntry(1)
       |        |  Index: tariffIndex
       |        |
       |        +-- ---- Integer32 tariffIndex(1)
       |        |        Range: 0..255
       |        +-- -R-- String    tariffName(2)
       |        |        Textual Convention: DisplayString
       |        |        Size: 0..255
       |        +-- -R-- Integer32 userCount(3)
       |
       +--admins(3)
       |  |
       |  +-- -R-- Integer32 totalAdmins(1)
       |
       +--services(4)
       |  |
       |  +-- -R-- Integer32 totalServices(1)
       |
       +--corporations(5)
       |  |
       |  +-- -R-- Integer32 totalCorporations(1)
       |
       +--traffcounter(6)
          |
          +-- -R-- Integer32 totalRules(1)

    

Если в качестве ответа будет строчка «Unknown object identifier: stg24» то это означает что команда не смогла найти mib-файл. Для исправления этой ошибки следует либо скопировать файл STG-MIB.mib по одному из указанных выше путей или указать путь к каталогу где он находится с помощью ключа -M. Символ «+» перед STG-MIB обозначает что данные этого файла должны использоваться совместно с загружаемыми по умолчанию. Без этого символа данные будут использоваться автономно. Ключ -M работает схожим образом: символ «+» говорит о том что указанный путь нужно добавить к путям поиска mib-файлов, используемым по умолчанию. Без символа «+» будет использоваться единственный путь — указанный.

Для доступа к значениями параметров можно использовать следующую команду: snmpget -v2c -ccommunity_w -m +STG-MIB 10.0.0.1 stg24.users.totalUsers. Ключ -v указывает используемую версию протокола. На сегодняшний день существует 3 версии протокола: 1, 2 и 3. Версия 1 считается устаревшей и почти не используется. Версия 2 существует в двух модификациях: user-based (с суффиксом «u») и community-based (с суффиксом «c»). Версия 3 является самой новой и предоставляет широкие средства аутентификации, контроля целостности и шифрования. Ключ -c задает community для доступа к серверу. Ключ -m позволяет подключать дополнительные mib-файлы. При использовании доступа к параметрам по названию необходимо подключить mib-файл STG-MIB. Далее следуют два аргумента: адрес SNMP-сервера и название параметра. Утилита snmpget позволяет получить значение скалярных параметров — параметров имеющих только одно значение. Для доступа к таблицам и деревьям используется утилита snmpwalk имеющая такой-же синтаксис.

Можно обращаться к параметрам по цифровому OID: snmpwalk -v2c -ccommunity_w 10.0.0.1 .1.3.6.1.4.1.38313.1.2. В этом случае загружать дополнительные mib-файлы не требуется. «.1.3.6.1.4.1» - OID enterprise-ветки всего дерева SNMP. «38313» - официально полученный от IANA (http://www.iana.org) enterprise-номер, уникально идентифицирующий дерево параметров Stargazer. Следующая за ним цифра 1 говорит о том что мы работаем с узлом stg24. «.1.3.6.1.4.1.38313.1.2» - OID таблицы tariffUsageTable.

Для того чтобы установить взаимодействие между плагином smux и дэмоном snmpd нужно провести дополнительную настройку последнего. А именно: указать в конфигурационном файле (обычно это /stc/snmp/snmpd.conf) параметр smuxpeer (OID обслуживаемый плагином, в нашем случае это .1.3.6.1.4.1.38313) и smuxsocket (IP-адрес с которого будут приходить пакеты от smux-плагина).

Конфигурационный файл /etc/stargazer/rules

Файл rules описывает парвила классификации трафика по направлениям тарификации. Это текстовый файл, каждая строка которого описывает одно правило классификации. Формат строки файла:

  
  <протокол> <CIDR>[:<порт>[-<порт>]] <направление>
  

Допустимы следующие варианты указания протокола:

  • TCP — под правило будет попадать только TCP-трафик;

  • UDP — под правило будет попадать только UDP-трафик;

  • ICMP — под правило будет попадать только ICMP-трафик;

  • TCP_UDP — под правило будет попадать только TCP- и UDP-трафик;

  • ALL — под правило будет попадать любой трафик.

Варианты указания фильтра по IP-адресу и портам:

  • 192.168.0.1 — под правило будет попадать только трафик хоста 192.168.0.1;

  • 192.168.0.1/32 — правило действует аналогично предыдущему;

  • 192.168.0.0/24 — под правило будет попадать только трафик сети 192.168.0.0/24;

  • 192.168.0.1:80 — под правило будет попадать только web-трафик хоста 192.168.0.1;

  • 192.168.0.0/24:80 — под правило будет попадать только web-трафик сети 192.168.0.0/24;

  • 192.168.0.1:1024-65535 — под правило будет попадать только трафик с высоких номеров портов хоста 192.168.0.1;

  • 192.168.0.1/24:1024-65535 — под правило будет попадать только трафик с высоких номеров портов сети 192.168.0.0/24.

В качестве направления указывается один из идентификаторов DIR0-DIR9 или NULL. Трафик классифицируемый по направлению NULL системой никак не учитывается.

В файле допустимо наличие пустых строк и комментариев. Комментарием считается строка начинающаяся с символа #. Текст следующий за этим символом до конца строки не учитывается.

Классификация трафика происходит путем последовательного сравнения информации из заголовка пакета с правилами в файле сверху-вниз до первого совпадения. По этому более «узкие» правила должны описываться перед более «широкими». Например, чтобы выделить web-трафик определенного хоста в отдельное направление порядок указания правил должен быть следующим:

  TCP 192.168.0.1:80 DIR1
  ALL 192.168.0.1 DIR2
  

Если поменять эти строки местами то весь трафик хоста 192.168.0.1 попадет под первое правило.

Использование скриптов OnConnect, OnDisconnect, OnUserAdd, OnUserDel, OnChange

Для реакции на различные события в системе используются файлы OnConnect, OnDisconnect, OnUserAdd, OnUserDel, OnChange. Эти файлы расположены в каталоге с конфигурационными файлами системы и должны иметь бит выполнения. Обычно это скрипты на одном из скриптовых языков программирования (sh, perl, python, php), но могут быть и полноценными программами.

Наиболее часто используются файлы OnConnect и OnDisconnect. Система запускает их, соответственно, при включении и при выключении доступа для отдельных абонентов. Обычно эти файлы содержат в себе скрипты управления файрволом для разрешения и запрещения прохождения трафика от определенных абонентов. Файл OnConnect запускается при включении доступа абоненту, а файл OnDisconnect — при выключении.. При запуске файла OnConnect в него передаются следующие параметры (по порядку):

  1. login — логин абонента;

  2. ip — ip-адрес абонента;

  3. cash — состояние счета абонента;

  4. id — уникальный целочисленный идентификатор абонента (уникальность сохраняется в пределах одного запуска системы);

  5. dirs — список открываемых направлений (представлен строкой вида «0101100101», где первая цифра соответствует направлению DIR0 а последняя — DIR9).

При запуске файла OnDisconnect в него передаются следующие параметры (по порядку):

  1. login — логин абонента;

  2. ip — ip-адрес абонента;

  3. cash — состояние счета абонента;

  4. id — уникальный целочисленный идентификатор абонента (уникальность сохраняется в пределах одного запуска системы);

  5. dirs — список открытых направлений (представлен строкой вида «0101100101», где первая цифра соответствует направлению DIR0 а последняя — DIR9).

Файлы OnUserAdd и OnUserDel запускаются при добавлении и удалении абонента. В качестве параметра в них передается логин абонента.

Файл OnChange запускается при внесении изменений в учетную запись абонента. Его можно использовать для дополнительного журналирования изменений. В качестве параметров при запуске в него передаются (по порядку):

  1. login — логин абонента;

  2. parameter — название изменяемого параметра;

  3. old value — старое значение параметра;

  4. new value — новое значение параметра.

Описание конфигурационного файла stg.conf для плагина FreeRADIUS rlm_stg.so

  • local_port — необязательный параметр. Указывает, с какого локального порта будет происходить обмен данными с Stargazer.

  • server — IP-адрес сервера Stargazer.

  • port — порт для обмена данными со Stargazer.

  • password — пароль, который будет использован для шифрования обмена данными с Stargazer.

Пример секции параметров rlm_stg.so для radiusd.conf:

  stg {
          local_port = 6667
          server = localhost
          port = 6666
          password = 123456
  }
  

Модуль необходимо прописать в секцию instantiate, authorize. В секции authenticate модуль необходимо прописать в подсекциях AuthType до соответствующих модулей аутентификации. Например:

  Auth-Type PAP {
          stg
          pap
  }
  

Также модуль должен быть прописан в секции accounting и post-auth.