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