ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Метки статьи: ‘Asterisk’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Channel Event Logging (CEL)

Дано:

  • FreeBSD 8.1-RELEASE
  • Asterisk 1.8.17.0

Полученные от CEL данные будем складывать в csv и MySQL.

MySQL CEL Backend:

Using MySQL for Channel Event records is supported by using ODBC and the cel_odbc module.

Ставим порты для ODBC

  • /usr/ports/databases/unixODBC
  • /usr/ports/databases/mysql-connector-odbc

# pkg_info | grep ODBC
mysql-connector-odbc-unixodbc-mysql55-5.1.9 ODBC driver for MySQL55 / unixodbc
unixODBC-2.3.1 ODBC library suite for Unix

# ls -la /usr/local/lib/libmyodbc*
-rwxr-xr-x 1 root wheel 260880 18 сен 09:21 /usr/local/lib/libmyodbc5.so

Смотрим расположение конфиг файлов:

# odbcinst -j

unixODBC 2.3.1
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2

Правим /usr/local/etc/odbcinst.ini

[MySQL]
Description=ODBC for MySQL
Driver=/usr/local/lib/libmyodbc5.so
UsageCount=20001

Инсталим драйвер:

# odbcinst -i -d -f /usr/local/etc/odbcinst.ini

Правим /usr/local/etc/odbc.ini:

[mysql-odbc-ini-asterisk]
Driver=MySQL
SERVER=127.0.0.1
PORT=3306
DATABASE=asterisk
USER=asterisk
PASSWORD=password
OPTION=4194304

Проверяем список доступных DSN:

# odbcinst -s -q

[mysql-odbc-ini-asterisk]

Настраиваем конфиги в Asterisk

/usr/local/etc/asterisk/cel.conf:

[general]
enable=yes
;apps=dial,park
;events=APP_START,CHAN_START,CHAN_END,ANSWER,HANGUP,BRIDGE_START,BRIDGE_END
apps=all
events=all
dateformat = %F %T

[manager]
enabled=no

[radius]

В /usr/local/etc/asterisk/cel_custom.conf раскомментируем секцию [mappings].
Проверим наличие директории /var/log/asterisk/cel-custom, если её нет то создадим ей и не забываем установить необходимые права, чтобы asterisk смог осуществить запись.

/usr/local/etc/asterisk/res_odbc.conf:
[asterisk-res-odbc]
enabled => yes
dsn => mysql-odbc-ini-asterisk
username => asterisk
password => password
pre-connect => yes

/usr/local/etc/asterisk/cel_odbc.conf:
[first]
connection=asterisk-res-odbc
table=cel
loguniqueid=yes

Создаем таблицу в базе:

CREATE TABLE IF NOT EXISTS `cel` (
  `id` int(11) NOT NULL auto_increment,
  `eventtype` varchar(30) NOT NULL,
  `eventtime` datetime NOT NULL,
  `cid_name` varchar(80) NOT NULL,
  `cid_num` varchar(80) NOT NULL,
  `cid_ani` varchar(80) NOT NULL,
  `cid_rdnis` varchar(80) NOT NULL,
  `cid_dnid` varchar(80) NOT NULL,
  `exten` varchar(80) NOT NULL,
  `context` varchar(80) NOT NULL,
  `channame` varchar(80) NOT NULL,
  `src` varchar(80) NOT NULL,
  `dst` varchar(80) NOT NULL,
  `channel` varchar(80) NOT NULL,
  `dstchannel` varchar(80) NOT NULL,
  `appname` varchar(80) NOT NULL,
  `appdata` varchar(80) NOT NULL,
  `amaflags` int(11) NOT NULL,
  `accountcode` varchar(20) NOT NULL,
  `uniqueid` varchar(32) NOT NULL,
  `linkedid` varchar(32) NOT NULL,
  `peer` varchar(80) NOT NULL,
  `userdeftype` varchar(255) NOT NULL,
  `eventextra` varchar(255) NOT NULL,
  `userfield` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `uniqueid_index` (`uniqueid`),
  KEY `linkedid_index` (`linkedid`)
);

Перезапускаем:
# asterisk -r
asterisk*CLI> module reload res_odbc.so
— Reloading module ‘res_odbc.so’ (ODBC resource)
== Parsing ‘/usr/local/etc/asterisk/res_odbc.conf’: == Found
[Sep 18 10:05:59] NOTICE[84181]: res_odbc.c:1531 odbc_obj_connect: Connecting asterisk-res-odbc
[Sep 18 10:05:59] NOTICE[84181]: res_odbc.c:1563 odbc_obj_connect: res_odbc: Connected to asterisk-res-odbc [mysql-odbc-ini-asterisk]
[Sep 18 10:05:59] NOTICE[84181]: res_odbc.c:920 load_odbc_config: Registered ODBC class ‘asterisk-res-odbc’ dsn->[mysql-odbc-ini-asterisk]
[Sep 18 10:05:59] DEBUG[84181]: res_odbc.c:1504 odbc_obj_disconnect: Database handle 0x2a9a6000 deallocated

asterisk*CLI> module reload cel_odbc.so
— Reloading module ‘cel_odbc.so’ (ODBC CEL backend)
== Parsing ‘/usr/local/etc/asterisk/cel_odbc.conf’: == Found
— Found CEL table cel@asterisk-res-odbc.

asterisk*CLI> module reload cel_custom.so
— Reloading module ‘cel_custom.so’ (Customizable Comma Separated Values CEL Backend)
== Parsing ‘/usr/local/etc/asterisk/cel_custom.conf’: == Found

