Добрый день, вечер или ночь, все зависит от времени суток в который вам довелось прочитать мою статью. Начнем с начала. В нашей компании задумались о переходе на SIP и встал вопрос? как это реализовать.

Исходные данные:
  • 15 сотовых номеров, по количеству сотрудников и смартфонов;
  • 2 городских номер от Мегафон(реализован через SIP);
  • До 10 одновременных вызовов;
  • Отсутствие возможности перевода звонков между сотрудниками;
  • Необходимость частых междугородних звонков.


Были рассмотрены несколько вариантов:

  • Оставить всё как есть (сотовые телефоны);
  • Облачная АТС;
  • «Железное» решение;
  • Свой сервер VoIP.

В итоге приняли решение реализовать свой сервер VoIP.

Что мы имеем:

  • Сервер ESXi Dell PowerEdge R230 1xE3-1220v6 2?16Gb 2RUD x4 3?1Tb 7.2K 3.5";
  • Ubuntu Server 16.04 (минимальная конфигурация, 1Гб памяти, 128 Гб диск), установлен на ESXi 6.5;
  • SIP от zadarma и Мегафон;
  • Сотовые телефоны с SIP клиентами.

Небольшое отступление, по пунктам:

Ubuntu 16.04 у нас являться корпоративным стандартом, сервера Ubuntu Server 16.04, как рабочая OS Ubuntu Desktop 16.04. Основной же сервер построен на базе Zentyal 5.0. Сервера и рабочие ПК устанавливаются по сети по TFTP. Если будет интересно опишу все нюансы установки Zentyal (а их приличное количество).

Аппараты решили не покупать, у каждого сотрудника есть сотовый либо на Android, либо на iOS, так, что проблем с клиентами нет, сотрудники имеют доступ к рабочему Wi-FI. Так же клиенты SIP стоят на рабочих ПК. Так же есть доступ к SIP через Интернет, безопасность тоже учтена, порты подключения изменены, пароли для SIP достаточно сложны.

Переходим к самой сути. В сети полно документации по установке FreePBX 13 на Ubuntu 16.04, А вот каr установить FreePBX 14 нету, даже официальном wiki FreePBX есть только для CentOS 7 и Debian 8.8, но было большое желание и стремление сделать задуманное.

1. Установку Ubuntu Server 16.04 описывать не буду, это просто даже для новичка.

1.1. Все манипуляции я проводил по root sudo su

2. Обновим систему: apt update && apt upgrade -y , если требуется перезагрузка, перегружаемся.

3. Займемся PHP, для FreePBX 14 необходим PHP 5.6, по умолчанию в Ubunty 16.04 идет PHP 7.0

Удаляем весь PHP, если он есть в системе:

