Записки сисадмина
Алексей Никипольский
Пятница, 22.11.2024, 04:16
 
Меню
Настройка windows XP [38]
тонкости настройки, скрытые возможности
Программирование [8]
Нюансы, примеры, мои наработки и прочая полезная информация
Защита [28]
Компьютера, данных, интернет соединений и прочая полезная информация по защите
Обзор новинок [15]
Новинки ПО и железа
Обмен опытом [20]
Заработок в сети [9]
Все виды заработка в сети интернет, обзор, анализ, рекомендации
Распознование [10]
Все о методах и способах распознавания графической информации. Взлом капчи, методы и способы анализа...
Электронные книги [4]
По PHP CSS SQL PERL программированию Всё что есть в свободном доступе в интернете на разных ресурсах.
WEB программирование [9]
Всё о программировании WEB PHP Java PERL HTTP HTML и т.п.
Взлом [6]
методика взлома, примеры взлома, способы защиты от взлома
Онлайн сервисы [2]
Полезные сервисы онлайн
Администрирование [27]
Опыт системного администрирования
Статистика
Календарь
«  Июнь 2013  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
Главная » 2013 » Июнь » 28 » Связываем Active Directory, Asterisk и OpenFire
23:42
Связываем Active Directory, Asterisk и OpenFire

Дружим между собой Active Directory, сервер IP телефонии Asterisk и Jabber-сервер OpenFire.


Первое, что нам понадобится – пользователи. Создаем в домене двух пользователей. Один нам будет нужен для ldap аутентификации, другой для Kerberos. Первого я назвал openfire, второго xmpp-openfire. Дальше – сразу создаем группу для пользователей jabber (у меня она называется IM) и добавляем в нее необходимых пользователей. Проверяем, чтобы у всех пользователей, имеющих внутренний телефон и входящих в группу IM в поле «номер телефона», стоял именно внутренний номер абонента. 
Второе – прописываем в DNS наш будущий jabber сервер. Нам нужна и прямая и обратная зона. На самом jabber сервере настраиваем имя хоста – прописываем в /etc/hosts:

127.0.0.1 localhost.localdomain localhost 
10.10.8.226 jbrgseveren01.steepler.local jbrgseveren01

Проверяем со всем сторон nslookup’ом – все должно правильно ресолвиться. Да, имя хоста в маленьком регистре. Это важно. 
Третье — ставим OpenFire по инструкции — http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/ldap-guide.html
Там все просто, подводных камней нет. Максимум сложностей – формирование грамотных фильтров в ldap запросе. Подключаемся через первого пользователя. На выходе получите функционирующий сервер со сквозной авторизацией через AD. Можно подключать клиентов и работать. Но, наша задача – SSO: Single Sign On. Нам надо, чтобы пользователю не надо было думать о своем логине и пароле для клиента. 
Приступаем к настройке Kerberos. Тут используем второго созданного нами юзера. Все описано тут —http://community.igniterealtime.org/docs/DOC-1060
Все чуть сложнее, есть подводные камни. Главное – пОмНиТе пРО РегиСтры – все имеет значение. Пишите как в мануале – где заглавными, там заглавными, где строчными, там строчными. Не забудьте ввести сервер в домен и проверить факт введения. Это важно!!!
Да, keytab я создавал на контроллере домена – у меня все заработало. Средствами java я не пользовался. 
Ставьте Spark – родной клиент OpenFire, проверяйте – если SSO работает – хорошо. Если нет, надо разбираться – ищите, пишите, посмотрим. 
Идем на сервер Asterisk (не забывайте – у меня стоит FreePbx, поэтому даю названия файлов относительно его схемы; в случае голого Asterisk все будет чуть проще) и прописываем в manager_custom.conf пользователя OpenFire:
[openfire] 
secret = XXXX
deny=0.0.0.0/0.0.0.0
permit=10.10.8.226/255.255.255.0
read = all
write = all

Теперь ставим плагин Asterisk-IM. Он есть в веб-интерфейсе OpenFire, в закладке с доступными плагинами. Прописываем на появившейся вкладке Asterisk-IM наш VoIP сервер:
Server Name: AsteriskGSeveren01 
ServerAddress: 10.10.8.98
Port: 5038
Username: openfire
Password: XXXX

