воскресенье, 7 февраля 2016 г.

Развертывание Asterisk 13 + DAHDI на пустом CentOS7 с нуля

1. Подготовка системы к установке

Ставим базовые пакеты
# yum install nano
# yum install mc wget
# yum install git
# yum install nc

Отключаем SE Linux
# nano /etc/sysconfig/selinux
Комментируем все, вставляем строку
SELINUX=disabled

Переходим от firewalld к iptables
Останавливаем и удаляем firewald
# systemctl stop firewalld
# systemctl disable firewalld
Установим и запустим службу iptables:
# yum install iptables-services
# systemctl start iptables
# systemctl enable iptables

Обновляем систему
# yum update

Подключаем репозитарий EPEL
# yum -y install epel-release
# rpm -Uvh http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm

Перезагружаемся
# reboot


2. Меняем стандартный пароль на root

# passwd root
Изменяется пароль пользователя root.
Новый пароль : <вводим пароль>
Повторите ввод нового пароля : <вводим пароль еще раз>
passwd: все данные аутентификации успешно обновлены.


3. Меняем имя сервера:

Cмотрим текущее имя так:
# hostnamectl status
Имя меняем так:
# hostnamectl set-hostname asterisk2.svttk.ru
Прописываем собственное имя в файле hosts
# nano /etc/hosts
Дописываем имя сервера в строке:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 asterisk2.svttk.ru


4. Установка базы данных MariaDB (MySQL для CentOS7)

# yum install mysql mariadb-server
Добавляем с скрипт автозапуска
# systemctl enable mariadb.service
Запускаем сервер MariaDB
# systemctl start  mariadb.service
Задаем пароль root для сервера MariaDB
# mysql_secure_installation
Сначала вводим на первый вопрос просто <Enter>, затем на следующих вопросах вводим пароль и его подтверждение. На остальные вопросы отвечаем ДА (y)
Перезагружаем сервис просто так:
# systemctl restart  mariadb.service


5. Установка Web-сервера APACHE

# yum install httpd
Задание имени серверу. Открываем файл /etc/httpd/conf/httpd.conf
# nano /etc/httpd/conf/httpd.conf
Находим строку:
#ServerName www.example.com:80
меняем ее на:
ServerName ServerName www.asterisk2.svttk.ru:80
Здесь - www.asterisk2.svttk.ru – это имя нашего web сервера. Для того что бы сам сервер знал всегда свое имя, добавляем это имя в файл hosts
# nano /etc/hosts
Первая строка в файле теперь приводиться к виду
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 asterisk2.svttk.ru www.asterisk2.svttk.ru
Добавляем сервер Apache в скрипт автозапуска
# systemctl enable httpd.service
Запускаем сервер Apache
# systemctl start  httpd.service
Разрешаем прохождение пакетов на сервер с ip адресов сети 10.10.0.0/16
Вписываем соответствующее правило в начало цепочки правил в файл /etc/sysconfig/iptables
# nano /etc/sysconfig/iptables
Вписываем
# Открываем для сети 10.10.0.0/16 доступ на 80 порт
-A INPUT -p tcp -s 10.10.0.0/16 --dport 80 -j ACCEPT
Проверяем, обратившись к серверу через http и убеждаемся, что через браузер сервер отвечает.
Проверка работы сервера из командной строки:
# systemctl status httpd.service


6. Установка PHP и связывание его с MySQL

# yum install php
Перезапускаем web-сервер
# systemctl restart  httpd.service
Создаем файл для проверки работы PHP
# nano /var/www/html/info.php
вписываем туда
<?php
phpinfo();
?>
Теперь при запросе страницы http://<ip адрес>/info.php можно увидеть информацию о модуле PHP

Установка модулей для связки PHP5 и Mysql, а так же некоторых других модулей php
# yum install php-mysql php-gd php-imap php-ldap php-odbc
Перезапускаем web-сервер
# systemctl restart  httpd.service
Проверяем информацию на странице http://<ip адрес>/info.php и убеждаемся, что на странице появился раздел посвященный MySQL.


