Asterisk 18 + FreePBX 16

Debian 11 & 12

Asterisk 18
sudo apt -y install git vim curl wget libnewt-dev libssl-dev libncurses5-dev subversion software-properties-common libsqlite3-dev build-essential libjansson-dev libxml2-dev uuid-dev sox mpg123 lame ffmpeg
cd /usr/src/ && sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz && sudo tar xvf asterisk-18-current.tar.gz && cd asterisk-18*/ && sudo contrib/scripts/get_mp3_source.sh
sudo contrib/scripts/install_prereq install

вводим код страны 7

sudo ./configure
sudo make menuselect

В меню выбираем следующие параметры

Add-ons (See README-addons.txt)
	[*] chan_ooh323 
	[*] format_mp3
Core Sound Packages
	[*] CORE-SOUNDS-RU-WAV      
	[*] CORE-SOUNDS-RU-ULAW     
	[*] CORE-SOUNDS-RU-ALAW     
	[*] CORE-SOUNDS-RU-GSM      
	[*] CORE-SOUNDS-RU-G729     
	[*] CORE-SOUNDS-RU-G722     
	[*] CORE-SOUNDS-RU-SLN16    
	[*] CORE-SOUNDS-RU-SIREN7   
	[*] CORE-SOUNDS-RU-SIREN14
Music On Hold File Packages
	[*] MOH-OPSOUND-WAV  
	[*] MOH-OPSOUND-ULAW 
	[*] MOH-OPSOUND-ALAW 
	[*] MOH-OPSOUND-GSM
Extras Sound Packages
	[*] EXTRA-SOUNDS-EN-WAV
	[*] EXTRA-SOUNDS-EN-ULAW
	[*] EXTRA-SOUNDS-EN-ALAW
	[*] EXTRA-SOUNDS-EN-GSM
Applications - добавить
	[*] app_macro

Save & Exit
sudo make

По завершении должны получить:

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

По завершении должны получить:

 +---- Asterisk Installation Complete -------+
 +                                           +
 +    YOU MUST READ THE SECURITY DOCUMENT    +
 +                                           +
 + Asterisk has successfully been installed. +
 + If you would like to install the sample   +
 + configuration files (overwriting any      +
 + existing config files), run:              +
 +                                           +
 + For generic reference documentation:      +
 +    make samples                           +
 +                                           +
 + For a sample basic PBX:                   +
 +    make basic-pbx                         +
 +                                           +
 +                                           +
 +-----------------  or ---------------------+
 +                                           +
 + You can go ahead and install the asterisk +
 + program documentation now or later run:   +
 +                                           +
 +               make progdocs               +
 +                                           +
 + **Note** This requires that you have      +
 + doxygen installed on your local system    +
 +-------------------------------------------+
sudo make samples && \
sudo make config && \
sudo ldconfig

Создаем пользователя Asterisk и запускаем

sudo groupadd asterisk && \
sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk && sudo usermod -aG audio,dialout asterisk && sudo chown -R asterisk.asterisk /etc/asterisk && sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk && sudo chown -R asterisk.asterisk /usr/lib/asterisk
sudo sed -i 's/#AST_USER="asterisk"/AST_USER="asterisk"/' /etc/default/asterisk && sudo sed -i 's/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/' /etc/default/asterisk && sudo sed -i 's/;runuser = asterisk/runuser = asterisk/' /etc/asterisk/asterisk.conf && sudo sed -i 's/;rungroup = asterisk/rungroup = asterisk/' /etc/asterisk/asterisk.conf && \
sed -i 's";\[radius\]"\[radius\]"g' /etc/asterisk/cdr.conf && \
sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cdr.conf && \
sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cel.conf
sudo systemctl restart asterisk && sudo systemctl enable asterisk && sudo systemctl status asterisk

Проверяем доступность

sudo asterisk -rv

Открываем необходимые порты tcp 5060,5061.

MariaDB
sudo apt -y install mariadb-server mariadb-client && \
sudo systemctl start mariadb && \
sudo systemctl enable mariadb && \
sudo mysql_secure_installation

root SQL password - СЛОЖНЫЙ ПАРОЛЬ_РУТА - генерируем и записываем.