Проверяем:
asterisk*CLI> cel show status
CEL Logging: Enabled
CEL Tracking Event: ALL
CEL Tracking Event: CHAN_START
CEL Tracking Event: CHAN_END
CEL Tracking Event: HANGUP
CEL Tracking Event: ANSWER
CEL Tracking Event: APP_START
CEL Tracking Event: APP_END
CEL Tracking Event: BRIDGE_START
CEL Tracking Event: BRIDGE_END
CEL Tracking Event: CONF_START
CEL Tracking Event: CONF_END
CEL Tracking Event: PARK_START
CEL Tracking Event: PARK_END
CEL Tracking Event: BLINDTRANSFER
CEL Tracking Event: ATTENDEDTRANSFER
CEL Tracking Event: TRANSFER
CEL Tracking Event: HOOKFLASH
CEL Tracking Event: 3WAY_START
CEL Tracking Event: 3WAY_END
CEL Tracking Event: CONF_ENTER
CEL Tracking Event: CONF_EXIT
CEL Tracking Event: USER_DEFINED
CEL Tracking Event: LINKEDID_END
CEL Tracking Event: BRIDGE_UPDATE
CEL Tracking Event: PICKUP
CEL Tracking Event: FORWARD
CEL Tracking Application: all
CEL Event Subscriber: ODBC CEL backend
CEL Event Subscriber: CEL Custom CSV Logging

asterisk*CLI> odbc show

ODBC DSN Settings
——————

Name: asterisk-res-odbc
DSN: mysql-odbc-ini-asterisk
Last connection attempt: 1970-01-01 03:00:00
Pooled: No
Connected: Yes

После чего при прохождении вызовов должна будет заполняться таблица cel в БД asteriskб так же файл /var/log/asterisk/cel-custom/Master.csv.

Описание: CEL Events and Fields

Существует возможность генерить свои event`ы: CELGenUserEvent Application:

asterisk*CLI> core show application CELGenUserEvent

  -= Info about application 'CELGenUserEvent' =-

[Synopsis]
Generates a CEL User Defined Event.

[Description]
A CEL event will be immediately generated by this channel, with the supplied
name for a type.

[Syntax]
CELGenUserEvent(event-name[,extra])

[Arguments]
extra
    Extra text to be included with the event.

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор:  Николаев Дмитрий (virus (at) subnets.ru

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 1, среднее: 5,00 из 5)
Loading...Loading...
Отправить на почту Отправить на почту

Столкнулись с проблемой в Asterisk 1.8 при auto-dial out.

Честно сказать не знаю то ли мы такие «везучие», то ли лыжи не едут, но в очередной раз мы наступаем на грабли о которых гугл и великий ALL толком ничего «сказать» не может. У всех все типа работает и если есть похожее, то оно решается путем чтения мануала до полного просветления.

Имеем:

  • Virtualbox 4.0.12
  • Freebsd 8.1-RELEASE
  • Asterisk 1.8.17.0

В очередно раз появилась задача поднять Asterisk, нужно это для предоставления услуг IP-АТС для физиков.

Ранее мы ставили Asterisk 1.4, а тут решили что пора бы уже попробовать перейти на версию 1.8. Сказано — сделано.

Установка прошла как обычно, без проблем. После настройки, установки собственного web-интерфейса управления астериском и небольших изменений в виду некоторых отличий конфигов версии 1.8 от 1.4 мы приступили к тестированию.
Было обнаружено, что не работают функции callback, email2fax, web2fax.  Все эти функции упираются в одну точку и имя ей auto-dial out, генерация call файлов для совершения автоматического исходящего вызова.
Начинаем разбираться. Запускаем астериск, заходим в консоль и включаем verbose:
# asterisk -r
aster*CLI> core set verbose 3
Verbosity is at least 3

Звоним на callback номер, где после проверки php скрипт генерит call-файл для совершения обратного вызова и отправляет его в /var/spool/asterisk/outgoing для непосредственно совершения вызова и зрим в консоль:
aster*CLI> [Oct 17 12:49:49] WARNING[35623]: pbx_spool.c:258 apply_outgoing: At least one of app or extension must be specified, along with tech and dest in file /var/spool/asterisk/outgoing/callback_1_813.call aster*CLI>
[Oct 17 12:49:49] WARNING[35623]: pbx_spool.c:419 scan_service: Invalid file contents in /var/spool/asterisk/outgoing/callback_1_813, deleting

Называется приехали… Сначала мы подумали что из-за разницы в версиях астера есть какое то отличие в синтаксисе call файла.

После прочтения auto-dial out заново стало понятно что это не так. Отличий нет. Хм….

Едем далее. Убираем из скрипта автоперемещение call файла в /var/spool/asterisk/outgoing и кладем его в созданную диру /var/spool/asterisk/outgoing-test и смотрим на результат генерации:
Channel: LOCAL/005@users_813_clientID_1
Callerid: 813
MaxRetries: 5
RetryTime: 15
WaitTime: 60
Context: callback_813_clientID_1
Extension: s
Priority: 1

Абсолютно нормальный call файл. Берем и копируем call файл руками:
# /bin/cp /tmp/aster/callback_1_813.call /var/spool/asterisk/outgoing/
И о чудо, астер уже не ругается в консоли и спокойно начинает обрабатывать файл и совершает исходящий вызов. Хм……
Тестим исходящий факс, где call файл уже генерится perl скриптом. Та же ситуёвина. При перемещении call файла в /var/spool/asterisk/outgoing скриптом в консоли астера идет ругань на call файл, а при копирования файла руками все ОК.
Хм….. снова приехали…..
Включаем дебаг:
aster*CLI> core set debug 9
Не помогает ничем, более детально проблема так и не описана. Чешем репу… гуглим… есть похожие случаи, но все равно не то что у нас.
Начинаем строить предположения:
а) Астер начинает обрабатывать call файл в соответствии с датой модификации файла (mtime). Проблема с touch (который сдвигает дату модификации call файла перед перемещением в outgoing) ?
б) проблема с правами на файл ?

Не буду подробно расписывать весь мозговой и ручной процесс, ибо это долго, а напишу вкратце.
Проверяем догадку «а»:
Смотрим какие у нас даты после создания call файла:
# stat /var/spool/asterisk/outgoing-test/callback_1_813.call
72 47370 -rw-r--r-- 1 asterisk asterisk 191847 238 "Oct 17 14:34:50 2012" "Oct 17 14:30:32 2012" "Oct 17 15:19:02 2012" "Oct 17 14:29:50 2012" 16384 4 0 callback_1_813.call

Даты перечисляются в таком порядке: a, m, c, B.

  • a — access time, время последнего доступа к файлу
  • m — modificatiom time, время последнего изменения файла
  • c — create time, дата создания файла
  • B — birth time of the inode, дата дескриптора

Как видно из вывода stat даты разные и сдвинуты во времени относительно СЕЙЧАС в будущее, напомню что это делается в скрипте генерации call файла командой touch.
Вывод: тут все ОК.

Проверяем догадку «б»:
какие права на файл не поставь, от какого юзера asterisk не запусти — результат тот же — в консоле астера:
At least one of app or extension must be specified, along with tech and dest in file
Мда…. asterisk запущенный от пользователя root не может прочитать файл с владельцем root или asterisk… это уже не в какие ворота….

Ну что ж, здравые идеи закончились и видимо без «напильника» уже не обойтись, т.к. проблему кроме нас самих никто не решит.
Лезем в исходки астера на предмет установления места где идет обработка call файла и его обработка. За обработку call файлов отвечает спулер:

/usr/ports/net/asterisk/work/asterisk-1.8.17.0/pbx/pbx_spool.c.

Открываем его для изучения с места где отпечатывается выше указанные ошибки при обработке call файла и смотрим строчки с номерами, которые печатаются в консоль в сообщении об ошибке: стр. 258 и стр. 419. Приходим к тому что без дебага того что же все же видит астер в call файле не обойтись. Добавляем:
ast_debug( 1, "[%s]: mode: %o, uid: %d, gid: %d, size: %ld, now: %ld, mtime: %ld, atime: %ld, ctime: %ld, birth: %ld\n", filename, st.st_mode, st.st_uid, st.st_gid, (long) st.st_size, (long) now, (long) st.st_mtime, (long) st.st_atime, (long) st.st_ctime, (long) st.st_birthtime );
Чтобы видеть права, пользователя, группу и даты. Запускаем скрипт генерации call файла и зрим в консоль:
[Oct 17 17:58:08] DEBUG[2027]: pbx_spool.c:517 queue_file: [/var/spool/asterisk/outgoing/callback_1_813.call]: mode: 100000, uid: 0, gid: 931, size: 0, now: 1350482288, mtime: 1350482288, atime: 1350482288, ctime: 1350482288, birth: 1350482288
Мда…. Размер файла ноль байт! О как ! Теперь понятно почему астер плюет ошибки при обработке файла, ведь он считает что файл ПУСТОЙ !
Так же смотрим man 2 stat на предмет значения mode и понимаем что права на файл (даже на чтение) отсутствуют у всех ! Так же видно что unixtime даты в полях now, mtime, atime, ctime, birth одинаковы и это текущая дата, а не даты, которые приведены выше в выводе stat /var/spool/asterisk/outgoing-test/callback_1_813.call копируемого файла.
Отсюда появляется догадка «в»:
При копировании call файла скриптом астер не дает файлу докопироваться и пускает его в обработку и анализу ДО того как он полностью перемещается в /var/spool/asterisk/outgoing.
Проверяем догадку «в»:
Ищем решение и оно нашлось достаточно быстро и достаточно тривиальное: «попросить» астер «заснуть» на 30 мс перед тем как хапать файл.
Делаем добавление в функции static void queue_file(const char *filename, time_t when) вызова usleep( 30000 ); перед if (stat(filename, &st)) { (в оригинальном исходном коде этот условный переход расположен в строке 484) и снова смотрим в консоль:
[Oct 17 17:58:08] DEBUG[2027]: pbx_spool.c:517 queue_file: [/var/spool/asterisk/outgoing/callback_1_813.call]: Data BEFORE usleep: mode: 100000, uid: 0, gid: 931, size: 0, now: 1350482288, mtime: 1350482288, atime: 1350482288, ctime: 1350482288, birth: 1350482288
[Oct 17 17:58:08] DEBUG[2027]: pbx_spool.c:532 queue_file: [/var/spool/asterisk/outgoing/callback_1_813.call]: Data AFTER usleep: mode: 100644, uid: 931, gid: 931, size: 153, now: 1350482288, mtime: 1350482298, atime: 1350482298, ctime: 1350482288, birth: 1350482288

Называется «почувствуйте разницу!».

Права и даты в строке выводимой после usleep уже правильные и соответствуют копируемому файлу.

И снова чудо ! Действительно этой задержки перед обработкой оказалось достаточно для завершения полного копирования call файла и он начал нормально обрабатываться asterisk`ом уже без ругани.

