KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения...

34
Обзор приложения Circlemaker Обзор приложения Circlemaker Владимир Потапьев (senior software engineer, SIPLABS)

Transcript of KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения...

Page 1: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Обзор приложения CirclemakerОбзор приложения Circlemaker

Владимир Потапьев(senior software engineer, SIPLABS)

Page 2: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Почему Circlemaker?

Page 3: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Зачем?

● Поддержка работы через протокол RADIUS с ААА-серверами

● Обеспечение работы биллинга стандартными средствами

Page 4: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Что такое RADIUS и ААА?

Page 5: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

RADIUS

● Стандарт де-факто● Базируется на UDP, “запрос-ответ”● Без состояний (stateless)● Использует пары атрибут/значение (с возможностью

создавать специфичные для производителя пары)● Поддерживает модель AAA● Поддерживается большинством коммерческих устройств

удалённого доступа

Page 6: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

AAA

● Модель описания процесса предоставления доступа и контроля над ним.

● Authentication (Аутентикация) – кто ты?● логин● пароль● сертификат● смарт-карта● ...

● Authorization (Авторизация) – что тебе разрешено?● учётная запись vs. полномочия● уровень доступа

● Accounting (Аккаунтинг) – отслеживание активности● потребление ресурсов● получение доступа (логи)

Page 7: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Биллинг

Page 8: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

На чём можно построить биллинг?

● Вебхуки● CDR● Шина сообщений Kazoo● Circlemaker

Page 9: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Вебхуки

● Не используйте вебхуки!

Прост в использованииНет гарантий доставкиНе масштабируется

Page 10: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

CDR

● Удобно для автоматизации

Вся информация о звонкахОтчёты не в реальном времениЧем больше пользователей, тем дороже в обслуживании

Page 11: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Шина сообщений Kazoo

● (AMQP)● Основа для биллинга в реальном времени

Гарантированная доставка сообщений (RabbitMQ)Хорошо маштабируется (RabbitMQ!)Низкая нагрузка на систему (всё ещё RabbitMQ)Сложно взаимодействоватьСервис биллинга должен работать в реальном времени

Page 12: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Circlemaker

Все преимущества шины сообщений Kazoo ( ):

● Гарантированная доставка сообщений● Хорошо маштабируется● Низкая нагрузка на систему● Биллинг в реальном времени (AAA-сервера)● ...

Page 13: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

А также ...● Поддержка протокола RADIUS

● Аутентификация● Авторизация● Аккаунтинг

● Поддержка нескольких RADIUS-серверов для аккаунта● Возможность группирования серверов по назначению● Поддержка Interim-Update● Поддержка Session-Timeout● Поддержка Disconnection Packet (свой UDP-сервис)● Модуль cf_aaa – запрос, задаваемый пользователем● Трансформация AVP● Список приложений-провайдеров AuthZ● Для каждого аккаунта:

● Выборочная блокировка AuthZ/AuthN/Accounting● RADIUS-словари

● Поддержка древовидной иерархии аккаунтов● Единые настройки для групп аккаунтов● Единые RADIUS-словари

● И многое другое...

Page 14: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Как работает аутентификация и авторизация в Kazoo?

Page 15: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Kazoo

Аутентификация

FreeSwitch ECallMgr Registrar Circlemaker

ecallmgr_fs_authn.erl(перед этим проверяется

кэш ecallmgr)reg_authn_req.erl cm_listener.erl

cm_pool_mgr.erl

cm_worker.erlreg_aaa_resp.erl

reg_authn_resp.erlecallmgr_fs_authn.erl

(обновляется кэш ecallmgr,если нужно)

INVITE

200 OKили

401 Unauthorized

wapi_authn:publish_req

wapi_aaa:publish_req

wapi_aaa:publish_resp

wapi_authn:publish_resp

Page 16: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Kazoo

Авторизация

FreeSwitch ECallMgr whistle_apps