Node.JS Debian 11
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg && sudo mkdir -p /etc/apt/keyrings && \
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && NODE_MAJOR=20 && \
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list && \
sudo apt-get update && sudo apt-get install nodejs -y
Node.JS Debian 12
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg && \
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
NODE_MAJOR=20 && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo \
tee /etc/apt/sources.list.d/nodesource.list && sudo apt-get update && sudo apt-get install nodejs -y
Apache2
sudo apt -y install apache2 && \
sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig && \
sudo sed -i 's/export APACHE_RUN_USER=www-data/export APACHE_RUN_USER=asterisk/' /etc/apache2/envvars && \
sudo sed -i 's/export APACHE_RUN_GROUP=www-data/export APACHE_RUN_GROUP=asterisk/' /etc/apache2/envvars && \
sudo sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf && \
sudo rm -f /var/www/html/index.html && \
sudo unlink  /etc/apache2/sites-enabled/000-default.conf
PHP 7.4 Debian 11
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2 && \
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list && \
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add - && \
sudo apt remove php* && sudo apt install -y php7.4-{mysql,cli,common,imap,ldap,xml,fpm,curl,mbstring,zip,gd,gettext,xml,json} libapache2-mod-php7.4 && \
sudo sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/7.4/apache2/php.ini && \
sudo sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/7.4/cli/php.ini && \
sudo sed -i 's/\(^memory_limit = \).*/\1256M/' /etc/php/7.4/apache2/php.ini && \
sudo apt install -y sox mpg123 lame ffmpeg sqlite3 git unixodbc dirmngr postfix  odbc-mariadb pkg-config libicu-dev
PHP 7.4 Debian 12
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2 wget curl && \
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg && \
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list && \
sudo apt update && sudo apt install -y php7.4 libapache2-mod-php7.4 && sudo apt install -y php7.4-{mysql,cli,common,imap,\
ldap,xml,fpm,curl,mbstring,zip,gd,gettext,xml,json} && \
sudo sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/7.4/apache2/php.ini && \
sudo sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/7.4/cli/php.ini && \
sudo sed -i 's/\(^memory_limit = \).*/\1256M/' /etc/php/7.4/apache2/php.ini && \
sudo apt install -y sox mpg123 lame ffmpeg sqlite3 git unixodbc dirmngr postfix  odbc-mariadb pkg-config libicu-dev
Настраиваем ODBC
sudo tee /etc/odbcinst.ini<<EOF
[MySQL]
Description = ODBC for MySQL (MariaDB)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
FileUsage = 1
EOF
sudo tee /etc/odbc.ini<<EOF
[MySQL-asteriskcdrdb]
Description = MySQL connection to 'asteriskcdrdb' database
Driver = MySQL
Server = localhost
Database = asteriskcdrdb
Port = 3306
Socket = /var/run/mysqld/mysqld.sock
Option = 3
EOF
FreePBX 16
cd /usr/src && sudo wget http://mirror.freepbx.org/modules/packages/freepbx/7.4/freepbx-16.0-latest.tgz && \
sudo tar xfz freepbx-16.0-latest.tgz && sudo rm -f freepbx-16.0-latest.tgz && \
cd freepbx && sudo systemctl stop asterisk && sudo ./start_asterisk start

Подключаемся к БД и настраиваем (вставляем записанный ранее пароль)

sudo ./install -n --dbuser root --dbpass "СЛОЖНЫЙ ПАРОЛЬ_РУТА"
sudo tee /etc/systemd/system/freepbx.service<<EOF
[Unit]
Description=FreePBX VoIP Server
After=mariadb.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/fwconsole start -q
ExecStop=/usr/sbin/fwconsole stop -q
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload && sudo systemctl enable freepbx
sudo fwconsole ma disablerepo commercial && \
sudo fwconsole ma installall && \
sudo fwconsole ma delete firewall && \
sudo fwconsole reload && \
sudo fwconsole restart && \
sudo a2enmod rewrite && \
sudo systemctl restart apache2

Если нет записей в CDR-reports, то выполняем следующие команды:

