Поиск по моему блогу

В данной статье пойдет речь не об установке какого-то либо дистрибутива линукс, а об общих мерах, которые нужно предпринять для стабильной и безопасной работы asterisk на linux.

Asterisk (PBX)Image via Wikipedia
Оригинал: 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 . Документ писался наскоро и по памяти, так что прошу
   прошения за возможные неточности и грамматические ошибки.
Enhanced by Zemanta

Комментариев нет:

Реклама от BigBN