Инструкция по установке IP-АТС Asterisk v16 на ОС CentOS 8

Олег Ремизов
20 июля 2020
access_time6 минут
remove_red_eye3057
Компания «Ланкрафт»
Компания «Ланкрафт»

1. Введение

Настоящая инструкция описывает подробный процесс установки Asterisk версии 16, а также выполнение общесистемных настроек для обеспечения безопасности. Установка предусматривается "с нуля" на сервер под управлением ОС CentOS 8.x (Minimal).

Установка панели управления FreePBX описана в отдельной статье.

2. Установка и обновление системных пакетов и зависимостей

Установите необходимые системные пакеты, отсутствующие в базовом дистрибутиве.

yum -y groupinstall core base "Development tools"
yum -y install epel-release
yum config-manager --set-enabled PowerTools
yum -y install e2fsprogs-devel keyutils-libs-devel krb5-devel libogg libsepol-devel libxml2-devel libtiff-devel gmp audiofile-devel libogg-devel openssl-devel zlib-devel sox git psmisc iptables-services fail2ban gcc-c++ make gnutls-devel libxml2-devel ncurses-devel subversion doxygen texinfo curl-devel neon-devel uuid-devel libuuid-devel sqlite-devel sqlite speex-devel gsm-devel libtool libtool-ltdl libtool-ltdl-devel gtk2-devel newt-devel
yum -y update
reboot

3. Отключение SELinux

Поскольку при включенной службе SELinux на этапе инсталляции Asterisk могут возникать непредсказуемые ошибки, ее следует отключить путем изменения параметра SELINUX в конфигурационном файле /etc/selinux/config на значение disabled:

SELINUX=disabled
SELINUXTYPE=targeted

Обновите и перезагрузите систему:

yum -y update
reboot

Проверьте состояние SELinux

sestatus

Ожидаемый вывод:

SELinux status: disabled

4. Настройка межсетевого экрана и средства предотвращения вторжений

В ядре CentOS 8 по умолчанию используется межсетевой экран FirewallD, при этом настоящая инструкция предусматривает работу с iptables. Если вы предпочитаете использовать FirewallD, настройте его и пропустите данный раздел.

4.1. Деактивация FirewallD и активация iptables

systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables.service
systemctl start iptables.service

4.2. Подключение модулей iptables

Для обеспечения работы механизма динамического открытия портов RTP (SIP ALG), необходимо подключить дополнительные модули iptables:

sed -i 's/IPTABLES_MODULES=""/IPTABLES_MODULES="ip_conntrack iptable_filter iptable_mangle ipt_LOG ipt_limit ipt_state ipt_REJECT ip_conntrack_sip"/g' /etc/sysconfig/iptables-config

4.3. Настройка правил iptables

iptables -F INPUT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s <local network x.x.x.x/x> -j ACCEPT
iptables -A INPUT -s <management network x.x.x.x/x> -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j ACCEPT
iptables -A INPUT -p tcp --dport 5060 -j ACCEPT
iptables -A INPUT -p udp --dport 4569 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables-save > /etc/sysconfig/iptables

Примечания

  1. При отсутствии корректной поддержки SIP ALG на граничном маршрутизаторе, может потребоваться статическое открытие портов UDP для прохождения медиатрафика. Для этого следует добавить указанное ниже правило iptables:

    iptables -I INPUT 2 -p udp --match multiport --dports 10000:20000 -j ACCEPT

  2. Точный набор правил зависит от перечня используемых протоколов.
  3. Защита от нежелательного трафика на уровне сервера является дополнительной. Предполагается, что основная защита обеспечивается на уровне сетевой инфраструктуры.

4.4. Настройка утилиты fail2ban

Отредактируйте файл /etc/fail2ban/jail.conf и замените исходные строки в указанных ниже секциях приведенными ниже:

[DEFAULT]
ignoreip = 127.0.0.0/24
ignoreip = <local network x.x.x.x/x>
banaction = iptables-multiport
[asterisk]
enabled = true
logpath = /var/log/asterisk/security
maxretry = 3
bantime = 3600
[sshd]
enabled = true

Перезапустите fail2ban и добавьте его в автозапуск:

systemctl restart fail2ban
systemctl enable fail2ban

5. Установка Lame

Пакет Lame необходим для обеспечения работы Asterisk со звуковыми файлами mp3.

Создайте директорию для исходных файлов:

cd /usr/src
mkdir lame
cd lame

Загрузите и установите требуемые пакеты:

