Главная » asterisk » Установка Asterisk + FreePBX на CentOS 9

Установка Asterisk + FreePBX на CentOS 9


Заставить работать ни 19.8 ни 20.1 с SRTP мне не удалось. Версия библиотеки libsrtp похоже не подходит для res_srtp

Для корректной работы сервера необходимо настроить системное время, открыть порты в брандмауэре и отключить SELinux. Также мы установим несколько пакетов и создадим учетную запись, от которой будет работать Asterisk.

1. Время

Задаем часовой пояс:

Код: bash
timedatectl set-timezone Europe/Moscow


* в данном примере московское время. Список всех зон можно посмотреть командой timedatectl list-timezones.

Устанавливаем сервис для синхронизации времени:

Код: bash
yum install chrony

И запускаем его с разрешением автозапуска:

Код: bash
systemctl enable chronyd --now

У меня оказался установленным.

2. Настройка firewall

Мы должны открыть порты:

    5060 — SIP.
    5061 — SIP over TLS.
    80 — http.
    443 — https.
    10000-20000 — диапазон для динамических портов.

В CentOS для управления брандмауэром может использоваться firewalld или iptables. Рассмотрим настройку и того, и другого.
Firewalld

Разрешаем порты для работы asterisk:

Код: bash
firewall-cmd --permanent --add-port={5060,5061}/{tcp,udp}

Код: bash
firewall-cmd --permanent  --add-port=10000-20000/udp

... и веб-сервера NGINX:

Код: bash
firewall-cmd --permanent --add-service={http,https}

Для применения настроек перезапускаем правила:

Код: bash
firewall-cmd --reload

Iptables

Открываем порты для астериска и веб-сервера:

Код: bash
iptables -I INPUT -p tcp --match multiport --dports 5060,5061 -j ACCEPT

Код: bash
iptables -I INPUT -p udp --match multiport --dports 5060,5061 -j ACCEPT

iptables -I INPUT -p tcp --match multiport --dports 80,443 -j ACCEPT

Код: bash
iptables -I INPUT -p udp --match multiport --dports 80,443 -j ACCEPT

Код: bash
iptables -I INPUT -p udp --dport 10000:20000 -j ACCEPT

Для сохранения правил установим:

Код: bash
dnf install iptables-services

И разрешим автозапуск сервиса:

Код: bash
systemctl enable iptables

Теперь сохраняем сами правила:
Код: bash
service iptables save

* правила будут сохранены в файл /etc/sysconfig/iptables.

Настоятельно рекомендую сменить порты SIP и SIPS, ломать вас будут пытаться на стандартных портах. Также, если сервер смотрит в инет напрямую, ни в коем случае не открывать порты http и https снаружи. Соответственно на firewall открываем порты, на которые будем менять(для SIP и SIPS). Проброс порта через nat со сменой (входящий не стандарт, перенаправление на 5060) приводит к обрыву соединения через 24 секунды примерно. О том, как поменять порты ссылка в конце статьи

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

Для отключения SELinux вводим две команды:

Код: bash
setenforce 0

Код: bash
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

4. Установка пакетов


Выполним установку пакетов:

Код: bash
dnf install wget tar glibc-langpack-ru

* где:

    wget — утилита для загрузки файлов по сети.
    tar — для распаковки архивов.
    glibc-langpack-ru — русская локаль. Она нужна, чтобы у нас была возможность выбрать русский интерфейс во FreePBX.

5. Создание пользователя

Нам нужен общий пользователь, от которого будет работать Asterisk и веб-сервер. Это необходимо, чтобы веб-сервер имел доступ к каталогам астериска.

Создаем пользователя командой:

Код: bash
useradd asterisk -m

Настройка веб-сервера

Для работы FreePBX нам необходим веб-сервер и СУБД. В нашем примере мы установим связку NGINX + PHP + MariaDB + NodeJS.

Сервер баз данных


Устанавливаем сервер mariadb:

Код: bash
dnf install mariadb-server

Стартуем сервис и разрешаем его автозапуск:

Код: bash
systemctl enable mariadb --now

Задаем пароль для суперпользователя СУБД:

Код: bash
mysqladmin -u root password

NGINX

Для установки веб-сервера вводим команду:

Код: bash
dnf install nginx

Открываем конфигурационный файл:

Код: bash
vi /etc/nginx/nginx.conf

В секции http добавим опцию:

Код: bash
client_max_body_size 128M;

* данный параметр разрешает загрузку файлов размером 128 Мб.

Стартуем nginx:

Код: bash
systemctl enable nginx --now

Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открыться страница приветствия NGINX:

Стартовая страница NGINX

Веб-сервер установлен.

PHP

Установка РНР 7.4 на CentOS 9

По умолчанию ставит 8.1, на нее не встает FreePBX!! Как понял я вырезана какая-то функция, используемая установщиком.

Код: bash
dnf install php php-fpm php-bcmath php-gd php-json php-mbstring php-mysqlnd php-pear php-snmp php-zip

настройки для php:

