Roman Pogosyan 3 Опубликовано: 2011-08-23 09:11:13 Share Опубликовано: 2011-08-23 09:11:13 Рабочий модуль для freeradius 2.10 протестен на debian 6 32 битной установка aptitude install freeradius aptitude install libfreeradius-dev заменяем файлы в папке /usr/lib/freeradius на те что в папке компилим модль в конфиге радиуса отностиельно authenticate { # # PAP authentication, when a back-end database listed # in the 'authorize' section supplies a password. The # password can be clear-text, or encrypted. Auth-Type PAP { pap stg } # # Most people want CHAP authentication # A back-end database listed in the 'authorize' section # MUST supply a CLEAR TEXT password. Encrypted passwords # won't work. Auth-Type CHAP { chap stg } # # MSCHAP authentication. Auth-Type MS-CHAP { mschap stg } иначе никак rlm_stg.rar Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-08-23 09:17:15 Share Опубліковано: 2011-08-23 09:17:15 О боже, почему RAR?! Если меняются файлы FreeRADIUS то их лучше добавить в поставку Stargazer'а и не использовать системные. Тем более у FreeRADIUS давняя болезнь - проблемы со сборкой out-of-the-box. Так что такие вещи лучше предоставлять в виде патчей к stg. Ладно, сейчас сделаю диффы, посмотрю что там и как... Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 09:19:11 Автор Share Опубліковано: 2011-08-23 09:19:11 в винде работаю Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 09:21:07 Автор Share Опубліковано: 2011-08-23 09:21:07 просто не удобно было отслеживать все зависимости и править столько h файлов .. а таки бысто и надежно Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 09:23:21 Автор Share Опубліковано: 2011-08-23 09:23:21 надо думать как сделать авторизацию пользователя с * вместо IP ... поковыряю авторизатор старгазера на предмет добавления в поле .. может смогу портировать ... покраймней мер емне очень нужно это (клиент должен атворизироватся вне зависимсти от типа подключения и типа авторизации) Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-08-23 09:55:33 Share Опубліковано: 2011-08-23 09:55:33 Начну с короткого ликбеза по тому как работает rlm_stg. Авторизация. rlm_stg (если он прописан в конфиге в секции авторизации) получает от FreeRADIUS логин абонента и Framed-Protocol. Второй нужен для фильтрации ненужных сервисов, на него внимания не обращаем. С логином, условно говоря, лезем в базу и получаем оттуда пароль в открытом виде. Этот пароль упаковываем в Cleartext-Password и возвращаем FreeRADIUS'у, о чем сообщаем посредством кода возврата RLM_MODULE_UPDATED. На этом этапе мы можем отклонить авторизацию если: логин в базе не найден; Framed-Protocol в конфиге запрещен. Аутентификация. На этом этапе rlm_stg ничего не делает, только проверяет нужно ли для этого типа сервиса в последствии выполнять аккаунтинг. Это тоже настраивается в конфиге. А раз мы ничего не делаем то и возвращаем RLM_MODULE_NOOP (хотя, в этом случае, он может быть эквивалентен RLM_MODULE_OK, надо посмотреть докумнетацию). Тут мы можем отклонить аутентификацию только если неправильный логин. Пост-аутентификация. На этом этапе мы уже уверены в том что предоставлен правильный логин и пароль (на этапе аутентификации сам FreeRADIUS это проверил используя предоставленный Cleartext-Password). По этому для тех сервисов, для которых это нужно, предосатвляем IP-адрес из БД. Тут мы можем отклонить пост-аутентификацию в случае если, например, у абонента недостаточно средств. Ну и остальные варианты. Аккаунтинг. Его есть аж три варианта. В случае начала аккаунтинга (Start) выполняется проверка логина и в случае если сервис требует аккаунтинга то выполняется авторизация с указанием ранее полученного Framed-IP. В случае промежуточного апдейта (Interim-Update) ничего не делаем, хотя тут можно собирать информацию о трафике, например. В случае окончания аккаунтинга (Stop) проверяем наличие сессии и разавторизовываемся. Аккаунтинг может быть отклонен если: логин в базе не найден; сессия уже открыта; авторизация отклонена Stargazer'ом. В предоставленном коде есть ошибка - явное указание типа аутентификации. Тип указывается RADIUS-клиентом. Например, pppd может запросить MS-CHAP. При описании секции аутентификации в конфиге FreeRADIUS мы можем использовать этот тип как селектор для выбора правильного плагина аутентификации. FreeRADIUS использует Cleartext-Password, полученный на этапе авторизации, для проверки корректности предоставленных credentials (не знаю как это правильно перевести, короче - аутентификационная информация). Остальные правки непосредственно модуля несущественны. Правки заголовочных файлов еще не смотрел. Для работы со * нужно менять либо секцию пост-аутентификации либо секцию аккаунтинга. Передавать на сторону Stargazer'а полученный IP. просто не удобно было отслеживать все зависимости и править столько h файлов .. а таки бысто и надежно Нужно просто использовать git Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-08-23 10:03:43 Share Опубліковано: 2011-08-23 10:03:43 По заголовочным файлам. Если отбросить правку секций include то существенно поменялись две вещи. В conffile.h: < extern int cf_pair2xml(FILE *fp, CONF_PAIR *cp); < extern int cf_section2xml(FILE *fp, CONF_SECTION *cs); < extern int cf_pair2file(FILE *fp, CONF_PAIR *cp); < extern int cf_section2file(FILE *fp, CONF_SECTION *cs); --- > extern int cf_pair2xml(FILE *fp, const CONF_PAIR *cp); > extern int cf_section2xml(FILE *fp, const CONF_SECTION *cs); > extern int cf_pair2file(FILE *fp, const CONF_PAIR *cp); > extern int cf_section2file(FILE *fp, const CONF_SECTION *cs); и в radiusd.h: 136a139,145 > int rate_limit; > #endif > > #ifdef WITH_COA > char *coa_name; > home_server *coa_server; > home_pool_t *coa_pool; 172,174d180 < #if defined(FREE_BSD) || defined(FREE_BSD5) < #include <sys/time.h> < #endif 209c215 < int number; /* internal server number */ --- > unsigned int number; /* internal server number */ 239a246,256 > #ifdef WITH_PROXY > int in_proxy_hash; > > home_server *_home_server; > home_pool_t *home_pool; /* for dynamic failover */ > > struct timeval proxy_when; > > int num_proxied_requests; > int num_proxied_responses; > #endif 287c304 < typedef int (*rad_listen_print_t)(rad_listen_t *, char *, size_t); --- > typedef int (*rad_listen_print_t)(const rad_listen_t *, char *, size_t); Эти изменения на столько существенны что их игнорирование вполне может вызвать сегфолты и нарушения памяти. Хотелось бы узнать, что из этих изменений сделано "вручную", а что - просто следствие версии FreeRADIUS. Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 10:11:59 Автор Share Опубліковано: 2011-08-23 10:11:59 в коде существенных переделок , по сути не стыковка была как раз из за заголовков , в приведенных данных я изменений не делал были измемениня типа параметр * option я изменил на парамерт *_option Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 10:19:23 Автор Share Опубліковано: 2011-08-23 10:19:23 нужно менять либо секцию пост-аутентификации .. просто как сделать чтоб он полученный IP вписал пользователю .. вот в чем вопрос Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-08-23 10:48:15 Share Опубліковано: 2011-08-23 10:48:15 нужно менять либо секцию пост-аутентификации .. просто как сделать чтоб он полученный IP вписал пользователю .. вот в чем вопрос Очень просто. В том месте где передается Framed-IP из FreeRADIUS отправлять его в пакете на сервер. А на сервере проверять: если ip == 0 то он не установлен и надо будет брать его из базы, а иначе делать дополнительную проверку на то, разрешено ли абоненту авторизоваться с этого IP и использовать его в последствии для вызова Authorize при аккаунтинге. Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 11:15:40 Автор Share Опубліковано: 2011-08-23 11:15:40 принцип понятен ... неизвестна только функция которая добавляет айпи в базу Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-08-23 11:35:24 Share Опубліковано: 2011-08-23 11:35:24 принцип понятен ... неизвестна только функция которая добавляет айпи в базу Его не нужно никуда добавлять. Его нужно передать в функцию Authorize. Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 11:38:41 Автор Share Опубліковано: 2011-08-23 11:38:41 можно симпл ? Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2011-08-23 11:54:53 Share Опубліковано: 2011-08-23 11:54:53 project/stargazer/plugins/other/radius/radius.cpp:479 int RADIUS::ProcessAcctStartPacket(RAD_PACKET * packet) { USER_PTR ui; if (!FindUser(&ui, (char *)packet->login)) { packet->packetType = RAD_REJECT_PACKET; printfd(__FILE__, "RADIUS::ProcessAcctStartPacket user '%s' not found\n", (char *)packet->login); return 0; } // At this point we have to unauthorize user only if it is an accountable service if (CanAcctService((char *)packet->service)) { if (sessions.find((const char *)packet->sessid) != sessions.end()) { printfd(__FILE__, "RADIUS::ProcessAcctStartPacket session already started!\n"); packet->packetType = RAD_REJECT_PACKET; return -1; } USER_IPS ips = ui->GetProperty().ips; if (ui->Authorize(ips[0].ip, 0xffFFffFF, this)) { printfd(__FILE__, "RADIUS::ProcessAcctStartPacket cannot authorize user '%s'\n", packet->login); packet->packetType = RAD_REJECT_PACKET; return -1; } sessions[(const char *)packet->sessid].userName = (const char *)packet->login; sessions[(const char *)packet->sessid].serviceType = (const char *)packet->service; for_each(sessions.begin(), sessions.end(), SPrinter()); } else { printfd(__FILE__, "RADIUS::ProcessAcctStartPacket service '%s' can not be accounted\n", (char *)packet->service); } packet->packetType = RAD_ACCEPT_PACKET; return 0; } Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 15:36:59 Автор Share Опубліковано: 2011-08-23 15:36:59 довел IP до этой функции а как назначить его этому пользователю ? у меня сейчас packet->ip IP выданный впн сервером а в поле у юзера * и следовательноif (ui->Authorize(ips[0].ip, 0xffFFffFF, this)) происходит удачно и packet->packetType = RAD_REJECT_PACKET; return -1; Акаунтинг клиенту не ведется Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 15:47:50 Автор Share Опубліковано: 2011-08-23 15:47:50 сори за флуд .. перелопатил сорцы user_*.cpp разобрался спасибо теперь есть почти все что нужно .. буду проверять срабативают ли сктипры он коннет и он дискконект Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-23 16:33:48 Автор Share Опубліковано: 2011-08-23 16:33:48 Долапаченые файлы проверка а выставленный IP у пользователя , если есть выдает пользователю конкретный IP если нет то читает IP который даст VPN Сервер (сори опять рар) projects.rar Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2011-08-24 11:44:54 Автор Share Опубліковано: 2011-08-24 11:44:54 все замечателно .. но есть одно НО ... если подключился по VPN можно подключится и по pppoe , хотя интернета не получить так как скрипт не on connect не срабатывает сробарывает но всетаки досадно Ссылка на сообщение Поделиться на других сайтах
cynepnaxa 0 Опубліковано: 2012-02-28 15:34:00 Share Опубліковано: 2012-02-28 15:34:00 Добрый день! Есть вопрос. Хочу сделать авторизацию абонентов через радиус. Поставил фрирадиус 2.1.8 и убиллинг на убунту32 и в обоих завел абонентов. Фрирадиусные абоненты авторизуются. Хочу чтобы радиус лез в старгейзер и у него спрашивал, можно ли абоненту доступ давать. Почитал инструкции и тему - больше вопросов возникло, чем ответов. Типа фрирадиус же 2.1.12 последний, 2.10 - это 2.1.10 или 2.1.0? "компилим модль" - какой модуль имеется ввиду(фрирадиус или rlm_stg)? и т.п... У кого-нибудь/где-нибудь есть инструкция для тупых как связать старгейзер с фрирадиусом? Или как старгейзер с любым радиусом связать(не обязательно фрирадиус). Ну или хотя бы что почитать, чтобы мне тоже в теме быть и понимать что здесь пишут? Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2012-02-28 16:06:38 Автор Share Опубліковано: 2012-02-28 16:06:38 нестыковочки ... задавай вопрос по конкретнее. ты написал "Поставил фрирадиус 2.1.8 и убиллинг на убунту32" а потом "Типа фрирадиус же 2.1.12 последний, 2.10 - это 2.1.10 или 2.1.0?" так тебе под какой фрирадиус модуль то ? .. если 2.1.8 то заводской который идет с стж будет работать коректно(за исключением выдачи IP из пула vpn), если версия 2.1.10 то надо доделывать, если выше .. то самому ковырятся так как далее не было эксперементов. п.с. rlm_stg это модуль , freeradius это демон-сервер авторизации Ссылка на сообщение Поделиться на других сайтах
nightfly 1 239 Опубліковано: 2012-02-28 17:09:54 Share Опубліковано: 2012-02-28 17:09:54 Фрирадиусные абоненты авторизуются. Хочу чтобы радиус лез в старгейзер и у него спрашивал, можно ли абоненту доступ давать У кого-нибудь/где-нибудь есть инструкция для тупых как связать старгейзер с фрирадиусом? Или как старгейзер с любым радиусом Установка и настройка GNU-Radius в связке с stargazer - не? Фрирадиус аналогично привинчивается мускульным бекендом. Аттрибуты можно пресовать view-ами либо скажем хранить в custom profile fields. Особо этим вопросом пока не заморачивался. Ссылка на сообщение Поделиться на других сайтах
cynepnaxa 0 Опубліковано: 2012-02-29 00:44:39 Share Опубліковано: 2012-02-29 00:44:39 нестыковочки ... задавай вопрос по конкретнее. ты написал "Поставил фрирадиус 2.1.8 и убиллинг на убунту32" а потом "Типа фрирадиус же 2.1.12 последний, 2.10 - это 2.1.10 или 2.1.0?" так тебе под какой фрирадиус модуль то ? .. если 2.1.8 то заводской который идет с стж будет работать коректно(за исключением выдачи IP из пула vpn), если версия 2.1.10 то надо доделывать, если выше .. то самому ковырятся так как далее не было эксперементов. п.с. rlm_stg это модуль , freeradius это демон-сервер авторизации Спасибо за оперативный ответ! Я имею ввиду, что не понял какая версия фрирадиуса обсуждается в этой статье. Насколько я понимаю 2.10 - такой версии фрирадиуса нет. Из похожих есть 2.1.0 и 2.1.10. Видимо имелась ввиду какая-то из них? У меня требований к версии фрирадиуса нет - какой надо, чтобы точно работало, такой и поставлю. Смысл моего поста в том, что очень много подобных вопросов возникло - ищу пошаговую инструкцию без слэнга. Очень заинтересовало что с 2.1.8 старгейзер работает искаропки. А фрирадиус настраивать надо или нет? Это наверно должно быть где-то описано - ткните меня туда плз, не могу найти. Ссылка на сообщение Поделиться на других сайтах
Roman Pogosyan 3 Опубліковано: 2012-02-29 07:58:02 Автор Share Опубліковано: 2012-02-29 07:58:02 freeradius настраивать надо смотри в установочном пакете есть примеры Ссылка на сообщение Поделиться на других сайтах
madf 279 Опубліковано: 2012-02-29 11:07:21 Share Опубліковано: 2012-02-29 11:07:21 Есть два подхода к взаимодействию Stargazer и RADIUS-серверов. Один, самый простой, - это когда RADIUS-сервер черпает информацию для авторизации из БД Stargazer'а. При этом с самим Stargazer'ом он не взаимодействует. Второй вариант подходит только для FreeRADIUS. FreeRADIUS имеет систему плагинов которые можно использовать в процессе авторизации, аутентификации и аккаунтинга. Взаимодействие при этом происходит на уровне плагинов: rlm_stg со стороны FreeRADIUS и mod_radius со стороны Stargazer. В этом случае информация для FreeRADIUS поступает непосредственно из Stargazer'а, но этот метод пока очень нестабилен. Можно еще реализовать взаимодействие на уровне скриптов с использованием консольного конфигуратора (sgconf/sgconf_xml) или XML RPC - третий вариант. Документации по второму и третьему варианту толком нет (та что есть - относится к FreeRADIUS 1.x, но он больше не поддерживается). Какой из вариантов требуется? Будем обсуждать более подробно. Может вместе и rlm_stg допилим до вменяемого состояния... Ссылка на сообщение Поделиться на других сайтах
nightfly 1 239 Опубліковано: 2012-02-29 12:09:04 Share Опубліковано: 2012-02-29 12:09:04 Может вместе и rlm_stg допилим до вменяемого состояния... все дружно скорбят по mod_radius Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас