Подключение разделов TrueCrypt с помощью сервера Asterisk

Предисловие

Частью моей работы является ежедневное монтирование контейнеров TrueCrypt на удаленном сервере (1С с «серыми» базами… ну, вы понимаете).

Утренний порядок действий меня напрягал: включить ноутбук, подключиться к серверу, ввести 70-тизначный пароль в TrueCrypt, отключиться от сервера, выключить ноутбук, собраться и ехать на работу.

Мысль об использовании Asterisk пришла сразу. Необходимо было это реализовать.

Решение

Конфигурация оборудования такая:

  1. сервер Asterisk — Ubuntu Server 10.04, Asterisk v1.6.
  2. терминальный сервер — Windows Server 2003 R2, TrueCrypt v6.1a, два жестких диска с разделами TrueCrypt.

Логическая цепочка размышлений была такая:

  1. TrueCrypt позволяет управлять собой из командной строки.
  2. Asterisk позволяет запускать любые скрипты, достаточно прописать их в extensions.conf.
  3. Есть виндовая утилита psexec.exe, позволяющую запускать процессы на удаленном виндовом компьютере из командной строки.
  4. Asterisk стоит на Ubunte, значит необходим аналог psexec для линукса — найден winexe.

Дальше привожу сами скрипты.

extentions.conf:

Пояснение:

звоним на внутренний номер 777777, вводим пароль 123, выполняется скрипт mount.sh (монтирование разделов) либо вводим пароль 321 и выполняется скрипт umount.sh (размонтирование разделов, так называемая «КРАСНАЯ КНОПКА»)

mount.sh:

