ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: Inet-Admins
Inet-Admins mailing list archive (inet-admins@info.east.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [inet-admins] Ограниченный по времени доступ на cisco 2509



>   Представляю свою версию реализации предоставления ограниченного по
>   времени доступа для cisco 2509. Типа 100 часов в месяц.
>   Эта реализация использует только разбор логов от tac_plus
>   и не использует никаких баз данных. Работает для случаев,
>   когда пользователи заходят через exec (name: passwd: )
>    - а не через autoselect ppp.

Еще одна глюкала? :)
Сорри что много, но надеюсь будет интересно многим --


RADACCT - RADIUS Accounting system
==================================

Что такое RADACCT ?
-------------------

Существующие  системы  билинга  dialup  IP-доступа, как правило, очень
сложны  и дорогостоящи, либо построены из подручных средств сисадмина-
ми-любителями с неприемлемым качеством.

Практически  все доступные системы билинга построены на основе анализа
log-файлов систем авторизации tacacs/radius/wtmp, путем периодического
обсчета  и  перерасчета, формированием всевозможных заданий и отчетов.
Иногда  этот процесс сопровождается еще и взаимодействием с какой-либо
сложной  базой  данных фиксирующей расход времени пользователей и кон-
тролирующей остаток денег на "лицевом счету".

Весь  этот  бардак,  часто  именуемый  статистикой, требует достаточно
больших  вычислительных и человеческих ресурсов, имеет сложную органи-
зацию и соответственно низкую надежность, и недостаточную точность.

Описываемая  здесь система RADACCT - это система аккаунтинга и монито-
ринга, полностью и автономно контролирующая расход времени пользовате-
лей, работающих на ваших серверах доступа (NAS). Она крайне проста, не
требует никаких периодических вычислений и анализа log-файлов, работа-
ет в реальном времени, имеет хорошую надежность и точность, использует
гибкую систему отчетности, поддерживает реалмы.

Действие  RADACCT'а  направлено в основном на жесткий контроль остатка
времени,  доступного  пользователю для работы в Интернет. Однако с его
помощью параллельно можно решать еще целый ряд задач, например:

  - объединять пользователей в группы с общим временем
  - ограничивать по количеству одновременных входов
  - ограничивать по суточному интервалу времени
  - организовывать сложные интервальные аккаунты
  - запускать всевозможные задачи при входе и выходе пользователя
  - автоматически производить перерасчет времени
  - визуально контролировать использование ресурсов
  - долговременно хранить статистическую отчетность

Базовый пакет RADACCT в настоящий момент состоит всего из одной основ-
ной программы-сервера и трех вспомогательных программ:

  radacctd - RADIUS Accounting сервер
  radacct  - управление и взаимодействие с сервером
  radstat  - генерация статистических отчетов
  radshow  - полноэкранный монитор текущих соединений

Демон  radacctd концентрирует поступающую от NAS'ов информацию и орга-
низует сетевые сессии пользователей, контролируя время использования и
некоторые  другие события. Количество обслуживаемых NAS'ов и портов не
ограничено.

Программа radacct используется для получения информации о текущих сое-
динениях,  изменения  скорости убывания времени, сброса пользователя с
линии и просмотра содержимого базы пользователей. Простейшее использо-
вание как аналог команд who или w.

Утилита  radstat предназначена для получения подробных отчетов, фикси-
руется  имя  пользователя, NAS/линия, реальное/виртуальное время заня-
тия,  трафик  и, возможно, номер телефона пользователя. Простейшее ис-
пользование - как аналог команд last и ac.

Многоэкранный  монитор  radshow позволяет в динамике наблюдать текущие
соединения,  сбрасывать  пользователей  с  линии, оперативно оценивать
загрузку входных линий, интенсивность их использования и т.п.


Как RADACCT работает с серверами доступа
----------------------------------------