7. Установка PHPMYADMIN

# yum -y install phpmyadmin
Устанавливаем доступ к phpmyadmin с определенных ip (только из локальной сети):
# nano /etc/httpd/conf.d/phpMyAdmin.conf
В следующих блоках добавляем разрешенные сети / Ip-адреса (выделено красным)
<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1 10.10.0.0/16
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1 10.10.0.0/16
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
        Require ip 127.0.0.1 10.10.0.0/16
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1 10.10.0.0/16
     Allow from ::1
   </IfModule>
</Directory>
Перезапускаем сервер Apache
# systemctl restart  httpd.service
Теперь к странице phpmyadmin можно обратиться так: http://<ip адрес>/phpmyadmin 


8. Подготовка к установке телефонных сервисов DAHDI и ASTERISK

Ставим необходимые пакеты:
# yum install tcpdump
# yum install kernel-devel 
# yum install kernel-headers
# yum install perl rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto 
# yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
# yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
# yum install gcc  gcc-c++ mysql-connector-odbc unixODBC unixODBC-devel audiofile-devel libogg-devel openssl-devel zlib-devel
# yum install php-pear php-pdo php-mbstring perl-DateManip sox net-tools psmisc
# yum install e2fsprogs-devel  keyutils-libs-devel krb5-devel libogg libselinux-devel libsepol-devel gmp 
# yum install make gnutls-devel subversion doxygen texinfo curl-devel net-snmp-devel neon-devel uuid-devel libuuid-devel 
# yum install sqlite-devel sqlite speex-devel gsm-devel libtool libtool-ltdl libtool-ltdl-devel 
# yum install ncurses-devel newt-devel libtiff-devel libxml2-devel sqlite-devel glibc-headers
# yum install perl-Pod-Parser

Установка базы PearDB:
# pear channel-update pear.php.net
# pear install -Z db-1.7.14

Устанвока libjansson – библиотеки для работы с JSON
# cd /usr/src && wget http://www.digip.org/jansson/releases/jansson-2.5.tar.gz
# tar zvxf jansson-2.5.tar.gz 
# cd jansson-2.5
# ./configure --prefix=/usr/
# make clean
# make
# make install
# ldconfig
# cd ..

Далее перезагружаем систему:
# reboot


9. Установка Lame – конвертера аудиоформата mp3

# cd /usr/src
# wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz
# tar zxvf lame-3.98.4.tar.gz
# cd lame-3.98.4
# ./configure
# make
# make install
# cd ..


10. Ставим SpanDSP, приложение для работы с факсами

# wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6pre21.tgz
# tar zxvf spandsp-0.0.6pre21.tgz
# cd spandsp-0.0.6
# ./configure
# make
# make install
# ln -s /usr/local/lib/libspandsp.so.2 /usr/lib64/libspandsp.so.2
# cd ..


11. Установка DAHDI и LibPRI

Установка DAHDI
# yum -y install kernel kernel-headers-`uname -r` kernel-devel-`uname -r` 
# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
# tar xvfz dahdi-linux-complete-current.tar.gz 
# cd dahdi-linux-complete-2.11.0+2.11.0/
# make all
В CentOS7 почему-то некорректно устанавливаются man-ы DAHDI TOOLS. 
Для решения проблемы необходимо закомментировать в файле tools/xpp/Makefile соответствующую цель
# nano /usr/src/dahdi-linux-complete-2.11.0+2.11.0/tools/xpp/Makefile
ищем и комментируем строчку, установив перед строкой символ #
#install-man: install-man8
Далее запускаем
# make install
# make config
# cd ..

Установка LibPRI, драйвер для работы с потоками PRI
# svn checkout http://svn.asterisk.org/svn/libpri/branches/1.4 libpri
# cd /usr/src/libpri
# make
# make install
# cd ..


12. Установка Asterisk 13

