Оригинал: 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 . Документ писался наскоро и по памяти, так что прошу прошения за возможные неточности и грамматические ошибки.
По роду своей работы в сфере IT мне достаточно часто приходится сталкиваться с проблемами не всегда стандартными для IT сферы. Так же заметки со ссылками на статьи которые очень часто на практике выручали, держать на своем компе стало не удобно. По этой причине создан этот блог - записная книжка статей и заметок. Авторов статей прошу не обижаться если местами забыл сделать на них обратную ссылку. Пишите в комментариях все обязательно поправлю..
Поиск по моему блогу
В данной статье пойдет речь не об установке какого-то либо дистрибутива линукс, а об общих мерах, которые нужно предпринять для стабильной и безопасной работы asterisk на linux.
Image via Wikipedia
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий