Развертывание 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)
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 не лишнее?
Моя Россыпь >>>>> Download Now
Удалить>>>>> Download Full
Моя Россыпь >>>>> Download LINK
>>>>> Download Now
Моя Россыпь >>>>> Download Full
>>>>> Download LINK ng
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
Моя Россыпь >>>>> Download Now
ОтветитьУдалить>>>>> Download Full
Моя Россыпь >>>>> Download LINK
>>>>> Download Now
Моя Россыпь >>>>> Download Full
>>>>> Download LINK Dn