Вот такая вот история. Надеемся что кому нить поможет если он столкнется с похожей ситуёвиной.

Найти ответ на вопрос «Почему при копированием скриптом астер не дает файлу докопироваться, а при копировании руками все ОК ?»  мы так и не сумели. Если у кого то есть предположения, то милости просим в комменты к статье.

Ну и напоследок:
Мы немного расширили режим отладки обработки call-файлов. Теперь при наложении нашего патча и указании вывода дебага (core set debug 1) будем видеть всю «историю процесса».
Пример:
[Oct 17 17:58:08] DEBUG[2027]: pbx_spool.c:765 scan_thread: Directory changed, rescan
[Oct 17 17:58:08] DEBUG[2027]: pbx_spool.c:517 queue_file: [/var/spool/asterisk/outgoing/callback_1_813.call]: Data BEFORE usleep: mode: 100000, uid: 0, gid: 931, size: 0, now: 1350482288, mtime: 1350482288, atime: 1350482288, ctime: 1350482288, birth: 1350482288
[Oct 17 17:58:08] DEBUG[2027]: pbx_spool.c:532 queue_file: [/var/spool/asterisk/outgoing/callback_1_813.call]: Data AFTER usleep: mode: 100644, uid: 931, gid: 931, size: 153, now: 1350482288, mtime: 1350482298, atime: 1350482298, ctime: 1350482288, birth: 1350482288
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:146 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: Fresh data: mode: 100644, uid: 931, gid: 931, size: 153, mtime: 1350482298, atime: 1350482298, ctime: 1350482288, birth: 1350482288
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:147 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: Read content
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:181 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: line 1: Channel: LOCAL/005@users_813_clientID_1
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:181 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: line 2: Callerid: 813
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:181 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: line 3: MaxRetries: 5
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:181 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: line 4: RetryTime: 15
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:181 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: line 5: WaitTime: 60
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:181 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: line 6: Context: callback_813_clientID_1
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:181 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: line 7: Extension: s
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:181 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: line 8: Priority: 1
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:277 apply_outgoing: [/var/spool/asterisk/outgoing/callback_1_813.call]: processed 8 lines
[Oct 17 17:58:18] DEBUG[2027]: pbx_spool.c:291 safe_append: Outgoing LOCAL/005@users_813_clientID_1: StartRetry