Взаимодействие  сервера  системы  RADACCT с сетевыми серверами доступа
происходит по протоколу RADIUS Accounting (RFC 2139). Вместе с тем RA-
DACCT  не  имеет  никакого  отношения  к  аутентификации и авторизации
пользователей, которые в свою очередь исполняют RADIUS или TACACS сер-
вера.

RADIUS-сервера  бывают двух основных видов: от Livingston (это родона-
чальник),  второй от Merit (существенно более продвинутый). Тем не ме-
нее,  то, что нас интересует, у них реализуется одинаково, в соответс-
твии с RFC.

Любой  RADIUS-сервер состоит из двух основных частей; одна отвечает за
аутентификацию  и  авторизацию, вторая за аккаунтинг, причем эти части
как  бы  независимы  друг от друга, т.к. работают в разных UDP-портах.
Отсюда  и два RFC - первый - собственно сам RADIUS протокол (RFC 2138)
и второй - Accounting (RFC 2139). Пользуясь этим, RADACCT замещает со-
бой  вторую  часть  RADIUS,  при  этом они могут работать как на одном
компьютере,  так  и на разных. В качестве первой части может использо-
ваться  TACACS. Кроме того, Merit RADIUS способен форвардить весь пос-
тупающий от NAS аккаунтинг другому RADIUS-серверу, в качестве которого
может  выступать RADACCT-сервер. Таким образом, в сети может быть нес-
колько  серверов  аутендификации  и  авторизации и один общий для всех
сервер аккаунтинга.

Система RADACCT использует два файла конфигурации от RADIUS: файл cli-
ents со списком RADIUS-клиентов, которым обеспечивается аутентификация
и аккаунтинг, и файл dictionary, являющийся словарем трансляции запро-
сов  и  генерации ответов для атрибут/значение пар. Каталог, в котором
находятся  эти  файлы  конфигурации, задается в определении RADIUS_DIR
при компиляции.

Файл  clients  требует некоторой дополнительной информации для сервера
RADACCT, например он может выгладеть следующим образом (для RADIUS v3.
5.6):
  ...
  # SNMP-Community-Name = AAAA
  192.168.1.1  BBBB  type=Cisco:NAS  v1
  # snmp-community-name: CCCC
  192.168.1.2  DDDD  type=Cisco:NAS  v1
  ...

  где  ключевое  слово SNMP-Community-Name (задаваемое в комментариях,
чтобы  не мешать RADIUS) определяет имя обьединения для взаимодействия
с  NAS  по  SNMP  протоколу  версии 1 (на запись!). Если у всех NAS из
списка clients одинаковое имя обьединения, то это ключевое слово может
быть задано один раз в самом начале списка.

Сервер  RADACCT  всегда пассивен, т.е. не инициирует никаких посылок и
запросов  (кроме  SNMP  TsClrLine  - очистить линию NAS), он ожидает в
порту radacct/udp поступления от серверов доступа RADIUS-пакетов с ти-
пом Accounting-Request, проверяет их допустимость, формирует либо выс-
вобождает  сессию в соответствии с атрибутами Acct-Status-Type и Acct-
Session-Id  и  возвращает отправителю Accounting-Response, если в про-
цессе обработки не возникло ошибок.

Следующие  атрибуты пакета Accounting-Request считаются обязательными:

  Acct-Status-Type  подтип пакета: Start, Stop или Alive
  NAS-IP-Address    IP адрес NAS
  Acct-Session-Id   идентификатор сессии NAS
  User-Name         идентификатор пользователя (с возможным реалмом)
  NAS-Port          номер порта NAS

Используются  также следующие опциональные атрибуты, динамически моди-
фицируемые в процессе сессии:

  NAS-Port-Type       тип порта NAS, по умолчанию Async
  Service-Type        тип сервиса, по умолчанию Login
  Framed-Protocol     протокол, по умолчанию PPP (Service-Type=Framed)
  Framed-IP-Address   IP адрес клиента (Service-Type=Framed)
  Login-IP-Host       IP адрес сервера (Service-Type=Login)
  Acct-Delay-Time     задержка в предоставлении сервиса
  Called-Station-Id   идентификатор вызываемой стороны (номер телефона?)
  Calling-Station-Id  идентификатор вызывающей стороны (номер телефона?)

