Биллинговая система Nodeny

Главная категория => Разработка => Тема начата: Efendy от 26 Ноября 2009, 16:55:23



Название: кто Radius использует
Отправлено: Efendy от 26 Ноября 2009, 16:55:23
Я тут тестирую работу NoDeny с Hotspot  столкнулся с одним моментом, на который, возможно, я раньше не обратил внимание, а возможно просто такой проблемы нет в ваших случаях. Вкратце, в биллинге есть несколько процедур написанных для Radius. При проверке логина запускается процедура radcheck. Если логин не верный - радиус отшивает клиента. Если логин верный, то радиус запускает процедуру radreply для получения параметров соединения. В этой процедуре, кроме параметров соединения, мы записывает в базу о том, что клиент авторизовался. Так вот, тестируя Hotspot я с толкнулся с тем, что вне зависимости от успешности авторизации, радиус запускает radreply хотя по логике не должен этого делать. В чем это отражается? В том, что с неверным паролем клиент становится авторизованным примерно на полторы минуты. Проверьте, пожалуйста эту ситуацию, т.е. попробуйте авторизоваться (например, по пппое) с неверный паролем. Соединение не должно создастся, но важно посмотреть появился ли зеленый ключик через несколько секунд напротив учетной записи в админке.

Если такая проблема подтвердится, то лечится она очень просто, путем переноса записи авторизации в процедуру старта accounting-update


Название: Re: кто Radius использует
Отправлено: goletsa от 26 Ноября 2009, 17:00:55
Цитировать
1     18:02:16      PPPoE
Угу, загорается ключик при неверном пароле.


Название: Re: кто Radius использует
Отправлено: elite от 26 Ноября 2009, 17:07:43
Стас, а ты не придумал еще реализацию выдачи динамического ип адреса по пппое? :)


Название: Re: кто Radius использует
Отправлено: Cell от 26 Ноября 2009, 17:42:09
Проблему подтверждаю, авторизация vpn (mpd+radius). Ключик зеленый ровно 2 минуты.
Если можно, расскажи подробно как вылечить.


Название: Re: кто Radius использует
Отправлено: elite от 26 Ноября 2009, 17:54:51
Проблему подтверждаю, авторизация vpn (mpd+radius). Ключик зеленый ровно 2 минуты.
Если можно, расскажи подробно как вылечить.
скоро будет патч :)


Название: Re: кто Radius использует
Отправлено: Efendy от 26 Ноября 2009, 18:13:18
Стас, а ты не придумал еще реализацию выдачи динамического ип адреса по пппое? :)
я все придумал, только пока это не смогу выпустить т.к. 52 версия уже перековыряна значительно. Для "старых" версий у меня нет ресурсов дублировать нововведения. Так что придется подождать. Сколько - не знаю. Сейчас ковыряю хотспот, здесь  и протестирую новую версию. В хотспотах, как оказалось, не все так проблематично, например chilli берет на себя большую часть действий, например, перехват get-запросов, обращение к радиусу и, что мне очень нравится, мониторинг  освобождения dрcp-выданного адреса и блокирование ip спуффинга. Правда, из-за того, что chilli на себя взяла большую часть работы, есть некоторые сложности, например, она перехватывает только get-запросы, в результате не получится авторизоваться на opera-mini - эти кренделя забирают странички post-запросами. Так же есть проблема с килянием сессий, которую щас решаю.


Название: Re: кто Radius использует
Отправлено: Efendy от 26 Ноября 2009, 21:52:20
ФИКС.

1) Меняем процедуры mysql:

Код:
bash# mysql --password=`grep sql_root_pass /usr/local/nodeny/history.nod | sed s/\\\$sql_root_pass=\'//g | sed "s/\';//"` bill 

попадаем в консоль mysql, выполняем:

Код:
DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$  
CREATE PROCEDURE `radreply` (IN login VARCHAR(64))
BEGIN
  DECLARE usr_ip VARCHAR(15);

  SELECT ip INTO usr_ip FROM users WHERE name=login;

  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Framed-Protocol','PPP','=';
END$$
DELIMITER ;