/etc/asterisk/scripts/winexe — путь к утилите winexe, которая находится в папке со скриптами.
DOMAIN — имя вашего домена,
LOCALROOT — локальный админ на терминальном сервере,
PASS — пароль локального админа,
IPADDRESS — IP-адрес терминального сервера,
дальше путь к TrueCrypt.exe на терминально сервере с параметрами
\Device\Harddisk1\Partition1 — жесткий диск 1 (для того, чтобы определить путь к разделу, запустите TrueCrypt и щелкните Выбрать устройство / Select Device),
/lE — закрепляемая за диском буква (E:\)
/p «CJIo}i{HbIU’napoJIb» — пароль к разделу TrueCrypt,
\Device\Harddisk2\Partition1 — жесткий диск 2 и дальше по аналогии с первым диском.

umount.sh

Здесь происходит форсированное тихое размонтирование разделов E:\ и F:\ и рандомная запись в содержимое скриптов для скрытия информации.

Все скрипты и winexe находятся в папке scripts (/etc/asterisk/scripts/)

Итог

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

Применение связки Asterisk+скрипты может существенно упростить жизнь и расширить возможности системного администратора, например, создание бэкапа или перезапуск служб по звонку.
Лень толкает на подвиги!

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

http://habrahabr.ru/blogs/sysadm/127997/

Отказоустойчивый Asterisk-кластер на основе DRDB и Redfone foneBRIDGE2

Имеем задачу увеличить отказоустойчивость работы телефонии, для этого создаем кластер, основанный на использовании пакета DRDB. Для связи с PSTN-провайдером служит TDMoE-конвертер от Redfone — foneBRIDGE2. Конвертер преобразует поток T1/E1 в Ethernet. Для обеспечения отказоустойчивости в нашем случае используются 2 сервера Asterisk, — Master и Slave, пара других сетевых интерфейсов серверов (eth0) соединена с помощью cross-кабеля. Синхронизация между серверами осуществляется с помощью DRBD, благодаря которому мы получим «сетевой RAID1». В качестве системы управления отказоустойчивостью кластером, выбран пакет Heartbeat.

Предположим, что у нас есть 2 сервера, с установленным Asterisk и настроенной сетью.

Master: astmaster.local — eth0: 192.168.0.200, eth0: 10.10.10.10
Slave: astslave.local — eth0: 192.168.0.201, eth0: 10.10.10.11

Потребуется также 3-й IP-адрес, из сети 192.168.0.0/24, так называемый виртуальный IP-адрес, например — 192.168.0.203.

На данный момент, оба сервера c Asterisk, связаны с этим виртуальным IP, т.е. на интерфейсах eth1 каждого сервера прописан alias с IP-адресом 192.168.0.203.

Настройка файловой системы

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

1. Загрузимся с LiveCD

2. Проверим диск на наличие ошибок (все ошибки необходимо исправить):

3. Изменим размер текущего раздела sda2:

где «3000M» — новый размер раздела, следует также помнить:

  • Раздел swap должен быть не менее 512M и не более 1G, для наших целей.
  • Для синхронизации разделов DRDB, слишком большой размер займет очень много времени, если раздел будет слишком маленьким — не хватит места. Минимальный размер раздела DRDB составляет 4 Gb. Оптимальные размеры от 4 до 16 Gb. (Примечание. Из-за бага или фичи в resize2fs, или даже в fdisk, размер главного раздела надо умножить на 0,75, в нашем случае будет именно 3 Gb).

4. Запускаем fdisk /dev/sda, жмем «p» и enter. В нашем случаем, как показано на скриншоте ниже, и стираем все разделы ниже 14-го цилиндра, являющегося началом раздела sda2.

  • Удаляем swap раздел:
    • Жмем «d», Enter
    • Жмем «3», Enter
  • Удаляем раздел sda2
    • Жмем «d», Enter
    • Жмем «2», Enter
  • Создаем новый раздел sda2
    • Жмем «n», Enter
    • Жмем «p», Enter
    • Жмем «2», Enter
    • Жмем «14», Enter (или то значение, с которого начинается раздел sda2)
    • Жмем «+4000M», Enter (или другой необходимый размер для DRDB-раздела)
    • Жмем «w», Enter

5. Проверяем раздел на наличие ошибок:

6. Запускаем resize2fs, без указания размера раздела, чтобы использовать всё доступное место на этом разделе.

7. Снова запускаем fsck, чтобы удостовериться, что всё прошло нормально:

8. Запускаем fdisk /dev/sda еще раз, для создания swap-раздела:

  • Жмем «n», Enter
  • Жмем «p», Enter
  • Жмем «3», Enter, Enter
  • Жмем «+768M», Enter (вводим размер файла подкачки)
  • Жмем «t», Enter
  • Жмем «3», Enter
  • Жмем «82», Enter
  • Жмем «n», Enter
  • Жмем «p», Enter
  • Жмем Enter, Enter
  • Жмем «w», Enter

10. Форматируем swap-раздел:

11. Перезагружаем сервера.

Установка и настройка DRDB

Для дальнейших настроек можно скачать уже настроенные пакеты DRDB и Heartbeat:

Для нескольких CPU: asterisk_ha_cpu_multi.tar.bz2

Для одного CPU: asterisk_ha_cpu_single.tar.bz2

Внимание! Скрипты заточены только под Trixbox 1.2.3!

Создаем новую директорию в корне:

Перед использованием скриптов, проверим:

1. Внешние интерфейсы серверов (eth1) должны принадлежать одной сети (192.168.0.0/24).

2.  Внутренние интерфейсы серверов (eth0) должны принадлежать одной сети (10.10.10.0/24). При необходимости можно указать другие IP-адреса в файле drdb.conf.

3. Имя первичного сервера — astmaster.local, вторичного — astsecondary.local. Команда uname -n должна возвращать эти имена. При необходимости можно указать другие имена в файлах drdb.conf, ha.d/ha.cf и ha.d/haresources.

Внимание! В имени хоста необходимо использовать «.». Если использовать простое имя, без точки, то Sendmail будет загружаться очень медленно, что снизит переключение между серверами на несколько минут, вместо секунд. 🙂

4. Оба интерфейса должны стартовать при загрузке системы.

5. IP-адреса серверов и шлюза также прописываются в ha.d/haresources.

6.  Необходимо убедиться, что сервера видят друг друга, и firewall на внутренних интерфейсах (eth0) отключен.

7. Для гигабитных интерфейсов, внутри кластера (eth0), необходимо в файле drdb.conf изменить параметр «rate» в значение «120».

8. Выполним скрипт /root/ha/drdb на обоих серверах — ошибок быть не должно. Если выполнить скрипты не одновременно или пройдет таймаут, DRDB может сообщить, что ожидает соседние ноды. Однако, после загрузки drdb.primary, необходимо убедиться, что узлы синхронизированы.

9. Проверить работу DRDB можно, выполнив cat /proc/drbd. При этом узлы будут находиться в состоянии secondary или inconsistent.

10. На первичном сервере надо запустить скрипт /root/ha/drbd.primary. Выполнение может занять некоторое время, однако ошибок быть не должно, разве что различных предупреждений типа — «timestamp in future».

11. Необходимо подождать, пока DRDB синхронизирует узлы кластера. Этот процесс может занять до нескольких часов. Для проверки готовности узлов можно проверить статус, командой cat /proc/drbd.

12. После окончания синхронизации, на первичном сервере появится сообщение:

13. DRDB установлен и работает!

Установка и настройка Heartbeat

1. Выполним скрипт /root/ha/ha на обоих серверах. Будут остановлены эти демоны: mysql, sendmail, asterisk, httpd, munin-node, ircd, xinetd, xplhub, vsftpd.

2. Через некоторое время, после запуска Heartbeat демоны снова начнут работать:

3. Если выполнить команду ifconfig eth1:0 увидим виртуальный IP-адрес 192.168.0.203, приписанный первичному серверу.

4. Для тестирования кластера просто выключаем питание на первичном сервере.

Через пару секунд все службы и alias сетевого интерфейса будут запущены на вторичном сервере.

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

Кластер готов к работе.

 

Установка и настройка Redfone foneBRIDGE2

Желательно TDMoE трафик из foneBRIDGE изолировать VLAN’ом X, на коммутаторе.

Примечание: VLAN X имеет доступ к серверам кластера в VLAN Y, но не имеет доступа к VLAN Z, где размещены VoIP-устройства и пр. Между VLAN Y и VLAN Z обмен пакетами разрешен. Основная задача изолировать TDMoE трафик от остальной сети.

Настройка foneBRIDGE2 и Zaptel

Чтобы заставить foneBRIDGE работать, надо скачать, скомпилировать и установить программу Fonulator (Redfone). Основной файл настроек программы — redfone.conf.

Работа foneBRIDGE основана на TDMoE (Time Division Multiplexing over Ethernet) через MAC-адреса.

(для более старых версий можно указать CFLAGS=-static)

Загрузочный скрипт можно скачать здесь:

http://www.891rpm.com/filez/fonulator

 

http://www.891rpm.com/filez/foneBRIDGE2 Installation Guide English.pdf

Скрипт устанавливается в директорию /etc/init.d/ на каждом сервере.

Настриваем foneBRIDGE  помощью файла настроек redfone1.conf и redfone2.conf. Надо скопировать эти файлы в директорию /etc/ на каждом сервере.

redfone1.conf

Измените fb1 и fb2 на MAC-адреса, указанные на каждом из foneBRIDGE. Параметр server1 изменяем на MAC-адрес сетевого интерфейса eth1, соответствующего сервера.

redfone2.conf

Измените fb1 и fb2 на MAC-адреса, указанные на каждом из foneBRIDGE. Параметр server1 изменяем на MAC-адрес сетевого интерфейса eth1, соответствующего сервера.

Скрип запуска fonulator, в /etc/init.d использует оба этих файла для запуска foneBRIDGE’ей.

zaptel.conf (dahdi.conf)

Надо указать MAC-адреса соответствующие MAC-адресам foneBRIDGE. Необходимо указывать только MAC-адреса интерфейса FB1, каждого из foneBRIDGE.

zapata.conf

No you need to edit the haresources file on both machines.

Надо также отредактировать файл /etc/ha.d/haresources на обоих серверах:

изменить на:

Благодаря этому, скрипт fonulator заработает, как кластерный сервис! 🙂

Включите оба foneBRIDGE и подключите к коммутатору. Перезагрузите оба сервера. Если возникнут проблемы с загрузкой серверов, можно зайти на первичный сервер и выполнить zztool (dahdi_tool).

После этого, оба SPAN должны нормально и без ошибок работать.

(http://www.fintechcommunications.com/tutorials/asteriskCluster.htm)

 

———————————————-

Ubuntu Server 9.04 Install with Asterisk and foneBRIDGE2

Requirements

Base Install from ISO image

Components

dahdi-2.2.0

dahdi-tools-2.0.0

libpri-1.4.10.1

asterisk-1.4.26

Install Steps
Install dependencies and helper packages;

Download ASTERISK, DAHDI, LIBPRI, FONULATOR, LIBFB. Please note many of the asterisk.org directories change frequently which may require modifications to the full URL path used in some of the following command examples.

Install libfb, fonulator library.

Install fonulator, the fonebridge configuration utility

Confirm fonulator installation successful

fonulator 2.0.0

Copyright (C) 2007 Redfone Communications, LLC.

Build Number: 36

Install dahdi and dahdi-tools

Install libpri

Continue install following normal configuration guidelines for the fonebridge2 and Asterisk;

http://support.red-fone.com

sipp

sipp – мощная утилита для генерации нагрузки на SIP оборудование. Обычно sipp используется для проверки отказоустойчивости систем IP-телефонии, выявления максимально-допустимой нагрузки или ddos-а конкурентов 🙂 Сценарий сессии в sipp описывается в XML файле. Можно воспользоваться одним из множества сценариев распространяемых в комплекте с sipp или создать свой.

Кроме тестирования сигнализации (SIP) sipp способен тестировать и медиа нагрузку. Для этого существуют два модуля: PCAP play и RTP echo. PCAP play – проигрывает заранее записанный сетевым анализатором (например wireshark) медиа файл. RTP echo – позволяет sipp отсылать обратно все полученные RTP потоки.

Пример использования sipp

10.10.10.1 – IP адрес SIP сервера, на который следует слать запросы.

-s 12345 – Указывает номер который будет вызван. Может быть числом или текстом. Значение по умолчанию – service

-i 10.10.10.2 – Локальный IP адрес. Этот адрес будет использован в SIP сообщениях в качестве адреса источника сообщений. По умолчанию используется адрес 127.0.0.1.

-d 2h – Устанавливает длительность звонков. В данном случае звонки будут длиться 2 часа. Длительность по умолчанию – 1 секунда.

-l 60 – Ограничивает максимальное количество одновременных звонков – 60.

-aa – Включает автоматические ответы 200 OK на сообщения INFO, UPDATE и NOTIFY.

-mi 10.10.10.2 – Устанавливает локальный IP для RTP.

-rtp_echo – Включает режим RTP эха. Все RTP пакеты полученные от удалённой стороны – отправляются обратно.

-nd – Отключает стандартную обработку неожиданных ситуаций – sipp будет прерывать звонки в случае получения неправильных SIP сообщений.

-r 10 – Устанавливает максимальную «скорость звонков» (CPS) в данном случае – не более 10 звонков в секунду.

Максимальной скоростью вызовов можно управлять во время работы sipp с помощью клавиш «+» и «-» – повышая и понижая её соответственно. Вообще, опустив параметры -aa -mi 10.10.10.2 -rtp_echo -nd – мы получаем отличное средство для тестирования отказоустойчивости и максимального CPS у SIP proxy.

Настройка Asterisk

Для того, что бы Asterisk принимал звонки от sipp, необходимо создать в SIP.conf специальный SIP-peer с именем sipp. К сожалению, заставить sipp совершать вызовы от имени существующего пользователя – нельзя. В стандартных сценариях sipp всегда представляется как sipp. Добавляем в SIP.conf запись:

Важными моментом, является наличие кодека ulaw в списке разрешенных т.к. именно его анонсирует sipp. Если 711u не будет в списке разрешённых кодеков, то Asterisk отклонит вызов от sipp. Вторым важным моментом, является строка insecure=port,invite. Данная строка заставляет Asterisk авторизовать sipp не по паролю, а по IP адресу указанному в поле host. Кроме записи в SIP.conf, можно создать специальный контекст в extensions.conf для обработки тестовых звонков от sipp.

Следующий пример принимает звонки на «номер» service – именно этот идентификатор используется по умолчанию:

Вот и всё. Успехов в стресс тестах! 🙂

P.S. Документация по sipp — http://sipp.sourceforge.net/doc3.0/reference.html

Решение проблем при размещении Cisco 7942G за NAT’ом

Весьма проблематично заставить работать телефон Cisco 7942 или Cisco 7962, если он находится за NAT-ом. Телефон не может выполнить регистрацию, а без этого не получится ни звонить, ни принимать звонки.

Проблема вызвана некоторыми особенностями в реализации SIP-стека на телефонах, которые интеграторы телефонии на Asterisk называют багами, а сами Cisco-разработчики называют фичей. Речь идет о инициирующих SIP-портах, которые начинаются с 49000.

При подключении из-за NAT, сервер Asterisk считает пир nat=yes устройством, из-за чего использует симметричный SIP/RTP и шлет ответы ровно на тот порт, с которого пришло соединение. Но на деле сама Cisco 7942 ждет ответа не на порту отправления, а на порту 5060, а точнее, на порту, указанном в <voipControlPort>. Из-за различия портов связь установить не удается, а сама Cisco 7942 упорно отвечает сообщениями типа ICMP Port Unreachable.

Решение проблемы:

1. (Опционально) Указать в теге <voipControlPort> порт, отличный от 5060. Например, 5091. Это связано с тем. что в дальнейшем мы этот порт будем пробрасывать на роутере.

2. Закрепить Cisco 7942 на статическом IP-адресе, либо присвоить статическую аренду на DHCP-сервере.

3. Прописать секцию
<natEnabled>false</natEnabled>
<natAddress></natAddress>

4. На сервере Asterisk в настройках экстеншена прописать опцию nat=no

5. На роутере, который пускает телефон в Интернет, прописать статический проброс UDP порта, который у вас указан в <voipControlPort> на внутренний IP телефона Cisco 7942G. Как правило, эта секция в веб-интерфейсе роутера называется «Virtual Server» или «NAT 1:1».

6. Перезагрузить телефон нажатием Settings-> **#**.
Убедиться, что телефон работает. Если чуда не случилось, то поможет разобраться в проблеме tcpdump. Возможно, будет иметь смысл игра с опиями nat=no и nat=never

* — Надо заметить, что IP может быть и динамическим. В этом случае нужно будет настроить роутер так, чтобы он обновлял динамическую DNS-запись, например, на сервисе DynDNS. Тогда в это поле вписывается FQDN-запись вида <natAddress>somename.dyndns.org</natAddress>. При этом нужно учитывать, что телефон резолвит это имя в IP всего один раз, при старте телефона. Если внешний IP изменится, телефон об этом не узнает, из-за чего будут наблюдаться проблемы односторонней слышимости или отсутствия регистрации.

 

Asterisk Call Forwarding and Feature Codes

To activate:

Dial * 72

1. Listen for voice prompt.
2. Dial the desired telephone number you wish your calls forward to followed by #.
3. Listen for confirmation.
Call Forwarding is established.

To deactivate:
1. Press *73.
2. Listen for confirmation.

The following list of features is the most common set of default codes found on Asterisk and used by answering service clients.  Because all feature codes may be customized it is recommended that you check with your PBX administrator to verify the correct codes for your system.

 

Handset Feature Code
Action
*30
Blacklist a number
*31
Remove a number from the blacklist
*32
Blacklist the last caller
*52
Call Forward No Answer/Unavailable Activate
*53
Call Forward No Answer/Unavailable Deactivate
*72
Call Forward All Activate (Activate Answering Service)
*73
Call Forward All Deactivate (Deactivate Answering Service)
*74
Call Forward All Prompting Deactivate
*740
Call Forward Toggle
*90
Call Forward Busy Activate
*91
Call Forward Busy Deactivate
*92
Call Forward Busy Prompting Deactivate
*70
Call Waiting — Activate
*71
Call Waiting — Deactivate
*34
Perform dictation
*35
Email completed dictation
*76
DND Toggle
*78
DND Activate
*79
DND Deactivate
*21
Findme Follow Toggle
*54
User Intercom Allow
*55
User Intercom Disallow
*97
My Voicemail
*98
Dial Voicemail

Asterisk on Debian Squeeze

First some background: I use Asterisk to route my calls through multiple VoIP providers. Calls to Australian landlines through iiNet since they’re free, and the rest through Pennytel since they’re cheap. My el-cheapo ATA simply registers with Asterisk and my mum just calls as usual, and everything’s automagically cost optimised.

Problem: I did an apt-get -y dist-upgrade after not having touched this system for quite a while, and one of Asterisk’s dependencies, dahdi, failed to install with the error message FATAL: Module dahdi not found.

Basically, the dependecies don’t cause automatic installation of the needed kernel drivers, so the following will fix it:

source: http://cryptwizard.info/?p=691

Asterisk – храним CDR в БД MySQL

Должны быть установлены следующие компоненты:

— Mysql Server 5 and Client
— asterisk-1.4.22
— asterisk-addons-1.4.7

#Скачиваем Asterisk-addons с Digium:

 

1
2
3
4
5
6
cd /usr/src
wget <a title="http://downloads.digium.com/pub/asterisk/releases/asterisk-addons-1.4.7.tar.gz" href="http://downloads.digium.com/pub/asterisk/releases/asterisk-addons-1.4.7.tar.gz">http://downloads.digium.com/pub/asterisk/releases/asterisk-addons-1.4.7....</a>
tar xvfz asterisk-addons-1.4.7.tar.gz
cd asterisk-addons-1.4.7/cdr/
vi cdr_addon_mysql.c
add #define MYSQL_LOGUNIQUEID after #define DATE_FORMAT “%Y-%m-%d  %T”

 

1
2
3
cd ..
./configure
make menuselect

Проверяем, загружен ли модуль:

1
2
3
4
5
6
7
8
9
10
11
—> 1. Applications
[*] 1. app_addon_sql_mysql
2. Call Detail Recording
[*] 1. cdr_addon_mysql
3. Channel Drivers
4. Format Interpreters
5. Resource Mod
then q (quit) and S (save)
make && make install

Редактируем файл /etc/asterisk/cdr.conf

1
2
3
4
vi /etc/asterisk/cdr.conf
[general]
enable=yes

Редактируем файл /etc/asterisk/cdr_mysql.conf

1
2
3
4
5
6
7
8
9
[global]
hostname=localhost
dbname=asterisk
table=cdr
password=pass01234
user=asterisk
port=3306
;sock=/tmp/mysql.sock
;userfield=1

Редактируем файл /etc/asterisk/modules.conf

1
vi /etc/asterisk/modules.conf

добавляем следующие строки (если нет):

1
load => cdr_addon_mysql.so

Создаем БД, таблицы и разрешения.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
ipbbx01:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.0.32-Debian_7etch5 Debian etch distribution
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql> create database asterisk;
mysql> use asterisk;
mysql> CREATE TABLE cdr (
calldate datetime NOT NULL default ‘0000-00-00 00:00:00′,
clid varchar(80) NOT NULL default ”,
src varchar(80) NOT NULL default ”,
dst varchar(80) NOT NULL default ”,
dcontext varchar(80) NOT NULL default ”,
channel varchar(80) NOT NULL default ”,
dstchannel varchar(80) NOT NULL default ”,
lastapp varchar(80) NOT NULL default ”,
lastdata varchar(80) NOT NULL default ”,
duration int(11) NOT NULL default ‘0′,
billsec int(11) NOT NULL default ‘0′,
disposition varchar(45) NOT NULL default ”,
amaflags int(11) NOT NULL default ‘0′,
accountcode varchar(20) NOT NULL default ”,
userfield varchar(255) NOT NULL default ”,
uniqueid varchar(32) NOT NULL default ”
);
ALTER TABLE cdr ADD INDEX ( calldate );
ALTER TABLE cdr ADD INDEX ( dst );
ALTER TABLE cdr ADD INDEX ( uniqueid );
You can add more indices if you want.
mysql> q
[/mysql]
Не забываем дать разрешения пользователю asterisk@localhost для  работы с БД MySQL:
[mysql]
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> on asterisk.*
-> to 'asterisk'@'localhost';
Query OK, 0 rows affected (0.00 sec)

Проверяем соединение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ipbx01:~# mysql -h localhost -u asterisk -p asteriskmysql> show tables;
+——————–+
| Tables_in_asterisk |
+——————–+
| cdr |
+——————–+
1 row in set (0.00 sec)
mysql> desc cdr;
+————-+————–+——+—–+———————+——-+
| Field | Type | Null | Key | Default | Extra |
+————-+————–+——+—–+———————+——-+
| calldate | datetime | NO | MUL | 0000-00-00 00:00:00 | |
| clid | varchar(80) | NO | | | |
| src | varchar(80) | NO | | | |
| dst | varchar(80) | NO | MUL | | |
| dcontext | varchar(80) | NO | | | |
| channel | varchar(80) | NO | | | |
| dstchannel | varchar(80) | NO | | | |
| lastapp | varchar(80) | NO | | | |
| lastdata | varchar(80) | NO | | | |
| duration | int(11) | NO | | 0 | |
| billsec | int(11) | NO | | 0 | |
| disposition | varchar(45) | NO | | | |
| amaflags | int(11) | NO | | 0 | |
| accountcode | varchar(20) | NO | | | |
| userfield | varchar(255) | NO | | | |
| uniqueid | varchar(32) | NO | MUL | | |
+————-+————–+——+—–+———————+——-+
16 rows in set (0.00 sec)
mysql>

Данный этап завершен! Теперь проверяем, загружен ли mysql модуль.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ippbx01# asterisk -r
Asterisk 1.4.20, Copyright (C) 1999 - 2008 Digium, Inc. and others.
Created by Mark Spencer
Asterisk comes with ABSOLUTELY NO WARRANTY; type ‘core show  warranty’ for details.
This is free software, with components licensed under the GNU  General Public
License version 2 and other licenses; you are welcome to  redistribute it under
certain conditions. Type ‘core show license’ for details.
=========================================================================
Connected to Asterisk 1.4.20 currently running on asterisk88 (pid =  26648)
Verbosity is at least 3
ippbx01*CLI> stop now
ippbx01*CLI>
Disconnected from Asterisk server
ippbx01# safe_asterisk
ippbx01# asterisk -r
Asterisk 1.4.20, Copyright (C) 1999 - 2008 Digium, Inc. and others.
Created by Mark Spencer
Asterisk comes with ABSOLUTELY NO WARRANTY; type ‘core show  warranty’ for details.
This is free software, with components licensed under the GNU  General Public
License version 2 and other licenses; you are welcome to  redistribute it under
certain conditions. Type ‘core show license’ for details.
=========================================================================
Connected to Asterisk 1.4.20 currently running on asterisk88 (pid =  26880)
Verbosity is at least 3
ippbx01*CLI> cdr mysql status
<h2>Connected to asterisk@localhost, port 3306 using table cdr for 15  seconds.</h2>
Wrote 0 records since last restart.
ippbx01*CLI> quit

Вот и все, хранение CDR в БД MySQl у нас работает.

 

Asterisk + iLBC

Since Asterisk 1.4.19 (and also 1.6), the iLbc codec was removed due to licensing problems (It is not licensed for distribution). To enable it again, it is necessary to download its source code and tell to Asterisk to compile with it.

To do it manually, the instructions says:

run the contrib/scripts/get_ilbc_source.sh
run ‘make menuselect‘ and check the codec_iLBC option under Codec Translators.
compile/install Asterisk as usual
When using PADS you will need to modify the package/asterisk/asterisk.mk file to add the get_ilbc_souce.sh script in a way that it will be executed before the configure script. In addition, it is necessary to modify the get_ilbc_souce.sh to use the right path to download the iLbc source code.

You can look for the following code in asterisk.mk file:

$(ASTERISK_DIR)/.configured: $(ASTERISK_DIR)/.asterisk_unpacked $(ASTERISK_DIR)/.sounds_unpacked
cd $(ASTERISK_DIR); ./configure $(ASTERISK_CONFIGURE_OPTS)
touch $(ASTERISK_DIR)/.configured

Then you can add the following commands just before the configure call:

$(ASTERISK_DIR)/.configured: $(ASTERISK_DIR)/.asterisk_unpacked $(ASTERISK_DIR)/.sounds_unpacked
sed -i “s|codecs/ilbc|build_warp/asterisk/codecs/ilbc|” $(ASTERISK_DIR)/contrib/scripts/get_ilbc_source.sh
$(ASTERISK_DIR)/contrib/scripts/get_ilbc_source.sh
cd $(ASTERISK_DIR); ./configure $(ASTERISK_CONFIGURE_OPTS)
touch $(ASTERISK_DIR)/.configured

Note: The italic code above is all in a single line

Before compiling Asterisk again using PADS, you’ll need to enable the Asterisk menuconfig. To do this, you need to run the PADS ‘make menuconfig’ and check the Asterisk Custom Settings. This will open the Asterisk menu allowing you to set the iLBC codec as explained above.

When everything is done, a simple way to check if the codec was properly installed is to use the asterisk console command core “show translation”. It will show you a table like that with the iLbc code in:

g723 gsm ulaw alaw g726aal2 adpcm slin lpc10 g729 speex ilbc g726 g722
g723 — — — — — — — — — — — — —
gsm — — 6 6 12 6 5 28 — — 132 11 —
ulaw — 13 — 1 8 2 1 24 — — 128 7 —
alaw — 13 1 — 8 2 1 24 — — 128 7 —
g726aal2 — 17 6 6 — 6 5 28 — — 132 1 —
adpcm — 13 2 2 8 — 1 24 — — 128 7 —
slin — 12 1 1 7 1 — 23 — — 127 6 —
lpc10 — 27 16 16 22 16 15 — — — 142 21 —
g729 — — — — — — — — — — — — —
speex — — — — — — — — — — — — —
ilbc — 37 26 26 32 26 25 48 — — — 31 —
g722 — — — — — — — — — — — — —

marek comment:

As you can see from the large numbers in ‘core show translation’ for iLBC, iLBC can be quite CPU-intensive. This ultimately means that only a handful of ports using iLBC will run on appliance.

Защищаем сервер Asterisk с помощью fail2ban

Итак, пришло время поговорить о защите. На написание поста меня сподвигла атака из США жестким брутом. Дело было так, я зашел на сервер оптимизировать конфиг users.conf(Об этом в следующей статье). После правки файла, я благополучно зашел в консоль Asterisk и увидел кучу сообщений (примерно 5 раз в секунду) о том, что с такого-то IP попытка зайти под пользователем 104. Меня это сначала смутило. А потом я решил поставить fail2ban, чтобы обезопасить себя. Итак, статья в моем стиле — поэтому никакой лишней инфы не будет, только то что нужно чтобы закрыть доступ для атакующего IP. Защищать будем Asterisk, ну и бонусом SSH.

Шаг 1. Установка fail2ban.

Шаг 2. Установка python и iptables. Возможно вам понадобиться установить эти пакеты, поэтому

Шаг 3. Конфигурация fail2ban. Итак, займемся конфигурацией. Для этого перейдем в каталог /etc/fail2ban/filter.d.

Создаем новый фильтр:

Содержимое файла /etc/fail2ban/filter.d/asterisk.conf должно быть примерно таким:

Шаг 4. Редактируем /etc/fail2ban/jail.conf. В конец файла добавляем следующее содержимое:

Шаг 5. Логирование Asterisk. Открываем /etc/asterisk/logger.conf и раскомментируем:

В консоли перегружаем сервис логирования:

Шаг 6. Запуск.

Проверим:

Должно появиться что то типа этого:

Шаг 7. Автозапуск fail2ban и iptables:

http://www.fail2ban.org/wiki/index.php/Asterisk

http://www.voip-info.org/wiki/view/Fail2Ban+%28with+iptables%29+And+Asterisk

Защита Asterisk или кубинская эпидемия

В последнее время началась большая волна взломов Asterisk с последующим прогоном через них траффика на кубу.
Поскольку минута звонка на кубу стоит в среднем от 1$ в минуту это может привести к печальным последствиям (за 17 часов на одном из транков баланс опустили до -8000$).
Схема работает так:

  1. Ищется в сети Asterisk сервер
  2. Подбирается список его пиров
  3. Подбираются пароли к пирам
  4. Аккаунт ставится в систему перебирающую транки при звонке.
  5. Набегает множество кубинцев звонящих через эту систему

Если купить доступ к такой системе и позвонить, то можно по задержке до гудка понять, что в этой схеме участвует огромное количество взломанных Asterisk серверов.

Подбор пиров

При подборе пиров используется метод реализованный в Sipvicious. Для сканирования перебираются пиры и анализируется ответ Asterisk. Например: ./svwar.py sip.somewhere
| Extension | Authentication |
-------------------------------
| 607 | reqauth |
| 606 | reqauth |
| 601 | reqauth |
| 600 | reqauth |
| 300 | reqauth |
| 900 | reqauth |
| 100 | reqauth |

Для продиводействия этому нужно включить директиву alwaysauthreject в sip.conf, которая при любых ошибках авторизации отвечает 401 Unauthorized.
После этого тот-же сервер при попытке сканирования будет отвечать 401 и утилита выдаст ошибку:
./svwar.py sip.somewhere
ERROR:TakeASip:SIP server replied with an authentication request for an unknown extension. Set --force to force a scan.
WARNING:root:found nothing

Кубинская проблема

Если ваши абоненты не собираются звонить на кубу, то ее надо закрыть в extensions.conf
Например: ;cuba
exten => _53.,1,Answer()
exten => _53.,n,PlayBack(vm-goodbye)
exten => _53.,n,Hangup()
;somali
exten => _252.,1,Answer()
exten => _252.,n,PlayBack(vm-goodbye)
exten => _252.,n,Hangup()

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

P.S. Для проверки на то, что вы правильно прописали отклонение звонков на кубу можно попробовать позвонить по номеру +53997970. Это военная база и там всегда отвечает автоответчик.

Взято с Хабра — http://habrahabr.ru/blogs/voip/103341/