Следующие опциональные атрибуты определяются по окончании сессии:

  Acct-Session-Time    время занятия в текущей сессии
  Acct-Input-Octets    кол-во принятых байт
  Acct-Output-Octets   кол-во отосланных байт
  Acct-Input-Packets   кол-во принятых пакетов
  Acct-Output-Packets  кол-во отосланных пакетов

Новую  сессию  создает  Accounting-Request пакет со статусом Start или
Alive  в случае если он содержит Acct-Session-Id отличный от уже заре-
гистрированных  идентификаторов  сессий (не закрытых сессий) на данном
NAS или, если идентификатор совпадает, но не совпадает номер порта или
идентификатор пользователя.

Сессия создается в любом случае, но непосредственно перед ее созданием
сервер  запрашивает NAS по SNMP очистить линию в случаях если у входя-
щего пользователя:

  - не допустимый интервал времени
  - превышено максимальное количество одновременных входов
  - исчерпан остаток апдейтов времени
  - текущий остаток времени меньше нескольких десятков секунд

В  процессе  сессии  сервер также может запросить NAS по SNMP очистить
линию в случаях, если у текущего пользователя:

  - исчерпан текущий остаток времени
  - текущее время вышло за границу допустимого интервала времени
  - внешняя задача завершилась со статусом отличным от нуля
  - поступил внешний запрос на сброс линии

Если  в  течение  сессии NAS высылает периодические Accounting-Request
апдейты со статусом Alive, то сервер начинает отслеживать таймауты как
самого NAS, так и каждой сессии в пределах данного NAS. В случае, если
за три неполных периода апдейта в пределах сессии не поступило очеред-
ного,  то сессия искуственно закрывается сервером, т.е. считается, что
пользователь неучтенно освободил линию. В случае если от NAS не посту-
пает  каких-либо  пакетов в течении трех неполных периодов апдейта, то
все сессии данного NAS искусственно закрываются сервером, т. е. счита-
ется,  что связь с NAS прервалась по неизвестной причине и все пользо-
ватели рассоединились с данным NAS.

Сессия закрывается при поступлении Accounting-Request пакета со стату-
сом  Stop и с соответствующим идентификатором либо если обнаруживается
незакрытая сессия на данном порту NAS.


Как RADACCT работает с базой пользователей
------------------------------------------

База  пользователей системы RADACCT представляет из себя систему ката-
логов и файлов в файловой системе Unix. Вся база располагается в одном
корневом  каталоге, заданном в определении RADACCT_DIR при компиляции;
как правило, это каталог /var/radacct.

В  корневом  каталоге находится опциональный файл конфигурации сервера
RADACCT  radacctd.conf  и следующие подкаталоги (создаваемые автомати-
чески при их отсутствии):

  users/    профайлы пользователей
  groups/   профайлы групп пользователей
  wtmp/     история работы пользователей
  start/    запускаемые при входе пользователей внешние программы
  stop/     запускаемые при выходе пользователей внешние программы

В  каталоге  users  за  каждым  пользователем или реалмом закрепляется
файл,  соответствующий имени пользователя или его реалму. В этом файле
хранится  набор переменных и установок, используемых сервером RADACCT,
сюда же может быть помещена и любая другая дополнительная информация в
произвольной  форме,  игнорируемая сервером. Только следующие ключевые
слова  профайла пользователя обрабатываются сервером RADACCT (звездоч-
кой помечены изменяемые сервером, остальные только на чтение):

* TIMELEFT=      текущий остаток времени в секундах
  TIMERATE=      скорость убывания счетчика в секундах
  UPDATERATE=    частота TIMELEFT апдейтов в днях