DROP PROCEDURE IF EXISTS `radpostauth`;
DELIMITER $$  
CREATE PROCEDURE `radpostauth` (IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT;  
  SELECT id INTO usr_id FROM users WHERE name=login;
  INSERT into dblogin (mid,act,time) VALUES (usr_id,47,unix_timestamp());
END$$
DELIMITER ;

2) Правим конфиги:

Код:
bash# ee /usr/local/etc/raddb/sql.conf

в конце перед } вставляем:

Код:
postauth_query = "call radpostauth('%{SQL-User-Name}')"

Код:
bash# ee /usr/local/etc/raddb/radiusd.conf

в секции post-auth расскоментируйте строку: sql

3) Рестартуйте radius:

Код:
bash# /usr/local/etc/rc.d/radiusd restart

4) Проводите эксперимент и отписываетесь здесь



Название: Re: кто Radius использует
Отправлено: elite от 27 Ноября 2009, 00:31:10
я все придумал, только пока это не смогу выпустить т.к. 52 версия уже перековыряна значительно.
а можно получать как-то промежуточные версии для тестирования?


Название: Re: кто Radius использует
Отправлено: goletsa от 27 Ноября 2009, 07:15:38
Кстати а финальный апдейт для 50й уже вышел? С блекджеком и девочками? :)


Название: Re: кто Radius использует
Отправлено: Efendy от 27 Ноября 2009, 09:11:59
Кстати а финальный апдейт для 50й уже вышел? С блекджеком и девочками? :)
планируется 50.33 сделать. Как только баг какойнить найдем и исправим - выпустим стейбл. А если баг не найдем - не выпустим. Так что ищите


Название: Re: кто Radius использует
Отправлено: Efendy от 27 Ноября 2009, 09:13:22
я все придумал, только пока это не смогу выпустить т.к. 52 версия уже перековыряна значительно.
а можно получать как-то промежуточные версии для тестирования?
дам, но не сейчас, сейчас 52 с развороченными кишками


Название: Re: кто Radius использует
Отправлено: elite от 27 Ноября 2009, 21:24:45
Стас, а какую процедуру в мускуле надо создать, чтобы при подключение клиента проверялся радиус-атрибут caller-station-id? или еще лучше физический интерфейс сервера доступа?


Название: Re: кто Radius использует
Отправлено: Efendy от 27 Ноября 2009, 23:12:11
Стас, а какую процедуру в мускуле надо создать, чтобы при подключение клиента проверялся радиус-атрибут caller-station-id? или еще лучше физический интерфейс сервера доступа?
caller-station-id - это что за атрибут? Не мак-адрес случаем? В любом случае делается по стандартной схеме: в sql.conf в процедуру дописываешь этот атрибут, а в самой процедуре его проверяешь.


Название: Re: кто Radius использует
Отправлено: elite от 27 Ноября 2009, 23:57:43
Стас, а какую процедуру в мускуле надо создать, чтобы при подключение клиента проверялся радиус-атрибут caller-station-id? или еще лучше физический интерфейс сервера доступа?
caller-station-id - это что за атрибут? Не мак-адрес случаем? В любом случае делается по стандартной схеме: в sql.conf в процедуру дописываешь этот атрибут, а в самой процедуре его проверяешь.
мак адрес :) для пппое
а как сделать, чтобы процедура из дополнительных данных вытаскивала последнюю ревизию мак-адреса?


Название: Re: кто Radius использует
Отправлено: Efendy от 28 Ноября 2009, 00:21:45
сто раз это обсуждали:

Код:
SELECT * FROM dopdata WHERE revision=(SELECT MAX(revision) FROM dopdata WHERE parent_id=5 AND field_alias='_mac')

что-то типа такого, поиск рулит


Название: Re: кто Radius использует
Отправлено: smallcms от 28 Ноября 2009, 03:44:55
Сделал. Глюк прошёл. Кстати обнаружил ещё в июле, когда переводил свою сеточку. Но кто ж знал, что это баг...  ;D


Название: Re: кто Radius использует
Отправлено: elite от 29 Ноября 2009, 14:03:26
Ну вот к чему мои скромные знания SQL привели :)