sudo apt-get purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`

Устанавливаем репозиторий PHP 5.6:

sudo add-apt-repository ppa:ondrej/php

Обновляемся и устанавливаем PHP:

sudo apt-get update
sudo apt-get install php5.6


4. Mysql который идет в репозитории не совместим с FreePBX 14, нам нужна MariaDB, добавим её в репозиторий:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.mephi.ru/mariadb/repo/10.2/ubuntu xenial main'


5. Нам так же необходим nodejs:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs


6. Установим теперь всё необходимое:

sudo apt install -y build-essential linux-headers-`uname -r` openssh-server apache2 mariadb-server mysql-client bison flex sox libncurses5-dev libssl-dev libmysqlclient-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git subversion unixodbc-dev uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp0-dev libspandsp-dev libopus-dev opus-tools libiksemel-dev libiksemel-utils libiksemel3 xmlstarlet

sudo apt install -y php5.6 php5.6-curl php5.6-cli php5.6-mysql php5.6-odbc php5.6-db php5.6-gd php5.6-xml curl libapache2-mod-php5.6

apt install -y php-pear

6.1. Пакета libmyodbc больше нет в репозиториях Ubuntu начиная с версии Xenial.

Скачиваем нужный коннектор:

wget https://dev.mysql.com/get/Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.9-linux-ubuntu16.04-x86-64bit.tar.gz

Распакуем:
tar -zxvf mysql-connector-odbc-5.3.9-linux-ubuntu16.04-x86-64bit.tar.gz

И скопируем в директорию /usr/lib/x86_64-linux-gnu/odbc/:

cd mysql-connector-odbc-5.3.9-linux-ubuntu16.04-x86-64bit/lib
cp libmyodbc5* /usr/lib/x86_64-linux-gnu/odbc/

7. Теперь по рекомендациям FreePBX необходимо перезагрузиться, я этого не делал.

8. Убедимся, что mod_rewrite включен, чтобы избежать возможных атак.

a2enmod rewrite
service apache2 restart


9. Включим поддержку Console_Getopt

pear install Console_Getopt

10. Переходим к установке Asterisk 15 (фактически это часть wiki с FreePBX для Debina 8.8):

Скачиваем исходники:

cd /usr/src
wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-15-current.tar.gz &&
git clone https://github.com/akheron/jansson.git &&
wget http://www.pjsip.org/release/2.5.5/pjproject-2.5.5.tar.bz2


Скомпилируем и установим Lame (mp3):

cd /usr/src &&
tar zxvf lame-3.98.4.tar.gz &&
cd lame-3.98.4 &&
./configure &&
make &&
make install


Скомпилируем и установим DAHDI и LibPRI (Мы платы не используем, но кто знает, что захочется потом):

cd /usr/src &&
tar xvfz dahdi-linux-complete-current.tar.gz &&
tar xvfz libpri-current.tar.gz &&
rm -f dahdi-linux-complete-current.tar.gz libpri-current.tar.gz &&
cd dahdi-linux-complete-* &&
make all &&
make install &&
make config &&
cd /usr/src/libpri-* &&
make &&
make install


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

cd /usr/src &&
tar -xjvf pjproject-2.*.*.tar.bz2 &&
cd pjproject-* &&
CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound\
--disable-resample --disable-video --disable-opencore-amr &&
make dep &&
make &&
make install


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

cd /usr/src/jansson &&
autoreconf -i &&
./configure &&
make &&
make install


Если вы хотите использовать кодек Opus, перед началом компиляции Asterisk необходимо установить xmlstarlet:

sudo apt install xmlstarlet

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

cd /usr/src &&
tar xvfz asterisk-15-current.tar.gz &&
rm -f asterisk-15-current.tar.gz &&
cd asterisk-* &&
./contrib/scripts/install_prereq install &&
./configure --with-pjproject-bundled --with-crypto --with-ssl=ssl --with-srtp &&
contrib/scripts/get_mp3_source.sh &&
make menuselect


Для себя я выбрал 'format_mp3' и 'res_config_mysql', а так же включил 'codec_opus'

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

make &&
make install &&
make config &&
ldconfig
update-rc.d -f asterisk remove


Пока все собиралось я успел налить себе кофе и продолжил.

Настроим запуск от имени пользователя 'Asterisk'

Расcкомментируйте в /etc/default/asterisk:

AST_USER="asterisk"
AST_GROUP="asterisk"


Создаём пользователя 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


11. Переходим к FreePBX 14

Настроим Apache:

sed -i 's/\(^upload_max_filesize = \).*/\256M/' /etc/php/5.6/apache2/php.ini &&
sed -ie 's/\;date\.timezone\ \=/date\.timezone\ \=\ "Asia\/Yekaterinburg"/g' /etc/php/5.6/apache2/php.ini &&
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig &&
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf &&
sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf &&
systemctl restart apache2


Настроим ODBC:

cat >> /etc/odbcinst.ini << EOF
[MySQL]
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc5w.so
UsageCount=2

EOF


cat >> /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:

cd /usr/src
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-14.0-latest.tgz
tar vxfz freepbx-14.0-latest.tgz
rm -f freepbx-14.0-latest.tgz
cd freepbx
touch /etc/asterisk/ari.conf
./start_asterisk start
./install -n


11.1. Для русификации FreePBX необходима локаль ru_RU.UTF-8:

echo "russian ru_RU.UTF-8" >> /etc/locale.alias
locale-gen ru_RU
systemctl restart apache2

12. Создадим скрипт запуска для systemd:

В файл /etc/systemd/system/freepbx.service вставляем:

[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


Активируем сервис:

systemctl enable freepbx.service

Эпилог.

На этом установка и первоначальная настройка закончена. Будут вопросы, всегда готов ответить.

Комментарии (62)


  1. parakhod
    12.10.2017 18:59

    Пару месяцев назад поднял точно такую же конфигурацию для дома для семьи на восьмидолларовом OrangePi Zero. Работает великолепно.
    Городскую линию и обычный телефон подключил через китайский Linksys SPA 3000.


    1. Teon_501 Автор
      12.10.2017 19:30

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


      1. parakhod
        12.10.2017 20:08

        Ну у меня ситуация немножко специфическая — городской нужен, на мобильный повесить его нельзя, только провод. Нужен он мне и дома и на студии, до студии от дома у меня радиомост микротиками покинут, так что и локальная сеть есть. На студии на столе обычный SIP телефон стоит. Плюс сейчас ещё хочу и на студии и в доме SIP-домофоны поставить. Потому что всё в пешей доступности, а так с почтальоном или курьером разминешься и лови их потом...


        1. Teon_501 Автор
          12.10.2017 20:22

          У меня рабочая линия от мегафона, так что если не успел рабочий взять вовремя то все идет на сотовый


          1. parakhod
            12.10.2017 20:29

            Не, у нас дикая Европа, до такого прогресс ещё не дошёл ))
            Плюс с домофоном всё равно проблема не решается.

            Да, ну и ещё звонкорезка по таймеру пришлась — в 19-00 городская линия отключается к чертям, а то по вечерам реклама постоянно звонит всякая.


            1. Teon_501 Автор
              12.10.2017 20:31

              Ну тогда понятно)) у меня в конце рабочего дня тоже отбойник срабатывает


              1. parakhod
                12.10.2017 20:38

                Ну я на самом деле просто всё к тому, что если что то на любой копеечной плате с линухом и 512 памяти эта штука бегает замечательно. На данном конкретном китайском чуде жила разновидность дебиана — встало вообще без проблем всё.


                1. Teon_501 Автор
                  12.10.2017 20:40

                  В этом я и не сомневался))) дойдут руки может тоже домой сделаю


  1. Deq56
    12.10.2017 19:30

    а что мешало взять готовый дистр? Ещё однастаться как я научился ставить их исходников что-то?


    1. Teon_501 Автор
      12.10.2017 19:31

      Готовый на основе CentOS, я в начале статьи указал причины выбора дистрибутива.


      1. Deq56
        12.10.2017 19:45

        и чем же управляемый через web asterisk на centos, будет отличаться от управляемого через web asterisk на ubuntu? и если всё же придерживаетесь unbuntu, то лучше подготовить deb пакет, а не компилировать на сервере. И статья как подготовить deb пакет с asterisk, была бы полезнее на хабре, чем ваша, слизанная непойми откуда статья.


        1. Teon_501 Автор
          12.10.2017 19:52

          На самом деле не отличается, ставил и на том и том. Теперь объясню почему не стал делать deb пакет. Настройку я делаю 1 раз, больше мне и не нужно, сам сервер стоит на ESXi и из готовой системы я делаю образ, на тот случай если понадобиться развернуть где то ещё. Мне проще внести в копию минимум изменение за место того, чтобы разворачивать с 0 систему.


  1. ashfor
    12.10.2017 19:33

    несколько дней назад настраивал FreePBX 14, но с их родного дистрибутива. оказалось что mysql-connector-odbc, поставляемый с CentOS 7 имеет проблемы с кириллицей, поэтому проверьте отчеты CDR — русский должен быть читаемым.
    для меня все счастливо закончилось установкой mariadb-connector-odbc, для убунты нет подобного пакета?


    1. Teon_501 Автор
      12.10.2017 19:34

      Для Ubuntu такого не находил, отчеты еще не проверял, доберусь до сервера гляну


  1. awsswa59
    12.10.2017 19:33
    +1

    Копипаста с оригинала (voxlink). Даже ошибки инсталляции те же.
    Mysql 5.7 отлично работает с freepbx — просто надо внести одну строчку в настройку.
    Не ставьте — libpri ( все мануалы под копирку с установкой, а зачем? что у всех есть железка для работы с ней ?)
    Зачем lame из сорцов? Все ставиться из пакетов.
    Jansson — тоже на ubunte 16 ставится с пакетов — там свежая версия.
    pjproject — уже давно 2.6 версии.
    и не в одном из мануалов нету установки npm — а он нужен.
    Зачем ставите nodejs не из пакета мне тоже не понятно.


    1. Teon_501 Автор
      12.10.2017 19:43

      Давай по порядку.
      Оригинал voxlink в глаза не видел, все ресурсы откуда брал инфу могу привести;
      Про строчку в Mysql я тоже знаю, мне как то MariaDB роднее;
      Что касается libpri, я написал что часть текста с wiki.freepbx.org/display/FOP/Installing+FreePBX+14+on+Debian+8.8;
      По поводу lame, был прецедент когда он не корректно работал;
      Jansson и pjproject ставил из рекомендация FreePBX не более, за новыми не гонюсь;
      npm ставиться вместе с nodejs, и если внимательно прочесть про установку nodejs то он ставиться из пакетов, скрипт добавляет репозиторий в систему.


      1. awsswa59
        12.10.2017 20:06

        Поймите правильно. Хабр это место откуда народ берет знания. И я уверен через месяц всплывет админ который по этому мануалу начнет ставить. Уверенный в своей правоте.
        Лучший вариант этой бы статьи выглядел как — вот оригинал от voxlink а вот следующие правки и дополнения. Расписали бы установку правильно, без сторонних пакетов. Показали как установить как дополнение к оригиналу — установку phpmyadmin. Показали установку и настройку iptables и fail2ban. Вот это было бы интерестно.
        Правьте статью пока не поздно или делайте вторую часть


        1. Teon_501 Автор
          12.10.2017 20:17

          Я бы не стал всё тут писать, если бы не провел боевые испытания, до момента когда у меня всё заработало я раз 5 с 0 ставил систему и настраивал, пока все на заработало как мне нужно, сейчас сервер стоит и функционирует и все было произведено точно с описанием, фактически большая часть команд это вывод .bash_history. Зашел на voxlink и видел статьи, но они все про FreePBX13, моя цель была выложить для 14 версии. По поводу phpmyadmin, у меня нет необходимости его ставить, по поводу пакетов я тоже писал, я за основу брал инструкции самого FreePBX.


        1. Teon_501 Автор
          12.10.2017 20:35

          По phpmyadmin могу написать, но дело в том, что он у меня на другом хосте висит, вместе с монитором на основе observium, подключается он под другим юзером с правами на подключения с определенного IP


  1. k3NGuru
    12.10.2017 20:16

    А разве pjproject не компилится вместе с астером? Ключ --with-pjproject wiki.asterisk.org/wiki/display/AST/PJSIP-pjproject


    1. Teon_501 Автор
      12.10.2017 20:19

      У меня выдал ошибку? когда пробовал так сделать, поэтому пошел путеv рекомендуемым FreepBX


      1. Tihon_V
        13.10.2017 13:48

        Скорее всего при вызове ./configure не были указаны флаги "--libdir", "--prefix". Они имеют значение при сборке на x86_64.


        1. Teon_501 Автор
          13.10.2017 14:48

          Возможно, отрицать не буду. Дойдут руки до создание deb пакета проверю


  1. Jedi-Knight
    12.10.2017 20:38

    корпоративный стандарт — ubuntu? Из серии: стандарт танкостроения — завод АвтоВАЗ. Работа ради работы. устанавливать всё это вручную на ОС, для которой никто даже мануалов не удосужился написать, такая она корпоративная.


    1. Teon_501 Автор
      12.10.2017 20:42

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


    1. anton1234
      12.10.2017 22:15

      Думаю под «корпоративным стандартом» автор имел ввиду, что у него в компании все айтишники договорились использовать один дистрибутив. Это достаточно разумное решение, если в компании есть\планируется разделение труда и делегирование обязанностей.
      Вряд ли тут имелось ввиду сравнение Ubuntu с Redhat или Oracle Linux.
      Разумность исключения из правил это другой вопрос, который тоже не лишне себе иногда задавать.


      1. Teon_501 Автор
        13.10.2017 06:17

        Вы совершенно правы, разделение и делегирование в компании есть. Enterprise решения не брали, так как поставлена цель максимальной экономии на ПО.


  1. BurlakovSG
    12.10.2017 21:20

    Расскажите, пожалуйста, какими SIP-клиентами пользуетесь? Я так и не смог найти нормально работающего бесплатного клиента. В основном жаловались, что меня плохо слышно и слышат сами себя.


    1. Daar
      12.10.2017 23:55

      Поддерживаю, тоже прошелся по этим граблям, расскажите о своих.


      1. anton1234
        13.10.2017 00:06

        Jitsi на моем опыте вполне стабилен. Проблемы на которые жаловались пользователи как выяснялось обычно были связаны с микрофонами, качеством инета итп.
        Оперативу жрет как не в себя самый существенный недостаток.


    1. bravo-ej
      13.10.2017 03:01

      Bria (платная, огромный набор параметров, но нет чата и видео, кажется)
      Zoiper очень не плох! (достаточно настроек, чат и видео есть)
      Linphone (крайний вариант, есть часто воспроизводимые косяки, не в пример десктопной версии)

      * — я купил для того, что бы провести тесты на разных клиентах нашего коммутатора. Проверял я не только очевидный факт работы, но и сигнальный обмен между UAC/UAS.

      Кстати на десктопе (ну как, на ноуте) я использовал приложение telephone. Были мелкие нюансы, но я их разработчику отправлял и мы пообщались. После уже не проверял (да и вот так без поднятия переписки даже не припомню что там было, но что то с процедурой завершения вызова)… В общем на Bria, zoiper и telephone я проходил испытания СОРМ в качестве клиентов (главное куратора ФСБ не смущать этой информацией ;)

      Всё под яблочные девайсы (linphone под все платформы есть).


      1. BurlakovSG
        13.10.2017 07:56

        Из наверное всех ранее опробованных бесплатных вариантов более менее нормально работал Zoiper, но на нём тоже иногда жаловались, что слышат сами себя, а ещё у него был косяк с переподключением. Сервер у нас наружу не вылазит, чтобы попасть в сеть на телефоне стоял OpenVPN, так вот когда происходило переподключение сети (потерял Wi-Fi и переключился на мобильный интернет) Zoiper впадал в ступор и не хотел подключаться. Надо будет ещё раз попробовать, может пофиксили этот баг.
        На ноуте использую PhonerLite. Она потребляет меньше ресурсов, чем остальные монстры. Правда она может только звонить, но мне другого и не надо.


    1. Teon_501 Автор
      13.10.2017 06:18

      Используем Zoiper, нареканий нет.


    1. Tihon_V
      13.10.2017 13:55

      Мобильные — Zoiper.
      ПК — Linphone (обход NAT через uPnP).
      Сервер за NAT. Транспорт TLS + certbot с запретом direct_media. Кодек — alaw/ulaw. При замене кодека на другой с большим битрейтом при 3G может появляться эхо.


      1. anton1234
        13.10.2017 14:16

        uPnP — прежде чем включать это где-либо стоит погуглить «uPnP insecure», «uPnP vulnerability». Этот протокол небезопасен by design. Любое устройство, без регистрации и смс может опубликовать себя в интернет.


        1. Tihon_V
          15.10.2017 22:08

          Не безопасен. Увы, но некоторые сотрудники работающие удаленно «на дому» до сих пор используют *DSL интернет и пока побороть задержку звука в 500 мс при использовании stun не удалось. При uPnP — работает сносно.


  1. KorP
    12.10.2017 22:01

    Компиляция из исходников на пакетном дистрибутиве? Не православно!


    1. Teon_501 Автор
      13.10.2017 06:19

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


      1. KorP
        13.10.2017 06:40

        Никто и не говорил, что надо пользоваться только стандартными пакетами. Я то же собираю разное По под свои задачи (а некоторого в пакетах и вовсе нет), но делаю это на отдельной машинке и кладу в собственный репозиторий готовый пакет, а уже из него разворачиваю на сервер — это тру вэй для пакетных дистрибутивов. И именно так правильно делать, если у вас за стандарт принят пакетный дистрибутив.


        1. Teon_501 Автор
          13.10.2017 07:03

          Не согласен, Linux свободная система и мне решать как я её буду использовать. Если проводить аналогию, то не правильно на FreeBSD использовать готовые бинарные пакеты, всё нужно собирать в ручную.


          1. KorP
            13.10.2017 07:50

            Решать конечно же вам, но в отрасли есть собственные нормы, и если вы придёте в серьёзную компанию и начнёте там на продуктивных серверах ПО собирать из исходников, думаю ататашечки вы получите. Нужно приучать себя к хорошему с детства, а не говорить «мне решать, ведь так можно».


            1. Teon_501 Автор
              13.10.2017 08:03

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


  1. Mobyman
    12.10.2017 23:02

    Хочется верить, что с приходом такого большого количества инструментов для оркестрации и контейнеризации количество подобных статей сократится, и они переедут в Docker Hub, Ansible Galaxy и пр.


    1. Teon_501 Автор
      13.10.2017 06:19

      Возможно вы и правы, но пока всё реализовано так как реализовано


  1. bravo-ej
    13.10.2017 03:28

    Какова экономика всего мероприятия? А то тут только мануал для копипаста и никакого, даже лайтового, ТЗ не указано.

    На сколько абонентов рассчитано?
    Каковые выделенные мощности VM?
    Есть ли QoS и DSCP?
    Какие средства защиты и их логику используете?

    Хотя бы из этих деталей будет понятно, что для вас значит «небольшая компания», сколько вы на это потратили ресурсов (челочас, денег на вычислительные мощности, отсюда и затраты на энергию), позаботились ли о качестве этого сервиса…

    Что же касается учтённой безопасности… Что будет с вашим сервером, если «я вас вычислю по IP» и начну флудить инвайтами или register сообщениями? 10мб/с хватит, что бы ваш сервер уделил мне всё внимание, так как оно мне больше нужно и ваши абоненты получили удлинённые тайминги обработки их сообщений, полный развал dtmf, да и вероятно большинства сессий, если не из-за таймеров, то по инициативе самих абонентов.
    Про SBC что нибудь слышали? Штуки в аппаратном исполнение дорогие, но вот вам идея для _хорошей_ статьи — вынесите внешнюю регистрацию на прокси сервер, которую уже с голым задом и fail2ban выставляйте в Сеть. Настройте там контроль доступа, сообщения о подозрительном трафике (в том числе и register сообщений, которые без auth информации не дадут повода сгенерировать ошибку в лог)…

    Но я бы выбрал VPN, раз у вас все абоненты — корпоративные и внутренние.


    1. Teon_501 Автор
      13.10.2017 06:34

      Отвечаю на вопросы(на текущий момент):
      15 абонентов, рост планируется;
      У VM 1Гб памяти, 128 Гб диск, 3 Ггц;
      QoS и DSCP в процессе реализации;
      Сам сервер находиться в DMZ зоне сети, доступ только к определенным портам, дефолтные порты изменены;
      Сервер ESXi Dell PowerEdge R230 1xE3-1220v6 2?16Gb 2RUD x4 3?1Tb 7.2K 3.5";
      Вычислять по IP не имеет смысла, сам сервер за NAT и порты для подключения, как я уже писал, изменены;
      Интернет в 60мб/с, прокси с фаерволом и nginx прокси выведен в сеть, правда без голого зада))
      Для доступа из вне сотрудникам предоставлен OpenVPN с авторизацией через сертификат и lDAP.


      1. bravo-ej
        13.10.2017 15:53

        Ресурсов сервера виртуализации, хранилища снапшотов VM и собственного времени не жалко под то, что можно было бы заменить аппаратным решением за 16к рублей?
        image

        И мне думается, что такое решение было бы гораздо надёжнее и дешевле в эксплуатации, нежели содержать ещё один сервер.

        Почему вы открыли доступ из внешних сетей к вашей телефонной станции, если у вас есть VPN и сотрудники и так и так его используют? Не знаю конечно, чем вы занимаетесь и могут ли у вас быть конкуренты, не доброжелатели, интересующиеся вашей коммерческой информацией… но вашу телефонию завалить ничего не стоит. И дело тут не в том, что вашей пропускной способности не хватит, а в том, что обработка sip сообщений довольно трудоёмкий процесс и у всех телефонных коммутаторов подобного типа надо смотреть на параметр, который показывает количество одновременных инвайтов (грубо говоря), которое он может обработать. Цифра обычно не большая. Например у коробочки выше, это 15. Обычно это нужно для понимания, вывезет ли железка штатную нагрузку. Но если пойдёт речь о не штатной нагрузке, то ни одна железка не вывезет столько, сколько способно пролезть через ваш канал связи. Зафлудить телефонную SIP станцию ума вообще никакого не надо, ибо инструментов полно.
        А ваши изменённые порты не так уж и сложно просканировать, отправив инвайт на каждый из портов и получив от вашего астериска запрос на авторизацию. Мне кажется вы никак не настраивали поведение вашего UAS :)

        В общем совет: делайте sip прокси для авторизации или, что лучше, пусть все лезут через VPN, раз уж он и так есть. Чем меньше сервисов смотрит наружу, тем лучше.


        1. Teon_501 Автор
          13.10.2017 16:39

          Если бы требовалось использовать аналоговые линии, то вопрос бы не встал, железное решении тут выигрывает, у нас только SIP. К тому же на сервере были не востребованные ресурсы. Сейчас идет процесс настройки fail2ban + скрипт обработки логов для блокировки сканирования портов, после испытания выложу. Про sip прокси спасибо, займусь этим вопросом


        1. Teon_501 Автор
          13.10.2017 17:37

          И еще одна причина выбора системы на сервер, совсем про неё забыл, наша система учета плотно связана с телефонией, требовалось выполнение linux команд в OS где стоит FreePBX. Передача в реальном времени команд в базу для CRM, вызова карточек клиентов и т.д.


  1. Roman2dot0
    13.10.2017 06:20

    Можно не удалять php 7.x из системы, достаточно настроить alternatives и отключить mod_php7 в apache.
    А по факту гораздо быстрее скачать готовый дистр на CentOS, потратить минут 15 на настройку внутренних номеров и транков.


    1. Teon_501 Автор
      13.10.2017 06:22

      Если бы стояла только задача развернуть чисто FreePBX, так бы и поступил, по мимо прочего система введена в домен Samba4 и настроен sudo для авторизации пользователей определенных групп. Так же намного проще когда все дистрибутивы одного семейства, проще администрировать и следить за ними.


    1. Teon_501 Автор
      13.10.2017 06:55

      Для меня php 7.x в данной системе просто занимает место, на этом сервере он просто не нужен.


  1. JC_IIB
    13.10.2017 06:40

    А почему Asterisk, а не FreeSWITCH?


    1. Teon_501 Автор
      13.10.2017 06:54

      C Asterisk я работаю не первых год, FreeSWITCH для меня нов и выводить в рабочую среду ПО которое знаю не достаточно хорошо я не стал.


  1. RusXP
    13.10.2017 14:48

    А где-же настройка абонентов, создание УЗ роутинг и ДВО. Настраивали через web или через консоль?


    1. Teon_501 Автор
      13.10.2017 14:50

      Планирую в течении недели подготовить статью по этим вопросам. В основном все через web, на это и рассчитана FreePBX, хотя в практике попадались случаи когда приходилось и руками править конфиги, если будет такое примеры приведу.


  1. xmaster83
    13.10.2017 16:30

    Бегите с Freepbx, это штука столько раз взламывалась что просто страх божий


    1. Teon_501 Автор
      13.10.2017 16:31

      Она не открыва во вне, доступ к консолям только с внутренней сети не более.


      1. xmaster83
        13.10.2017 18:10

        Зачем тогда веб интерфейс нужен ?, ведь его предназначение доступ из вне.


        1. Teon_501 Автор
          13.10.2017 19:17

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


        1. Roman2dot0
          13.10.2017 22:03

          Для того, чтобы зайти и настроить\мониторить с любого устройства, на котором есть браузер и доступ на веб-морду


          1. Teon_501 Автор
            14.10.2017 17:12

            И это тоже, но про безопасность не стоит забывать, просто открывать к такому доступ средству просто не рационально.