* UPDATELEFT=    остаток TIMELEFT апдейтов в днях
* SAVETIMELEFT=  начальное значение TIMELEFT
* LASTUPDATE=    время последнего апдейта TIMELEFT в секундах от UTC
  ACCESSTIME=    допустимый интервал времени работы, hh:mm-hh:mm
  MAXLOGINS=     макс. кол-во одновременных входов, < 0 - не лимитировано
  INFINITY=      Yes - счетчик времени пользователя не убывает
  DROPCURRENT=   Yes - не пустить текущего, иначе снять самого старого

В  каталоге  groups  могут  быть расположены файлы, именуемые в произ-
вольной  форме; их содержимое аналогично профайлу пользователя. Сервер
не  работает  с этими файлами, однако, на эти файлы удобно делать сим-
вольные  линки  из каталога users для пользователей, принадлежащих ка-
кой-либо  группе  из каталога groups и имеющие общие установки и пере-
менные.

Содержимое  профайла пользователя может быть изменено другими програм-
мами  в  любой  момент работы сервера, в том числе и во время открытой
сессии  этого  пользователя,  причем  изменение  значения  TIMELEFT  в
большую  сторону  динамически  учитывается  сервером, и текущая сессия
продолжается на новое значение остатка времени.

В  каталог  wtmp  сервер  записывает историю работы пользователей, где
каждый файл соответствует имени или реалму пользователя. Эти файлы пи-
шутся в формате, совместимом с форматом системного Unix wtmp файла.

В  каталогах start и stop могут содержаться запускаемые сервером внеш-
ние программы соответственно при входе и выходе пользователя. Файл та-
кой  программы  должен быть выполняемым файлом, имя которого соответс-
твует  имени пользователя, для которого он должен выполняться. При за-
вершении  start  задачи  со значением отличным от нуля сервер посылает
SNMP запрос на NAS на очистку линии текущего пользователя. Если сессия
пользователя оканчивается раньше завершения его start задачи, то зада-
ча снимается сервером с помощью сигнала SIGTERM.

В  файле  конфигурации  сервера  radacctd.conf могут быть использованы
следующие установки:

  ACCTMON=  список мониторов текущих соединений
  REALM=    список сопоставления реалмов с профайлами

В параметре ACCTMON могут быть перечислены сетевые адреса компьютеров,
на  которые  следует высылать текущую информацию о сессиях пользовате-
лей.  Адреса  мониторов задаются в формате `address[:port]', номер UDP
порта по умолчанию 1647. Адреса могут перечисляться списком через про-
бельные  символы  или  запятые,  или могут задаваться многократным ис-
пользованием параметра ACCTMON.

В  параметре REALM могут быть перечислены маски, сопоставляющие вводи-
мые пользователями реалмы с соответствующими профайлами. Сопоставления
задаются в формате `regex [file]', где regex - это POSIX regex(3) (или
GNU  regexp(3))  выражение  и  file - это имя файла пользователя, куда
отображается совпавший с этим выражением реалм. Если file не задан, то
совпавший  с маской реалм считается локальным и в качестве имени файла
используется имя пользователя (реалм отсекается). Список сопоставлений
задается  многократным использованием параметра REALM, список проверя-
ется сверху вниз до первого совпадения.

Если  файл radacctd.conf отсутствует или введенный пользователем реалм
не совпал ни с одной маской, то в качестве имени профайла используется
имя реалма, как оно было введено пользователем.

Сервер перечитывает файлы конфигурации clients и radacctd.conf по сиг-
налу SIGHUP. Сервер записывает текущую таблицу сессий в файл radacctd.
save по сигналу SIGPIPE. Сервер завершает работу по сигналу SIGTERM.


Как RADACCT работает со временем
--------------------------------

Как  уже было сказано выше, основная функция системы RADACCT состоит в
контроле  используемого dialup IP-клиентами времени работы в Интернет.
Система построена таким образом, что не позволяет клиенту вырабатывать
времени больше, чем определено администратором.

У  каждого пользователя, группы пользователей или реалма имеется собс-
твенный  остаток  времени в секундах, помещенный в переменную TIMELEFT
профайла.  При  входе пользователя значение его TIMELEFT загружается в
память  сервера и в процессе сессии динамически вычитается, при исчер-
пании  времени пользователь снимается с линии. При выходе пользователя
остаток  времени из памяти сервера используется для записи нового зна-
чения TIMELEFT профайла.