Код:
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$  
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'=='
    FROM users WHERE name=login;
  SELECT NULL,login,'Calling-Station-Id' AS Attribute,field_value AS Value, '=='
    FROM dopdata WHERE revision=(SELECT MAX(revision) FROM dopdata WHERE parent_id=(SELECT id FROM users WHERE name=login)) AND field_alias='_mac';
END$$
DELIMITER ;

Что здесь плохо? 2 вложенных запроса - имхо много
Причем, если мак адреса нет у данного клиента, то должно пустить без проверки мак-адреса.

P.S. пошел тестировать это на практике...



Название: Re: кто Radius использует
Отправлено: serojperoj от 03 Декабря 2009, 19:38:16
2 elite

если-что такой вариант работает у меня в сети.
если в доп. данных присутствует МАК адрес клиента то кроме юзер-пароля  проверяет еще и МАК адрес.

Код:
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$ 
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'==' AS Op FROM users WHERE name=login;

IF ((SELECT field_value from dopvalues where revision IN (SELECT rev FROM rev_users WHERE id IN (SELECT id FROM users where name=login)) and dopfield_id=4) <> '') THEN

SELECT id,name,'Calling-Station-Id' AS Attribute,(SELECT field_value from dopvalues where revision IN (SELECT rev FROM rev_users WHERE id IN (SELECT id FROM users where name=login))
and dopfield_id=4) AS Value,'==' AS Op from users where name=login;

END IF;

END$$
DELIMITER ;


Название: Re: кто Radius использует
Отправлено: serojperoj от 03 Декабря 2009, 19:53:32
2 Efendy

тестил. спс, помогло.



Название: Re: кто Radius использует
Отправлено: elite от 04 Декабря 2009, 12:02:05
serojperoj
че-то больно мудренный у тебя SQL-запрос :) слишком много вложений
в принципе, мой вариант тоже будет работать, потому как при отсутствии мак-адреса он возвращает пустую строку :)


Название: Re: кто Radius использует
Отправлено: smallcms от 04 Декабря 2009, 20:48:19
Так, пока далеко не ушли словил такой глюк:
Как-то резко закрылся авторизатор, не отсчитав свои 3...2....1... После чего авторизация сохранялась вплоть до закрытия Internet Explorer. Может быть такое или это фантазии виртуалбокса?  :)


Название: Re: кто Radius использует
Отправлено: elite от 05 Декабря 2009, 08:39:52
Так, пока далеко не ушли словил такой глюк:
Как-то резко закрылся авторизатор, не отсчитав свои 3...2....1... После чего авторизация сохранялась вплоть до закрытия Internet Explorer. Может быть такое или это фантазии виртуалбокса?  :)
а причем здесь радиус?


Название: Re: кто Radius использует
Отправлено: versus от 05 Декабря 2009, 19:56:30
Так, пока далеко не ушли словил такой глюк:
Как-то резко закрылся авторизатор, не отсчитав свои 3...2....1... После чего авторизация сохранялась вплоть до закрытия Internet Explorer. Может быть такое или это фантазии виртуалбокса?  :)

в пределах 2 -х минут еще бы сохранялась авторизация ...


Название: Re: кто Radius использует
Отправлено: elite от 14 Декабря 2009, 22:24:15
serojperoj
а что у тебя в качестве сервера PPPoE используется? и в каком формате хранятся мак адреса в дополнительных полях клиентов?


Название: Re: кто Radius использует
Отправлено: elite от 15 Декабря 2009, 17:20:02
Вот рабочий вариант при использовании в качестве сервера доступа mpd:

Код:
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$ 
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'=='
    FROM users WHERE name=login;
  SELECT id,login,'Calling-Station-Id' AS Attribute, LOWER(REPLACE(field_value,':','')) AS Value, '==' FROM dopdata WHERE revision=(SELECT MAX(revision) FROM dopdata WHERE parent_id=(SELECT id FROM users WHERE name=login)) AND field_alias='_mac';
END$$
DELIMITER ;


