AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Перешел на Realtime - проблемы

Newbies/FAQ Forum 11 сообщений -
#1

Перешел на Realtime - проблемы


ПРиветствую перешел на Realtime (mysql) начал заводить пользователей, все они OnHook, но увидел проблему, астер спаммит несколько событий в секунду:
Jan 21 05:17:23] ERROR[5361]: stasis_cache.c:845 caching_topic_exec: Attempting to remove an item from the SIP/1001-cached cache that isn't there: ast_endpoint_snapshot_type SIP/1001

как от этого избавиться, боюсь он мне чего-нибудь переполнит и завалится?
#2

вылечил, всем спасибо.

Вопрос, как включать includes Extension
Например в контекст [phones]
include => ext_calls
include => int_calls

Голову сломал, не знаю как сделать.

А что самое противное он не читает конфигурацию из extentsion.conf при использовании realtime. (игнорирует эти инклуды)
#3

А что в этих контекстах написано?
#4

В этих контекстах прописаны правила на выход в город, входящие и внутренние звонки вот выдержка из mysql:

id context exten priority app appdata
1 default _X. 1 Congestion 10
2 default _X. 2 Hangup

3 incoming_sipnet 878 1 Answer 500
4 incoming_sipnet 878 2 Dial SIP/1001,30
5 incoming_sipnet 878 3 Busy 3
6 incoming_sipnet 878 4 Hangup

7 incoming_sipout 898 1 Answer 500
8 incoming_sipout 898 2 Dial SIP/1001,30
9 incoming_sipout 898 3 Busy 3
10 incoming_sipout 898 4 Hangup

11 internal_calls _1XXX 1 Answer 500
12 internal_calls _1XXX 2 Dial SIP/${EXTEN},30,m
13 internal_calls _1XXX 3 Busy 3
14 internal_calls _1XXX 4 Hangup

18 outgoing_calls _XXXXX. 4 Dial SIP/sipout/${EXTEN},120
15 outgoing_calls _[7­8]XXXXXXXXXX 1 Dial SIP/sipout/${EXTEN},120
16 outgoing_calls _[7­8]XXXXXXXXXX 2 Playback noanswer
17 outgoing_calls _[7­8]XXXXXXXXXX 3 Hangup
-----------------

Соответственно есть контекст [phones] в котором раньше включались все эти контексты так:
[phones]
include => incoming_calls
include => outgoing_calls
include => incoming_sipnet
include => incoming_sipout

После перехода на MYSQL (realtime)в файле extentsions.conf все эти контексты закомментировал и сделал ссылки на БД mysql.

Но непонятно как быть с контекстом [phones] и с includes. Просто тупо вписать те же правила в 1 контекст как-то некрасиво, да и будет на порядок сложнее администрировать.

Как быть?

Added after 1 hours 57 minutes:

всем спасибо, эту проблему тоже решил.
Теперь у меня полный реалтайм, за исключением нескольких статичных фиговин в конфигах.
#5

zotac писал(а):
вылечил, всем спасибо.

zotac писал(а):
всем спасибо, эту проблему тоже решил.

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

Хоккей, не для поощрения, а для народа ради привожу свой extensions.conf
- все трубки прописаны в контексте [phones]
- закомментированные строчки для понимания что происходит.
-------------------------------
[general]
static=yes
writeprotect=no
clearglobalvars=no
allowguest = no

[default]
switch => Realtime/default@extensions
;exten => _X.,1,Congestion(10)
;exten => _X.,2,Hangup

[incoming_sipnet]
switch => Realtime/incoming_sipnet@extensions
;exten => 878,1,Answer(500)
;exten => 878,1, Dial(SIP/1001,30)
;exten => 878,n, Busy(3)
;exten => 878,n, Hangup()

[incoming_sipout]
switch => Realtime/incoming_sipout@extensions

;exten => 898,1,Answer(500)
;exten => 898,n, Dial(SIP/1001,30)
;exten => 898,n, Busy(3)
;exten => 898,n, Hangup()


[outgoing_calls]
switch => Realtime/outgoing_calls@extensions

;exten => _[7-8]XXXXXXXXXX, 1, Dial(SIP/sipout/${EXTEN},120)
;exten => _[7-8]XXXXXXXXXX, n, PlayBack(noanswer)
;exten => _[7-8]XXXXXXXXXX, n, HangUp


[internal_calls]
switch => Realtime/internal_calls@extensions

;exten => _1XXX, 1, Answer()
;exten => _1XXX, n, Dial(SIP/${EXTEN},30,m)
;exten => _1XXX, n, Hangup()

[outgoing_sip]
switch => Realtime/outgoing_sip@extensions

;exten => _XXXXXX., 1, Dial(SIP/sipout/${EXTEN},120)
;exten => _XXXXXX., n, Hangup()

[phones]
switch => Realtime/incoming_sipnet@extensions ;здесь раньше был include => incoming_sipnet
switch => Realtime/incoming_sipout@extensions ;здесь раньше был include => incoming_sipout
switch => Realtime/outgoing_calls@extensions ;здесь раньше был include => outgoing_calls
switch => Realtime/outgoing_sip@extensions ;здесь раньше был include => outgoing_sip
switch => Realtime/internal_calls@extensions ;здесь раньше был include =>internal_calls

