пятница, 18 ноября 2016 г.

FreeSWITCH: меняем правила voicemail

Пробема с voicemail в том, что диалог вписан в код. Если требуется чуть изменить текст - можно менять фразы, штатно это файлы
/etc/freeswitch/lang/%lang%/vm/sounds.xml
Но структура там - оставили сообщение, а потом "нажмите ... чтобы прослушать, нажмите ... чтобы пометить важным" итд. А нужно скинуть звонок сразу после сохранения.
Второй момент - даже если убирать "лишние" play-file, тишину в 10-15с (ожидание ввода) штатно не убрать.
Но есть хитрость: открываем доку https://freeswitch.org/confluence/display/FREESWITCH/Speech+Phrase+Management и ближе к концу видим  Action functions. Список там конечно небольшой...

  • execute - calls the FreeSWITCH execute API (you can execute any other API's)
  • play-file - play a specific audio file or play a macro using phrase:macro_name
  • say - Call the specific "type" say api as below. The method is used to modify the way the data is annunciated (counted, iterated, or pronounced).
  • speak-text - Speak some text using the TTS engine
  • break - Stop parsing any more input patterns.

Но на помощь нам приходит execute. Итак: ищем блок voicemail_record_file_check, и приводим к виду
      <match>
        <action function="play-file" data="voicemail/vm-message.wav"/>
        <action function="play-file" data="voicemail/vm-saved.wav"/>
        <action function="play-file" data="voicemail/vm-goodbye.wav"/>
        <action function="execute" data="hangup()"/>
      </match>

Всё, теперь скажет "сообщение сохранено, до свидания" и сбросит звонок.

вторник, 18 октября 2016 г.

FreeSWITCH: начало

Что можно прочитать для старта

От @Deepwalker (потом его обидели разрабы и он ушел от FS)
https://habrahabr.ru/post/50091/
https://habrahabr.ru/post/50140/
https://habrahabr.ru/post/50240/

https://voipnotes.ru/instrukcii.html

Перевод доки (уже несколько устаревший, но для знакомства норм)
http://garantum.ru/content/category/8-freeswitch

Ну и разумеется офдока
https://freeswitch.org/confluence/display/FREESWITCH/FreeSWITCH+Explained

Есть старая дока, но части данных там просто нет, и есть шанс что могут просто удалить её. Хотя и там есть крупицы полезного
https://wiki.freeswitch.org/wiki/Main_Page

Каналы @ru_voip, @ru_freeswitch в telegram
канал #freeswitch в IRC, сервера freenode

Далее, ставить лучше всего уже собранные официальные пакеты, начиная с freeswitch-meta-vanilla
запускать
service freeswitch start
Консоль отладки
fs_cli

Показывать сип-пакеты:
sofia global siptrace on
Изменение уровня в консоли и логах (если в логе info, в консоли ниже чем info также не будет):
fsctl loglevel debug
Системная отладка, полезно при проблемах со свичом (в консоль пишется всегда, при любом уровне):
sofia loglevel all 9
Отключить вывод в консоль, но писать в лог как обычно:
/log 0
Также вместо 0-9 можно писать уровень, info, debug, err...

понедельник, 5 сентября 2016 г.

обновление таймзон

Штатный timezones.conf.xml весьма стар.
Хорошая новость: есть скрипт scripts/perl/timezone-gen.pl
Плохая новость: он лежит в сорцах и в штатных пакетах его нет, надо качать сорцы и забирать оттуда.
Для запуска требуется наличие актуального /usr/share/zoneinfo

вторник, 19 апреля 2016 г.

Dodging Sipvicious Script Kiddies и не только

https://www.onsip.com/blog/dodging-sipvicious-script-kiddies
использовать svcrash.py, баг легко правится.

http://blog.kolmisoft.com/sip-attack-friendly-scanner/

Далее, есть фаерволы.
Защита от флуда:
iptables -A INPUT -p udp --dport 5060 -m recent --name sip --set
iptables -A INPUT -p udp --dport 5060 -m recent --name sip --rcheck --seconds 30 --hitcount 30 -j DROP
http://www.skypeclub.ru/viewtopic.php?p=30526

http://www.voip-info.org/wiki/view/Asterisk+security

http://www.kolmisoft.com/scripts/fail2ban-iptables-script
почта принимается левая, кода нет, лучше свою не светить.


вторник, 12 апреля 2016 г.

захват потоков voip

Самый простой вариант - через tcpdump

tcpdump -nq -s 0 -i eth0 -w /tmp/dump.pcap port 5060
но это будет только sip трафик, чего часто недостаточно. Зато теперь можно натравить wireshark и получить информацию по звонку и прочие flow

также неплохо подходит утилита ngrep
ngrep -d any port 5060 -W byline > outfile.txt

Есть sipgrep, первая версия похоже померла, есть такое
https://github.com/sipcapture/sipgrep
нужно собирать самим.
Отличается от ngrep более глубокой поддержкой сип протокола и его полей.

Самый простой пример запуска:
sipgrep -d any

sngrep
Также нет в репах, брать тут
https://github.com/irontec/sngrep
или тут
https://github.com/irontec/sngrep/wiki/Installing-Binaries
(для centos-like дистров не забываем заменить dist на centos|fedora|rhel)

Также есть софт с поддержкой захвата и RTP
pcapsipdump
формат как у tcpdump -w, умеет также захватывать rtp

tshark
Может идти отдельным пакетом или частью пакета wireshark (в центоси например).
Много опций, может сразу делать анализ. Умеет анализировать данные, в том числе jitter и искажения, пример:
tshark -i eth0 -o "rtp.heuristic_rtp: TRUE" -R 'rtcp.ssrc.fraction >= 1 or rtcp.ssrc.jitter >= 240' -V

Можно натравить вывод на pcapsipdump, разделяя сип-диалоги по разным файлам.

Можно анализировать качество RTP
tshark -q -f 'udp portrange 16384-32768' -o rtp.heuristic_rtp:TRUE -z rtp,streams

И особый комбайн
HOMER Sip Capture
SIP capturing server with HEP and IP-proto-4 (IPIP) & Monitoring Application with CallFlows, PCAP extraction, powerful search tools, statistics and API. Native HEP capture agent integrated in FreeSWITCH

Есть ещё более мощный, но уже платный продукт http://www.voipmonitor.org/

Линки
http://wiki.freeswitch.org/wiki/Packet_Capture
https://habrahabr.ru/post/274919/

среда, 3 февраля 2016 г.

чуть про bind_digit_action

<anthm> there are no variants only peer self and both
<anthm> and there can be no space after the , for exec:foo,bar
<anthm> and if you want instant execute you have to use exec[i]:foo,bar


<anthm> bind,#82,exec:digit_action_set_realm,none_b,self,peer
<anthm> self for where to listen to dtmf peer for where to send actions
<anthm> also could be self,both peer,self etc

и пример "пустого" бинда
action application=bind_digit_action, data=none_a,NONE,api:sleep,1

пятница, 22 января 2016 г.

про локальные бд для фс

из ирки, #freeswitch

<pankid> I am trying to setup freeswitch HA using thishttps://freeswitch.org/confluence/display/FREESWITCH/High+Availability . I configured freeswitch to store registrations on internal to a mysql database through odbc, but it doesnt seem to be writing anything to my database
<pankid> http://paste.debian.net/333170/
<eschmidbauer> pankid: take "<param name="core-recovery-db-dsn" value ..." out of sofia
<pankid> eschmidbauer: and only have it in switch.conf?
<eschmidbauer> you need this in switch.conf.xml --> <param name="core-db-dsn" value="..." />
<eschmidbauer> yes, you only need that and the above in switch.conf.xml
<eschmidbauer> then in sofia, you need
<eschmidbauer> <param name="odbc-dsn" value="...." />
<eschmidbauer> so yur sofia profiles share a single db
<eschmidbauer> and the core shares a single db
<pankid> do they need to be different databases?
<eschmidbauer> doesn't matter, they can be same
<eschmidbauer> or different, as long as the values are same on each box
<pankid> will freeswitch populate the database I created in mysql?
<pankid> according to this old documentation it will, https://wiki.freeswitch.org/wiki/Using_ODBC_in_the_core#CentOS_5.2 but I am not seeing any indication freeswitch is trying to use this database.

факсы - про размеры

из ирки, #freeswitch

<playnet>  what correct size for fax? 1728x1186, 1728x1078, 1728x2156?
<playnet> or 1728 x something? What size for A4?
<coppice> length depends on the resolution, and its not a precisely defined number. Only the 1728 is precisely defined
<coppice> For A4 the lengths are 11xx for standard, 22xx for fine and 44xx for super-fine, but short pages are valid

пятница, 15 января 2016 г.

freeswitch: voicemail in mp3

Для включения mp3 требуется загруженный mod_shout.

В документации аж 3 переменных, позволяющих задать формат:
https://wiki.freeswitch.org/wiki/Mod_voicemail#file-extension
https://wiki.freeswitch.org/wiki/Mod_voicemail#vm-message-ext
https://wiki.freeswitch.org/wiki/Mod_voicemail#vm_message_ext

Что куда писать? Можно предположить, но явно это в доке не прописано:
file-extension - param в mod_voicemail, раздел profile
vm-message-ext - param, выставляется в настройках юзера
vm_message_ext - variable, выставляется в originating строке или в диалплане, заменяет собой vm-message-ext.