-- Attempting call on LOCAL/005@users_813_clientID_1 for s@callback_813_clientID_1:1 (Retry 1)

...

[Oct 17 17:58:23] NOTICE[2027]: pbx_spool.c:388 attempt_thread: Call completed to LOCAL/005@users_813_clientID_1
[Oct 17 17:58:23] DEBUG[2027]: pbx_spool.c:765 scan_thread: Directory changed, rescan

Т.е. теперь видны не только права и даты ДО и ПОСЛЕ, но и само содержимое call файла, которое хпнул asterisk.

Наш патч можно поместить прямо в порт /usr/ports/net/asterisk/files и пересобрать астер.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Авторы:  Панфилов Алексей (lehis (at) subnets.ru) и Николаев Дмитрий (virus (at) subnets.ru)

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 6, среднее: 3,67 из 5)
Loading...Loading...
Отправить на почту Отправить на почту

Не так давно поставили очень удобный gsm-voip шлюз на 2 sim и 2 fxo  addpac GS1002 для работы в связке с Asterisk.

До этого работал addpac AP1100F для оцифровки входящих аналоговых линий, они работают под одной OS, так что конфиг похожий на AP1100f:

GS1002# show running-config

# навесим IP на wan:
interface FastEthernet0/0
ip address 10.100.0.248 255.255.255.0
!
! VoIP configuration.
!
!
! Voice service voip configuration.
!
voice service voip
protocol sip
dtmf-relay out-of-band
fax protocol t38 redundancy 0
fax rate 9600
h323 call start fast
h323 call tunnel enable
no call-barring unconfigured-ip-address
no voip-inbound-call-barring enable
!
!
! Voice port configuration.

# тут вешаем на какой номер отправлять входящие звонки на астериск
! GSM
voice-port 0/0
connection plar 377737708
ring number 10
ring detect-timeout 100
ring detect-timer 900
no announcement
no caller-id enable
!
!
! GSM
voice-port 0/1
connection plar 377737709
ring number 10
ring detect-timeout 100
ring detect-timer 900
no announcement
no caller-id enable
!
# fxo порты не исользуем, если надо по образцу выше
! FXO
voice-port 0/2
no caller-id enable
!
!
! FXO
voice-port 0/3
no caller-id enable
!
 # заведем dial-peer destination-pattern по кол портов:
!
dial-peer voice 0 pots
destination-pattern T
port 0/0

!
dial-peer voice 1 pots
destination-pattern T
port 0/1
!
!

# заведем sip cервер с destination-pattern
! Voip peer configuration.
!
dial-peer voice 300 voip
destination-pattern T
# IP sip серевера, куда кидаем входящие звонки

session target ip 10.100.0.1 session protocol sip voice-class codec 1 no vad dtmf-relay info fax protocol t38 redundancy 0 fax rate 9600 ! ! ! ! ! # выставим 711alaw кодек приоритетным ! Codec classes configuration. ! voice class codec 1 codec preference 1 g711alaw ! ! ! ! SIP UA configuration. ! sip-ua user-register sip-server 10.100.0.1 register e164
На аддпаке всё, если есть нюансы можно смотреть дебаг:

GS1002# debug voip call

GS1002# terminal monitor

 

На Астериске:

В  дефаулт секции в  extensions.conf укажем default контекст:

[general]
context=INBOUND

в конексте INBOUND обработаем входящие вызовы с шлюза

[INBOUND]

exten => 377737708,1,Goto(INBOUND,3777377,1)
exten => 377737709,1,Goto(INBOUND,3777377,1)

Для исходящих вызовов в конексте исходящих звонков в  extensions.conf просто кидаем вызов на IP шлюза 10.100.0.248:

exten => _XXXXXXXXXX,1,Dial(SIP/${EXTEN}@10.100.0.248,90,r)

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

Автор: stalex

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 5, среднее: 4,40 из 5)
Loading...Loading...
Отправить на почту Отправить на почту

