компьютерное

warning: Creating default object from empty value in /usr/local/www/drupal6/modules/taxonomy/taxonomy.pages.inc on line 33.

Asterisk: Лимитирование звонков по каналу.

Т.к. некоторые SIP/VoIP провайдеры далют халяву с некоторыми ограничениями (на пример sipnet) на количество звонков и их общую продолжительность, захотелось этим воспользоваться, но при этом не попадать на деньги.

Нарисовал 2-а макроса. Первый для учета количества звонков и их длительности, второй для выбора  необходимого транка.

1. Учет звонков.

Учитываем только отвеченные

[macro-count_dial_from_trunk]
exten => s,1,NoOp(${CDR(duration)} ${CDR(billsec)})

; Enable call limit control ?
exten => s,n,GotoIf($[${DB(trunk/${NAME_TRUNK}/day/limit-enable)} = 1 ]?:noanswer)
exten => s,n,GotoIf($[${DIALSTATUS} = ANSWER ]?:noanswer)

exten => s,n,Set(foo=${CUT(CDR(dstchannel),,1)})
exten => s,n,Set(foo=${CUT(foo,/,2)})

exten => s,n,GotoIf($[${ISNULL(${DB(trunk/${foo}/day/call-time)})}]?:continue_call-time)
exten => s,n,Set(DB(trunk/${foo}/day/call-time)=0)
exten => s,n(continue_call-time),Set(DB(trunk/${foo}/day/call-time)=$[${DB(trunk/${foo}/day/call-time)}+${CDR(billsec)}])

exten => s,n,GotoIf($[${ISNULL(${DB(trunk/${foo}/day/call)})}]?:continue_call)
exten => s,n,Set(DB(trunk/${foo}/day/call)=0)
exten => s,n(continue_call),Set(DB(trunk/${foo}/day/call)=$[ ${DB(trunk/${foo}/day/call)} + 1 ])

exten => s,n(noanswer),Verbose(4,Call count:${DB(trunk/${foo}/day/call)} - time(s):${DB(trunk/${foo}/day/call-time)})

2. Проверка превышения лимита

0
Your rating: Нет

Оповещение пользователей Asterisk о звонке на почту и jabber

Захотелось извещать пользователей Asterisk о поступающих им звонках. Наваял такой макрос:

[macro-notice_by_call]
exten => s,1,Verbose(4,Starting notification macros)
exten => s,n,Set(TIME_STRING=${STRFTIME($EPOCH,,%d %B %Y -  %T)})
exten => s,n,Set(SUBJECT_STRING=You call from ${CALLERID(name)} (${CALLERID(number)}))
exten => s,n,Set(MESSAGE_STRING=You call from ${CALLERID(name)} (${CALLERID(number)}). Time: ${TIME_STRING})

exten => s,n,GotoIf($[${ISNULL(${DB(abonent/${MACRO_EXTEN}/notyfication_jabber)})}]?skip_jabber_notification)
exten => s,n,GotoIf($[${DB(abonent/${MACRO_EXTEN}/notyfication_jabber)}=0]?skip_jabber_notification)
exten => s,n,jabbersend(asterisk,${DB(abonent/${MACRO_EXTEN}/jabber)},${MESSAGE_STRING})
${STRFTIME($EPOCH,,${TIME_STRING})})
exten => s,n(skip_jabber_notification),NoOp(No need jabber notification)
 
exten => s,n,GotoIf($[${ISNULL(${DB(abonent/${MACRO_EXTEN}/notyfication_email)})}]?skip_email_notification)
exten => s,n,GotoIf($[${DB(abonent/${MACRO_EXTEN}/notyfication_email)}=0]?skip_email_notification)
exten => s,n,system(echo "${MESSAGE_STRING}" | mail -s "${SUBJECT_STRING}" ${DB(abonent/${MACRO_EXTEN}/email)});
exten => s,n(skip_email_notification),NoOp(No need email notification)

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

0
Your rating: Нет

Играюсь в анонимность в сети

Пока разбирался с OpenVPN и с чем его едят, узнал что он очень популярен для поднятия VPNа с целью скрытия своего IP адреса.

В сети много ресурсов которые за деньги и без готовы предоставлять впн для обхода блокировок провайдеров, правительств, контент провайдеров и т.д.