Модификацию значения TIMELEFT профайла (как и любого другого значения)
можно  производить  в  момент нахождения пользователя на линии, сервер
корректно учитывает эти изменения.

Для  динамического вычитания времени, контроля границ допустимого вре-
мени и некоторых других событий в сервер встроен обработчик прерываний
по  таймеру реального времени, вызываемый с периодичностью SYSTIMERATE
заданной в определении SYS_TIMERATE при компиляции сервера или в аргу-
менте  -s при каждом запуске, по умолчанию прерывание возникает каждые
десять  секунд.  В  каждом такте прерывания сервер обрабатывает массив
счетчиков  всех пользователей находящихся на линии, вычитая из каждого
счетчика величину TIMERATE.

Таким образом, значение TIMERATE определяет скорость убывания счетчика
остатка  времени  пользователя. Наряду со значением TIMELEFT, величина
TIMERATE  у  каждого пользователя также индивидуальна. Например, когда
SYSTIMERATE равен 10 сек. а TIMERATE содержит 20, то остаток времени в
TIMELEFT  уменьшается в два раза быстрее, если же в TIMERATE задано 5,
то в два раза медленнее реального времени.

Значение  TIMERATE  может быть задано в соответствующем параметре про-
файла  пользователя или динамически изменяться по время работы сервера
с  помощью специальной утилиты radacct. По умолчанию величина TIMERATE
равна величине SYSTIMERATE.

Точность  вычисления остатка времени пользователя определяется величи-
ной  интервала  прерываний  таймера (SYSTIMERATE). Диапазон допустимых
значений TIMERATE от 5 до 30 секунд.

Помимо  описанного  выше  простого алгоритма работы с остатком времени
пользователя  сервер  также обеспечивает более сложную схему работы со
временем.  В  этом  режиме дополнительно учитываются еще и календарные
интервалы  времени, в границах которых пользователю выделяется опреде-
ленное значение TIMELEFT, общее количество интервалов может быть огра-
ничено.

Такой режим работы выбирается с помощью определения в профайле пользо-
вателя  интервала апдейта времени в параметре UPDATERATE, его величина
может  варьироваться от 1 до 90 дней. Необходимо также указать старто-
вое количество оставшихся апдейтов в переменной UPDATELEFT, при каждом
апдейте  значение этой переменной декрементируется сервером, время пе-
рестает  выделяться, когда значение достигло нуля. Если стартовое зна-
чение  UPDATELEFT  отрицательно,  то апдейты времени будут происходить
бесконечно,  тем  не  менее,  они будут фиксироваться как рост отрица-
тельного  значения. В этом режиме сервер использует две дополнительные
переменные  профайла - SAVETIMELEFT и LASTUPDATE, изменять их значения
вручную не рекомендуется.

Параллельно  с контролем по остатку времени сервер позволяет ограничи-
вать  пользователя по суточному интервалу времени, в пределах которого
он может занимать линию. Сервер сбрасывает линию NAS если пользователь
при  входе  не  попадает  в допустимый интервал времени или если сеанс
связи пользователя вышел за его границы.

Допустимый  суточный  интервал  времени работы пользователя задается в
его профайле в параметре ACCESSTIME, который имеет формат hh:mm-hh:mm,
где hh - это часы в диапазоне от 00 до 23 и mm - минуты от 00 до 59.


Что и как RADACCT записывает в лог файлы
----------------------------------------

Для  нормального функционирования системы RADACCT не требуется наличия
каких-либо  промежуточных или log-файлов. В процессе работы сервер RA-
DACCT может порождать следующую отчетность:

  - диагностика работы сервера
  - история работы пользователей
  - текущий список пользователей находящихся на линии (опционально)
  - log-файл аккаунтинга RADIUS стиля (опционально)
  - log-файл аккаунтинга TACACS+ стиля (опционально)

