/ #linux 

IP-телефонія на базі Asterisk. Частина 1: Встановлення сервера Asterisk

Цикл статей по розгортанню IP-телефонії на базі Asterisk. Фактично це моя проектна робота на отримання відповідного сертифікату одного з навчальних центрів. Робота була захищена, сертифікат отриманий, все написане тестувалось і є повтінстю робочою реалізацією. Інформація в статті і версії програмного забезбечення актуальні на 2017 рік.

Середовище

Операційна система встановлена з образу CentOS-7-i386-Minimal-1611.iso. Им’я сервера asterisk-centos.localhost.local. Адреса сервера в локальній мережі 192.168.1.201.

Встановлення сервера Asterisk

1.1 Підготовка середовища

Розширюємо bash, встановлюємо vim и пакет wget для скачування архівів з сирцевим кодом:

yum install bash-completion vim-enhanced wget

Встановлюємо набір утиліт для компіляції програм з сирцевих кодов:

yum groupinstall -y Development Tools

Оновлюємо пакети в системі до останніх версій:

yum update

Відключаємо SElinux (знаю що за це хтось має бути підсмажений в *nix-овому пеклі, але що було, те було), Для цього в файлі /etc/sysconfig/selinux треба вказати:

SELINUX=disabled

Перезавантажуємо систему:

reboot

1.2 Збирання залежностей Asterisk

Встановлюємо DAHDI для роботи з телефоними лініями загального призначення:

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
tar xvfz dahdi-linux-complete-current.tar.gz
rm -f dahdi-linux-complete-current.tar.gz
cd dahdi-linux-complete-2.11.1+2.11.1/
make all && make install && make config

Встановлюємо LibPRI для підтримки системи сигналізації ISDN:

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz
tar xvfz libpri-current.tar.gz
rm -f libpri-current.tar.gz
cd libpri-1.6.0/
make && make install

Встановлюємо PJProject для підтримки канального драйвера PJSIP:

cd /usr/src
wget http://www.pjsip.org/release/2.6/pjproject-2.6.tar.bz2
tar xvfj pjproject-2.6.tar.bz2
rm -f pjproject-2.6.tar.bz2
cd pjproject-2.6
./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --enable-shared --disable-video --disable-sound --disable-opencore-amr
make dep && make && make install
ldconfig -p | grep pj
	libpjsua2.so.2 (libc6) => /lib/libpjsua2.so.2
	libpjsua2.so (libc6) => /lib/libpjsua2.so
	libpjsua.so.2 (libc6) => /lib/libpjsua.so.2
	libpjsua.so (libc6) => /lib/libpjsua.so
	libpjsip.so.2 (libc6) => /lib/libpjsip.so.2
	libpjsip.so (libc6) => /lib/libpjsip.so
	libpjsip-ua.so.2 (libc6) => /lib/libpjsip-ua.so.2
	libpjsip-ua.so (libc6) => /lib/libpjsip-ua.so
	libpjsip-simple.so.2 (libc6) => /lib/libpjsip-simple.so.2
	libpjsip-simple.so (libc6) => /lib/libpjsip-simple.so
	libpjnath.so.2 (libc6) => /lib/libpjnath.so.2
	libpjnath.so (libc6) => /lib/libpjnath.so
	libpjmedia.so.2 (libc6) => /lib/libpjmedia.so.2
	libpjmedia.so (libc6) => /lib/libpjmedia.so
	libpjmedia-videodev.so.2 (libc6) => /lib/libpjmedia-videodev.so.2
	libpjmedia-videodev.so (libc6) => /lib/libpjmedia-videodev.so
	libpjmedia-codec.so.2 (libc6) => /lib/libpjmedia-codec.so.2
	libpjmedia-codec.so (libc6) => /lib/libpjmedia-codec.so
	libpjmedia-audiodev.so.2 (libc6) => /lib/libpjmedia-audiodev.so.2
	libpjmedia-audiodev.so (libc6) => /lib/libpjmedia-audiodev.so
	libpjlib-util.so.2 (libc6) => /lib/libpjlib-util.so.2
	libpjlib-util.so (libc6) => /lib/libpjlib-util.so
	libpj.so.2 (libc6) => /lib/libpj.so.2
	libpj.so (libc6) => /lib/libpj.so

Встановлюємо jansson, бібліотеку для роботи з даними в форматі json:

cd /usr/src
wget -O jansson.tar.gz http://www.digip.org/jansson/releases/jansson-2.10.tar.gz
tar vxfz jansson.tar.gz
rm -f jansson.tar.gz
cd jansson-2.10/
autoreconf --force --install
./configure
make && make install