Из того что понравилось:

VPN Gate

цитата с хабра:

VPN Gate — академический эксперимент Проект представляет собой интернет-сервис как научных исследований в Высшей Школе Университета Цукуба, Япония. Цель данного исследования заключается в расширении знаний «Глобальные Распределенные открытый ретранслятор Сервера VPN».

Как говорит автор, целью проекта было помочь пользователям в странах, где действует государственная цензура интернет-трафика. VPN Gate так же бесплатен и открыт для всех желающих, как и Tor. С момента запуска в пятницу всего за пять дней сервисом воспользовались 77 тыс. пользователей, сгенерировав около четырёх терабайт трафика, так что спрос на бесплатные VPN явно присутствует.

0
Your rating: Нет

Учусь пользоваться OpenVPN

Начал разбираться, чем и как лучше поднимать шифрованные тунели. Один из вариантов OpenVPN.

На вскидку плюсы и минусы:

Плюсы:

  • по описаниям, надежное шифрование
  • использование одного порта для работы или UDP или TCP, может работать через прокси сервер
  • автоматически поддерживает соединение, т.е. не надо контролировать обрывы связи
  • позволяет управлять роутингом клиентов
  • разные механизмы авторизации: логин/пароль, ключи, сертификаты X.509
  • кросплатформенность
  • открытость
  • возможность поиграться в PKI
  • возможность как P2P (маршрутизируемого) соединения, так и моста (при необходимости прокинуть не IP трафик или прохождения широковещательных пакетов)

Минусы:

  • Отдельный продукт, который необходимо устанавливать, а не работает "искаропки", что требует определенных привилегий
  • Не совсем привычная настройка
  • не получилось повесить один сервер на разные порты (возможно, руки кривые)

По сертификатам X.509

Создаем/получаем корневой доверенный сертификат, с помощью которого, подписываем сертификаты клиентов и серверов.

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

Клиент и сервер определяются по их личным сертификатам, ключам и именам в сертификате (Common Name).

0
Your rating: Нет

VPN через ssh на FreeBSD

Обычно объединял сети через тунели между FreeBSD шлюзы через gif-интерфейсы. Легко, просто, быстро, удобно.

Но захотелось прикрутить к этому шифрование. IPSEC не понравился, т.к. нужно много ставить и настраивать, а тут все компоненты есть в коробке.

Последовательность:

  1. Настраиваем sshd: разрешаем тунелирование и вход от root только по ключу.
  2. Создаем ключи и копируем на сервер.
  3. Настраиваем тунель и автоматизируем процес.

Настраиваем sshd: разрешаем тунелирование и вход от root только по ключу

в /etc/ssh/sshd_config добавляем

# For SSH tunel
PermitTunnel yes
PermitRootLogin without-password
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Создаем ключи и копируем на сервер

На клиенте создаем ключ и публичный ключ копируем на сервер.

На клиенте

ssh-keygen -t rsa -b 4096
# cat /root/.ssh/id_rsa.pub | ssh user@server "cat - >> ~/.ssh/authorized_keys"

На сервере помещаем ключ нужному пользователю:

cat authorized_keys >> /root/.ssh/authorized_keys

После этого на клиенте запускаем

ssh -w5:5 -f -CT -o ServerAliveInterval=10 root@server "ifconfig tun5 10.0.1.1 10.0.1.2" && ifconfig tun5 10.0.1.2 10.0.1.1

Прописываем роутинги и далее, все должно быть хорошо.

0
Your rating: Нет

Внедрение цифровой подписи и шифрования для организации

Черновик.

Потребовалось начать использовать шифрование в организации, начал искать, через что это можно сделать.

Сначала смотрел в сторону GnuPG, но не смог разобраться, как внедрить ее в почтовые клиенты от Microsoft.

В итоге наковырял, что для шифрования и подписи писем есть S/MIME с сертификатами X.509.

И итоге для использования необходимо на компьютер под виндой установить:

  1. GnuGP - для создания запросов на сертификат и возможности шифрования и подписи файлов
  2. OpenSSL - для того, чтобы GnuGP шифровал файлы с помощью сертификатов X.509.

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

Удостоверяющим центром являюсь я, и обработка запросов сертификатов у меня под FreeBSD.