wget https://forensics.cert.org/cert-forensics-tools-release-el8.rpm
rpm -Uvh cert-forensics-tools-release-el8.rpm
yum -y --enablerepo=forensics install lame lame-devel

6. Установка Asterisk

6.1. Загрузка и конфигурирование Asterisk

cd /usr/src/
mkdir asterisk
cd asterisk
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
tar zxvf asterisk-16-current.tar.gz
cd asterisk-16.*
./contrib/scripts/get_mp3_source.sh
./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled

Если скрипт configure отработал корректно, на экран будет выведен логотип Asterisk в псевдографике:

Установка Asterisk
Установка Asterisk

6.2. Выбор используемых модулей (menuselect)

В данном разделе выбираются модули, которые будут установлены на следующем этапе.

make menuselect

Примечания

  1. Не следует отключать опции, выбранные по умолчанию.
  2. В разделе "Channel Drivers" следует выбрать тот драйвер SIP, который вы планируете использовать: chan_sip (старый) или chan_pjsip (новый). При возникновении сомнений выбирайте оба модуля..
  3. Дополнительно следует выбрать (отметить) следующие пункты меню:

    Add-Ons
    	o format_mp3
    
    Core Sound Packages
    	o CORE-SOUNDS-EN-*
    	o CORE-SOUNDS-RU-*
    
    Music On Hold File Packages
    	o MOH-OPSOUND-*
    
    Extras Sound Packages
    	 o EXTRA-SOUNDS-EN-*
    

6.3. Сборка и установка Asterisk

make

Если сборка Asterisk прошла корректно, на экране появится следующее сообщение:

Установка Asterisk
Установка Asterisk

make install

Если установка Asterisk прошла корректно, на экране появится следующее сообщение:

Завершение установки Asterisk
Установка Asterisk
make samples
make config
ldconfig

6.4. Настройка Asterisk для работы из-под непривилегированного пользователя

Замените в файле /usr/sbin/safe_asterisk строку с аргументами:

sed -i 's/ASTARGS=""/ASTARGS="-U asterisk"/g' /usr/sbin/safe_asterisk

Затем измените владельца директорий, относящихся к Asterisk:

useradd -m asterisk
chown asterisk:asterisk /var/run/asterisk
chown asterisk:asterisk /etc/asterisk -R
chown asterisk:asterisk /var/lib/asterisk -R
chown asterisk:asterisk /var/log/asterisk -R
chown asterisk:asterisk /var/spool/asterisk -R
chown asterisk:asterisk /usr/lib64/asterisk -R
chown asterisk:asterisk /var/lib/php -R
chown asterisk:asterisk /var/www -R
chmod 666 /var/log/httpd/

6.5. Настройка ротации логов Asterisk

Создайте конфигурационный файл ротации логов /etc/logrotate.d/asterisk и запишите в него следующие строки:

/var/log/asterisk/queue_log {
	 daily
	 su asterisk asterisk
	 missingok
	 rotate 60
	 notifempty
	 sharedscripts
	 create 0640 asterisk asterisk
}
/var/log/asterisk/freepbx_debug.log
/var/log/asterisk/messages
/var/log/asterisk/event_log
/var/log/asterisk/full
/var/log/asterisk/dtmf
/var/log/asterisk/trace
/var/log/asterisk/security {
	 daily
	 su asterisk asterisk
	 missingok
	 rotate 60
	 compress
	 notifempty
	 sharedscripts
	 create 0640 asterisk asterisk
	 postrotate
	 /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null
	 endscript
}
/var/spool/mail/asterisk {
	 daily
	 su asterisk mail
	 missingok
	 rotate 60
	 compress
	 notifempty
	 sharedscripts
	 create 0660 asterisk mail
	 postrotate
	 /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null
	 endscript
}

Запуск и проверка работы Asterisk

Запустите Asterisk штатным образом и проверьте его состояние:

systemctl enable asterisk
systemctl start asterisk
ps -ef | grep asterisk

Примерный ожидаемый вывод:

root  5111     1  0 08:57 ?		00:00:00 /bin/sh /usr/sbin/safe_asterisk
asterisk  5113  5111  0 08:57 ?		00:00:00 /usr/sbin/asterisk -f -U asterisk -vvvg -c
root  5650  3788  0 09:05 pts/0		00:00:00 grep --color=auto asterisk

Проверьте подключение к консоли управления Asterisk:

rasterisk

Ожидаемый вывод:

Проверка работы Asterisk
Проверка работы Asterisk