cd /tmp && wget http://ftp.ru.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_amd64.deb && \
wget http://ftp.de.debian.org/debian/pool/main/m/mariadb-connector-odbc/odbc-mariadb_3.1.9-1_amd64.deb && \
sudo dpkg -i libssl1.1_1.1.1w-0+deb11u1_amd64.deb odbc-mariadb_3.1.9-1_amd64.deb && \
sudo apt install -f

Также проверить, что параметр Settings -> Advanced Settings -> Enable CDR Logging находится в положении YES

Установка дополнительного модуля FreePBX

Как пример устанавливаю модуль asterisk-cli

sudo fwconsole ma download asterisk-cli && sudo fwconsole ma install asterisk-cli
Кастомизация меню

Внимание: после переноса пункта меню во вновь созданное он перестанет отображаться в старом месте.

Для кастомизации создаем/редактируем следующий файл:

nano /etc/asterisk/freepbx_menu.conf

Содержимое как пример: создал дополнительное меню "Главное".

cat freepbx_menu.conf  
[extensions]
category=Главное
name=Внутренние номера

[trunks]
category=Главное
name=Линии к провайдеру

[did]
category=Главное
name=Входящие маршруты

[routing]
category=Главное
name=Исходящие маршруты

[asteriskinfo]
category=Главное
name=Статус Asterisk

[cli]
category=Главное
name=Cli

[logfiles]
category=Главное
name=Логи

Убеждаемся, что в разделе Settings → Advanced Settings:

  • параметр Use freepbx_menu.conf Configuration выставлен в Yes;
  • Display Readonly Settings и Override Readonly Settings тоже выставлены в Yes.

Чтобы узнать название модуоя откройте веб интерфейс и там наведите на любой модуль мышкой, в левом нижнем углу вы увидите ссылку, в конце которой написано название модуля.

Теперь после сохранения файла, выполняем fwconsole restart, только убедитесь, что на сервере нет звонков.

Поддержка русского языка
sudo locale-gen ru_RU && sudo locale-gen ru_RU.UTF8 && sudo dpkg-reconfigure locales

Добавляю строку в файл:

sudo nano /etc/profile
export LC_ALL="en_US.UTF-8"
source /etc/profile

вместо: russian ru_RU.ISO-8859-5
изменяю на: russian ru_RU.UTF-8

sudo nano /etc/locale.alias

После выбора Russian в меню Language я получаем русификацированный интерфейс.

Видеосвязь

Переходим Settings - Asterisk SIP settings. В самом последнем разделе "Video codecs" переключаем на Enabled и активируем кодеки h264 и vp8.
Можем откорректировать необходимый битрейт в строке ниже.

На экстеншене (pjsip) на вкладке "Advanced" значения "Max audio streams" и "Max video streams" ставлю равные 10.

Logrotate
nano /etc/logrotate.d/freepbx
/var/log/asterisk/queue_log {
        daily
        missingok
        rotate 30
        notifempty
        sharedscripts
        create 0640 asterisk asterisk
        su asterisk asterisk
}

/var/spool/mail/asterisk {
        daily
        missingok
        rotate 7
        notifempty
        sharedscripts
        create 0660 asterisk mail
        su asterisk mail
}

/var/log/asterisk/messages
/var/log/asterisk/event_log
/var/log/asterisk/full
/var/log/asterisk/dtmf
/var/log/asterisk/fail2ban {
        daily
        missingok
        rotate 7
        notifempty
        sharedscripts
        create 0640 asterisk asterisk
        su asterisk asterisk
        postrotate
                /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null
        endscript
}
systemctl restart logrotate
Удаление старых записей

Создаем юзера в SQL и даём права на БД:

mysql
CREATE USER 'deletecdr'@'localhost' IDENTIFIED BY 'a5QW3m#ND9w#9';
GRANT DELETE, SELECT, INSERT ON asteriskcdrdb.cdr TO 'deletecdr'@'localhost';
GRANT DELETE, SELECT, INSERT ON asteriskcdrdb.cel TO 'deletecdr'@'localhost';
quit

Создаем файл скрипта