Настала очередь прописывать пользователей руками… Надо идти на вкладку Phone Mappings и писать, писать, писать. Ограничимся парой пользователей, проверим работу. В контакт листе Spark, при щелчке правой кнопкой по имени пользователя, должна появиться опция call. Выбираем – должен зазвонить наш аппарат, при подъеме трубки – аппарат абонента. 
Если все работает – хорошо. Если нет, надо разбираться – ищите, пишите, посмотрим. 
Теперь начинается то, на что было потрачено основное время.
Надо объяснить Asterisk-IM, что бывают доменные пользователи и что в Active Directory есть вся необходимая информация. 
Напрямую – никак. Плагин старый, поддержка его прекращена – жрите, что есть. А есть у нас MySQL база данных, в которой плагин хранит свою информацию. Самым простым способом было бы вынимать из базы информацию по пользователям OpenFire и подсовывать ее Asterisk-IM. Но, так как аутентификация у нас сквозная, то в своей базе OpenFire ничего не хранит – тащит напрямую с домен-контроллера. 
Хорошо. Пишем скрипт, который будет цепляться к AD по ldap протоколу (пользователь у нас уже есть), тащить информацию по пользователям домена, входящим в группу IM и вынимать поля, содержащие полное имя, логин и номер телефона. Потом формируем SQL инъекцию и запихиваем в прямо базу Asterisk-IM. Тупой костыль, но работает.
Скриптов вышло два – один я нашел готовый тут. Написан на perl – он тянет инфу из домена и, кстати, в состоянии выводить готовый sip.conf после минимальной правки. Второй, на баше – вызывает первый, препарирует его вывод (да я знаю, что я извращенец, но раз задача кем-то уже решена, не надо городить), формирует SQL инъекции и пихает все в БД.

скрипты

Скрипт запихиваем в крон, выполняем и обнаруживаем появившуюся привязку пользователей к телефонам в закладке Phone Bindings плагина Asterisk-IM. Полдела сделано. 

Следующая задача — отправка сообщений о пропущенных вызовах. Если у вас стоит TrixBox или FreePBX – делайте, как я – все скорее всего заработает. Если голый Asterisk – все в ваших руках, импровизируйте, вам доступно многое. Я, даже, отчасти завидую ))) 

Для начала необходимо выполнить авторизацию через ssh по ключам – мы будем использовать scp и дистанционное выполнение процедуры. ssh-keygen вам поможет, мануалов в сети достаточно, повторяться не буду. Скрипт на jabber сервере будет лезть в базу данных, которую мы правили предыдущим скриптом (да, их можно объединить в один, но я решал задачи не одновременно, да и в целом – unix way говорит о правильности разбиения задач на составляющие), вынимать логин пользователя, номер телефона. Формировать jID. Дальше мы готовим исполняемый скрипт, который будет вносить информацию во встроенную базу Asterisk, переносим его на сервер Asterisk и запускаем.

Вот что получилось:
phone-mapping-request.sh:
#!/bin/bash 
WORKDIR=/opt/openfire/bin/phone-mappings
SCRIPTNAME=phone-mappings-script.sh
SCRIPT=$WORKDIR/$SCRIPTNAME
SERVER=jbrgseveren01.steepler.local
#asterisk USER@HOST:/PathToFile
ASTERISK=root@10.10.8.98
#asterisk /PathToFile
RPATH=/etc/asterisk/scripts

counter=0
counter2=0

#clearing script file
cat /dev/null > $SCRIPT

#perform MYSQL request for mappings
for i in `mysql -Bse "SELECT extension,username FROM openfire.phoneDevice JOIN openfire.phoneUser ON openfire.phoneUser.UserID=openfire.phoneDevice.UserID;" -uXXXX -pXXXX`; do
counter=`expr $counter + 1`
mapper[$counter]=$i
done

maxcount=$counter
counter=1

while [ "$counter" -lt "$maxcount" ]
do

# deviding array into two with extensions and jids

counter2=`expr $counter2 + 1`
extension[$counter2]=${mapper[$counter]}
counter=`expr $counter + 1`
jid[$counter2]=${mapper[$counter]}
counter=`expr $counter + 1`

