Ключевые слова:voip, asterisk, linux, (найти похожие документы)
From: litnimax <litnimax@asterisk-support.ru.>
Date: Mon, 26 Mar 2006 14:31:37 +0000 (UTC)
Subject: Заметки по усстановке Asterisk PBX под Linux
Оригинал: http://www.asterisk-support.ru/documentation/bulk/LinuxAsteriskSetup
В данной статье пойдет речь не об установке какого-то либо
дистрибутива линукс, а об общих мерах, которые нужно предпринять для
стабильной и безопасной работы asterisk на linux. Итак,
Установка
Абсолютно не важно, какой дистрибутив линукса вы собираетесь
использовать. При установке выбирайте минимальную конфигурацию.
Asterisk не нуждается офисных пакетах, играх и графических оболочках.
Чем меньше всякого хлама установите, тем лучше.
Пакеты, которые нужны, это:
* glibc-devel - заголовочные файлы стандартных библиотек. Без этого
пакета ничего не откомпилируется.
* kernel-devel и kernel-header - исходные тексты ядра Linux. нужны
для сборки zaptel. Даже если у вас и не планируется использовать
железо от Digium, для нормальной работы MusicOnHold? и
конференций понадобится собрать модуль ztdummy, который обеспечит
тактирование от USB подсисемы.
* db-devel - астериск использует встроенную базу данных.
* gcc,cpp,binutils,bison,expat-devel и ncurses - компиляторы,
препроцессоры и другие утилиты. curses нужен для сбоки консльного
менеджера astman.
* openssl, openssl-devel - библиотеки
Если каких-то пакетов не хватает, установите их после установки
системы. В linux при помощи комманды rpm -i package-1.1.rpm , в
slackware при помощи installpgk package.tgz
Зачистка системы
Еще не встречал такого дистрибутива, после установки которого не
приходилось бы брать напильник (а это нормально - все предусмотреть
нельзя). Итак, что надо сделать сразу после установки.
* Проверка сетевых служб. netstat -atnup выведет список всех сокетов
TCP/UDP, которые открыты на данный момент. Так как у нас только
asterisk сервер, то работать только служба SSH (для удаленного
администрирования) и астериск. Кстати, чем меньше портов вы
обнаружите открыми, тем более "правильно (минимально)" вы
устновили линукс. Комманда netstat выведет номер процесса, и его
pid узнайте название. Далее при помощи ntsysv или chkconfig
откючите ненужную службу.
Например:
[root@navigator root]# netstat -atnup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State P
ID/Program name
tcp 0 0 192.168.0.6:139 0.0.0.0:* LISTEN 912
/smbd
tcp 0 0 127.0.0.1:139 0.0.0.0:* LISTEN 912
/smbd
udp 0 0 192.168.0.6:137 0.0.0.0:* 911
/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 911
/nmbd
udp 0 0 192.168.0.6:138 0.0.0.0:* 911
/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 911
/nmbd
udp 0 0 0.0.0.0:33862 0.0.0.0:* 241
76/sim
udp 0 0 127.0.0.1:32846 0.0.0.0:* 502
1/smbd
/etc/init.d/samba stop
chkconfig --del samba (отключает samba из списков автозагрузки).
* Если после выполнения команды netstat -atnup не видно имени
приложения, которое нужно выключить, то нужно выполнить комманду
ps aux | grep #pid процесса, которая покажет имя службы.
Обычно на Red Hat 9 приходится отключать службы cups, nfs, nfslock,
portmap (111 порт), xinetd. Вот список служб, работаюших на моей
системе:
kudzu 0:off 1:off 2:off 3:on 4:on 5:on 6:off
syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
random 0:off 1:off 2:on 3:on 4:on 5:on 6:off
keytable 0:off 1:on 2:on 3:on 4:on 5:on 6:off
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
named 0:off 1:off 2:off 3:on 4:off 5:off 6:off
ntpd 0:off 1:off 2:off 3:on 4:off 5:off 6:off
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
NTPD нужен для синхронизации времени, named так как это еще и DNS
сервер (ай-ай, нехорошо), MySQL - биллинг для Asterisk.
Вы должны добиться того, что netstat -atnup | grep -v asterisk | grep
-v ssh ничего не покажет.
* Всегда четко указывайте на каких интерфейсах слушать. Например,
если для биллинга используется MySQL, он должен слушать только
на 127.0.0.1.
* Измените порт 22 SSH службы на другой. SSH - это дверь в вашу
систему,зачем чтобы кто-то вообще знал что она существует. В Red
Hat в папке /etc/ssh/sshd_config Сделайте:
Port 60022
Protocol 2
ListenAddress x.x.x.x
# неполохо бы запретить root сразу попадать в систему
PermitRootLogin no
Сборка и настройка Asterisk
Для работы asterisk совсем необязательны привилегии root. В идеальном
случае asterisk дулжен работать в chroot окружении на ядре с
GrSecurity? патчами. Это делает вашу систему просто неуязвимой.
* Создайте пользователя asterisk коммандой useradd - asterisk.
Сбросьте привилегии root su asterisk -. Из-под экаунта
пользователя asterisk скачайте пакет с сайта. Например:
[root@new root]# su asterisk -
[asterisk@new asterisk]$
[asterisk@new asterisk]$ mkdir tmp
[asterisk@new asterisk]$ cd tmp
[asterisk@new tmp]$ wget ftp://ftp.asterisk.org/pub/asterisk/asterisk-1.0.1.tar.gz
--17:50:14-- ftp://ftp.asterisk.org/pub/asterisk/asterisk-1.0.1.tar.gz
=> `asterisk-1.0.1.tar.gz'
Resolving ftp.asterisk.org... done.
Connecting to ftp.asterisk.org[69.16.138.164]:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD /pub/asterisk ... done.
==> PORT ... done. ==> RETR asterisk-1.0.1.tar.gz ... done.
[<=> ] 9,558,497 146.29K/s
17:51:19 (146.29 KB/s) - `asterisk-1.0.1.tar.gz' saved [9558497]
[asterisk@new tmp]$ tar zxf asterisk-1.0.1.tar.gz
[asterisk@new tmp]$ cd asterisk-1.0.1
[asterisk@new asterisk-1.0.1]$ vi Makefile
Перед сборкой asterisk отредактируйте Makefile и измените префик
на 'INSTALL_PREFIX=/home/asterisk'. Далее запускаете make и make install.
* Нужно поправить разрешения на ztdummy и другие devices:
chown -R asterisk:root /dev/zap
* Вместо автоматической подгрузки модулей подгружайте их руками:
[asterisk@new asterisk-1.0.1]$ cd ~/etc/asterisk/
[asterisk@new asterisk]$ cat modules.conf
;
; Asterisk configuration file
;
; Module Loader configuration file
;
[modules]
autoload=no
load => res_features.so
load => res_musiconhold.so
load => res_crypto.so
load => res_indications.so
load => res_monitor.so
load => res_agi.so
load => res_adsi.so
load => chan_sip.so
load => chan_iax2.so
load => pbx_config.so
load => pbx_wilcalu.so ; Auto dialer
load => pbx_spool.so ; outgoing spool
load => app_setcallerid.so
load => app_senddtmf.so
load => app_macro.so
load => app_authenticate.so
load => app_waitforring.so
load => app_db.so
load => app_transfer.so
load => app_setcidnum.so
load => app_setcidname.so
load => app_cut.so
load => app_read.so
load => app_setcdruserfield.so
load => app_eval.so
load => app_exec.so
load => app_talkdetect.so
load => codec_ilbc.so
load => codec_gsm.so
load => codec_ulaw.so
load => format_gsm.so
load => format_wav.so
load => format_ilbc.so
load => cdr_csv.so
load => app_cdr.so
load => cdr_manager.so
load => app_privacy.so
load => app_verbose.so
load => app_dial.so
load => app_adsiprog.so
load => app_voicemail.so
load => app_playback.so
load => app_mp3.so
;load => chan_oh323.so
load => chan_zap.so
load => app_meetme.so
load => app_echo.so
load => codec_g729.so
[global]
Установка openh323 и pwlib
Чтобы asterisk мог работать с h323 протоколом, его нужно собрать с
модулем chan_h323 либо chan_oh323. Сначала в asterisk появился модуль
oh323, который был реализован в виде драйвера псевдо-звуковой карты.
Позже Jeremy Macnamara из компании Nufone networks написал собственную
реализацию chan_h323, которая уже была идеологически правильной и
использовала RTP (Real Time Protocol) API.
Алгоритм сборки:
* Скачать pwlib и openh323 с сайта www.openh323.org. Обязательно
надо читать README, где указано какие версии библиотек нужны для
данной версии астериск (для asterisk-1.0.1 нужны pwlib-1.5.2,
openh323-1.12.2) . Далее надо их распаковать прямо в домашней
директории, так как обычно софт, который их использует, ищет их
именно там. Если вы не знаток сборки софта под linux, лучше так и
оставить.
* Собрать pwlib:
cd ~/pwlib
./configure
make
* Собрать openh323:
cd ~/openh323
./configure
make opt
Далее откомпилированные библиотеки
(pwlib/lib/libpt_linux_x86_r.so.1.5.2 и
openh323/lib/libh323_linux_x86_r.so.1.12.2) нужно скопировать туда,
где их найдет chan_h323 и экпортировать переменную LD_LIBRARY_PATH,
например:
export LD_LIBRARY_PATH=/home/asterisk/lib
И перед запуском asterisk нужно также экспортировать эту переменную
окружения. Лучше всего прописать ее в загрузочный файл:
[asterisk@new asterisk]$ tail ~/.bash_profile
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
export PWLIBDIR=/home/asterisk/lib/pwlib
export OPENH323DIR=/home/asterisk/lib/openh323
export LD_LIBRARY_PATH=/home/asterisk/lib:$PWLIBDIR/lib:$OPENH323DIR/lib
export PATH=/home/asterisk/usr/sbin:$PATH
export ASTERISK_PROMPT="asterisk %d %t %# "
и запускать астериск из скриптов загрузки:
su - asterisk -c asterisk
* Сборка chan_h323:
[asterisk@new tmp]$ cd asterisk-1.0.1
[asterisk@new asterisk-1.0.1]$ cd channels/h323
[asterisk@new h323]$ make
g++ -g -c -fno-rtti -o ast_h323.o -march=i686 -DPBYTE_ORDER=PLITTLE_ENDIAN -DN
DEBUG -DDO_CRASH -
DDEBUG_THREADS -pipe -Wall -fPIC -DP_LINUX -D_REENTRANT -D_GNU_SOURCE -DP_HAS_S
EMAPHORES -DP_SSL -
DP_PTHREADS -DPHAS_TEMPLATES -DPTRACING -DP_USE_PRAGMA -I../../include
-I/home/asterisk/pwlib/include/ptlib/unix -I/home/asterisk/pwlib/include
-I/home/asterisk/openh323/include -Wno-missing-prototypes -Wno-missing-declarations ast_h323.cpp
chan_h323.h:31: warning: `sockaddr_in bindaddr' defined but not used ar cr libchanh323.a ast_h323.o
[asterisk@new h323]$
[asterisk@new h323]$ cd ../..
[asterisk@new asterisk-1.0.1]$ make
* Сборка chan_oh323. Пакет нужно скачать с сайта
inaccessnetworks Распаковать и внимательно прочитать README.
Последний пакет на момент написания документа был
asterisk-oh323-0.6.3b и требует openh323-1.13.5 и pwlib-1.6.6).
Нужно отредактировать файл Makefile и указать правильные пути
(asterisk собирался с INSTALL_PREFIX=/home/asterisk):
OPENH323DIR=/home/asterisk/openh323
PWLIBDIR=/home/asterisk/pwlib
ASTERISKINCDIR=/home/asterisk/tmp/asterisk-1.0-RC2/include
ASTERISKMODDIR=/home/asterisk/usr/lib/asterisk/modules
ASTERISKETCDIR=/home/asterisk/etc/asterisk
OH323WRAPLIBDIR=/home/asterisk/lib
После это make и make install. В папке etc должен появится файл
oh323.conf, в usr/lib/modules/asterisk файл chan_oh323.
Основные проблемы при сборке h323 модулей обычно из-за несповпадении
версий и отстутвия нужных devel пакетов.
Заключение
Прошу оставлять свои комментарии, рассказы о граблях, пожелания и все
что каается данной темы, чтобы в новой ревизии документа была включена
еще более полная информация об установке asterisk на Linux (прямо тут
или на litnimax@asterisk-support.ru.">mail . Документ писался наскоро и по памяти, так что прошу
прошения за возможные неточности и грамматические ошибки.