ecallmgr_fs_authz.erl(перед этим проверяется

кэш ecallmgr)wh_authz_listener.erl cm_listener.erl

cm_pool_mgr.erl

cm_worker.erl

wh_authz_listener.erlОжидание авторизации

от всех приложенийПровайдеров AuthZ

ecallmgr_fs_authz.erl,и проверяется

флаг Is-Authorized

ecallmgr_fs_channel.erl

Circlemaker…

Jonny5

Командаecallmgr_fs_command:set выставляет нужныеканальные переменныеавторизующие звонок

Registrar

reg_authz_req.erl(определение

Account-ID, если егонет)

wapi_authz:publish_authz_req

wapi_authz:publish_authz_req

wapi_aaa:publish_authz_req

+ доп.флаги

wapi_authz:publish_authz_req

wapi_authz:publish_authz_resp

wapi_authz:publish_authz_resp

с флагомFinal-Authz-Response=true

Канал маркируетсякак авторизованный

CHANNEL_CREATE

Page 17: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Общие настройки Cieclemaker

Page 18: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Включение AAA для аккаунтаВключение AAA для аккаунта

{{……// может быть ”off” или “inherited”“aaa_mode”:”on”,…

}}

Page 19: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Список RADIUS-серверовСписок RADIUS-серверов

{{……““servers”:[servers”:[

{{"enabled": true,"enabled": true,"name": "server1","name": "server1","address": "127.0.0.1","address": "127.0.0.1","port": 1812,"port": 1812,"secret": "testing123","secret": "testing123","aaa_engine": "radius","aaa_engine": "radius","dicts": ["dictionary_voip", "dictionary_cisco", "dictionary_1"],"dicts": ["dictionary_voip", "dictionary_cisco", "dictionary_1"],"avp": "strict" | “custom”"avp": "strict" | “custom”

}}],],……

}}

Page 20: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Тип серверовТип серверов

{{……“authorization”:[“server_name1”, “server_name2”],“authentication”:[“server_name1”, “server_name2”],“accounting”:[“server_name3”],…

}}

Page 21: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Список приложений - AuthZ-провайдеровСписок приложений - AuthZ-провайдеров

{{......

"authz_apps": ["authz_apps": [ "circlemaker","circlemaker", "jonny5""jonny5" ],],

……}}

Page 22: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Трансляция KV AVP↔Трансляция KV AVP↔{{

……// может быть "authz_avp_translation", "accounting_avp_translation"// может быть "authz_avp_translation", "accounting_avp_translation"// и "custom_avp_translation"// и "custom_avp_translation"

"authn_avp_translation": ["authn_avp_translation": [ {{ "attribute": "User-Name","attribute": "User-Name", "request_key": "Uname","request_key": "Uname", "request_value_regexp": "^(.*)$","request_value_regexp": "^(.*)$", "attr_value_regexp": "^(.*)$""attr_value_regexp": "^(.*)$" },}, {{ "attribute": "User-Number","attribute": "User-Number", "request_key": "Unumber","request_key": "Unumber", "request_value_regexp": "^(.*)$","request_value_regexp": "^(.*)$", "attr_value_regexp": "^(.*)$","attr_value_regexp": "^(.*)$",

““cast”: “string_to_integer”cast”: “string_to_integer” }} ],],

……}}

Page 23: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Блокирование механизма AAA для отдельных Блокирование механизма AAA для отдельных типов каналов:типов каналов:

{{……// может быть "block_authn" и "block_accounting"// может быть "block_authn" и "block_accounting"

"block_authz": ["block_authz": [ {{ "channel": ["inbound", "external"]"channel": ["inbound", "external"] },}, {{ "channel": ["inbound", "internal"]"channel": ["inbound", "internal"] }} ]]

……}}

Page 24: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Disconnection packetDisconnection packet

{{……"disconnection_packet": {"disconnection_packet": {

"port": 3799,"port": 3799,"secret": "testing123""secret": "testing123"

},},……

}}

