среда, 1 февраля 2017 г.

centos 7: собираем mod_shout

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

Суть в том, что штатно не собрать mod_shout, так как не хватает библиотек. При сборке скажет что нет libshout, но даже после установки и configure всё-равно модуль не соберётся. Потому что в зависимостях:
libshout
mpg123
lame

И всё печально. В freeswitch.spec видим
Requires:       libshout >= 2.3.1
Requires:       libmpg123 >= 1.20.1

Первая есть в base, вторую и третью надо ставить отдельно.
lame можно взять тут
yum -y install http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
или просто скачать либы с
http://li.nux.ro/download/nux/dextop/el7/x86_64/
можно так
yumdownloader lame-\*
(нужно всё кроме lame-mp3x)

mpg123 там тоже слишком стар, ибо там 1.15, а configure смотрит
checking for libmpg123 >= 1.16.0... no

Качаем отсюда
wget ftp://fr2.rpmfind.net/linux/atrpms/el7-x86_64/atrpms/stable/mpg123-1.18.1-1.el7.x86_64.rpm
wget ftp://fr2.rpmfind.net/linux/atrpms/el7-x86_64/atrpms/stable/mpg123-devel-1.18.1-1.el7.x86_64.rpm

Для сборки
yum install -y libshout-devel
rpm -Uvh *.rpm

Теперь переходим в сорцы и заново делаем bootstrap, configure итд.

пятница, 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/