Возможности создаваемой системы:

  • Отправка факсов с windows машин в локальных доверенных сетях
  • Отправка факсов с почты
  • Отправка факсов с web-интерфейса
  • Уведомление о состоянии отправленных факсов по почте/сообщения по сети индивидуальному/групповому пользователю
  • Прием факсов и распечатка на принтере
  • Доступность списка полученных факсов через сетевую директорию (в нашем случае samba)
  • Доступность с писка полученных факсов через web-интерфейс
  • Здесь сильно нехвататет:

  • dialup доступ к системе на случай аварии
  • Использования голосовых функций модема при отправке и приеме, т.к. у меня просто нет такого модема
  • Установлена Freebsd 7.3-stable, hylafax-6.0.4_1.
    Для работы с почтой:

    • Любой MTA (я буду использовать exim)

    Для работы в виндовой сетке

    • samba
    • cups/lpr
    • /usr/ports/print/hplip — драйвера для моего HP принтера

    Для работы через веб интерфейс:

    • apache22-itk
    • php5
    • mysql
    • phpmyadmin
    • cd /usr/ports/databases/pear-MDB2_Driver_mysql
    • pear-1.9.0
    • PHP PEAR 5 including MDB2_driver_mysql, Mail and Mail_Mime
    • PECL FileInfo
    • PHP mbstring — for improved UTF-8 sorting support (optional)
    • PHP MySQL 5
    • MySQL server 4.1.12 or better (see Important Notes below)
    • ImageMagick
    • ghostscript
    • libtiff
    • netpbm-devel
    • libungif
    • sudo

    Характеристики железа, на котором все это работает:

    1. pentium3-1Ghz/512Mb/40Gb hdd
    2. 4 модема courier
    3. МУльтикарта mosChip nm9835

    У меня установлена мультикарта для работы 2 модемов и можно подгрузить puc модуль, но модемы у меня упорно не виделись, так что тем, кто использует мультикарты, надо собрать ядро с device puc.

    Все поставлено, можно начинать настройку.

    Настройка hylafax
    Команды:

    • faxsetup — сделает общие настройки факс- сервера.
    • faxaddmodem — позволит добавить модем

    Файлы (все конфиги находятся в /var/spool/hylafax/etc):

  • FaxDispatch
    • FILETYPE=tif;
      SENDTO=mail@your-server.ru;
  • FaxNotify
    • NOTIFY_FAXMASTER=yes;
      RETURNFILETYPE=tif
  • В файл конфига модема:
    • FaxrcvdCmd: «bin/faxrcvd.php»
      DynamicConfig: «bin/dynconf.php»
      NotifyCmd: «bin/notify.php «
  • В файл /etc/ttys
    • cuad0  «/usr/local/sbin/faxgetty»  unknown on insecure
      ln -s /var/spool/hylafax/bin/ps2fax /var/spool/hylafax/bin/ps2fax.gs
      ln -s /var/spool/hylafax/bin/pdf2fax /var/spool/hylafax/bin/pdf2fax.gs

    —————————————————————————————————————
    Настроим веб сервер.

    Т.к. сервер будет исполнять системные команды, я предпочел использовать apache22 с патчем itk. Это позволит мне ограничить работу виртуального хоста в системе действиями от непривелигированного пользователя uucp, например. Для активации патча необходимо сделать:
    # sudo make WITH_MPM=itk -C /usr/ports/www/apache22/

    Этот рецепт можно также использовать на собственном виртуальном хостинге, но следует учитывать, что apache22-itk работает примерно в 5 раз медленнее простого апача, так что может это кому-то пойдет только во вред. Мне нет, у меня нет больших нагрузок и я решил попробовать что-то необычное

    ServerAdmin it@your-server.ru
    DocumentRoot «/usr/local/www/avantfax»
    ServerName fax.your-server.ru
    ErrorLog «/var/log/fax-error_log»
    CustomLog «/var/log/fax-access_log» common
    # Включилась паранойя, и я изменил все запросы с http на https
    RewriteEngine on
    RewriteCond %{SERVER_PORT} ^80$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
    # Настроим от чьего имени будет работать этот виратуальный хост

    AssignUserId uucp uucp

    # Тут настроим работу php
    php_admin_value upload_tmp_dir /usr/local/www/avantfax/tmp
    php_admin_flag safe_mode off # Обязательно, иначе не будет работать avantfax, указываю не в глобальной конфигурации, чтобы остальные вируальные хосты работали в сейвмоде
    php_admin_flag display_errors on # Посмотрим будут ли ошибки, потом можно отключить
    php_admin_value doc_root /usr/local/www/avantfax
    php_admin_value user_dir «www»
    php_admin_value open_basedir «/usr/local/www/avantfax:/usr/local/share/pear:/var/spool/hylafax:/usr/local/bin» # Разрешим этому вируальному хосту испольнять код-пхп в определенных директориях.
    php_admin_value session.save_path /usr/local/www/avantfax/tmp
    php_admin_value memory_limit «64M»
    php_flag max_execution_time 60

    —————————————————————————————————————
    Делаем веб морду

    0. Качаем архив с скриптами http://downloads.sourceforge.net/project/avantfax/avantfax-3.2.2.tgz?use_mirror=ignum

    1. Этот скрипт написан для разных систем, поэтому сперва изменим пути в нескольких скриптах, или создадим символические ссылки.

    Я предпочитаю сменить пути в файлах:
    avantfax/includes/faxrcvd.php, notify.php, remold.php, faxcover.php, phb.php

    Создадим базу вебморды нашей факс машины
    # mysql -uroot -p < create_user.sql
    # mysql -uavantfax -ppassword avantfax < create_tables.sql

    2. Приведем avantfax/includes/local_config.php в соответстви с нашей системой:
    cp /usr/local/www/avantfax/avantfax/includes/local_config-example.php /usr/local/www/avantfax/avantfax/includes/local_config.php

    Опишу необходимые настройки в local_config.php:

  • Ищем $BINARYDIR = ‘/usr/bin’;, меняем на $BINARYDIR = ‘/usr/local/bin’;
  • $dft_config_lang поставим ru вместо en
  • $HYLAFAX_PREFIX
  • 3. # sudo chmod -R 777 tmp faxes templates/admin_theme/templates_c и templates/main_theme/templates_c

    4. Сделаем символическую ссылки на наши скрипты:

  • # ln -s /usr/local/www/avantfax/includes/faxrcvd.php /var/spool/hylafax/bin/faxrcvd.php
  • # ln -s /usr/local/www/avantfax/includes/dynconf.php /var/spool/hylafax/bin/dynconf.php
  • # ln -s /usr/local/www/avantfax/includes/notify.php /var/spool/hylafax/bin/notify.php
  • 5. Отредактируем конфигурацию модема (первый модем в моей системе /dev/cuad0):
    # vi /var/spool/hylafax/etc/config.cuad0

      FaxrcvdCmd: bin/faxrcvd.php
      DynamicConfig: bin/dynconf.php
      UseJobTSI: true

    6. # vi /var/spool/hylafax/etc/config

      NotifyCmd: bin/notify.php

    7. Заменим стандарный faxcover на авантфаксовый:

      # mv /usr/bin/faxcover /usr/bin/faxcover.old
      # ln -s /usr/local/www/avantfax/avantfax/includes/faxcover.php /usr/local/bin/faxcover

    8. Настроим управление очередью факса от имени нашего веб сервера (добавим аккаунт в фаил hosts.faxd uucp). Именно поэтому я использую апач c патчем itk, с ним легко можно ограничить действия виртуального хоста в системе. Это нужно для того, чтобы администратор системы был юзер hylafax, от имени которого работает вся наша система:

      # /usr/sbin/faxadduser -a my_password apache
      # /usr/sbin/faxdeluser localhost
      # /usr/sbin/faxdeluser 127.0.0.1
      # echo 127.0.0.1 >> /var/spool/hylafax/etc/hosts.hfaxd

    Помните , что указанный пароль используется в файле local_config.php as $FAXRMPWD.

    9. Добавим два скрипта от рута в крон (/etc/crontab). Один нужен для создания адресной книги, а второй удаляет все временные файлы, которые остают после заливки файлов юезрами в факс-машину через веб морду:

      0 * * * * /var/www/avantfax/includes/phb.php
      0 0 * * * /var/www/avantfax/includes/avantfaxcron.php -t 2

    10. Настроим возможность выполнения некоторых команд в системе от имени root, но с правами юзера hylafax (/usr/local/etc/sudoers):
    hylafax ALL = NOPASSWD: /sbin/reboot, /sbin/halt, /usr/local/sbin/faxdeluser, /usr/local/sbin/faxadduser -u * -p * *

    11. Теперь можно перезапустить машину для проверки, что все само стартует в случае перегрузки и пробовать войти в вебинтерфейс avantfax:

    http://fax.your-server.ru/admin/

    Если все в порядке, то появится запрос на ввод логина/пароля.

    ПО-умолчанию: admin/password. При первом входе будет предложено сменить пароль на что-то иное.

    Первое что необходимо сделать это создать всех пользователей системы и все модемы, распределить их на группы в соответвии с желаемымой маршрутизацией.

    Например:

    • device: cuad0
    • alias: dep1
    • contact: faxdep1@your-server.ru

    Теперь каждый факс, пришедший на факс cuad0, будет отправлен в pdf на адрес faxdep1@your-server.ru.

    Настроить как будет рассылать MTA эти письма, вы сами решайте. У нас пересылается на секретаря. Остальные модемы настраиваются аналогично.

    На всякий случай, импортировать уже принятые факсы в вебморду можно следующим образом:

      # cd /var/spool/hylafax; for i in `ls recvq/*`; do bin/faxrcvd.php $i ttyS0; done

    Для импорта отправленных:

      # cd /var/spool/hylafax; for i in `ls doneq/q*`; do bin/notify.php $i done :30; done

    —————————————————————————————————————
    Настройка самба для расшаривания папки с принятыми факсами:

    [Fax_Rec]
    comment = Incoming Faxes
    browseable = yes
    writable = yes
    path = /var/spool/hylafax/recvq
    public = yes

    Зная умения пользователей, подстрахуемся сетевой корзиной:
    vfs objects = recycle full_audit
    recycle:repository = /usr/home/data/fax/.killed
    recycle:keeptree = yes
    recycle:versions = yes

    —————————————————————————————————————
    Автоматическое распечатывание cups принятых факсов.

    Установим и настроим cups.
    Я поставил вот такие пакеты: cups-base-1.4.2_4, cups-client-1.4.2_4, cups-image-1.4.2_4, cups-pstoraster-8.15.4_5, cups-samba-6.0_3, cups-smb-backend-1.0_3.
    Последние 2 нужны были для публикации притеров посредством самбы. Некоторые из отправляющих факсы с клиента программ работают через самба-принтер. Так что возможно многим оно и не понадобится. Далее установим hplip-2.8.2_7 — это драйвера для принтеров HP.

    Установка закончена, теперь настраиваем:

    В файле /usr/local/etc/cups/cupsd.conf делаем следующие изменения:

      Listen 127.0.0.1:631
      Listen :631

    Остальное я не правил, меня устроил дефолтный конфиг. Теперь добавим принтер:

      1. http://local_address:631/
      2. Нажимаем на Printers.
      3. Add Printer. Вводим имя root и его пароль.
      4. Name: имя вашего принтера (название может быть любое). Все остальное не заполняем. Continue.
      6. Не забудьте сделать печать тестовой страницы. Если увидели картинку, то все в порядке.
      7. Далее я долго мучался, почему мой принтер не печататет и нашел ответ. Надо сделать симлинки от старого lpr:
      # cd /usr/bin
      # mv lp lp.bak
      # mv lpq lpq.bak
      # mv lpr lpr.bak
      # mv lprm lprm.bak
      # ln -s /usr/local/bin/lp /usr/bin/lp
      # ln -s /usr/local/bin/lpq /usr/bin/lpq
      # ln -s /usr/local/bin/lpr /usr/bin/lpr
      # ln -s /usr/local/bin/lprm /usr/bin/lprm
      У меня возникла проблема с принтером принтером HP 2055dn, его драйверов не было, поэтому я воспользовался драйвером входящим в состав порта hplip-2.8.2_7 и положил его в /usr/local/etc/cups/ppd/HP_2055.ppd. Больше проблем не было,я и не настраивал больше ничего тут. Таким образом идем далее..

      Для автоматического распечатывания пришедших факсов используйте код в файле

      # /usr/local/bin/tiff2ps -1 $1 | /usr/bin/lpr

    Ваш принтер должен быть PostScript своместимый. Можно указать явно размер бумаги, это необходимо для некоторых типов принтеров:

      # /usr/bin/tiff2ps -1 -h 11.1082 -w 7.8543 $1 | /usr/bin/lpr

    Мы используем для получения аванфаксовый файл faxrcvd.php поэтому в конфиге надо выставить

      $PRINTFAXRCVD = true;
      $PRINTFAX2PS  = ‘/usr//local/bin/fax2ps’;

    —————————————————————————————————————
    Рассмотрим работу с несколькими модемами и принтерами.

    Тут все очень просто. Т.к. наша система плотно связана с avantfax, то и настройки мы должны проводить в неё.Идем в админку http://fax.your-server.ru/admin/. Тут Заходим в пункт «параметры модемов» и заполняем: название модем, на какой принтер печатать, какой номер. Собственно после этого у вас должно заработать как надо.
    —————————————————————————————————————
    Что делать тем, кто не хочет установить avantfax?

    Вполне законное желание, во многих компания к этому уже пришли. Пропустите все изменения, которые связаны с avantfax.
    Далее вам необходимо поместить примерно такой код в FaxDispatch:

      case «$DEVICE» in cuad0)
      SENDTO=name@your-server.ru
      PRINTER=lj2015
      ;;
      esac

    —————————————————————————————————————
    Отправка факсов с рабочих мест:
    Скачаем вот это http://prdownloads.sourceforge.net/winprinthylafax/WinprintHylaFAX-1.2.9.exe?download, и несколько автоматизируем процесс настройки клиентов таким reg-файлом:

      reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v Username /t reg_sz /d %username% /f
      reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v Password /t reg_sz /d PassWord /f
      reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v DefaultEmail /t reg_sz /d %username%@your-server.ru /f
      reg add «HKLM\SYSTEM\ControlSet001\Control\Print\Monitors\Winprint Hylafax\Ports\HFAX1:» /v AddressBookPath /t reg_sz /d %userprofile% /f

    Этот кусок реестра форточек позволяет настроить параметры winprint, для настройки уведомлений и авторизированного доступа к системе. Теперь пользователь может отправить факс простым распечатыванием на специальный факсовый принтер. Впрочем, можно обойти все машины и настроить факсовый притер вручную.
    —————————————————————————————————————
    Работа с почтовым сервером

    Мозга до sendmail мне никогда не хватало, поэтому в /etc/mail/mailer.conf:

      sendmail /usr/local/sbin/exim
      send-mail /usr/local/sbin/exim
      mailq /usr/local/sbin/exim -bp
      newaliases /usr/local/sbin/exim -bi
      hoststat /usr/local/sbin/exim
      purgestat /usr/local/sbin/exim

    Транспорт
    faxmail:
    driver = accept
    condition = ${if eq{$local_part}{fax}{yes}{no}}
    transport = faxmail
    no_more

    faxmail:
    driver = pipe
    command =»/usr/local/bin/faxmail -n -t done -d $h_subject $sender_address»

    Теперь при посылке почты на fax@your-server.ru ексим выполнит отправку факса. Соответвенно, если у вас почтовый сервер и сервер с факсами разные, то на основном сервере надо настроить пересылку почты на смтп нашей факсмашины.

    Дальше больше и интереснее.
    Теперь рассмотрим работу hylafax с asterisk и iaxmodem. Как настраивать астреиск, тема другой статьи, поэтому я предполагаю, что он уже настроен у вас.
    Итак, устанавливаем /usr/ports/net/iaxmodem. Создаем конфиг программного модема /usr/local/etc/iaxmodem/ttyIAX0:
    mode 660
    port 4570
    refresh 300
    server 127.0.0.1
    peername iaxmodem0
    secret parolka
    cidname subnets.ru
    cidnumber 203
    codec alaw

    В /etc/rc.conf для автостарта:
    iaxmodem_enable=»YES»

    Командой faxaddmodex ttyIAX0 добавим новый модем и настроим его. В итоге получим конфиг модема IAX0 для hylafax.

    Настроим iax.conf для астериска:
    [general]
    bindport=4569
    bindaddr=127.0.0.1
    bandwidth=low
    disallow=lpc10
    jitterbuffer=no
    forcejitterbuffer=no
    autokill=yes

    [iaxmodem0]
    type=friend
    username=iaxmodem0
    context=office
    secret=parolka
    host=127.0.0.1
    port=4570
    qualify=yes
    disallow=all
    allow=ulaw
    trunk=no

    Ну и sip.conf:
    exten => 203,1,Set(LANGUAGE()=ru)
    exten => 203,n,Dial(IAX2/iaxmodem0/${EXTEN},10,r)

    Несколько советов по управлению факс-машиной:

      Очистка факс машины:
      # cd /var/spool/hylafax/
      # rm archive/* docq/* log/* recvq/* sendq/* tmp/*

    З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

    Автор: makky
    Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 3,75 из 5)
    Loading...Loading...
    Отправить на почту Отправить на почту

    Кто то уже знает, кто-то нет и спит спокойно, точнее пока что спит спокойно.

    Как давно вы читали логи своего Asterisk сервера ?

    Некоторые из вас или уже видели или ещё увидят в логах строчки:

    • Registration from ‘»100″<sip:100@sip.mydomain.ru>’ failed for ‘188.165.215.79’ — No matching peer found
    • Registration from ‘»111″ <sip:111@sip.mydomain.ru>’ failed for ‘188.165.215.79’ — Wrong password

    Догадываетесь к чему они ведут ? К тому что вас сканят и пытаются подобрать пароль к вашим SIP аккаунтам.

    Большинство пользователей безалаберно относятся к своим паролям, это факт, а раз так то проверте что на ваших SIP номерах не стоят пароли аля 123 или 1234.

    Если пароль таки подберут, то вы (или ваш клиент) попадете на деньги, т.к. через вас пустят звонки забугор, например на Кубу или Северную Корею.

    Давайте разберемся как они это делают и попробуем усложнить им жизнь помимо смены паролей к своим SIP аккаунтам.

    В сети есть набор утилит sipvicious:

    The 4 tools that you should be looking at are:svmapsvwarsvcracksvreportsvcrash

    The tools: svmap — this is a sip scanner. When launched against ranges of ip address space, it will identify any SIP servers which it finds on the way. Also has the option to scan hosts on ranges of ports.

    svwar — identifies working extension lines on a PBX. A working extension is one that can be registered. Also tells you if the extension line requires authentication or not.

    svcrack — a password cracker making use of digest authentication. It is able to crack passwords on both registrar servers and proxy servers. Current cracking modes are either numeric ranges or words from dictionary files.

    svreport — able to manage sessions created by the rest of the tools and export to pdf, xml, csv and plain text.

    svlearnfp — allows you to generate new fingerprints by simply running the tool against a host. It will attempt to guess most values and allow you to save the information to the local fingerprint db. Then you can choose to upload it to the author so that it can be added to the database.

    svcrash — responds to svwar and svcrack SIP messages with a message that causes old versions to crash.

    Так вот с их помощью нас и сканят.  Эти же утилиты помогут нам просканить самих себя и  усложнить жизнь уродам жаждущих халявы.

    Начнем с того что скачаем этот набор утилит (сохраненная у нас копия).

    Распакуйте архив в какую нить папку и можно приступать к скану.

    Будет считать что IP-адрес нашего Asterisk сервера это 192.168.1.1  и запустим сканер:

    cd /home/virus/sipvicious

    ./svmap.py -p5060 192.168.1.1 -m INVITE

    Получаем результат:

    | SIP Device        | User Agent   | Fingerprint |
    --------------------------------------------------
    | 192.168.1.1:5060 | Asterisk PBX | disabled    |

    Идем далее, посканим теперь на аккаунты:

    ./svwar.py —force -e100-999 192.168.1.1

    Ответ может быть таким:

    | Extension | Authentication |
    ------------------------------
    | 210       | reqauth        |
    | 300       | reqauth        |
    | 666       | reqauth        |
    | 241       | reqauth        |
    | 242       | reqauth        |
    | 222       | reqauth        |

    Можно ли как то обломать их ? Можно. Для этого отредактируем /usr/local/etc/asterisk/sip.conf и добавим или раскоментируем строчку в секции [general]:

    alwaysauthreject = yes

    Описание:

    When an incoming INVITE or REGISTER is to be rejected, for any reason, always reject with ‘401 Unauthorized’ instead of letting the requester know whether there was a matching user or peer for their request.

    Т.е. наш сервер будет всегда при любых ошибках авторизации будет отвечать «401 Unauthorized» и не сообщать подробностей.

    После изменения sip.conf зайдите в консоль Asterisk`а:

    asterisk -r

    и примените изменения:

    asterisk*CLI> sip reload

    Теперь посканим снова:

    ./svwar.py —force -e100-999 192.168.1.1

    Ответ от сканера изменился и выглядит примерно так:

    WARNING:TakeASip:Bad user = SIP/2.0 401  - svwar will probably not work!
    WARNING:TakeASip:We got an unknown response
    ERROR:TakeASip:Response: 'SIP/2.0 401 Unauthorized\r\n
    Via: SIP/2.0/UDP 192.168.1.1:5061;branch=z9hG4bK-3613016185;received=192.168.1.1;rport=5061\r\n
    From: "100"; tag=31303001333430333334313736\r\n
    To: "100";tag=as47e73e29\r\nCall-ID: 2008271273\r\n
    CSeq: 1 REGISTER\r\n
    User-Agent: Asterisk PBX\r\n
    Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO\r\n
    Supported: replaces\r\n
    WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="3b652f8d"\r\n
    Content-Length: 0\r\n\r\n'

    Как видите списка с номерами более не выдается, то что нам и надо.

    Что ещё мы можем сделать ?

    A. Например закрыть в диал-плане забугорные направления (коды стран), по которым не вы ни ваши пользователи не звонят или вообще перекрыть выход на международку.

    Добавим в  /usr/local/etc/asterisk/extensions.conf в секцию где у вас происходит выход в город:

    exten => _810X.,1,playback(pbx-invalid)

    exten => _810X.,n,Hangup()

    B. Так же мы можем скриптом анализировать логи Asterisk сервера и всех уродов, подбирающих пароль, банить фаирволом (ipfw) сервера.

    Нашу версию подобного скрипта можно увидеть пройдя по ссылке: http://subnets.ru/files/protect_aster.txt

    Инсталляция скрипта:

    1. Сохраните код скрипта на своем сервере

    2. Переименуйте файл в protect_aster.sh

    3. Сделайте скрипт исполняемым:

    chmod a+x protect_aster.sh

    4. Добавте в ваш firewall ipfw правило:

    ipfw add XXX reject ip from «table(56)» to me

    где ХХХ это номер правила.

    Будьте внимательны размещая данное правило, не забаньте сами себя ! Обеспечьте allow правила для своих IP-адресов выше этого правила, чтобы избежать неожиданностей.

    5. Добавте скрипт на исполнение по crontab, отредактируйте /etc/crontab:

    */5    *       *       *       *       root    /full/path/to/script/protect_aster.sh

    Забаненый IP-адрес попадает в таблицу ровно на сутки, через сутки он автоматически будет удален из таблицы.

    C. В /usr/local/etc/asterisk/sip.conf, описывая секции пользователей (их номера) указывайте:

    type=user

    Пароли ставте минимум из 6-ти знаков с использованием букв и цифр.

    Если известно с каких адресов будет авторизовываться пользователь, то будет совсем не лишним указать ACL с перечислением IP-адресов/подсетей из которых разрешено подключение, например:

    [111]
    type=user
    context=users
    disallow=all
    allow = alaw
    reinvite=no
    canreinvite=no
    callerid=User 111
    language=ru
    secret=Xm32rQ
    mailbox=111
    host=dynamic
    deny=0.0.0.0/0
    permit=217.172.16.74/30
    nat=yes

    В данном примере пользователю разрешено подключаться только из подсети 217.172.16.74/30 и запрещено из всех остальных. Не забудьте прописать пароль (secret=Xm32rQ) и в /usr/local/etc/asterisk/users.conf.

    D. Измените план набора номеров для исходящих звонков. Добавте к номеру какой нибудь префикс, например 004 и «отрезайте» его (в моем примере это получается 3 цифры) перед тем как отправить своему провайдеру:
    exten => _0048X.,1,Dial(SIP/${EXTEN:3}@sip-provider,60,rT)

    Т.е. что бы набрать городской номер, пользователь должен набрать 00484951234567, халявщик этого точно знать не может, потому обломится, а мы ему поможем, дописав:
    exten => _8X.,1,playback(pbx-invalid)

    Тут же вы можете оставить свое «доброе» голосовое пожелание для таких уродов. Я так и сделал. высказал все что я о них думаю.

    Надеемся, что эти не хитрые приемы помогут вам остаться при деньгах и сэкономить ваши нервы.

    З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

    З.Ы.Ы. Ваши комментарии и дополнения к статье приветствуются.

    Авторы: Панфилов Алексей (lehis (at) subnets.ru) и Николаев Дмитрий (virus (at) subnets.ru)

    Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 5,00 из 5)
    Loading...Loading...
    Отправить на почту Отправить на почту