Создаем структуру под OpenSSL и самоподписанный корневой сертификат:

#Создаем структуру для хранения сертификатов
mkdir newcerts
mkdir private
echo 10000 > serial
touch index.txt

# Создаем самоподписанный корневой сертификат
openssl req -new -x509 -newkey rsa:3072 -keyout private/cakey.pem -out cacert.pem -days 3650
# Конвертируем в понятный для Windows сертификат
openssl x509 -outform der -in cacert.pem -out cacertificate.crt
# Просматриваем, что у нас получилось
openssl x509 -text -in cacert.pem
 

После этого через Kleopatra создаем для пользователя запрос на сертификат X.509 и передаем его на сервер. После чего на сервере создаем сертификат:

0
Your rating: Нет

Автоматическая проверка баланса у разных провайдеров через Астериск

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

У некоторых провайдеров, на пример - НСС, zadarma, sipnet, comtube, есть прямые телефоны для получения сразу баланса голосом, а у некоторых, типа МТС, нужно донабирать цифирки.

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

Так же для удобства прикрутил голосовые фразы с названием провайдеров, чтобы можно было понять, от какого провайдера идет информация о балансе.

Итоговая конфигурация extensions.conf

[get-balance]
exten => balance-all,1,Background(provider/mtt)
exten => balance-all,n,Dial(SIP/mtt/88003335358,,L(20000)g)
exten => balance-all,n,Background(provider/sipnet)
exten => balance-all,n,Dial(SIP/sipnet/00,,L(5000)g)
exten => balance-all,n,Background(provider/zadarma)
exten => balance-all,n,Dial(SIP/zadarma/1111,,L(7000)g)
exten => balance-all,n,Background(provider/comtube)
exten => balance-all,n,Dial(SIP/comtube/102,,L(7000)g)
exten => balance-all,n,Background(provider/ncc)
exten => balance-all,n,Dial(Dongle/dongle-ncc/10011,20,L(10000)g)
exten => balance-all,n,Playback(provider/mts)
exten => balance-all,n,Dial(Dongle/dongle-mts/111,60,M(balance-mts)L(8000))
exten => balance-all,n,Hangup

0
Your rating: Нет

Результаты игр в SIP с Астериском

Заработали как-то следующие телефончики:

  • Международные от МТТ (кто может звонить, кроме МТТ непонятно)
    • +88314 (077) 600-96-34
  • Городской от МТТ -
  • номер от Comtube.ru - sip:791167@comtube.com
  • номер от Zadarma.ru - sip:79760@zadarma.com
    • 883510001246309 - международный от Zadarma
  • номер от SipNet.ru - sip:0041077073:@sipnet.ru
0
Your rating: Нет

Установка русских фраз для Asterisk

Подключение русских голосовых фраз для астериска проста, единственное, запнулся с местом, куда их нужно класть, во FreeBSD оказалось /usr/local/share/asterisk/sounds.

Качаем с ivrvoice и распаковываем архив в папку /usr/local/share/asterisk/sounds/ru

После этого в sip.conf в general или у пользователя прописываем:

language=ru

И вроде как - счастье.

0
Your rating: Нет

Автоматизация создания шаблонов для extensions.conf Asterisk

Т.к. в очередной раз решил попытаться всмпомнить, кто такой Asterisk, и попытался к нему прикрутить пару GSM модемов для входящих/исходящих звонков пришлось придумывать, как разруливать, через кого какие вызовы должны уходить.

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

Несколько позже, Stinky подсказал, вроде, более правильный адрес выписки из реестра Российской системы и плана нумерации на сайте Федерального агентства связи (Россвязь).

Из моментов, списки несколько расходятся - на МТТ для НСС Нижегородской области он больше. Как на самом деле - не знаю.

# diff ncc_parent_svyaz.txt.sort ncc_parent_mtt.txt.sort
9a11
> exten => _[7-8]953410XXXX,1,Macro(ncc,${EXTEN})
10a13
> exten => _[7-8]95341[3-4]XXXX,1,Macro(ncc,${EXTEN})

Далее был написан маленький скрипт на баше для конвертации номеров из формата "начальный номер диапазона конечный номер диапазона" в формат понятный астериску X[X-X]XXX

0
Your rating: Нет
Ленты новостей