Название: Re: кто Radius использует
Отправлено: leliksan от 15 Декабря 2009, 20:24:31
Вот рабочий вариант при использовании в качестве сервера доступа mpd:

Код:
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$ 
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'=='
    FROM users WHERE name=login;
  SELECT id,login,'Calling-Station-Id' AS Attribute, LOWER(REPLACE(field_value,':','')) AS Value, '==' FROM dopdata WHERE revision=(SELECT MAX(revision) FROM dopdata WHERE parent_id=(SELECT id FROM users WHERE name=login)) AND field_alias='_mac';
END$$
DELIMITER ;


А в каком формате хранятся маки?


Название: Re: кто Radius использует
Отправлено: serojperoj от 19 Декабря 2009, 16:09:47
2 elite

стандартно как в доках написано. Freebsd+Mikrotik(pppoe)

формат к примеру такой -  "00:A1:B0:01:09:E0".


Название: Re: кто Radius использует
Отправлено: elite от 19 Декабря 2009, 17:02:21
2 elite

стандартно как в доках написано. Freebsd+Mikrotik(pppoe)

формат к примеру такой -  "00:A1:B0:01:09:E0".
ну с мпд твой вариант не работал :)
мой вариант - под мпд
в бд мак адреса храняться в формате типа 00:A1:B0:01:09:E0, причем неважно, большие или маленькие буквы :)


Название: Re: кто Radius использует
Отправлено: stix от 19 Декабря 2009, 18:07:24
подскажите, может кто сталкивался, как задействовать мультизапросы в mysql?
а то процедуры не хотят выполняться, когда радиус передает их серверу.


Название: Re: кто Radius использует
Отправлено: Efendy от 19 Декабря 2009, 21:20:13
подскажите, может кто сталкивался, как задействовать мультизапросы в mysql?
а то процедуры не хотят выполняться, когда радиус передает их серверу.
что ты понимаешь под мультизапросами? приведи пример


Название: Re: кто Radius использует
Отправлено: versus от 20 Декабря 2009, 00:17:04
подскажите, может кто сталкивался, как задействовать мультизапросы в mysql?
а то процедуры не хотят выполняться, когда радиус передает их серверу.
что ты понимаешь под мультизапросами? приведи пример

Уже общались проблема не в мультизапросах, потому как процедура даже с одним запросом с консоли мускула у него работает, а из внешних источников нет. После тестов выяснилось, что у него Centos вместо freebsd.
Совет обратится к вендору.


Название: Re: кто Radius использует
Отправлено: stix от 20 Декабря 2009, 15:50:18
после прочтения сотен страниц американских форумов выяснилось что проблема была в rlm_sql_mysql
пофиксил и все завертелось.

осталось прикрутить скрипты доступа к роутерос


Название: Re: кто Radius использует
Отправлено: dark от 19 Января 2010, 13:41:54
Вот рабочий вариант при использовании в качестве сервера доступа mpd:

Код:
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$ 
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'=='
    FROM users WHERE name=login;
  SELECT id,login,'Calling-Station-Id' AS Attribute, LOWER(REPLACE(field_value,':','')) AS Value, '==' FROM dopdata WHERE revision=(SELECT MAX(revision) FROM dopdata WHERE parent_id=(SELECT id FROM users WHERE name=login)) AND field_alias='_mac';
END$$
DELIMITER ;


немного подправил, если у юзера не прописан mac  то пускает любого, в твоем случае получалось что вообще невозможно авторизоваться в mpd5

Код:
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$ 
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass3') AS Value,'==' AS Op FROM users WHERE name=login;

IF ((SELECT field_value from dopvalues where revision IN (SELECT rev FROM rev_users WHERE id IN (SELECT id FROM users where name=login)) and dopfield_id=4) <> '') THEN

SELECT id,login,'Calling-Station-Id' AS Attribute, LOWER(REPLACE(field_value,':','')) AS Value, '==' FROM dopdata WHERE revision=(SELECT MAX(revision) FROM dopdata WHERE parent_id=(SELECT id FROM users WHERE name=login)) AND field_alias='_mac';

END IF;

END$$
DELIMITER ;