nano /etc/asterisk/delete_cdr.sh
#!/bin/bash
# Задаём переменные (Specify variables)
MYSQL_USER="deletecdr"                            # Имя пользователя MySQL (MySQL username)
MYSQL_PASSWORD="a5QW3m#ND9w#9"             # Пароль пользователя MySQL (MySQL password)
MYSQL="/usr/bin/mysql"                            # Расположение MySQL (whereis mysql)
MYSQLCHECK="/usr/bin/mysqlcheck"                  # Расположение MySQLcheck (whereis mysqlcheck)
EMAIL="admins@your.mail"                          # Почтовый адрес для уведомлений (Email address for notification)
TYPE="month"                                      # Интервал времени (SECOND,MINUTE,HOUR,DAY,MONTH,YEAR)
NUMBER="6"                                        # Количество (5 месяца) (the number 5 months)
LOG="/var/log/cdr-temp.log"                       # Лог файл перезаписываемый и отсылаемый на почту(A temporary log file is sent on email as a report)
LOG1="/var/log/cdr-clean.log"                     # Лог файл постоянный (The log file permanent)
data="`date`"

# Чистим лог от старых записей (Clean old log records from)
echo > $LOG

# Делаем запись даты в лог (The date recorded in the log)
echo >> $LOG1
echo "---------=$data=---------" >> $LOG1
echo >> $LOG1

# Чистим asteriskcdrdb.cdr (clean asterisksdrdb.cdr)
if $MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "delete from asteriskcdrdb.cdr where calldate < DATE_SUB(NOW(), interval $NUMBER $TYPE);"; then
echo >> $LOG1
echo Старые записи из asteriskcdrdb.cdr успешно удалены >> $LOG1
echo >> $LOG1
else
echo Не удалось удалить старые записи из asteriskcdrdb.cdr >> $LOG1
echo >> $LOG1
exit 0
fi

# Чистим asteriskcdrdb.cel (clean asteriskcdrdb.cel)
if $MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "delete from asteriskcdrdb.cel where eventtime < DATE_SUB(NOW(), interval $NUMBER $TYPE);"; then
echo Старые записи из asteriskcdrdb.cel успешно удалены >> $LOG1
echo >> $LOG1
else
echo Не удалось удалить старые записи из asteriskcdrdb.cel >> $LOG1
echo >> $LOG1
exit 0
fi

# Оптимизируем asteriskcdrdb (optimize asteriskcdrdb table)
if $MYSQLCHECK -u$MYSQL_USER -p$MYSQL_PASSWORD --optimize asteriskcdrdb; then
echo База asteriskcdrdb успешно оптимизирована >> $LOG1
echo >> $LOG1
else
echo Не удалось оптимизировать базу asteriskcdrdb >> $LOG1
echo >> $LOG1
exit 0
fi

# Чистим папки от файлов записи (Records you want to delete, and empty folders)

find /recordings/ -name "*.wav*" -type f -mtime +180 -print -delete
find /recordings/ -type d -empty -print -delete

Права на выполнение:

chmod +x /etc/asterisk/delete_cdr.sh

Добавляем в крон:

nano /etc/crontab

Последней строкой добавляем:

*  *    1 * *   root    /etc/asterisk/delete_cdr.sh
Fail2ban
apt install fail2ban -y

Добавляем для работы с nftables

mkdir /etc/nftables && \
cat << EOF > /etc/nftables/fail2ban.conf
#!/usr/sbin/nft -f

# Use ip as fail2ban doesn't support ipv6 yet
table ip fail2ban {
    chain input {
        type filter hook input priority 100;
    }
}
EOF

В файл /etc/nftables.conf добавляем следующее сразу после строки flush ruleset

/etc/nftables.conf

# Add fail2ban rules
include "/etc/nftables/fail2ban.conf"
cat << EOF > /etc/fail2ban/jail.local
[DEFAULT]
## Destination email for action that send you an email
#destemail = Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.
#
## Sender email. Warning: not all actions take this into account. Make sure to test if you rely on this
#sender    = Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.
#
## Default action. Will block user and send you an email with whois content and log lines.
#action    = %(action_mwl)s