# wget http://downloads.asterisk.org/pub/telephony/certified-asterisk/certified-asterisk-13.1-current.tar.gz
# tar xvfz certified-asterisk-13.1-current.tar.gz
# cd certified-asterisk-13.1-cert2/
# ./configure --libdir=/usr/lib64
Если видим такое значит все удалось
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 : unknown : linux-gnu :
configure: host-cpu:vendor:os: x86_64 : unknown : linux-gnu :

Качаем звуки
# contrib/scripts/get_mp3_source.sh

Запускаем меню конфигурации
# make menuselect
Должно появиться окно:


Здесь отмечаем дополнительно разделы (клавишей ENTER), которые желаем установить:
 --->  Add-ons (See README-addons.txt) 
  [*] format_mp3
 --->  Call Detail Recording 
[*] cdr_csv  
[*] cdr_odbc
[*] cdr_sqlite3_custom  
 ---> Channel Drivers 
[*] chan_mgcp
[*] chan_oss
[*] chan_phone
[*] chan_sip
[*] chan_skinny
[*] chan_unistim
  ---> 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  
  --->  Extras Sound Packages
[*] EXTRA-SOUNDS-EN-WAV
[*] EXTRA-SOUNDS-EN-ULAW                                                              
[*] EXTRA-SOUNDS-EN-ALAW  
Переходи на кнопку Save & Exit (клавишей TAB) и применяем настройки

Теперь собираем
# make
В конце сборки получаем
 +--------- Asterisk Build Complete ---------+
 + Asterisk has successfully been built, and +
 + can be installed by running:              +
 +                                           +
 +                make install               +
 +-------------------------------------------+
Устанавливаем сборку
# 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    +
 +-------------------------------------------+
Завершающие штрихи установки
# make config 
# make samples
# ldconfig
# sed -i 's/ASTARGS=""/ASTARGS="-U asterisk"/g'  /usr/sbin/safe_asterisk
# cd ..

Проверяем попал ли Asterisk в автозагрузку:
# chkconfig asterisk --list
Должно быть
asterisk     0:выкл  1:выкл  2:вкл   3:вкл   4:вкл   5:вкл   6:выкл
Если у цифр 2,3,4,5 нет значения «вкл», то добавляем сервис asterisk в автозагрузку командой
# chkconfig --add asterisk

Создаем пользователя Asterisk и задайте права пользователя.
# useradd -m asterisk
# chown asterisk.asterisk /var/run/asterisk
# chown -R asterisk.asterisk /etc/asterisk
# chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk
# chown -R asterisk.asterisk /usr/lib64/asterisk

Разрешаем общение с сервисом Asterisk по порту 5060 и разрешаем обмен по портам 8000..20000 трафику RTP.
# nano /etc/sysconfig/iptables
Вставляем:
## Разрешаем порты для SIP и RTP
-A INPUT -p udp --dport 5060 -j ACCEPT
-A INPUT -p udp --dport 8000:20000 -j ACCEPT
### 
Перезагружаем iptables
# systemctl restart iptables.service

13. Запуск DAHDI и ASTERISK
Для запуска DAHDI необходимо в CentOS 7 создать скрипт запуска
Создаем пустой файл 
# touch /etc/init.d/dahdi
# nano /etc/init.d/dahdi
Помещаем туда:
#!/bin/sh
#
# dahdi         This shell script takes care of loading and unloading \
#               DAHDI Telephony interfaces
# chkconfig: 2345 9 92
# description: The DAHDI drivers allow you to use your linux \
# computer to accept incoming data and voice interfaces
#
# config: /etc/dahdi/init.conf

### BEGIN INIT INFO
# Provides:        dahdi
# Required-Start:  $local_fs $remote_fs
# Required-Stop:   $local_fs $remote_fs
# Should-Start:    $network $syslog
# Should-Stop:     $network $syslog
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: DAHDI kernel modules
# Description:     dahdi - load and configure DAHDI modules
### END INIT INFO

initdir=/etc/init.d

# Don't edit the following values. Edit /etc/dahdi/init.conf instead.

DAHDI_CFG=/usr/sbin/dahdi_cfg
DAHDI_CFG_CMD=${DAHDI_CFG_CMD:-"$DAHDI_CFG"} # e.g: for a custom system.conf location