Название: Re: кто Radius использует
Отправлено: elite от 19 Января 2010, 14:22:01
немного подправил, если у юзера не прописан mac  то пускает любого, в твоем случае получалось что вообще невозможно авторизоваться в mpd5
у меня, если нет мак адреса в бд, то возвращается пустое значение, соответственно, пользователь пускается без проверки мак адреса )


Название: Re: кто Radius использует
Отправлено: Wallenberg от 05 Апреля 2010, 03:28:45
может немного не в тему..  подскажите как вы делаете ротацию радиус лога ?


Название: Re: кто Radius использует
Отправлено: Efendy от 05 Апреля 2010, 09:57:19
Документацию не пробовали читать:

Код:
echo '/var/log/mpd.log 600 5 100 * JC' >> /etc/newsyslog.conf

600   - права на файлы
5   - количество файлов в ротации
100   - ротация будет произведена при достижении лога 100 кб
*   - ротация по времени отключена
JC   - упаковка файлов утилитой bzip2



Название: Re: кто Radius использует
Отправлено: Wallenberg от 05 Апреля 2010, 11:02:45
я ж имел ввиду radiusd.log
Код:
/var/log/radius.log                    600  5     *    @T00     JC    /var/run/radiusd/radiusd.pid

при этом радиус убивается, вот и спрашиваю как это решают


Название: Re: кто Radius использует
Отправлено: Efendy от 05 Апреля 2010, 11:34:15
есть последний необязательный параметр, который указывает на pid процесса, которому будет послан эээ... какой-то сигнал чтоб сообщить о ротации лога. Ищи в нете, я думаю гораздо быстрее будет найти там


Название: Re: кто Radius использует
Отправлено: dark от 05 Сентября 2010, 19:57:53
так, после изменения допданных в 49.33 версии, скажите пожалуйста что теперь идет взамен таблицы rev_users  и "revision FROM dopdata" ? необходимо для восстановления привязки к mac


Название: Re: кто Radius использует
Отправлено: Efendy от 06 Сентября 2010, 22:33:12
так, после изменения допданных в 49.33 версии, скажите пожалуйста что теперь идет взамен таблицы rev_users  и "revision FROM dopdata" ? необходимо для восстановления привязки к mac

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


Название: Re: кто Radius использует
Отправлено: Vasyl 12th от 31 Января 2012, 14:12:07
У меня несколько похожая проблема, но другая.
рррое соединяет, .но ключик зеленый напротив пользователя не появляется.
пустая таблица login

radius, mpd5 ставил все как описано

какие настройки не те ?


Название: Re: кто Radius использует
Отправлено: 0xbad0c0d3 от 31 Января 2012, 14:22:48
(http://svetstar.ru/files/File/svetstar5.jpg)


Название: Re: кто Radius использует
Отправлено: bnet от 31 Января 2012, 20:07:39
дескрипторы правильно посчитаны?


Название: Re: кто Radius использует
Отправлено: Vasyl 12th от 01 Февраля 2012, 09:13:58
Пожалуйста, пишите в формате "что делать, что должны увидеть", а то я даже не знаю о каких дескрипторах имеется ввиду.

Это в базе? В какой таблице ?


Название: Re: кто Radius использует
Отправлено: Rico-X от 01 Февраля 2012, 11:35:10
Расшифрую приатаченый имедж выше, где конфиги радиуса и mpd, вывод запросов к базе и прочее, не по фазам луны же вашу проблему угадывать.


Название: Re: кто Radius использует
Отправлено: Vasyl 12th от 01 Февраля 2012, 15:24:31
В файле /usr/local/etc/raddb/users
Framed-Compression = Van-Jacobson-TCP-IP
встречается 2 раза. следует ли коментировать в обеих секциях или только
возле
Framed-MTU = 576 ?


Название: Re: кто Radius использует
Отправлено: Efendy от 02 Февраля 2012, 00:09:47
Соединение создается и держится? если да, то входящие запросы на авторизацию должны идти в таблицу dblogin, которая обрабатывается ядром (nodeny.pl) - оно запущено вообще?