● UDP-серверUDP-сервер

Page 25: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Прочие настройкиПрочие настройки

{{……"nas_address": "127.0.0.1","nas_address": "127.0.0.1","nas_port": "2000","nas_port": "2000","workers": 5,"workers": 5,““local_interim_update_interval”,local_interim_update_interval”,……

}}

Page 26: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

RADIUS-словариRADIUS-словари

{{……"name": "dictionary_1","name": "dictionary_1","value": ["value": [

{{"val": {"val": {

"vid": 11344,"vid": 11344,"id": 1080,"id": 1080,"val": 13,"val": 13,"name": "Status-Client""name": "Status-Client"

}}},},

……],],"owner": "d0b7cf8509c7f5f1c45c1c6f7bb2fc3a""owner": "d0b7cf8509c7f5f1c45c1c6f7bb2fc3a"

}}

Page 27: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Сложности реализации, иличто такое loopback-каналы

и почему это зло

Page 28: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Loopback-каналы – зло!

FreeSwitch

loopback leg → a-leg b-leg

Поск в диалплане: loopback/<exten>[/context[/dialplan]]Например: loopback/1000

1000

В результате использования loopback-ов в CDR могут появиться вот такие штуки:

from: +84991231234-bto: [email protected]

Или даже такие:

callee_id_name: Outbound Callcallee_id_number: context_2caller_id_name: 4991231234caller_id_number: 4991231235

Page 29: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)
Page 30: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Что говорят создатели FreeSwitch?

https://wiki.freeswitch.org/wiki/Misc._Dialplan_Tools_bridge#loopback

“… WARNING! Loopback is evil and should only be used as a last resort, when no other approach is possible.”“… ПРЕДУПРЕЖДЕНИЕ! Loopback это зло, которое должно быть использовано только как крайний случай, когда никакой другой подход не возможен.”

https://freeswitch.org/confluence/display/FREESWITCH/Loopback+Endpoint

“… If loopback is your first attempt at solving a problem, keep looking elsewhere until you have no alternatives remaining.”“… Если loopback – ваша первая попытка решить проблему, поищите решение где-нибудь ещё, пока других альтернатив не останется.”

Page 31: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Вариант решения – трансформация значенийВариант решения – трансформация значений

{{……"leg_fields_transformation": {"leg_fields_transformation": {

"request_fields": ["request_fields": [{{

"source": "custom","source": "custom","key": "account_name","key": "account_name","alias": "an","alias": "an","value_regexp": "^(.*)$""value_regexp": "^(.*)$"

},},{{

"source": "custom","source": "custom","key": "account_realm","key": "account_realm","alias": "ar","alias": "ar","value_regexp": "^(.*)$""value_regexp": "^(.*)$"

},},……"result_fields": ["result_fields": [{{

"dest": "dest_leg","dest": "dest_leg","event": "channel_create","event": "channel_create","key": "From","key": "From","value": "$an@$ar""value": "$an@$ar"

},},……

Page 32: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Circlemaker v.2

?

Page 33: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

Что будет

● Очередь событий Kazoo (CHANNEL_CREATE, CHANNEL_DESTROY, и т.п.)● управление потоком событий● управление канальными переменными

● Поддержка скриптов на Lua● трансформация данных на любой вкус● регулярные выражения, bye-bye!● стандартная библиотека скриптов для Kazoo(?)● обработка событий Kazoo без знания Erlang(!)● … и т.д. и т.п.

● Поддержка DIAMETER● нужно больше биллинга!

● Выдача CDR через RADIUS● и звонковые логи, и биллинг – всё в одном месте

Page 34: KAZOOMEETUP MOSCOW 2015. Владимир Потапьев. Обзор приложения Circlemaker (RADIUS AAA)

СПАСИБО ЗА ВНИМАНИЕ!

ВОПРОСЫ?

Контакты автора:[email protected]