FXOTUNE=/usr/sbin/fxotune

# The default syncer Astribank. Usually set automatically to a sane
# value by xpp_sync(1) if you have an Astribank. You can set this to an
# explicit Astribank (e.g: 01).
XPP_SYNC=auto

# The maximal timeout (seconds) to wait for udevd to finish generating
# device nodes after the modules have loaded and before running dahdi_cfg.
DAHDI_DEV_TIMEOUT=20

# A list of modules to unload when stopping.
# All of their dependencies will be unloaded as well.
DAHDI_UNLOAD_MODULES="dahdi"

#
# Determine which kind of configuration we're using
#
system=redhat  # assume redhat
if [ -f /etc/debian_version ]; then
    system=debian
fi

if [ -f /etc/gentoo-release ]; then
    system=debian
fi

if [ -f /etc/SuSE-release -o -f /etc/novell-release ]
then
    system=debian
fi

# Source function library.
if [ $system = redhat ]; then
    . $initdir/functions || exit 0
fi

DAHDI_MODULES_FILE="/etc/dahdi/modules"

[ -r /etc/dahdi/init.conf ] && . /etc/dahdi/init.conf

if [ $system = redhat ]; then
        LOCKFILE=/var/lock/subsys/dahdi
fi

# recursively unload a module and its dependencies, if possible.
# where's modprobe -r when you need it?
# inputs: module to unload.
# returns: the result from
unload_module() {
        module="$1"
        line=`lsmod 2>/dev/null | grep "^$1 "`
        if [ "$line" = '' ]; then return; fi # module was not loaded

        set -- $line
        # $1: the original module, $2: size, $3: refcount, $4: deps list
        mods=`echo $4 | tr , ' '`
        ec_modules=""
        # xpp_usb keeps the xpds below busy if an xpp hardware is
        # connected. Hence must be removed before them:
        case "$module" in xpd_*) mods="xpp_usb $mods";; esac

        for mod in $mods; do
                case "$mod" in
                dahdi_echocan_*)
                        ec_modules="$mod $ec_modules"
                        ;;
                *)
                        # run in a subshell, so it won't step over our vars:
                        (unload_module $mod)
                        ;;
                esac
        done
        # Now that all the other dependencies are unloaded, we can unload the
        # dahdi_echocan modules.  The drivers that register spans may keep
        # references on the echocan modules before they are unloaded.
        for mod in $ec_modules; do
                (unload_module $mod)
        done
        rmmod $module
}

unload_modules() {
        for module in $DAHDI_UNLOAD_MODULES; do
                unload_module $module
        done
}

# In (xpp) hotplug mode, the init script is also executed from the
# hotplug hook. In that case it should not attempt to loade modules.
#
# This function only retunrs false (1) if we're in hotplug mode and
# coming from the hotplug hook script.
hotplug_should_load_modules() {
        if [ "$XPP_HOTPLUG_DAHDI" = yes -a "$CALLED_FROM_ATRIBANK_HOOK" != '' ]
        then
                return 1
        fi
        return 0
}

# In (xpp) hotplug mode: quit after we loaded modules.
#
# In hotplug mode, the main run should end here, whereas the rest of the
# script should be finished by the instance running from the hook.
# Note that we only get here if there are actually Astribanks on the
# system (otherwise noone will trigger the run of the hotplug hook
# script).
hotplug_exit_after_load() {
        if [ "$XPP_HOTPLUG_DAHDI" = yes -a "$CALLED_FROM_ATRIBANK_HOOK" = '' ]
        then
                exit 0
        fi
}

# Initialize the Xorcom Astribank (xpp/) using perl utiliites:
xpp_startup() {
        # do nothing if there are no astribank devices:
        if ! /usr/share/dahdi/waitfor_xpds; then return 0; fi

        hotplug_exit_after_load

        # overriding locales for the above two, as perl can be noisy
        # when locales are missing.
        # No register all the devices if they didn't auto-register:
        LC_ALL=C dahdi_registration on
}