Всю диагностику своей работы сервер записывает в системный журнал sys-
log,  используя  детализацию от LOG_ERR для самых критических ситуаций
до LOG_DEBUG для записи отладочной информации.

Сервер сохраняет всю историю работы пользователей в файлах подкаталога
wtmp  своего корневого каталога. Эти файлы могут именоваться по именам
пользователей или по используемым реалмам точно так, как именуются со-
ответствующие  профайлы  пользователей.  Файлы имеют формат системного
wtmp файла, поэтому для просмотра содержимого можно использовать штат-
ные  системные утилиты, такие как last или ac. Тем не менее, для полу-
чения  подробных  статистических  отсчетов рекомендуется использование
специальной утилиты radstat, позволяющей получать из файла истории до-
полнительно еще несколько интересных записей.

Записывая  файл  в  формате  wtmp (или utmp) сервер формирует название
терминальной  линии  в  следующем формате: XXXXYYY, где XXXX - это два
младших  байта IP-адреса сервера доступа в шестнадцатеричном представ-
лении  и YYY - номер линии сервера доступа в десятичном представлении.


Сервер  работает  с  системным  файлом  utmp точно так, как это делают
программы login и init, так что будет казаться, что пользователь дейс-
твительно присутствует в Unix-системе, но не имеет ни одного связанно-
го с ним процесса. Сервер должен быть скомпилирован с опцией USE_UTMP,
чтобы опеспечивать такую возможность.

Все терминальные линии, информацию с которых предполагается записывать
в системный utmp файл, необходимо предварительно описать в файле /etc/
ttys системы, например в таком виде:

  ...
  4867000  none  virtual
  4867001  none  virtual
  4867002  none  virtual
  ...

Имена линий должны быть указаны в RADACCT формате (см. выше), тип всех
линий должен быть virtual.

Некоторые  программы,  работающие с файлом utmp (например, команда w),
требуют наличия соответствующего названию линии файла-устройства в ка-
талоге /dev. Поэтому следует заранее создать все необходимые девайсы с
именами  как указано в /etc/ttys и с параметрами устройства /dev/null,
например, с помощью команды mknod /dev/4867001 c 2 2.

Дополнительно  к этому сервер RADACCT поддерживает логирование аккаун-
тинга в стиле систем авторизации RADIUS и TACACS+. Эти возможности мо-
гут  быть  включены  использованием  соответствующих опций при запуске
сервера.


Как настроить сервер доступа для работы с RADACCT
-------------------------------------------------

Использование  системы  RADACCT  предъявляет единственное требование к
серверу  доступа (NAS) - он должен поддерживать RADIUS Accounting про-
токол в соответствии с RFC 2139.

Пример конфигурации Cisco NAS (приведен только аккаунтинг):

  aaa new-model
  ...
  aaa accounting network start-stop radius
  aaa accounting connection start-stop radius
  aaa accounting update periodic 1
  ...
  ip radius source-interface Ethernet0
  ...
  snmp-server community AAAA RW 50
  ...
  radius-server host 192.168.1.1 acct-port 1646
  radius-server key BBBB

Где AAAA и BBBB соответственно имя SNMP community и секретный ключ RA-
DIUS (смотри пример настройки файла clients).

Использование aaa accounting update periodic не обязательно, его нали-
чие  позволяет  серверу RADACCT корректно отрабатывать ситуации потери
связи с NAS, однако при очень большом количестве входных линий это мо-
жет существенно повысить нагрузку на RADACCT. В таких случаях, возмож-
но, более рационально использовать больший интервал времени апдейтов (
в  примере одна минута) или ограничиться только установкой aaa accoun-
ting update newinfo.


Если что-то не сработало, пишите на radacct@rinet.nsk.su
=============================================================================
"inet-admins" Internet access mailing list. Maintained by East Connection ISP.
Mail "unsubscribe inet-admins" to Majordomo@info.east.ru if you want to quit.



 




Copyright © Lexa Software, 1996-2009.