Added after 2 minutes:

Перечитывать extensions.conf конечно придется, если вы захотите добавить новый контекст или добавить/удалить include.
Особое внимание при Realtime-изации уделите порядку столбцов в таблице СУБД, например я долго маялся с кодеками только из-за того, что у меня шел сначала столбец allow=ulaw-bla-bla а потом disallow=all, поменял местами - ОК.

Added after 7 minutes:

Если кто подскажет в SQL команду как вытащить параметры создания (create) тех таблиц которые я наделал, то выложу сюда еще и таблицы для REALTIME.

Имеется в виду:
CREATE TABLE Extensions
-- колонка 1
-- колонка 2
-- колонка 3
...
-- колонка n

Added after 2 minutes:

В планах еще прикрутить iVR и CALLBACK

Added after 23 minutes:

Короче опять все нашел Smile

Структура таблицы `cdr`
--

CREATE TABLE IF NOT EXISTS `cdr` (
`calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`clid` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '',
`src` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '',
`dst` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '',
`dcontext` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '',
`channel` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '',
`dstchannel` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '',
`lastapp` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '',
`lastdata` varchar(80) CHARACTER SET latin1 NOT NULL DEFAULT '',
`duration` int(11) NOT NULL DEFAULT '0',
`billsec` int(11) NOT NULL DEFAULT '0',
`start` datetime DEFAULT NULL,
`answer` datetime DEFAULT NULL,
`end` datetime DEFAULT NULL,
`disposition` varchar(45) CHARACTER SET latin1 NOT NULL DEFAULT '',
`amaflags` int(11) NOT NULL DEFAULT '0',
`accountcode` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '',
`userfield` varchar(255) CHARACTER SET latin1 NOT NULL DEFAULT '',
`uniqueid` varchar(32) CHARACTER SET latin1 NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Added after 2 minutes:

Структура таблицы `extensions`
--

CREATE TABLE IF NOT EXISTS `extensions` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`context` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '',
`exten` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '',
`priority` int(6) NOT NULL DEFAULT '0',
`app` varchar(20) CHARACTER SET latin1 NOT NULL DEFAULT '',
`appdata` varchar(128) CHARACTER SET latin1 NOT NULL DEFAULT '',
PRIMARY KEY (`context`,`exten`,`priority`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;

Added after 1 minutes:

Структура таблицы `sip_buddies`
--

CREATE TABLE IF NOT EXISTS `sip_buddies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`disallow` varchar(10) NOT NULL DEFAULT 'all',
`allow` varchar(100) DEFAULT 'gsm;ulaw;alaw;g729;ilbc',
`context` varchar(80) NOT NULL DEFAULT 'phones',
`dtmfmode` varchar(7) DEFAULT NULL,
`host` varchar(31) NOT NULL DEFAULT '',
`insecure` varchar(20) DEFAULT NULL,
`mailbox` varchar(50) DEFAULT NULL,
`musiconhold` varchar(100) DEFAULT NULL,
`directmedia` varchar(5) NOT NULL DEFAULT 'no',
`qualify` varchar(5) NOT NULL DEFAULT 'yes',
`secret` varchar(80) DEFAULT NULL,
`type` varchar(6) NOT NULL DEFAULT 'friend',
`username` varchar(80) NOT NULL DEFAULT '',
`videosupport` enum('yes','no') DEFAULT 'yes',
`name` varchar(50) DEFAULT NULL,
`ipaddr` varchar(20) DEFAULT NULL,
`port` varchar(5) DEFAULT NULL,
`regseconds` int(11) DEFAULT '0',
`lastms` varchar(20) DEFAULT NULL,
`fullcontact` varchar(80) DEFAULT NULL,
`useragent` varchar(20) DEFAULT NULL,
`regserver` varchar(50) DEFAULT NULL,
`callbackextension` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=5

Added after 59 seconds:

Структура таблицы `voicemail_users`
--

CREATE TABLE IF NOT EXISTS `voicemail_users` (
`uniqueid` int(11) NOT NULL AUTO_INCREMENT,
`customer_id` int(11) NOT NULL DEFAULT '0',
`context` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
`mailbox` int(5) NOT NULL DEFAULT '0',
`password` varchar(4) CHARACTER SET latin1 NOT NULL DEFAULT '0',
`fullname` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
`email` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
`pager` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
`stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`uniqueid`),
KEY `mailbox_context` (`mailbox`,`context`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
#7

Так теперь немного подтягиваем Security:

1. В таблице sip-buddies заменить колонку secret на колонку md5secret, просто переименовав ее.
=====
Теперь пароли не будут лежать в открытом тексте. А чтобы сгенерировать их нужно выполнить эти действия:

echo -n "::" | md5sum

Example:
To generate the md5-hash for user 1234 with secret abcd you do:

echo -n "1234:asterisk:abcd" | md5sum

and as result you should get: 4a8e71480c5b1ef0a5d502a8eb98576a

его и вставляем в поле md5secret. При этом в телефонах можно продолжать вводить пароль открытым текстом.
=====
2. Меняем стандартный порт, врятли вы пользуетесь звонками за пределами своей SIP сети.
Настройка порта производится в файле sip.conf в секции [general]:
bindport=5060 => bindport=5172

3. Запрещаем анонимные звонки и излишнюю болтливость Астера:
allowguest=yes => allowguest=no ; Allow or reject guest calls (default is yes)
alwaysauthreject = no => alwaysauthreject = yes
После такой настройки, астериск будет давать одинаковый отбой для любых неверных авторизаций.

4. Делаем фильтр подключений для SIP-клиентов
deny=0.0.0.0/0.0.0.0
permit=10.1.1.1/24
permit=10.1.2.1/24
в базе делаем поле deny и поле permit. В поле permit пишем через ";"

5. Делаем лимит звонков чтобы хакеры не могли звонить одновременно в несколько линий. Обратите внимание что это отбразится и на обычных пользователей:
call-limit=1
Делаем в таблице поле call-limit (INT) и ему присваиваем дефолтное значение 1. Для тех пользователей кому нужно больше - вручную меняем на нужное число.

6. Вырубаем [default] экстеншен
[default]
exten => _X.,1,Hangup

7. Не делаем один универсальный план extension, лучше его детализировать
это очень опасный план: exten => _X.,1,Dial(SIP/${EXTEN}@operator)
лучше его разбить на составные части:
;Москва
exten => _8495XXXXXXX,1, Dial(SIP/${EXTEN}@operator)
exten => _8495XXXXXXX,n, Hangup
exten => _8499XXXXXXX,1, Dial(SIP/${EXTEN}@operator)
exten => _8499XXXXXXX,n, Hangup
exten => _XXXXXXX,1, Dial(SIP/${EXTEN}@operator)
exten => _XXXXXXX,n, Hangup
;Межгород Россия/Мобильные
exten => _8XXXXXXXXXX,1, Dial(SIP/${EXTEN}@operator)
exten => _8XXXXXXXXXX,n, Hangup
-----------------------
Пока все, буду пополнять.

Added after 57 minutes:

8. Убрать лишние модули, например отловил у себя в логах строчку типа:

[Jan 22 14:50:06] NOTICE[19574]: chan_skinny.c:7508 skinny_session: Starting Skinny session from 46.165.220.215
[Jan 22 14:50:06] WARNING[19574]: chan_skinny.c:7568 skinny_session: Skinny packet too large (542393675 bytes), max length(2000 bytes)
[Jan 22 14:50:06] NOTICE[19574]: chan_skinny.c:7615 skinny_session: Skinny Session returned: Success
[Jan 22 14:50:06] NOTICE[19574]: chan_skinny.c:7450 skinny_session_cleanup: Ending Skinny session from unknown at 46.165.220.215
#8

9. Опять по поводу EXTENSIONS подсказали интересную статью http://subnets.ru/blog/?p=1552 где есть еще один забавный момент:
добавьте в своем exten в правилах выхода на город/межгород 2-3 цыферки (которые будут обрезаться правилом), злоумышленник никогда не найдет выход наружу.
Пример:
- Было: exten =>_[7-8]XXXXXXXXXX, 1, Dial(SIP/sipout/${EXTEN},120) выход на Русский межгород и мобильные
- Стало: exten =>_321[7-8]XXXXXXXXXX, 1, Dial(SIP/sipout/${EXTEN:3},120) - теперь пусть резвятся в песочнице
Ну и сделать правило в котором называете эти паразитирующие организмы своими именами:
exten => _8X.,1,playback(ya-bolshe-tak-ne-budu)
#9

Увы, о пишущий.

Таких "умников", которые хотят вас хакнуть, таким образом не вырубишь: они пытаются и 98Х. и 018Х. и .... Вариантов подстановки куча, в зависимости от бота-метода и т.д.

_________________
P4 3.0 + 1Gb CentOS 5.8 Aster 1.8.16
Не люблю gui-сборки: натуральный продукт вкуснее.
И еще: я ПРОФИ так как НЕ ЛЕНЮСЬ читать литературу.
#10

Согласен, но на это нужно время, а значит у вас будет время, чтобы обнаружить и принять меры, если конечно вы интересуетесь вашей системой. А так значительно сократилось количество хрени в логах уже после смены порта. Теперь хакеру нужно сначала найти порт, потом подобрать существующий extention, потом подобрать к нему пароль, потом подобрать context, потом подобрать способ выхода не межгород.

Более половины отвалиться уже на этапе скана портов. А к тому моменту пока кто-то дойдет то последней стадии перебора выхода на межгород Вы уже будете в курсе что вас пытаются ломать.

Ну и как всегда, полезные советы - Вэлкам!
#11
Привет. В личку форум писать не дает. Можешь рассказать, как избавился от "cache that isn't there"?
Выложенный конфиг особо понимания не добавил.