hpec_start() {
        # HPEC license found
        if ! echo /var/lib/digium/licenses/HPEC-*.lic | grep -v '\*' | grep -q .; then
                return
        fi

        # dahdihpec_enable not installed in /usr/sbin
        if [ ! -f /usr/sbin/dahdihpec_enable ]; then
                echo -n "Running dahdihpec_enable: Failed"
                echo -n "."
                echo "  The dahdihpec_enable binary is not installed in /usr/sbin."
                return
        fi

        # dahdihpec_enable not set executable
        if [ ! -x /usr/sbin/dahdihpec_enable ]; then
                echo -n "Running dahdihpec_enable: Failed"
                echo -n "."
                echo "  /usr/sbin/dahdihpec_enable is not set as executable."
                return
        fi

        # dahdihpec_enable properly installed
        if [ $system = debian ]; then
                echo -n "Running dahdihpec_enable: "
                /usr/sbin/dahdihpec_enable 2> /dev/null
        elif [ $system = redhat ]; then
                action "Running dahdihpec_enable: " /usr/sbin/dahdihpec_enable
        fi
        if [ $? = 0 ]; then
                echo -n "done"
                echo "."
        else
                echo -n "Failed"
                echo -n "."
                echo "  This can be caused if you had already run dahdihpec_enable, or if your HPEC license is no longer valid."
        fi
}