# configure nftables
banaction = nftables-multiport
chain     = input
EOF
cat << EOF > /etc/fail2ban/action.d/nftables-common.local
[Init]
# Definition of the table used
nftables_family = ip
nftables_table  = fail2ban
# Drop packets
blocktype       = drop
# Remove nftables prefix. Set names are limited to 15 char so we want them all
nftables_set_prefix =
EOF
mkdir /etc/systemd/system/fail2ban.service.d && \
cat << EOF > /etc/systemd/system/fail2ban.service.d/override.conf
[Unit]
Requires=nftables.service
PartOf=nftables.service

[Install]
WantedBy=multi-user.target nftables.service
EOF
systemctl daemon-reload

Добавляем к стандартному логу логирование событий безопасности. Размер лога вырастет кратно, поэтому лучше настроить logrotate.

cat << EOF > /etc/asterisk/logger_general_custom.conf
messages => notice,warning,error,security
EOF

В этом файле нужно указать (в комментариях указано):

nano /etc/fail2ban/jail.d/asterisk.conf
[asterisk]
enabled  = true
filter   = asterisk
action   = nftables-multiport[name=asterisk-tcp, port="5060,5061", protocol=tcp]
           nftables-multiport[name=asterisk-udp, port="5060,5061", protocol=udp]
           sendmail-whois[name=Asterisk, dest=root@localhost, sender=fail2ban@localhost]
# где парсить логи 
logpath  = /var/log/asterisk/full
# Сколько неудачных попыток авторизации
maxretry = 10
# На сколько выдавать бан
bantime = 259200

Перезапуск логирования asterisk:

asterisk -x "logger reload"

Включаем jail 'asterisk' в fail2ban, добавив в файл /etc/fail2ban/jail.local

cat << EOF >> /etc/fail2ban/jail.local
[asterisk]
enabled = true
bantime = 86400
EOF

Перечитываем конфигурацию fail2ban

fail2ban-client reload

Это ссылка на последние фильтры для asterisk, но допиливать фильтры придется руками, используя https://regex101.com/

======== Полезные команды ========

Проверить статус тюрьмы:

fail2ban-client status asterisk

Разблокировать IP

fail2ban-client set asterisk unbanip IP-адрес

======== Белый список в fail2ban: ========

nano /etc/fail2ban/jail.conf 

Затем проверьте строку:

ignoreip =

Добавьте сейчас IP-адреса, которые вы хотите занести в whitelist, разделяя пробелом, например:

ignoreip = 192.168.0.1 192.168.5.0/32 10.10.20.0/24

Строка должна быть добавлена в раздел [DEFAULT] файла.
Сохраните файл и перезапустите Fail2Ban:

systemctl restart fail2ban

======== Оповещения в телеграм ========

cat << EOF > /etc/fail2ban/action.d/telegram.conf
[Definition]
actionstart = /etc/fail2ban/scripts/telegram.sh -a start
actionstop  = /etc/fail2ban/scripts/telegram.sh -a stop
actioncheck =
actionban   = /etc/fail2ban/scripts/telegram.sh -n  -b 
actionunban = /etc/fail2ban/scripts/telegram.sh -n  -u 
[Init]
init = 123
EOF
mkdir -p /etc/fail2ban/scripts/ && \
cat << EOF > /etc/fail2ban/scripts/telegram.sh
#!/bin/bash
# Telegram BOT Token
telegramBotToken='6xxxxxxx76:Axxxxxxxxxxxxxx-xxxxxx-xxx'
# Telegram Chat ID
telegramChatID='xxxxxxxxxxxx'
# Server Name
server_name='FreePBX'
function talkToBot() {
        message=$1
        curl -s -X POST https://api.telegram.org/bot${telegramBotToken}/sendMessage -d text="${message}" -d chat_id=${telegramChatID} > /dev/null 2>&1
}
if [ $# -eq 0 ]; then
        echo "Usage $0 -a ( start || stop ) || -b \$IP || -u \$IP"
        exit 1;
fi

while getopts "a:n:b:u:" opt; do
        case "$opt" in
                a)
                        action=$OPTARG
                ;;
                n)
                        jail_name=$OPTARG
                ;;
                b)
                        ban=y
                        ip_add_ban=$OPTARG
                ;;
                u)
                        unban=y
                        ip_add_unban=$OPTARG
                ;;
                \?)
                        echo $server_name " Invalid option. -$OPTARG"
                        exit 1
                ;;
        esac