1.3 Встановлення Asterisk

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
tar xvfz asterisk-13-current.tar.gz
rm -f asterisk-13-current.tar.gz
cd asterisk-13.15.0/
contrib/scripts/get_mp3_source.sh
contrib/scripts/install_prereq install
./configure
make menuselect

Крім запропонованих значень обираємо підтримку MySQL і звукові файли російською мовою (української озвучки тоді ще не підвезли, можливо зараз ситуація інша - не перевіряв):

    • Add-ons: format_mp3, res_config_mysql, app_mysql и cdr_mysql
    • Core Sound Packages: CORE-SOUNDS-RU-WAV

Після вибору налаштувань в menuselect встановлюємо Asterisk:

make
make install
make config
ldconfig

Створюємо конфігураційні файли:

make samples

Для запуску Asterisk необхідно створити користувача з відповідними правами:

useradd -m asterisk
chown asterisk. /var/run/asterisk
chown -R asterisk. /etc/asterisk
chown -R asterisk. /var/{lib,log,spool}/asterisk
chown -R asterisk. /usr/lib/asterisk

В файлі /etc/sysconfig/asterisk розкоментуємо рядки:

AST_USER="asterisk"
AST_GROUP="asterisk"

Запустимо Asterisk:

service asterisk start

Перевіримо роботу Asterisk:

asterisk -r
Asterisk 13.15.0, Copyright (C) 1999 - 2014, Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
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 13.15.0 currently running on asterisk-centos (pid = 25939)
asterisk-centos*CLI> 

1.4 Налаштування журналу подій

Налаштуємо ведення логів Asterisk в форматі, який буде необхіден для програми fail2ban. Для цього в файлі /etc/asterisk/logger.conf розкоментуємо рядок:

dateformat=%F %T ; ISO 8601 date format

Увімкнемо Asterisk Security Framework. Для цього в файлі logger.conf розкоментуємо рядок:

security => security

В цьому випадку інформація Asterisk Security Framework буде писатися у файл security. Після внесення змін необхідно перечитати конфігурацію:

asterisk-centos*CLI> logger reload

В папці логів Asterisk (/var/log/asterisk) має з’явитись файл з назвою security.

asterisk-centos*CLI> logger show channels
Channel                             Type     Status    Configuration
-------                             ----     ------    -------------
/var/log/asterisk/messages          File     Enabled    - NOTICE WARNING ERROR 
                                    Console  Enabled    - NOTICE WARNING ERROR 
/var/log/asterisk/security          File     Enabled    - SECURITY 

Змінимо рівень деталізації логів. В файлі /etc/asterisk/asterisk.conf встановимо рівень деталізації 9:

verbose = 9

Перезапустимо Asterisk і перевіримо рівень деталізації:

asterisk-centos*CLI> core show settings
PBX Core settings
-----------------
  Version:                     13.15.0
  ...
  Current console verbosity:   9
  ...

1.5 Налаштування ротації логів

Налаштуємо ротацію логів. Для цього в папці /etc/logrotate.d створюємо файл asterisk:

/var/log/asterisk/security
/var/log/asterisk/messages
{
	daily
        rotate 30
        compress
        missingok
        notifempty
        create 644 asterisk asterisk
        postrotate
                asterisk -rx 'reload'
        endscript
}

Запускаємо logrotate для перевірки роботи:

logrotate -f /etc/logrotate.d/asterisk
ls -l /var/log/asterisk/
итого 20
drwxr-xr-x 2 asterisk asterisk   6 Апр 22 21:32 cdr-csv
drwxr-xr-x 2 asterisk asterisk   6 Апр 22 21:32 cdr-custom
drwxr-xr-x 2 asterisk asterisk   6 Апр 22 21:32 cel-custom
-rw-r--r-- 1 asterisk asterisk 994 Апр 23 12:57 messages
-rw-r--r-- 1 asterisk asterisk 542 Апр 23 12:50 messages.1.gz
-rw-r--r-- 1 root     root     432 Апр 23 12:57 queue_log
-rw-r--r-- 1 asterisk asterisk 244 Апр 23 12:57 security
-rw-r--r-- 1 asterisk asterisk 131 Апр 23 12:50 security.1.gz

В наступній статті будемо налаштовувати SIP.

Author

Олександр Бобилєв

Залишаю собі право використовувати ненормативну (але інформативну) лексику там, де звичайні слова втрачають сенс і не відображають всієї палітри почуттів, від споглядання навколишньої дійсності.