shutdown_dynamic() {
        if ! grep -q ' DYN/' /proc/dahdi/* 2>/dev/null; then return; fi

        # we should only get here if we have dynamic spans. Right?
        $DAHDI_CFG_CMD -s
}

load_modules() {
        # Some systems, e.g. Debian Lenny, add here -b, which will break
        # loading of modules blacklisted in modprobe.d/*
        unset MODPROBE_OPTIONS
        modules=`sed -e 's/#.*$//' $DAHDI_MODULES_FILE 2>/dev/null`
        #if [ "$modules" = '' ]; then
                # what?
        #fi
        echo "Loading DAHDI hardware modules:"
        modprobe dahdi
        for line in $modules; do
                if [ $system = debian ]; then
                        echo -n "   ${line}: "
                        if modprobe $line 2> /dev/null; then
                                echo -n "done"
                        else
                                echo -n "error"
                        fi
                elif [ $system = redhat ]; then
                        action "  ${line}: " modprobe $line
                fi
        done
        echo ""
}

if [ ! -x "$DAHDI_CFG" ]; then
       echo "dahdi_cfg not executable"
       exit 0
fi

if [ ! -f /etc/dahdi/system.conf ]; then
        echo "/etc/dahdi/system.conf not found. Nothing to do."
       exit 0
fi

RETVAL=0

# See how we were called.
case "$1" in
  start)
        if hotplug_should_load_modules; then
                load_modules
        fi

        TMOUT=$DAHDI_DEV_TIMEOUT # max secs to wait

        while [ ! -d /dev/dahdi ] ; do
                sleep 1
                TMOUT=`expr $TMOUT - 1`
                if [ $TMOUT -eq 0 ] ; then
                        echo "Error: missing /dev/dahdi!"
                        exit 1
                fi
        done

        xpp_startup

        if [ $system = debian ]; then
            echo -n "Running dahdi_cfg: "
            $DAHDI_CFG_CMD 2> /dev/null && echo -n "done"
            echo "."
        elif [ $system = redhat ]; then
            action "Running dahdi_cfg: " $DAHDI_CFG_CMD
        fi
        RETVAL=$?

        if [ "$LOCKFILE" != '' ]; then
                [ $RETVAL -eq 0 ] && touch $LOCKFILE
        fi

        if [ -x "$FXOTUNE" ] && [ -r /etc/fxotune.conf ]; then
                # Allowed to fail if e.g. Asterisk already uses channels:
                $FXOTUNE -s || :
        fi

        # Set the right Astribanks ticker:
        LC_ALL=C xpp_sync "$XPP_SYNC"

        hpec_start
        ;;
  stop)
        # Unload drivers
        #shutdown_dynamic # FIXME: needs test from someone with dynamic spans
        echo -n "Unloading DAHDI hardware modules: "
        if unload_modules; then
                echo "done"
        else
                echo "error"
        fi
        if [ "$LOCKFILE" != '' ]; then
                [ $RETVAL -eq 0 ] && rm -f $LOCKFILE
        fi
        ;;
  unload)
        unload_modules
        ;;
  restart|force-reload)
        $0 stop
        $0 start
        ;;
  reload)
        if [ $system = debian ]; then
            echo -n "Rerunning dahdi_cfg: "
            $DAHDI_CFG_CMD 2> /dev/null && echo -n "done"
            echo "."
        elif [ $system = redhat ]; then
            action "Rerunning dahdi_cfg: " $DAHDI_CFG_CMD
        fi
        RETVAL=$?
        ;;
  status)
        if [ -d /proc/dahdi ]; then
                /usr/sbin/lsdahdi
                RETVAL=0
        else
                RETVAL=3
        fi
        ;;
  *)
        echo "Usage: dahdi {start|stop|restart|status|reload|unload}"
        exit 1
esac

exit $RETVAL

Делаем файл исполняемым:
# chmod +x /etc/init.d/dahdi
Готовим типовые файлы конфигурации:
# cp /etc/dahdi/modules.sample /etc/dahdi/modules
# cp /etc/dahdi/system.conf.sample /etc/dahdi/system.conf

Запускаем сервис DAHDI:
# /etc/init.d/dahdi start
# chkconfig --add dahdi
Проверка сервиса DAHDI
# systemctl status dahdi.service
Перезагрузка сервиса DAHDI
# systemctl restart dahdi.service

Запуск ASTERISK
# systemctl start asterisk.service
Проверка сервиса ASTERISK
# systemctl status asterisk.service
Перезагрузка сервиса ASTERISK
# systemctl restart asterisk.service
Смотрим под каким пользователем работает сервис asterisk
# ps auxf | grep asterisk
Пользователь должен быть asterisk:
# ps auxf | grep asterisk
root      7400  0.0  0.0 112664   960 pts/0    S+   20:34   0:00          \_ grep --color=auto asterisk
root      5118  0.0  0.0 115236   812 ?        S    20:19   0:00 /bin/sh /usr/sbin/safe_asterisk
asterisk  5120  0.3  0.5 1620752 43736 ?       Sl   20:19   0:03  \_ /usr/sbin/asterisk -f -U asterisk -vvvg -c

Делаем контрольную перезагрузку, что бы и DAHDI и ASTERISK запустились самостоятельно
# reboot
Заходим в консоль asterisk
# asterisk -r
Проверяем подцепился ли сервис DAHDI к ASTERISK
asterisk2*CLI> dahdi show version
DAHDI Version: 2.11.0 Echo Canceller:
Все хорошо.


14. Увеличение количества лимитов на открытие файлов и обращений к жесткому диску для пользователя asterisk
# nano /etc/security/limits.conf
Вписываем в конец файла перед строкой
# End of file
Следующее:
asterisk         hard    nofile      500000
asterisk         soft    nofile      500000


15 Разрешаем доступ на сервер по SSH (на 22 порт) только c доверенных ip адресов (с сетей 10.10.0.0/16 и 10.200.104.0/24)

Для этого открываем файл /etc/hosts.allow
# nano  /etc/hosts.allow
Вписываем туда:
sshd: 10.10.0.0/255.255.0.0, 10.200.104.0/255.255.255.0, 10.200.5.220/255.255.255.255 
Потом открываем файл /etc/hosts.deny
# nano  /etc/hosts.deny
Вписываем туда:
sshd: ALL@ALL
Рестартуем сервис sshd
# systemctl restart sshd.service


16 Устанавливаем SIPGPEP – утилиту для удобного просмотра трейсов
# yum install libpcap-devel pcre-devel git
# cd /usr/src
# git clone https://github.com/sipcapture/sipgrep.git
# cd sipgrep
# ./configure
# make && make install
Проверка работы:
# ./sipgrep  -V
# sipgrep  -d ens32 -f 2057004
Здесь ens32 – имя интерфейса, который нужно прослушивать для получения трейса от (from) номера 2057004


17 Установка сервиса ntp на CentOS7, который будет синхронизировать время на текущем сервере с общемировым.
# yum -y install ntp
Редактируем файл конфигурации
# nano /etc/ntp.conf
Комментируем строку
#restrict ::1
Запускаем сервис:
# systemctl start ntpd
Добавляем в автозагрузку
# systemctl enable ntpd
Проверяем, что сервис запустился на порту 123 и работает с источниками времени
# netstat -ltupn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2100/mysqld
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN      3265/asterisk
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      864/httpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      865/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2198/master
udp        0      0 10.200.104.17:123       0.0.0.0:*                           3976/ntpd
udp        0      0 127.0.0.1:123           0.0.0.0:*                           3976/ntpd
udp        0      0 0.0.0.0:123             0.0.0.0:*                           3976/ntpd
udp        0      0 0.0.0.0:4569            0.0.0.0:*                           3265/asterisk
udp        0      0 0.0.0.0:5000            0.0.0.0:*                           3265/asterisk
udp        0      0 0.0.0.0:5060            0.0.0.0:*                           3265/asterisk
udp6       0      0 :::123                  :::*                                3976/ntpd

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 sf.ntp.fancube. .STEP.          16 u    -   64    0    0.000    0.000   0.000
*ns.rnl.tecnico. 194.117.9.130    3 u   67   64    3  110.093    1.155   1.118
 khyber.madduck. .STEP.          16 u    -   64    0    0.000    0.000   0.000
 108.61.194.85.v .STEP.          16 u    -   64    0    0.000    0.000   0.000


18 Отключаем использование протокола IPv6 в CentOS7
# yum install net-tools
Смотрим какие программы используют ipv6 в принципе
# netstat -ltupn
Пример вывода:
# netstat -ltupn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2166/mysqld
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN      5351/asterisk
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      4338/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2214/master
tcp6       0      0 :::80                   :::*                    LISTEN      881/httpd
tcp6       0      0 :::22                   :::*                    LISTEN      4338/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      2214/master
udp        0      0 0.0.0.0:4569            0.0.0.0:*                           5351/asterisk
udp        0      0 0.0.0.0:5000            0.0.0.0:*                           5351/asterisk
udp        0      0 0.0.0.0:5060            0.0.0.0:*                           5351/asterisk

В моем случае нужно выключить ipv6 в httpd (APACHE), sshd (SSH) и master (почтовый сервер postfix).

Выключение в sshd
Открываем файл настроек /etc/ssh/sshd_config 
# nano /etc/ssh/sshd_config 
находим строки:
#AddressFamily any
#ListenAddress 0.0.0.0
Раскомментируем их и изменим. Должно получиться вот так:
AddressFamily inet
ListenAddress 0.0.0.0
Перезапускаем sshd
# systemctl restart sshd.service
Теперь SSHD не использует ipv6

Выключение в httpd
Открываем файл конфигурации apache
# nano /etc/httpd/conf/httpd.conf
По умолчанию стоит строчка
Listen 80
Это значит, что прослушиваются ip адреса и ipv4 и ipv6
Правим строчку на:
Listen 0.0.0.0:80
Перезагружаем httpd
# systemctl restart httpd.service
Теперь HTTPD не использует ipv6

Выключение в сервисе postfix
Открываем файл 
# nano /etc/postfix/main.cf
Ищем строчку
inet_protocols = all
комментируем ее и пишем новую строчку:
#inet_protocols = all
inet_protocols = ipv4
Рестуртуем postfix
# systemctl restart postfix.service
Теперь почтовый сервис не использует ipv6

Выключаем в сервисе ntpd
Редактируем юнит system для сервиса ntpd:
# nano /usr/lib/systemd/system/ntpd.service
В файле меняем
ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS
на
ExecStart=/usr/sbin/ntpd -4 -u ntp:ntp $OPTIONS
Флаг -4 означает, что ntpd будет запускаться только с протоколом ipv4
Перечитываем юнит
# systemctl daemon-reload
Рестартуем сервис
# systemctl restart ntpd.service

После выключения ipv6 во всех сервисах выключаем ipv6 в CentOS
Открываем файл:
# nano  /usr/lib/sysctl.d/00-system.conf
Добавляем туда строки:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Открываем файл
# nano  /etc/sysconfig/network
Добавляем туда строки:
NETWORKING_IPV6=no
IPV6INIT=no
Перезагружаемся.
# reboot
Все, теперь в системе нет ipv6.


19 Разрешаем форвардинг между интерфейсами сервера для нормальной работы NAT
# echo "net.ipv4.ip_forward = 1"|sudo tee /etc/sysctl.d/99-ipforward.conf
# sysctl -p /etc/sysctl.d/99-ipforward.conf
См http://jensd.be/343/linux/forward-a-tcp-port-to-another-ip-or-port-using-nat-with-iptables 
Перезагружаемся:
# reboot

ЧАСТНОСТИ, ПРИ ПЕРЕХОДЕ от ASTERISK 1.8 к ASTERISK 13

1) В настройках файлов sip.conf устарела директива nat=yes. Ее необходимо заменить на nat=force_rport,comedia:
Групповая замена в файлах *sip.conf sip nat=yes на nat=force_rport,comedia
sed -i 's/nat \{0,\}= \{0,\}yes/nat\=force\_rport\,comedia/g' asterisk_test/*sip.conf

2) В новой версии Asterisk нет более функции SIPCHANINFO. Теперь следует использовать функцию CHANNEL.
В файлах /etc/asterisk/extensions.conf функцию SIPCHANINFO меняем на CHANNEL командой:
sed -i 's/SIPCHANINFO/CHANNEL/g' asterisk_test/*sip.conf

3) В CentOS7 новое обозначение интерфейсов. Меняем старые названия на новые в iptables:
Меняем в файле iptables названия интерфейсов
sed -i -e 's/eth0/ens34/g' -e 's/eth1/ens32/g' -e 's/eth2/ens35/g' asterisk_test/iptables.bak

4) Проверяем расположение звуковых файлов в конфигурационном конфиге:
В файле /etc/asterisk/extensions.conf подредактировать все директивы с указанием частного пути к звуковым файлам.
Например вместо:
exten => _X.,1,Playback(custom/ru/invalid)
пишем
exten => _X.,1,Playback(invalid)

4 комментария:

  1. 5. Установка Web-сервера APACHE

    # yum install httpd
    Задание имени серверу. Открываем файл /etc/httpd/conf/httpd.conf
    # nano /etc/httpd/conf/httpd.conf
    Находим строку:
    #ServerName www.example.com:80
    меняем ее на:
    ServerName ServerName www.asterisk2.svttk.ru:80

    ServerName не лишнее?

    ОтветитьУдалить
    Ответы
    1. Моя Россыпь >>>>> Download Now

      >>>>> Download Full

      Моя Россыпь >>>>> Download LINK

      >>>>> Download Now

      Моя Россыпь >>>>> Download Full

      >>>>> Download LINK ng

      Удалить
  2. 16 Устанавливаем SIPGPEP – утилиту для удобного просмотра трейсов
    # yum install libpcap-devel pcre-devel git
    # cd /usr/src
    # git clone https://github.com/sipcapture/sipgrep.git
    # cd sipgrep

    !!!!!!!!!!!!!!!Без этого не заработало
    #./build.sh

    # ./configure
    # make && make install

    ОтветитьУдалить
  3. Моя Россыпь >>>>> Download Now

    >>>>> Download Full

    Моя Россыпь >>>>> Download LINK

    >>>>> Download Now

    Моя Россыпь >>>>> Download Full

    >>>>> Download LINK Dn

    ОтветитьУдалить