done

if [[ ! -z ${action} ]]; then
        case "${action}" in
                start)
                        talkToBot "Fail2ban $server_name start"
                ;;
                stop)
                        talkToBot "Fail2ban $server_name stop"
                ;;
                *)
                        echo "$server_name Incorrect option"
                        exit 1;
                ;;
        esac
elif [[ ${ban} == "y" ]]; then
        talkToBot "[${jail_name}] The IP: ${ip_add_ban} BAN ${server_name}"
        exit 0;
elif [[ ${unban} == "y" ]]; then
        talkToBot "[${jail_name}] The IP: ${ip_add_unban} NO-BAN ${server_name}"
        exit 0;
else
        info
fi
EOF

Где меняем:

# Telegram BOT Token
telegramBotToken='6xxxxxxx76:Axxxxxxxxxxxxxx-xxxxxx-xxx'
# Telegram Chat ID
telegramChatID='xxxxxxxxxxxx'
# Server Name
server_name='FreePBX'

Даём права на исполнение и добавляем действие:

chmod +x /etc/fail2ban/scripts/telegram.sh && \
cat << EOF >> /etc/fail2ban/jail.local
action = telegram
EOF

Перезапуск службы:

systemctl restart fail2ban
Транк МТС-автосекретарь - PJSIP

Море лучей ГОВНА ТП этого провайдера.

Данные от провайдера в таком виде:

логин: 4954444444U2222
пароль: mtc_password

Создаём новый PJSIP-транк.

Вкладка General:

Trunk Name: 4954444444U2222
Outbound CallerID: 7495444444

Вкладка pjsip Setting -> General:

Username: 4954444444U2222
Secret: mtc_password
Authentication: Outbound
Registration: Send
SIP Server: reg.aa.mts.ru
SIP Server Port: 5060

Вкладка pjsip Setting -> Advanced:

DTMF Mode: 4733
From Domain: reg.aa.mts.ru
From User: 4954444444U2222
Match Inbound Authentication: Username

Вкладка pjsip Setting -> Codecs:

alaw
ulaw
gsm
g729
Транк СевТелеком/Сеть.92 - PJSIP

Данные от провайдера в таком виде:

Телефон: 78692xxxxxx
Пароль: PASSWORD
SIP-сервер: 62.76.12.38

Обязательно через ТП попросить добавить в список разрешённых IP-адресов адрес АТС.

Создаём новый PJSIP-транк.

Вкладка General:

Trunk Name: 78692xxxxxx
Outbound CallerID: 78692xxxxxx
Maximum Channels: ПО ДОГОВОРУ

Вкладка pjsip Setting -> General:

Username: 78692xxxxxx
Secret: PASSWORD
Authentication: Outbound
Registration: Send
SIP Server: 62.76.12.38
SIP Server Port: 5060
Context: from-trunk
Transport: 0.0.0.0-udp

Вкладка pjsip Setting -> Advanced:

DTMF Mode: Auto
Contact User: 78692xxxxxx
Client URI: sip:Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.:5060
Match Inbound Authentication: Username

Вкладка pjsip Setting -> Codecs:

alaw
ulaw
g729
Транк Мегафон (мультифон) - CHANSIP

Данные в виде:

Номер телефона: 79374444444
Пароль: PASSWORD

Создаём новый CHANSIP-транк:

Вкладка General:

Trunk Name:multifon-79374444444
Outbound CallerID: 444444
CID Options: Force Trunk CID

Вкладка sip settings -> Outgoing

Trunk Name: 444444
PEER Details: 
username=79374444444
type=peer
secret=PASSWORD
qualify=yes
port=5060
nat=yes
insecure=port,invite
host=multifon.ru
fromuser=79374444444
fromdomain=multifon.ru
dtmfmode=inband
context=from-trunk
allow=alaw&ulaw

Вкладка sip settings -> Incoming

Register String:
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.:PASSWORD:Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.:5060/79374444444

Fuse

Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.