Код: bash
sed -i "s/upload_max_filesize = .*/upload_max_filesize = 128M/" /etc/php.ini
Код: bash
sed -i "s/post_max_size = .*/post_max_size = 128M/" /etc/php.ini
Код: bash
sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php.ini

И установим Time zone

Код: bash
vi /etc/php.ini

Код: bash
date.timezone = "Europe/Moscow"

*где:

    upload_max_filesize — максимальный объем загружаемого файла.
    post_max_size — максимальный объем всех загружаемых файлов за один раз.
    date.timezone — временная зона.
    memory_limit — максимальный объем памяти, который может использовать интерпретатор.


Открываем настройки php-fpm:

Код: bash
vi /etc/php-fpm.d/www.conf

Задаем значения для следующих опций:

user = asterisk
...
group = asterisk
...
listen.acl_users = asterisk,apache,nginx

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

Запускаем php-fpm:

Код: bash
systemctl enable php-fpm --now

NGINX + PHP

Свяжем наш веб-сервер с php. Для этого откроем конфигурационный файл:
Код: bash
vi /etc/nginx/nginx.conf

Добавим следующие строки в разделы http - server:

...
http {
    ...
    server {
        ...
        server_name  192.168.1.15;
        ...
        location ~ \.php$ {
            set $root_path /usr/share/nginx/html;
            fastcgi_pass unix:/run/php-fpm/www.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_param SERVER_NAME $host;
        }
        ...

* в данном примере мы задаем настройку для server_name — указываем имя хоста или IP-адрес, по которому мы будем подключаться к FreePBX. Также мы создаем секцию location для обработки php через php-fpm.

Перезапустим nginx:

Код: bash
systemctl reload nginx

Создадим файл php в домашней директории nginx:

Код: bash
vi /usr/share/nginx/html/index.php

Код: bash
<?php phpinfo(); ?>

Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открываться страница с информацией об установленной версии php и всех компонентах:

NodeJS

Последний компонент для нашего веб-сервера — NodeJS. Для его установки выполняем команду:

Код: bash
dnf install nodejs

Убедиться в установке можно командой просмотра версии:

Код: bash
node --version

Наш веб-сервер готов к работе.
Установка Asterisk

Мы будем устанавливать 16-ю версию Asterisk. На странице загрузки мы можем посмотреть все версии АТС и ссылки на них.

Во многих инструкциях естьвот такое:
Сначала установим пакеты, необходимые для сборки:

Код: bash
dnf --enablerepo=powertools install libedit-devel


Но на CentOS 9 этого репозитория нет, и дальше все собирается и без него...

После скачиваем Asterisk:

Код: bash
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz

Распаковываем архив и переходим в него:

Код: bash
tar -xvf asterisk-*.tar.gz

Код: bash
cd asterisk-*/

Устанавливаем зависимости для астериска:

Код: bash
./contrib/scripts/install_prereq install

Мы должны увидеть:

Complete!
#############################################
## install completed successfully
#############################################

Чистим временные файлы, которые появились после установки зависимостей:

Код: bash
make distclean

Добавляем библиотеку для работы с mp3:

Код: bash
./contrib/scripts/get_mp3_source.sh

Конфигурируем исходник:

Код: bash
./configure

* в данном примере мы конфигурируем исходник без дополнительных опций. Полный перечень опций и что они означают можно посмотреть командой ./configure -h.

Чтобы правильно сконфигурировать с поддержкой SRTP вводим:

Код: bash
yum install  libsrtp libsrtp-devel

Код: bash
./configure --libdir=/usr/lib64 --with-crypto --with-ssl=ssl --with-srtp

Мы должны увидеть:

...
configure: Menuselect build configuration successfully completed

              .$$$$$$$$$$$$$$$=..     
            .$7$7..          .7$$7:.   
          .$$:.                ,$7.7 
        .$7.    7$$$$          .$$77 
    ..$$.      $$$$$            .$$$7
    ..7$  .?.  $$$$$  .?.      7$$$.
  $.$.  .$$$7. $$$$7 .7$$$.      .$$$.
.777.  .$$$$$$77$$$77$$$$$7.      $$$,
$$$~      .7$$$$$$$$$$$$$7.      .$$$.
.$$7          .7$$$$$$$7:          ?$$$.
$$$          ?7$$$$$$$$$$I        .$$$7
$$$      .7$$$$$$$$$$$$$$$$      :$$$.
$$$      $$$$$$7$$$$$$$$$$$$    .$$$. 
$$$        $$$  7$$$7  .$$$    .$$$. 
$$$$            $$$$7        .$$$.   
7$$$7            7$$$$        7$$$     
$$$$$                        $$$     
  $$$$7.                      $$  (TM)   
  $$$$$$$.          .7$$$$$$  $$     
    $$$$$$$$$$$$7$$$$$$$$$.$$$$$$     
      $$$$$$$$$$$$$$$$.               

configure: Package configured for:
configure: OS type  : linux-gnu
configure: Host CPU : x86_64
configure: build-cpu:vendor:os: x86_64 : pc : linux-gnu :
configure: host-cpu:vendor:os: x86_64 : pc : linux-gnu :

Продолжаем настройку — запускаем меню для выбора параметров:

Код: bash
make menuselect
В разделе «Add-ons» выберите «chan_ooh323» и «format_mp3»

В разделе «Core Sound Packages» выберите необходимые аудиопакеты (опционально)

В разделе «Music On Hold» выберите нужные форматы музыки на удержании (опционально)

В разделе «Extra Sound Packages» выберите дополнительные аудиопакеты (опционально)

В разделе «Applications» выберите «app_macro» (в — Deprecated —)

включим поддержку SRTP

В разделе Resource Modules включить установку модуля res_srtp

Затем нажмите save and exit

В версии 20.1 нет выбора аудиопакетов, а res_srtp оказался включен по умолчанию. В 19.8 аудиопакеты есть, но SRTP не включается. Собранный с ним asterisk не может загрузить этот модуль и падает через несколько секунд

Теперь можно запустить сборку астериска:

Код: bash
make

Мы должны увидеть сообщение об успешной сборке:

+--------- Asterisk Build Complete ---------+
+ Asterisk has successfully been built, and +
+ can be installed by running:              +
+                                          +
+                make install              +
+-------------------------------------------+

После выполняем установку:

Код: bash
make install

Мы увидим:

+---- Asterisk Installation Complete -------+
+                                          +
+    YOU MUST READ THE SECURITY DOCUMENT    +
+                                          +
...

Устанавливаем скрипты для автозапуска АТС и готовые конфигурационные файлы:

Код: bash
dnf install chkconfig

Код: bash
make config

Код: bash
make samples

Код: bash
make install-logrotate

Если требуется установка logrotate для ротации лог-файлов

Код: bash
ldconfig

Настройте запуск asterisk из под соответствующего пользователя:

Откройте файл /etc/sysconfig/asterisk и раскоментируйте следующие строки:

Код: bash
vi /etc/sysconfig/asterisk
AST_USER="asterisk"
AST_GROUP="asterisk"

Код: bash
vi /etc/asterisk/asterisk.conf

Снимаем комментарий с опций:

runuser = asterisk
rungroup = asterisk

... и снимем комментарий с последующим редактированием:

defaultlanguage = ru
documentation_language = ru_RU

Задаем владельца для следующих каталогов:

Код: bash
chown -R asterisk:asterisk /var/run/asterisk

Код: bash
chown -R asterisk:asterisk /etc/asterisk

Код: bash
chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk

Код: bash
chown -R asterisk:asterisk /var/log/asterisk

Одной командой:

Код: bash
sudo chown -R asterisk.asterisk /etc/asterisk /var/run/asterisk /var/{lib,log,spool}/asterisk /usr/lib64/asterisk

и проверяем настройки:

Код: bash
asterisk -c

Мы должны увидеть Asterisk Ready:

Проверка запуска Asterisk

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

После успешной проверки, можно запустить Asterisk в качестве демона:

Код: bash
systemctl enable asterisk

Код: bash
systemctl start asterisk

Установка FreePBX

Возвращаемся в домашнюю папку пользователя:

Код: bash
cd ~

Установим пакеты:

Код: bash
dnf install sox mpg123 -y


* где:

    sox — консольная утилита для преобразования аудиофайлов из одного формата в другой.
    mpg123 — аудиопроигрыватель/декодер реального времени.

Скачиваем портал для управления астериском:

Код: bash
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-16.0-latest.tgz

* мы скачаем freepbx версии 15. Для CentOS 8 это оптимальная версия. Если необходимо установить freepbx 14, то устанавливаемая по умолчанию версия php выдаст ошибку.

Распаковываем скачанный архив:
Код: bash
tar zxvf freepbx-*.tgz

Переходим в распакованный каталог:

Код: bash
cd freepbx

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

Код: bash
./start_asterisk start

Если видим:

STARTING ASTERISK
Asterisk is already running

... запускаем установку:

Код: bash
./install -n --dbuser root --dbpass password --webroot=/usr/share/nginx/html

* в данном примере мы указали учетные данные для подключения к СУБД (логин root и пароль, который мы создали после установки MariaDB); также мы указываем путь /usr/share/nginx/html, который является домашней директорией веб-сервера NGINX.

Начнется установка — в конце мы должны увидеть:

You have successfully installed FreePBX

Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открываться страница конфигурирования FreePBX. Задаем настройки:

Задаем стартовые настройки freepbx

* достаточно указать логин и пароль для пользователя, под которым мы будем заходить в панель управления FreePBX и email адрес.

После входим в панель администратора под созданной учетной записью. Система нас запросит региональные настройки:

Настраиваем язык веб-интерфейса

Теперь открываем конфигурационный файл:

Код: bash
vi /etc/asterisk/manager.conf

Находим строки:

#include manager_additional.conf
#include manager_custom.conf

... и меняем их на:

;include manager_additional.conf
;include manager_custom.conf
Перезапускаем сервис Asterisk:

Код: bash
systemctl restart asterisk

Asterisk + FreePBX настроен.

Share this post for your friends:

Friend me:

Оставить комментарий