# forming asterisk script

outstringdel="asterisk -rvx \"database del AMPUSER "${extension[$counter2]}"/jid\""
outstringadd="asterisk -rvx \"database put AMPUSER "${extension[$counter2]}"/jid "${jid[$counter2]}"@"$SERVER"\""
echo $outstringdel >> $SCRIPT
echo $outstringadd >> $SCRIPT

done

# moving scrip to asterisk host

chmod 755 $SCRIPT
scp $SCRIPT $ASTERISK:$RPATH

# run script
ssh $ASTERISK $RPATH/$SCRIPTNAME


Дело за малым – объяснить Asterisk, что с этим делать. Тут было потрачено огромное количество времени на нахождение точки входа. Если заработает как у меня – прекрасно. Если нет – даю наводку. Астериск, в случае включения разных инструкций на одинаковое условие (то есть в диалплане написано одно действие на условие, во включении из подгружаемого контекста — другое) берет за инструкцию то, которое было получено первым. Последующие тупо игнорируются. Я к тому, что если вы написали какую-то функцию, вставили ее, а результата ноль – делайте dialplan show и смотрите, где это условие в этой ветке контекста со всеми include встречается раньше вашего. 
В моем случае оказалось достаточным добавить в extensions_custom.conf:

[from-internal-noxfer-custom] 
; Missed calls Jabber notification
exten => h,1,Macro(XMPPSend,)
exten => h,n,Macro(hangupcall)

[macro-XMPPSend]
; Missed calls Jabber notification
exten => s,1,GotoIf($["foo${DB(AMPUSER/${THISDIAL:4}/jid)}" = "foo"]?5:2)
exten => s,n,Set(JID=${DB(AMPUSER/${THISDIAL:4}/jid)})
exten => s,n,Jabbersend(asterisk-jabber,${JID},${STRFTIME(${EPOCH},,%d/%m/%Y-%H:%M:%S)} - Пропущенный вызов на номер ${THISDIAL:4} от ${CALLERID(name)}, номер ${CALLERID(num)})
exten => s,n,MacroExit()
exten => s,n,Noop(No Jabber ID provided for target extension - ${THISDIAL:4})
exten => s,n,MacroExit()

И, прописать Asterisk как компонент OpenFire:
На стороне Asterisk:
Jabber.conf:
[general] 
debug=no ;;Turn on debugging by default.
;autoprune=yes ;;Auto remove users from buddy list.
;autoregister=yes ;;Auto register users from buddy list.

[asterisk-jabber] ;;label
type=component ;;Client or Component connection
serverhost=jbrgseveren01.steepler.local ;;Route to server
username=asterisk ;;Username with optional roster.
secret=XXXX ;;Password
port=5275 ;;Port to use defaults to 5222

На стороне OpenFire идем в Server -> Server Settings -> External Components Settings
Включаем Service Enabled.
Как отправлять сообщения с помощью jabber - читаем здесь
 При желании добавляем asterisk в whitelist.

Рекомендую Вам также почитать:


  • Автоматический запуск профиля пользователя на терминальном сервере.
  • Использование искусственных нейронных сетей для распознавания рукопечатных символов
  • Cоздаём простейший web-браузер
  • как создать DLL
  • Какой Браузер позволяет продлить срок работы от аккумулятора?
  • Jabber в организации
  • Список операторов Ucoz
  • Отсечение нелицевых граней
  • Принципы взлома wifi
  • Обход защиты доступа к сайту

  • Загрузить, скачать Настройка windows XP, Связываем Active Directory, Asterisk и OpenFire бесплатно.
    Скачать Связываем Active Directory, Asterisk и OpenFire бесплатно
    Связываем Active Directory, Asterisk и OpenFire бесплатно и без регистрации.

    При копировании материала указывайте источник

    Связываем Active Directory, Asterisk и OpenFire download free


    Категория: Настройка windows XP | Просмотров: 5142 | Добавил: Никипольский-Алексей | Теги: Active Directory, Asterisk и OpenFire | Рейтинг: 0.0/0
    Всего комментариев: 0
    avatar
    Мои услуги на Kwork
    Like It


    Copyright Алексей Никипольский © 2009 - 2024