Черный список сетей для Asterisk
После установки Asterisk и вывода шлюза в интернет, сразу же начинаются атаки с попытками подключится и совершить звонки. Чтобы облегчить работу другим системным администраторам, выкладываю черный список сетей.
После того как была внесена последняя сеть, с которой была атака, уже месяц тишины. Конечно со временем злоумышленники будут использовать новые сети, но самостоятельно добавлять в дальнейшем в этот список новые, проблем не будет. Для тех, кто не знает где этот список храниться (у меня web интерфейс на FreePBX 14.0.11):
- заходим в web интерфейс
- Подключение->Firewall
- Services->Blacklist
- asterisk
- asterisk firewall
- freepbx
- asterisk blacklist
Как посмотреть бан ip в астериске
Новичком считается только что прочитавший «Астериск — будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее
Модератор: april22
Сообщений: 11 • Страница 1 из 2 • 1 , 2
fail2ban не банит
manchelsi » 25 ноя 2013, 11:24
пытаются сбрутить сип таким образом
Код: выделить все [2013-11-25 08:14:13] NOTICE[4096][C-00000090] chan_sip.c: Failed to authenticate device 1006;tag=39ddd577 (50.7.255.132:5070)
[2013-11-25 08:16:02] NOTICE[4096][C-00000091] chan_sip.c: Failed to authenticate device 1002;tag=d01912a0 (198.27.87.224:5080)
[2013-11-25 08:27:08] NOTICE[4096][C-00000092] chan_sip.c: Failed to authenticate device 1006;tag=b864db92 (50.7.255.132:5074)
[2013-11-25 08:33:57] NOTICE[4096][C-00000093] chan_sip.c: Failed to authenticate device 1002;tag=845fe5c7 (198.27.87.224:5071)
[2013-11-25 08:40:10] NOTICE[4096][C-00000094] chan_sip.c: Failed to authenticate device 1006;tag=50cc3037 (50.7.255.132:5070)
[2013-11-25 08:51:23] NOTICE[4096][C-00000095] chan_sip.c: Failed to authenticate device 1002;tag=6cdb05c5 (198.27.87.224:5076)
[2013-11-25 08:53:50] NOTICE[4096][C-00000096] chan_sip.c: Failed to authenticate device 1007;tag=82449a32 (50.7.255.132:5076)
[2013-11-25 09:07:16] NOTICE[4096][C-00000097] chan_sip.c: Failed to authenticate device 1007;tag=cda428b3 (50.7.255.132:5078)
[2013-11-25 09:09:18] NOTICE[4096][C-00000098] chan_sip.c: Failed to authenticate device 1002;tag=494276db (198.27.87.224:5073)
[2013-11-25 09:20:51] NOTICE[4096][C-00000099] chan_sip.c: Failed to authenticate device 1007;tag=75017884 (50.7.255.132:5070)
[2013-11-25 09:27:03] NOTICE[4096][C-0000009a] chan_sip.c: Failed to authenticate device 1002;tag=16d86edb (198.27.87.224:5076)
т.е. поочередно меняют ip адрес на запрос. Fail2ban банит в случае, если больше 2x запросов с одного ip по порядку. Как заставить его отправлять в бан это?
manchelsi Сообщений: 46 Зарегистрирован: 31 авг 2013, 22:08
Re: fail2ban не банит
manchelsi » 25 ноя 2013, 11:48
Уже добавил правила в iptables:
Код: выделить все iptables -A INPUT -s 198.27.87.224 -j DROP
iptables -A INPUT -s 198.27.87.224 -j REJECT
все равно пускает
manchelsi Сообщений: 46 Зарегистрирован: 31 авг 2013, 22:08
Re: fail2ban не банит
SolarW » 25 ноя 2013, 15:53
Вроде как начиная с 10-й версии астериска можно стало писать еще один тип лога — security.
И вот в нем как раз уже высвечивается правильный адрес нападающего а не ваш внешний айпишник.
После этого остается только добавить новые шаблоны строк в настройки Fail2Ban и нападающий будет нормально баниться.
SolarW Сообщений: 1331 Зарегистрирован: 01 сен 2010, 14:21 Откуда: Днепропетровск, Украина
Re: fail2ban не банит
manchelsi » 25 ноя 2013, 18:08
Так правила в f2ban настроены, так чередуются через один эти адреса, до сих пор причем, а он не зараза не банит их
manchelsi Сообщений: 46 Зарегистрирован: 31 авг 2013, 22:08
Re: fail2ban не банит
SolarW » 25 ноя 2013, 18:16
Значит не до конца / неправильно настроены.
Проверьте правильность с помощью входящей в состав fail2ban утилиты fail2ban-regex.
Даете ей на вход имя правила и лог файл а она вам выдает есть ли в этом лог-файле строки подходящие под указанное правило.
Проверьте создались ли правила в iptables
Код: выделить все iptables -v -L
блокирующие нужный айпишники.
Ну и помните что перезапуск службы fail2ban обнуляет все баны.
P.S. Увеличьте время бана с дефолтовых 5 или 10 минут до суток (86400 секунд кажется).
SolarW Сообщений: 1331 Зарегистрирован: 01 сен 2010, 14:21 Откуда: Днепропетровск, Украина
Re: fail2ban не банит
manchelsi » 26 ноя 2013, 16:18
Ну вообщем то дело не в правилах для ip адресов. Там все было правильно. Все дело было в том, что у f2ban по-умолчанию стоит 600 секунд на каждый ip адрес. Т.е. хитрые взломщики поступают так. Находят сервер с астером, далее с одного адреса начинают брутить, с целью посмотреть, сколько попыток в настройках f2b. Далее, если к примеру на 3 попытке бан. То начинают брутить со следующего адреса, проверяя тем самым следующее правило. Делают 2 запроса, через 10 минут (600 сек), еще 2 запроса, если ip в бан не попадает, начинают брутить с нескольких ip адресов, через каждые 10 минут по 2 запроса. В принципе если сложные пароли то брутить так можно годами, но тем не менее, если, к примеру, взять брутить со 100 ip адресов, тут шансы уже увеличатся. У меня пока пытались вскрыть с 2x ip, и что видно по логам каждые 10 минут. Кода я ставил 2 попытки максимум, то после того как «проверочный» ip уходил в бан, направлялось по 2 брута. Если ставил одну попытку, тогда 1 брут в 10 минут с одного адреса. Тот «проверочный», видимо долбит постоянно, потому как после перезапуска f2ban он сразу оказывается в бан листе.
Вообщем-то нужно прописать jail.conf время для поиска таким образом:
Код: выделить все findtime = 3600
Где оно изменится на 3600 секунд соответственно.
manchelsi Сообщений: 46 Зарегистрирован: 31 авг 2013, 22:08
Re: fail2ban не банит
maza11 » 27 дек 2022, 23:44
У меня тот же вопрос. Можно тут продолжить тему.
содержимое jail.conf
Код: выделить все [DEFAULT]
maxretry = 5
findtime = 600
bantime = 12h
ignoreip = 127.0.0.1/8 192.168.0.1/24 11.11.11.11 22.22.22.22 ([i]11.11.11.11 и 22.22.22.22 мои два внешних IP адреса)[/i]
port = 5060,5061
action = %(banaction)s[name=%(__name__)s-tcp, port=»%(port)s», protocol=»tcp», chain=»%(chain)s», actname=%(banaction)s-tcp]
%(banaction)s[name=%(__name__)s-udp, port=»%(port)s», protocol=»udp», chain=»%(chain)s», actname=%(banaction)s-udp]
%(mta)s-whois[name=%(__name__)s, dest=»%(destemail)s»]
logpath = /var/log/asterisk/full
maxretry = 10
Содержимое fail2ban\filter.d\asterisk.conf (вроде как все дефолтное)
Код: выделить все # Fail2Ban filter for asterisk authentication failures
[INCLUDES]
# Read common prefixes. If any customizations available — read them from
# common.local
before = common.conf
[Definition]
_daemon = asterisk
__pid_re = (?:\[\d+\])
iso8601 = \d-\d-\dT\d:\d:\d\.\d+[+-]\d
# All Asterisk log messages begin like this:
log_prefix= (?:NOTICE|SECURITY|WARNING)%(__pid_re)s:?(?:\[C-[\da-f]*\])? [^:]+:\d*(?:(?: in)? \w+:)?
failregex = ^%(__prefix_line)s%(log_prefix)s Registration from ‘[^’]*’ failed for ‘(:\d+)?’ — (Wrong password|Username/auth name mismatch|No matching peer found|Not a local domain|Device does not match ACL|Peer is not supposed to register|ACL error \(permit/deny\)|Not a local domain)$
^%(__prefix_line)s%(log_prefix)s Call from ‘[^’]*’ \(:\d+\) to extension ‘[^’]*’ rejected because extension not found in context
^%(__prefix_line)s%(log_prefix)s Host failed to authenticate as ‘[^’]*’$
^%(__prefix_line)s%(log_prefix)s No registration for peer ‘[^’]*’ \(from \)$
^%(__prefix_line)s%(log_prefix)s Host failed MD5 authentication for ‘[^’]*’ \([^)]+\)$
^%(__prefix_line)s%(log_prefix)s Failed to authenticate (user|device) [^@]+@\S*$
^%(__prefix_line)s%(log_prefix)s hacking attempt detected »$
^%(__prefix_line)s%(log_prefix)s SecurityEvent=»(FailedACL|InvalidAccountID|ChallengeResponseFailed|InvalidPassword)»,EventTV=»([\d-]+|%(iso8601)s)»,Severity=»[\w]+»,Service=»[\w]+»,EventVersion=»\d+»,AccountID=»(\d*|)»,SessionID=».+»,LocalAddress=»IPV[46]/(UDP|TCP|WS)/[\da-fA-F:.]+/\d+»,RemoteAddress=»IPV[46]/(UDP|TCP|WS)//\d+»(,Challenge=»[\w/]+»)?(,ReceivedChallenge=»\w+»)?(,Response=»\w+»,ExpectedResponse=»\w*»)?(,ReceivedHash=»[\da-f]+»)?(,ACLName=»\w+»)?$
^%(__prefix_line)s%(log_prefix)s «Rejecting unknown SIP connection from «$
^%(__prefix_line)s%(log_prefix)s Request (?:'[^’]*’ )?from ‘[^’]*’ failed for ‘(. \d+)?’\s\(callid: [^\)]*\) — (?:No matching endpoint found|Not match Endpoint(?: Contact)? ACL|(?:Failed|Error) to authenticate)\s*$
ignoreregex =
# Author: Xavier Devlamynck / Daniel Black
# General log format — main/logger.c:ast_log
# Address format — ast_sockaddr_stringify
# First regex: channels/chan_sip.c
# main/logger.c:ast_log_vsyslog — «in :» only occurs in syslog
в /var/log/fail2ban.log пишется
Код: выделить все 2022-12-27 20:51:57,669 fail2ban.filter [27094]: INFO [asterisk] Found 107.189.11.125
2022-12-27 20:52:27,578 fail2ban.filter [27094]: INFO [asterisk] Found 145.131.4.212
2022-12-27 20:53:19,766 fail2ban.filter [27094]: INFO [asterisk] Ignore 22.22.22.22 by ip
2022-12-27 20:53:37,706 fail2ban.filter [27094]: INFO [asterisk] Found 145.131.8.175
2022-12-27 20:54:15,212 fail2ban.filter [27094]: INFO [asterisk] Found 51.222.102.47
2022-12-27 20:54:46,977 fail2ban.filter [27094]: INFO [asterisk] Found 128.90.204.100
2022-12-27 20:54:57,828 fail2ban.filter [27094]: INFO [asterisk] Found 128.90.204.100
2022-12-27 20:55:20,270 fail2ban.filter [27094]: INFO [asterisk] Found 51.255.208.207
2022-12-27 20:55:20,965 fail2ban.filter [27094]: INFO [asterisk] Found 72.167.54.101
2022-12-27 20:55:24,986 fail2ban.filter [27094]: INFO [asterisk] Ignore 22.22.22.22 by ip
2022-12-27 20:56:03,308 fail2ban.filter [27094]: INFO [asterisk] Found 107.189.11.125
2022-12-27 20:56:43,836 fail2ban.filter [27094]: INFO [asterisk] Found 145.131.4.212
в консоли астериска
Код: выделить все [Dec 27 20:51:57] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘107.189.11.125:57513’ — Wrong password
[Dec 27 20:52:27] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘145.131.4.212:54717’ — Wrong password
[Dec 27 20:53:19] NOTICE[28504][C-00000022]: chan_sip.c:26179 handle_request_invite: Failed to authenticate device ;tag=1119240214
[Dec 27 20:53:37] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘145.131.8.175:53496’ — Wrong password
[Dec 27 20:54:15] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘51.222.102.47:51914’ — Wrong password
[Dec 27 20:54:46] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘128.90.204.100:59596’ — Wrong password
[Dec 27 20:54:57] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘128.90.204.100:56927’ — Wrong password
[Dec 27 20:55:20] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘51.255.208.207:55818’ — Wrong password
[Dec 27 20:55:20] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘72.167.54.101:56030’ — Wrong password
[Dec 27 20:55:24] NOTICE[28504][C-00000023]: chan_sip.c:26179 handle_request_invite: Failed to authenticate device ;tag=1506681268
[Dec 27 20:56:03] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘107.189.11.125:60974’ — Wrong password
[Dec 27 20:56:43] NOTICE[28504]: chan_sip.c:28499 handle_request_register: Registration from » failed for ‘145.131.4.212:53038’ — Wrong password
[Dec 27 20:57:37] NOTICE[28504][C-00000024]: chan_sip.c:26179 handle_request_invite: Failed to authenticate device ;tag=714769043
Получается события
Код: выделить все [Dec 27 20:53:19] NOTICE[28504][C-00000022]: chan_sip.c:26179 handle_request_invite: Failed to authenticate device ;tag=1119240214
[Dec 27 20:55:24] NOTICE[28504][C-00000023]: chan_sip.c:26179 handle_request_invite: Failed to authenticate device ;tag=1506681268
игнорируются по причине того что в них указан наш внешний IP адрес
Код: выделить все Содержимое asterisk\logger.conf
[logfiles]
;debug => debug
;security => security
console => notice,warning,error
;console => notice,warning,error,debug
messages => notice,warning,error
full => notice,warning,error,debug,verbose,dtmf,fax
;syslog keyword : This special keyword logs to syslog facility
;
;syslog.local0 => notice,warning,error
;
разблокировал и прописал
Код: выделить все security => security
full => notice,warning,error,debug,verbose,dtmf,fax,security
файл security появился, но все равно такое событие игнорится
что нужно еще сделать?
После внесенные изменений вот так пишется
/var/log/fail2ban.log
2022-12-27 21:56:33,395 fail2ban.filter [29709]: INFO [asterisk] Ignore 22.22.22.22 by ip
лог security
Код: выделить все [Dec 27 21:56:33] SECURITY[29136] res_security_log.c: SecurityEvent=»ChallengeSent»,EventTV=»2022-12-27T21:56:33.273+0200″,Severity=»Informational»,Service=»SIP»,EventVersion=»1″,AccountID=»sip:11@22.22.22.22″,SessionID=»0x7f3dec01ce80″,LocalAddress=»IPV4/UDP/11.11.11.11/5060″,RemoteAddress=»IPV4/UDP/45.93.16.185/52939″,Challenge=»2c71ae7f»
[Dec 27 21:56:33] SECURITY[29136] res_security_log.c: SecurityEvent=»InvalidPassword»,EventTV=»2022-12-27T21:56:33.394+0200″,Severity=»Error»,Service=»SIP»,EventVersion=»2″,AccountID=»70700012526593403″,SessionID=»0x7f3dec01ce80″,LocalAddress=»IPV4/UDP/11.11.11.11/5060″,RemoteAddress=»IPV4/UDP/45.93.16.185/52939″,Challenge=»2c71ae7f»,ReceivedChallenge=»2c71ae7f»,ReceivedHash=»246476342243800fdb7c85ef9bfcfe4e»
лог full
Код: выделить все [Dec 27 21:56:33] SECURITY[29136] res_security_log.c: SecurityEvent=»ChallengeSent»,EventTV=»2022-12-27T21:56:33.273+0200″,Severity=»Informational»,Service=»SIP»,EventVersion=»1″,AccountID=»sip:11@22.22.22.22″,SessionID=»0x7f3dec01ce80″,LocalAddress=»IPV4/UDP/11.11.11.11/5060″,RemoteAddress=»IPV4/UDP/45.93.16.185/52939″,Challenge=»2c71ae7f»
[Dec 27 21:56:33] NOTICE[29130][C-0000000d] chan_sip.c: Failed to authenticate device ;tag=640047713
[Dec 27 21:56:33] SECURITY[29136] res_security_log.c: SecurityEvent=»InvalidPassword»,EventTV=»2022-12-27T21:56:33.394+0200″,Severity=»Error»,Service=»SIP»,EventVersion=»2″,AccountID=»70700012526593403″,SessionID=»0x7f3dec01ce80″,LocalAddress=»IPV4/UDP/11.11.11.11/5060″,RemoteAddress=»IPV4/UDP/45.93.16.185/52939″,Challenge=»2c71ae7f»,ReceivedChallenge=»2c71ae7f»,ReceivedHash=»246476342243800fdb7c85ef9bfcfe4e»
База знаний
В данном документе приведен список всех команд, которые Вы можете использовать в плане набора (extensions.conf). Получить список приложений, загруженных в вашем сервере Asterisk Вы можете консольной командой CLI: «show applications» и «show application «.
- Алфавитный список команд Вы можете найти в конце этого документа
- Здесь приведен список команд существующих в релизе Asterisk или в его CVS версиях. Список не содержит информации, в какой версии появилась какая-либо команда. Команды приложений от сторонних разработчиков вынесены в отдельный список.
- Цветовая маркировка примечаний по версиям Asterisk для команд/функций:
- Зеленый — Функция/команда добавлена (работает), начиная с указанной версии.
- Оранжевый — Функция/команда объявлена устаревшей, начиная с указанной версии (ее использование не рекомендуется).
- Красный — Функция/команда была удалена, начиная с указанной версии, и больше не существует.
Если Вы не используете приоритет «n» в плане набора, не забывайте перенумеровать приоритеты команд, когда добавляете или убираете какую-либо команду в плане набора.
Новые функции, появившиеся в версиях 1.2, 1.4, 1.6 .
Функции, которые появились, начиная с версии 1.2. Некоторые из них могут получить данные, некоторые используются для записи. Обратите внимание, что некоторые встроенные переменные (включая переменные ENV и LEN) были преобразованы в функции в версии 1.2.
Имена нижеприведенных функций состоят только из заглавных букв. Имена функций РЕГИСТРОЗАВИСИМЫ!
- AES_DECRYPT: Декодирование строки в формате base64 с помощью алгоритма AES и 16 символьного ключа. ( 1.6.2 )
- AES_ENCRYPT: Кодирование строки алгоритмом AES с помощью 16 символьного ключа. ( 1.6.2 )
- AGC: Установка автоматической подстройки уровня сигнала для канала Automatic Gain Control (AGC). ( 1.4 )
- AGENT: Получить информацию об агенте.
- ARRAY: (начиная с версии 1.4) Функция позволяет за один раз установить значения множества переменных.
- AST_CONFIG: Получение переменной из файла конфигурации. ( 1.6.0 )
- AUDIOHOOK_INHERIT: Установить, может ли audiohook быть унаследованным на другой канал. ( 1.4.30, 1.6.0 )
- BASE64_DECODE: (начиная с версии 1.4) Декодирование строки в формате base64.
- BASE64_ENCODE: (начиная с версии 1.4) Кодирование строки в формат base64.
- BLACKLIST: (начиная с версии 1.4) Проверка Caller*ID в черном списке.
- CALLERID: Получить или Установить Caller*ID.
- CALLERPRES: (начиная с версии 1.6) Получение или установка режима публикации Caller*ID для канала.
- CDR: Получить или установить переменную для CDR.
- CHANNEL: Получить/установить различную информацию о/для канала.
- CHECKSIPDOMAIN: Проверяет является ли SIP домен локальным доменом.
- CHECK_MD5: Проверка дайджеста MD5.
- CURL: (начиная с версии 1.6) Получить содержимое по указанному URL.
- CUT: Обработка строк, на основе символов разделителей.
- DB: Получить или установить значение во встроенной базе данных AstDB.
- DB_DELETE: Удаление ключа из внутренней базы данных Asterisk.
- DB_EXISTS: Проверка существования ключа во внутренней базе данных Asterisk.
- DEVICE_STATE: (начиная с версии 1.6) Функция позволяет получить состояние любого устройства в плане набора, а также создавать специальные состояния для устройств, которыми можно управлять из плана набора.
- DIALGROUP: (начиная с версии 1.6) Управление группой пользователей, используемой для совершения вызовов.
- DIALPLAN_EXISTS: (начиная с версии 1.6) Позволяет проверить наличие определенной точки обработки в плане набора.
- DUNDILOOKUP: Попробовать получить номер, через систему DUNDi.
- DUNDIQUERY: (начиная с версии 1.6) Инициировать запрос, через систему DUNDi. И получить идентификатор, для дальнейшего использования в функции DUNDIRESULT.
- DUNDIRESULT: (начиная с версии 1.6) Получить результат выполнения функции DUNDIQUERY.
- ENUMLOOKUP: Эта функция позволяет получить основную или специально указанную NAPTR запись или несколько NAPTR записей, используя запросы DNS для ENUM или ENUM-совместимых систем.
- ENUMQUERY: (начиная с версии 1.6) Функция производит запрос на получение NAPTR DNS записей из ENUM-совместимых систем и возвращает идентификатор, который можно использовать в функции ENUMRESULT.
- ENUMRESULT: (начиная с версии 1.6) Получить результат выполнения функции ENUMQUERY.
- ENV: Получить или установить значение переменной окружения.
- EVAL: Устанавливает значение переменной.
- EXCEPTION: (начиная с версии 1.6) Получить детальную информацию о текущем исключении, которое возникло в плане набора.
- EXISTS: Проверка на существование (интересно только чего): Возвращает 1 — если существует, иначе — 0.
- EXTENSION_STATE: (начиная с версии 1.6) Позволяет получить состояние любого екстеншена из плана набора.
- FIELDQTY: Получить количество полей в строке, на основе символов разделителей.
- FILE: (начиная с версии 1.6) Получить содержимое указанного файла.
- FILTER: (начиная с версии 1.4) Фильтрация строки, для включения в результат только разрешенных символов.
- FUNC_ODBC: Функция для прямого взаимодействия с базой данных ODBC из плана набора.
- GLOBAL Установка или получение значения заданной глопальной переменной.
- GROUP: Возвращает или устанавливает название группы, которая используется для канала, по которому поступил вызов.
- GROUP_COUNT: Возвращает количество каналов, попадающих в заданную группу.
- GROUP_LIST: Возвращает список всех групп, разделенных пробелами, заданных для канала.
- GROUP_MATCH_COUNT: Возвращает количество каналов, попадающих в группы, имена которых подходят под заданный шаблон.
- HASH: (начиная с версии 1.6) Реализация ассоциативного массива для плана набора.
- HASHKEYS: (начиная с версии 1.6) Получение списка ключей, созданных функцией HASH.
- HINT: (начиная с версии 1.6) Получить информацию, связанную с определенным «hint».
- IAXPEER: (начиная с версии 1.6) Получить информацию о IAX пире.
- IAXVAR: (начиная с версии 1.6) Получение или установка переменной на удаленной системе.
- ICONV: (начиная с версии 1.6) Конвертация кодировки строки.
- IF: Оператор условия: Возвращает данные, заданные после символа ‘?’, если условие истина, иначе возвращает данные, заданные после символа ‘:’ .
- IFMODULE: (начиная с версии 1.6) Проверка факта загрузки указанного модуля Asterisk.
- IFTIME: Оператор условия по временному промежутку: Возвращает данные, заданные после символа ‘?’, если условие истина, иначе возвращает данные, заданные после символа ‘:’ .
- IMPORT: (начиная с версии 1.6) Получение значения переменной другова канала.
- ISNULL: Проверка на значение NULL: Возвращает 1, если значение NULL, или 0 в другом случае.
- KEYPADHASH: Заменяет буквы строки на эквивалентные им цифры номеронабирателя телефона.
- LANGUAGE: Удалена в версии 1.6 . Получить или установить используемый язык для канала. Объявлена устаревшей в версии 1.4.x, вместо нее используйте конструкцию: CHANNEL(language).
- LEN: Получить длину произвольной строки.
- LOCAL: (начиная с версии 1.6)
- LOCK, TRYLOCK, UNLOCK: (начиная с версии 1.6) Функции предоставляют одноуровневый доступ к мьютексу (блокировке) плана набора.
- MAILBOX_EXISTS: (начиная с версии 1.6) Проверка наличия указанного сконфигурированного голосового ящика.
- MATH: Выполнение некоторых математических функций.
- MD5: Сосчитать MD5 дайджест.
- MINIVMACCOUNT: (начиная с версии 1.6) Получение некоторых данных указанного MiniVoicemail ящика.
- MINIVMCOUNTER: (начиная с версии 1.6) Установка или получение счетчика MiniVoicemail сообщений.
- MUSICCLASS: Удалена в версии 1.6 . Получить или установить класс для MusicOnHold. Объявлена устаревшей в версии 1.4.x, вместо нее используйте конструкцию: CHANNEL(musicclass).
- PP_EACH_USER: (начиная с версии 1.6)
- QUEUEAGENTCOUNT: Получить число агентов обрабатывающих очередь вызовов в данный момент.
- QUEUE_MEMBER: (начиная с версии 1.6) Возвращает число агентов обслуживающих очередь вызовов (расширенный вариант).
- QUEUE_MEMBER_COUNT: Возвращает число участников, которые заняты обработкой вызова из очереди.
- QUEUE_MEMBER_LIST: Возвращает список интерфейсов, принимающих вызовы из очереди.
- QUEUE_MEMBER_PENALTY: (начиная с версии 1.6) Получение или установка значения пенальти для участников, которые обрабатывают очередь вызовов.
- QUEUE_VARIABLES: (начиная с версии 1.6) Функция устанавливает информацию об очереди вызовов в набор переменных.
- QUEUE_WAITING_COUNT: (начиная с версии 1.6) Возвращает число поступивших вызовов, которые ждут ответа в очереди.
- QUOTE: Заключает в кавычки заданную строку, по необходимости экранируя кавычки, встречающиеся в исходной строке.
- RAND: (начиная с версии 1.4) Получить случайный номер из заданного промежутка.
- REALTIME Функция для чтения/записи для механизма Realtime.
- REGEX: Проверка с использованием регулярного выражения: Возвращает 1, если данные подходят под заданное регулярное выражение.
- SET: Установить значение переменной канала.
- SHA1: Расчет дайджеста по алгоритму SHA1.
- SHELL: (начиная с версии 1.6) Выполняет команду, как если бы она была запущена из под shell.
- SIP_HEADER: Получить или установить значение заданного заголовка SIP сообщения.
- SIPCHANINFO: Получить заданный параметр SIP из текущего канала.
- SIPPEER: Получить информацию о SIP клиенте.
- SORT: Отсортировать массив значений в другой массив.
- SPEECH: (начиная с версии 1.6) Получение информации о результатах работы по распознаванию речи.
- SPEECH_ENGINE: (начиная с версии 1.6) Изменение атрибутов для системы распознавания речи.
- SPEECH_GRAMMAR: (начиная с версии 1.6) Возвращает, если доступно, распознаную грамматику, которая соответствует результату.
- SPEECH_RESULTS_TYPE: (начиная с версии 1.6) Установка требуемого типа результата, который должна вернуть система распознавания речи.
- SPEECH_SCORE: (начиная с версии 1.6) Возращает параметр достоверности результата распознования речи.
- SPEECH_TEXT: (начиная с версии 1.6) Возвращает текст, распознаный системой распознавания речи.
- SPRINTF Возвращает строку, согласно заданому формату и значениям переменных.
- STAT: (начиная с версии 1.4) Проверка состояния заданного файла.
- STRFTIME: Отформатировать значение времени в строку на основе заданного формата.
- STRPTIME: Отформатировать значение даты/времени в строку, структурированной согласно заданному формату.
- SYSINFO: (начиная с версии 1.6) Позволяет получить системную информацию.
- TIMEOUT: Получить или установить значение таймаутов для канала.
- TOLOWER: (начиная с версии 1.6) Конвертирует заданную строку в нижний регистр.
- TOUPPER: (начиная с версии 1.6) Конвертирует заданную строку в верхний регистр.
- TXTCIDNAME: Получить имя вызывающего абонента (caller name) с использованием DNS.
- URIDECODE: Декодировать строку из формата, предназначенного для безопасного использования в URI.
- URIENCODE: Закодировать строку для ее безопасного использования в URI.
- VALID_EXTEN: (начиная с версии 1.6) Функция проверяет существование заданого екстеншена.
- VERSION: (начиная с версии 1.6) Возвращает информацию о версии используемого сервера Asterisk.
- VMCOUNT: Получить число сообщений в заданном голосовом ящике.
- VOLUME: (начиная с версии 1.6) Установка уровня принимаемого или передаваемого сигнала для канала.
Основные команды
- Authenticate: Авторизация пользователя
- VMAuthenticate: Авторизация пользователя, используя настройки из файла voicemail.conf
- Bridge: Соединение двух произвольных каналов ( 1.6+ ).
- ChannelRedirect: Переадресация существующего канала в другую точку плана набора. (команда появилась в Asterisk верcии 1.4).
- Curl: Удалена в версии 1.4.x. Используйте: CURL().
- DUNDiLookup: Попробовать получить номер, через систему DUNDi. ( 1.2 , 1.4+ )
- Log: Вносит произвольный текст в файл(ы) лога сервера Asterisk. ( 1.4+ )
- JabberSend: Отправка текстового сообщения через Jabber.
- Page: Передать голосовое сообщение через несколько телефонов (Paging) (новое в Asterisk v1.2)
- SendDTMF: Отправка в канал произвольной последовательности DTMF цифр
- SendImage: Отправка файла с изображением
- SendText: Отправка текстового сообщения абоненту
- SendURL: Отправка url на дисплей клиента
- System: Выполнить команду операционной системы
- Transfer: Перевод звонка на другой екстеншен
- TrySystem: Выполнить команду операционной системы. Всегда возвращает 0
- Wait: Пауза на заданное время
- WaitExten: Ждать заданное время
- WaitForRing: Ждать состояния «вызова абонента» (звонка)
- WaitMusicOnHold: Ожидание с проигрышом музыки (Music On Hold) ( 1.6 )
Билинг
- ForkCDR: Получить из одной CDR записи две раздельных.
- NoCDR: Указывает Asterisk’у не сохранять CDR запись для вызова.
- ResetCDR: Сброс данных CDR.
- SetAccount: Установка account code ( 1.4+ ).
- SetAMAflags: Установка флага AMA для билинга.
- SetCDRUserField: Установка пользовательских полей в записи CDR. Объявлена устаревшей. Используйте: CDR (userfield) ( 1.4 , 1.6+ )
- AppendCDRUserField: Добавить пользовательские данные к существующим в записи CDR. Объявлена устаревшей. Используйте: CDR (userfield) ( 1.4 , 1.6+ )
Управление вызовами (окончание связи, ответ на вызов, набор номера, и т.д.)
- Answer: Ответ на звонок, если по каналу поступает вызов
- Busy: Установить состояние «занято» и ждать окончания соединения
- ChanIsAvail: Проверка на доступность канала связи
- Congestion: Установить состояние «перегрузки канала» и ждать окончания соединения
- Dial: Совершить вызов и, в случае успеха, соединить вызываемого с текущим каналом
- DISA: Система DISA (Direct Inward System Access)
- Hangup: Безусловное разъединение соединения
- RetryDial: Совершить вызов заданного екстеншена, повторять при неудачной попытке вызова, вызывающий пользователь может закончить процедуру вызова, нажав кнопку на dtmf клавиатуре.
- Ringing: Установить состояние «вызова абонента» (звонка)
Манипуляции с информацией о «звонящем» пользователе (ID, Имя и т.д.)
- CallingPres: Изменяет режим публикации для callerid
- LookupBlacklist: Поиск имени/номера Caller*ID в черном списке
- LookupCIDName: Поиск Имени CallerID в локальной базе данных
- PrivacyManager: Требует ввода номера телефона, если CallerID не получен
- SetCallerID: Установка CallerID. Устарела в 1.2.0, используйте CALLERID.
- SetCallerPres: Изменяет режим публикации для callerid (используя текстовые значения)
- SetCIDName: Установка имени в CallerID. Устарела в 1.2.x, в версии 1.4.x — удалена. Используйте: CALLERID(name).
- SetCIDNum: Установка только номера в Caller ID (не имени). Устарела в 1.2.x, в версии 1.4.x — удалена. Используйте: CALLERID(number).
- SoftHangup: Требует разрыва связи на заданном канале
- Zapateller: Блокировка «telemarketers’a» с использованием SIT
ADSI
- ADSIProg: Загрузка ADSI скрипта Asterisk в телефон
- GetCPEID: Получить ADSI CPE ID
Работа с встроенной базой данных.
- DBdel: Удаление ключа из базы данных. Объявлена устаревшей в версии 1.4.x, используйте: DB_DELETE.
- DBdeltree: Удаление дерева ключей из базы данных.
- DBget: Объявлена устаревшей еще в версии 1.2, в версии 1.4.x — удалена. Используйте: DB.
- DBput: Объявлена устаревшей еще в версии 1.2.x, в версии 1.4.x — удалена. Используйте: DB.
- MYSQL: Команда позволяет работать с базой данных mySQL.
Интеграция с приложениями
- AGI: Выполнение AGI скрипта
- DeadAGI: Выполнение AGI для разьедененного канала
- EAGI: Выполнение приложения AGI на локальной или удаленной машине
- EnumLookup: Удалена в версии 1.4.x. Используйте: ENUMLOOKUP().
- Macro: Выполнение макроса
- NoOp: Нет операции. Может печатать значение переменных в консоли для отладки плана набора.
- Perl: res_perl типа mod_perl для Apache, только в данном случае для Asterisk
- PHP: res_php интеграция PHP в Asterisk без применения AGI
- Read: Считывает полученные DTMF символы
- TXTCIDName: Поиск имени звонящего в DNS записях TXT
- UserEvent: Отправка произвольного события в интерфейс управления (manager interface)
Управление потоками и таймаутами
- AbsoluteTimeout: Установка абсолютно максимального времени для вызова. Объявлена устаревшей. Используйте: TIMEOUT (absolute) ( 1.2 , 1.4+ )
- DigitTimeout: Установка максимального таймаута между набираемыми цифрами. Объявлена устаревшей. Используйте: TIMEOUT (digit) ( 1.2 , 1.4+ )
- Gosub: Перейти к выполнению подпрограммы и вернуться (новое в v1.2).
- GosubIf: Условный переход к выполнению подпрограммы и возврат из нее (новое в v1.2).
- Goto: Переход на заданный приоритет, екстеншен или контекст в плане набора.
- GotoIf: Условный переход.
- GotoIfTime: Условный переход зависящий от текущего времени.
- Random: Переход в плане набора с определенной вероятностью. ( 1.4 , 1.6+ )
- ResponseTimeout: Установка максимального времени ожидания ввода пользователя. Объявлена устаревшей. Используйте: TIMEOUT (response) ( 1.2 , 1.4+ )
- Return: Возврат из подпрограммы, выполненой по команде Gosub или из GosubIf (новое в v1.2)
- StackPop: Удалить адрес точки возврата не совершая сам возврат (новое в v1.2)
- While: Начать выполнение цикла While — *1.2beta
- EndWhile: Закончить выполнение цикла While — *1.2beta
- ExecIf: Выполнение внешней программы по заданному условию — *1.2beta
Манипуляции со строками и переменными
- Cut: Удалена в версии 1.4.x. Используйте: CUT().
- ImportVar: Установка значения переменной (описание не найдено)
- Math: Удалена в версии 1.4.x. Используйте: MATH().
- Prefix: Добавляет ведущие цифры (Устарела)
- SetGlobalVar: Установка значения глобальной переменной
- Set: Установка значения (или значений) переменной канала или функции
- SetVar: Установка значения переменной (Устарела. Используйте Set)
- Sort: Функция обработки строк. Устарела. Используйте SORT.
- StripLSD: Удаление цифр с конца екстеншена (Устарела)
- StripMSD: Отбрасывание ведущих цифр (Устарела)
- SubString: Сохранение подстроки с цифрами в заданной переменной (Устарела)
- Suffix: Добавление цифр в конец екстеншена (Устарела)
Звук: Запись и Воспроизведение
- Background: Проигрывает звуковой файл, в это время могут исполняться другие команды.
- BackgroundDetect: Аналогично команде Background с возможностью определения разговора.
- ControlPlayback: Проигрывает звуковой файл с возможностью перемотки вперед, назад и останова.
- DateTime: Удалена в версии 1.4.x. Используйте: SayUnixTime.
- Echo: Воспроизвести, то что говорит абонент (эхо).
- Festival: Проговаривает текст, используя систему синтеза речи Festival.
- Flite: Проговаривает текст, используя систему синтеза речи Festival Lite (более быстрый отклик, чем при использовании синтезатора Festival).
- Milliwatt: Генерация чистого тона 1000Hz с уровнем 0dbm (mu-law).
- MP3Player: Проигрывает MP3 файл или поток.
- MusicOnHold: Проигрыш музыки ожидания (Music On Hold), неопределенно долго.
- Playback: Проигрывает звуковой файл.
- Playtones: Проигрывает список тонов, в это время могут исполняться другие команды.
- Progress: Функция, дающая возможность проигрывания звукового файла вызывающему абоненту до момента ответа на вызов (перевода линии в отвеченное состояние).
- SayUnixTime: Проговаривает дату и/или время.
- SayAlpha: Проговаривает буквы.
- SayDigits: Проговаривает цифры.
- SayNumber: Проговаривает номер.
- SayPhonetic: Проговаривает буквы фонетическим алфавитом.
- SetMusicOnHold: Установка класса по умолчанию для музыки ожидания (Music On Hold).
- SetLanguage: Изменение языка для проигрываемых звуков.
- StopPlaytones: Останавливает проигрыш списка тонов.
Звук: Запись и мониторинг (прослушивание) разговоров
- ALSAMonitor: Мониторинг консоли ALSA
- ChangeMonitor: Изменения имени файла для записи разговора
- ChanSpy: Универсальный «встреватель в разговоры»
- Dictate: Запись и воспроизведение надиктованного текста (диктанта)
- MixMonitor: Запись и миксирование обоих сторон телефонного разговора (в отличии от команды Monitor) v1.2.x
- Monitor: Запись телефонного разговора в звуковой файл
- Record: Запись телефонного разговора в звуковой файл
- StopMonitor: Останов записи телефонного разговора
Команды канала SIP
- SIPdtmfMode: Изменение режима DTMF сигнализации в процессе вызова по SIP каналу
- SIPGetHeader: Получение заголовка из SIP сообщения «invite» (заменена на SIP_HEADER() )
- SIPAddHeader: Добавление заголовка в исходящее SIP сообщение «invite»
- suplimental resource SIPCallPickup: Перехват звонка с телефона в группу.
Команды канала DAHDI (бывший канал ZAP)
- Flash: Отправка сигнала «Flash» через DAHDI (Zap) транк.
- DAHDIBarge: Прослушивание вызовов, проходящих через каналы DAHDI. (ранее называлась ZapBarge)
- DAHDISendKeypadFacility: Отправка OOB (out of band) yjvthf xthtp bynthatqc PRI.
- DAHDIRAS: Предоставляет доступ к сервису передачи данных ISDN интерфейса. (ранее называлась ZapRAS)
- DAHDIScan: Сканирование и мониторинг вызовов через DAHDI каналы. (ранее называлась ZapScan)
Команды для голосовых ящиков и конференций
- Directory: Сервис справочника по номерам голосовой почты.
- HasNewVoicemail: Условное ветвление на приоритет + 101
- MailboxExists: Начиная с версии 1.6 это функция MAILBOX_EXISTS. Проверка на существование голосового ящика
- MeetMe: Вход в конференцию MeetMe
- MeetMeAdmin: Команда администрирования конференций MeetMe
- MeetMeCount: Количество участников в конференции MeetMe
- VoiceMail: Оставить голосовое сообщение
- VoiceMailMain: Вход в систему голосовых сообщений
- VMAuthenticate: Авторизация пользователя, используя настройки из файла voicemail.conf
Управление очередями вызовов и ACD
- AddQueueMember: Динамическое добавление агента для обработки очереди.
- AgentCallbackLogin: Авторизация агента с обратным вызовом.
- AgentLogin: Авторизация агента.
- AgentMonitorOutgoing: Запись исходящих вызовов агентов.
- ParkAndAnnounce: Парковка и Анонс (вызова наверно).
- ParkedCall: Ответ на «запаркованный» вызов.
- PauseQueueMemeber: Временная остановка работы участника, обрабатывающего очередь вызовов.
- Queue: Помещение вызова в очередь.
- RemoveQueueMember: Динамическое удаление агента из участников обрабоки очереди.
- UnpauseQueueMemeber: Возобнавление работы участника, обрабатывающего очередь вызовов
Alarm Monitoring/Central Station
- AlarmReceiver: Emulate an Ademco Contact ID Alarm Receiver
Радиолюбительская связь/Связь с радио ретрансляторами и базовыми станциями
- Rpt: Поддержка коммуникации с радио ретрансляторами и базовыми станциями.
Интеграция с внешними приложениями (которых нет в CVS)
- Asterisk app_dbodbc: Модификатор плана набора, использующий unixODBC
- DynExtenDB: Хранение екстеншенов в базе
- Iconv: Конвертор кодировок символов.
- LDAPget: Получение значений от LDAP сервера
- app Prepaid: Предназначено для Postgres
- PPPD: PPP коннектор
Bristuff applications
- PickUp: Mostly channel independent; part of bristuff patch
- PickUpChan: Pick up the specified channel
- PickDown: Hang up on a remotely ringing call
- Steal: Take over a bridged call (leg)
- Devstate: Generate a device state change event (inuse, busy, ringing . )
- Segfault: Crash Asterisk with segfault
- ZapEC: Enable or disable echo cancellation for Zap
- Autoanswer: Autoanswer a call for a specified extension
- AutoanswerLogin: Login to the autoanswer application
vISDN applications
- VISDNOverlapDial()
Команды приложения для Sirrix каналов
- SrxEchoCan: Включить/выключить Подавление Эха
- SrxDeflect: Перенаправить входящий вызов
- SrxMWI: Установка/Сброс MessageWaitingIndication (MWI) для групп Sirrix
Алфавитный список
- AbsoluteTimeout: Установка абсолютно максимального времени для вызова
- AddQueueMember: Динамическое добавление агента для очереди
- ADSIProg: Загрузка ADSI скрипта Asterisk в телефон
- AgentCallbackLogin: Авторизация агента с обратным вызовом
- AgentLogin: Авторизация агента
- AgentMonitorOutgoing: Запись исходящих вызовов агентов (0.7.3)
- AGI: Выполнение AGI скрипта
- AlarmReceiver: Emulate an Ademco Contact ID Alarm Receiver
- ALSAMonitor: Мониторинг консоли ALSA
- Answer: Ответ на звонок, если по каналу поступает вызов
- AppendCDRUserField: Добавить пользовательские данные к существующим в записи CDR
- Authenticate: Авторизация пользователя
- BackGround: Проигрывает звуковой файл, в это время могут исполняться другие команды
- BackgroundDetect: команде Background с возможностью определения разговора
- Bridge: Соединение двух произвольных каналов (команда появилась в Asterisk версии 1.6).
- Busy: Установить состояние «занято» и ждать окончания соединения
- CALLERID: Получить или Установить Caller*ID (v 1.2)
- CallingPres: Изменяет режим публикации для callerid для ZAP каналов
- ChangeMonitor: Изменения имени файла для записи разговора
- ChanIsAvail: Проверка на доступность канала связи
- ChannelRedirect: Переадресация существующего канала в другую точку плана набора. (команда появилась в Asterisk верcии 1.4).
- ChanSpy: Универсальный «встреватель в разговоры»
- CheckGroup: Удалена в версии 1.4.x
- Congestion: Установить состояние «перегрузки канала» и ждать окончания соединения
- ControlPlayback: Проигрывает звуковой файл с возможностью перемотки вперед, назад и останова
- Curl: Удалена в версии 1.4.x. Используйте: CURL().
- Cut: Удалена в версии 1.4.x. Используйте: CUT().
- DateTime: Удалена в версии 1.4.x. Используйте: SayUnixTime.
- DB: (Появилась в версии 1.2.*) Получить или установить значение во встроенной базе данных AstDB.
- DBdel: Удаление ключа из базы данных. Объявлена устаревшей в версии 1.4.x, используйте: DB_DELETE.
- DBdeltree: Удаление дерева ключей из базы данных
- DBget: Устарела в версии 1.2.x, в версии 1.4.x — удалена.
- DBput: Устарела в версии 1.2.x, в версии 1.4.x — удалена.
- DeadAGI: Выполнение AGI для разьедененного канала
- Dial: Совершить вызов и, в случае успеха, соединить вызываемого с текущим каналом
- Dictate: Запись и воспроизведение надиктованного текста (диктанта)
- DigitTimeout: Установка максимального таймаута между набираемыми цифрами
- Directory: Сервис справочника по номерам голосовой почты.
- DISA: Система DISA (Direct Inward System Access)
- DTMFToText: Enter alphanumeric strings with DTMF phone
- DUNDiLookup: Попробовать получить номер, через систему DUNDi
- EAGI: Выполнение приложения AGI на локальной или удаленной машине (FastAGI)
- Echo: Воспроизвести, то что говорит абонент (эхо)
- EndWhile: Закончить выполнение цикла While — *1.2beta
- EnumLookup: Удалена в версии 1.4.x. Используйте: ENUMLOOKUP().
- Eval: Удалена в версии 1.4.x. Используйте: EVAL().
- ExecIf: Выполнение внешней программы по заданному условию — *1.2beta
- Festival: Проговаривает текст, используя систему синтеза речи Festival.
- Flite: Проговаривает текст, используя систему синтеза речи Festival Lite (более быстрый отклик, чем при использовании синтезатора Festival).
- Flash: Отправка сигнала «Flash» в транк канала Zap.
- ForkCDR: Получить из одной CDR записи две раздельных
- GetCPEID: Получить ADSI CPE ID
- GetGroupCount: Удалена в версии 1.4.x. Используйте: GROUP_COUNT().
- GetGroupMatchCount: Удалена в версии 1.4.x. Используйте: GROUP_MATCH_COUNT().
- Goto: Переход на заданный приоритет, екстеншен или контекст в плане набора
- GotoIf: Условный переход
- GotoIfTime: Условный переход зависящий от текущего времени
- Gosub: Перейти к выполнению подпрограммы и вернуться (новое в v1.2)
- GosubIf: Условный переход к выполнению подпрограммы и возврат из нее (новое в v1.2)
- Hangup: Безусловное разъединение соединения
- HasNewVoicemail: Условное ветвление на приоритет + 101
- HasVoicemail: Условное ветвление на приоритет + 101
- ICES: Streaming calls to the Internet
- ImportVar: Установка значения переменной
- JabberSend: Отправка текстового сообщения через Jabber.
- Log: Вносит произвольный текст в файл(ы) лога сервера Asterisk. ( 1.6+ )
- LookupBlacklist: Поиск имени/номера Caller*ID в черном списке
- LookupCIDName: Поиск Имени CallerID в локальной базе данных
- Macro: Выполнение макроса
- MailboxExists: Начиная с версии 1.6 это функция MAILBOX_EXISTS. Проверка на существование голосового ящика.
- Math: Удалена в версии 1.4.x. Используйте: MATH().
- MeetMe: Вход в конференцию MeetMe
- MeetMeAdmin: Команда администрирования конференций MeetMe
- MeetMeCount: Количество участников в конференции MeetMe
- Milliwatt: Генерация чистого тона 1000Hz с уровнем 0dbm (mu-law)
- MixMonitor: Запись и миксирование обоих сторон телефонного разговора (в отличии от команды Monitor) v1.2.x
- Monitor: Запись телефонного разговора в звуковой файл
- MP3Player: Проигрывает MP3 файл или поток
- MusicOnHold: Проигрыш музыки ожидания (Music On Hold), неопределенно долго
- MYSQL: Команда позволяет работать с базой данных mySQL
- NBScat: Play an NBS local stream
- NoCDR: Указывает Asterisk’у не сохранять CDR запись для вызова
- NoOp: Нет операции. Может печатать значение переменных в консоли для отладки плана набора.
- Page: Передать голосовое сообщение через несколько телефонов (Paging) (новое в Asterisk v1.2)
- ParkAndAnnounce: Park and Announce
- ParkedCall: Answer a parked call
- PauseQueueMemeber: Временная остановка работы участника, обрабатывающего очередь вызовов
- Perl: res_perl типа mod_perl для Apache, только в данном случае для Asterisk
- PickUP: Pickup a Zap Channel before answered
- Playback: Проигрывает звуковой файл
- Playtones: Проигрывает список тонов, в это время могут исполняться другие команды
- PPPD: PPP daemon connector
- Prefix: Добавляет ведущие цифры к номеру екстеншена (Устарела)
- PrivacyManager: Требует ввода номера телефона, если CallerID не получен.
- Progress: Функция, дающая возможность проигрывания звукового файла вызывающему абоненту до момента ответа на вызов (перевода линии в отвеченное состояние).
- Queue: Помещение вызова в очередь.
- Random: Перехода в плане набора с определенной вероятностью. Объявлена устаревшей в версии 1.4.x
- Read: Считывает полученные DTMF сигналы.
- Record: Запись телефонного разговора в звуковой файл
- RemoveQueueMember: Динамическое удаление агента для очереди
- ResetCDR: Сброс данных CDR
- ResponseTimeout: Установка максимального времени ожидания ввода пользователя
- RetryDial: Совершить вызов заданного екстеншена, повторять при неудачной попытке вызова, вызывающий пользователь может закончить процедуру вызова, нажав кнопку на dtmf клавиатуре.
- Return: Возврат из подпрограммы, выполненой по команде Gosub или из GosubIf (новое в v1.2)
- Ringing: Установить состояние «вызова абонента» (звонка)
- Rpt: Поддержка коммуникации с радио ретрансляторами и базовыми станциями.
- SayAlpha: Проговаривает буквы.
- SayDigits: Проговаривает цифры
- SayNumber: Проговаривает номер
- SayPhonetic: Проговаривает буквы фонетическим алфавитом.
- SayUnixTime: Проговаривает дату и/или время
- SendDTMF: Отправка в канал произвольной последовательности DTMF цифр
- SendImage: Отправка файла с изображением
- SendText: Отправка текстового сообщения абоненту
- SendURL: Отправка url на дисплей клиента
- Set: Установка значения (или значений) переменной канала или функции
- SetAccount: Установка account code
- SetAMAflags: Установка флага AMA для билинга
- SetCallerID: Установка CallerID. Устарела в 1.2.0, используйте CALLERID.
- SetCallerPres: Изменяет режим публикации для callerid (используя текстовые значения)
- SetCDRUserField: Установка пользовательских полей в записи CDR. См билинг.
- SetCIDName: Удалена в версии 1.4.x. Используйте: CALLERID(name).
- SetCIDNum: Удалена в версии 1.4.x. Используйте: CALLERID(number).
- SetGlobalVar: Установка значения глобальной переменной
- SetGroup: Удалена в версии 1.4.x. Используйте: SET( GROUP=group).
- SetLanguage: Изменение языка для проигрываемых звуков
- SetMusicOnHold: Установка класса по умолчанию для музыки ожидания (Music On Hold)
- SetVar: Установка значения переменной (Устарела. Используйте Set )
- SIPAddHeader: Добавление заголовка в исходящее SIP сообщение «invite»
- SIPCallPickup: Pickup a ringing phone in the pickup group.
- SIPGetHeader: Получение заголовка из SIP сообщения «invite»
- SIPdtmfMode: Изменение режима DTMF сигнализации в процессе вызова по SIP каналу
- SMS: Отправка и прием SMS (short messaging service)
- SoftHangup: Требует разрыва связи на заданном канале
- Sort: Функция обработки строк. Устарела. Используйте SORT.
- SrxEchoCan: Включить/выключить Подавление Эха
- SrxDeflect: Перенаправить входящий вызов
- SrxMWI: Установка/Сброс MessageWaitingIndication (MWI) для групп Sirrix
- Steal: Steal a Zap Channel after answered
- StackPop: Удалить адрес точки возврата не совершая сам возврат (новое в v1.2)
- StopMonitor: Останов записи телефонного разговора
- StopPlaytones: Останавливает проигрыш списка тонов
- StripLSD: Удаление цифр с конца екстеншена (Устарела)
- StripMSD: Отбрасывание ведущих цифр (Устарела)
- SubString: Сохранение подстроки с цифрами в заданной переменной (Устарела)
- Suffix: Добавление цифр в конец екстеншена (Устарела)
- System: Выполнить команду операционной системы
- Transfer: Перевод звонка на другой екстеншен
- TestClient: Execute Interface Test Client
- TestServer: Execute Interface Test Server
- TrySystem: Выполнить команду операционной системы. Всегда возвращает 0
- TXTCIDName: Поиск имени звонящего в DNS записях TXT
- UnpauseQueueMemeber: Возобнавление работы участника, обрабатывающего очередь вызовов
- UserEvent: Отправка произвольного события в интерфейс управления (manager interface)
- VMAuthenticate: Авторизация пользователя, используя настройки из файла voicemail.conf
- VoiceMail: Оставить голосовое сообщение
- VoiceMailMain: Вход в систему голосовых сообщений
- Wait: Пауза на заданное время
- WaitExten: Ждать заданное время
- WaitForRing: Ждать состояния «вызова абонента» (звонка)
- WaitMusicOnHold: Ожидание с проигрышом музыки (Music On Hold)
- While: Начать выполнение цикла While — *1.2beta
- Zapateller: Блокировка «telemarketers’a» с использованием SIT
- ZapBarge: Прослушивание вызовов, проходящих через каналы Zap
- ZapRAS: Предоставляет доступ к сервису передачи данных ISDN интерфейса.
- ZapScan: ZapScan?: Сканирование и мониторинг вызовов для Zap каналов.
Ссылки по теме:
- Asterisk
- Конфигурация сервера Asterisk
- План набора: extension.conf
Перманентный бан злоумышленников при помощи Fail2Ban + MikroTik
Несколько дней назад я установил Asterisk, загрузил свою старую конфигурацию с маршрутизацией вызовов и намеревался подключиться к местному SIP провайдеру. Буквально через несколько минут после запуска Asterisk’а обнаружил в логах попытки авторизации на сервере, что меня ничуть не удивило, т.к. такая картина наблюдается на любом астериске, смотрящем в Интернет. Было принято волевое решение поиграться с любимым микротиком и не менее любимым питоном, и придумать, что делать с этими злоумышленниками.
- Ubuntu Server 14.04 (думаю не принципиально, должно работать на других дистрибутивах)
- Fail2Ban
- MySQL
- Asterisk (или любой другой сервис, который нужно защитить от брут форс атак)
- Роутер MikroTik
- Руки
- Желание изобрести велосипед
- баним злоумышленника на определённое время при помощи Fail2Ban и добавляем запись с его IP адресом в БД MySQL
- после определённого количества выданных банов добавляем IP адрес в список запрещённых на роутере
CREATE DATABASE fail2ban CHARACTER SET utf8; CREATE TABLE `ban_history` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `ip_address` char(15) NOT NULL DEFAULT '', `country_code` varchar(5) DEFAULT NULL, `country_name` varchar(30) DEFAULT NULL, `count` int(11) NOT NULL, `type` varchar(30) DEFAULT NULL, `last_attempt` datetime NOT NULL, `first_attempt` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;2. Создаём скрипт для добавления записей в БД. Скрипт написан на питоне и требует для своей работы следующие дополнительные модули — pygeoip и MySQL-python. Оба модуля легко устанавливаются при помощи пакетного менеджера pip:
pip install pygeoip MySQL-pythonСкрипт
#!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import urllib import gzip import StringIO import logging import logging.handlers import MySQLdb import MySQLdb.cursors import ConfigParser import pygeoip from datetime import datetime from sys import exit from optparse import OptionParser def main(config, logger, ip_addr, attack_type, GEOIP_DAT): url = urllib.urlopen('http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz') url_f = StringIO.StringIO(url.read()) handle = gzip.GzipFile(fileobj=url_f) with open(GEOIP_DAT, 'w') as out: for line in handle: out.write(line) if config.has_option('general', 'mysql_ip') and config.has_option('general', 'mysql_user') and config.has_option('general', 'mysql_password') and config.has_option('general', 'mysql_db'): try: logger.info("Connecting to MySQL host: %s" % config.get('general', 'mysql_ip')) db = MySQLdb.connect( host=config.get('general', 'mysql_ip'), user=config.get('general', 'mysql_user'), passwd=config.get('general', 'mysql_password'), db=config.get('general', 'mysql_db'), cursorclass=MySQLdb.cursors.DictCursor ) cursor = db.cursor() logger.debug("Connected") except MySQLdb.Error, e: logger.error("Error %d: %s" % (e.args[0], e.args[1])) exit(2) else: query = """select * from ban_history where ip_address='%s' and type='%s'""" % (ip_addr, attack_type) result = run_query(cursor, query, logger) result = cursor.fetchall() now = datetime.now() gi = pygeoip.GeoIP(GEOIP_DAT, flags=pygeoip.const.MEMORY_CACHE) country_code = gi.country_code_by_addr(ip_addr) country_name = gi.country_name_by_addr(ip_addr) if len(result) > 0: logger.info("Updating blacklist DB record for IP-address %s" % ip_addr) result = result[0] count = result['count'] + 1 query = """update ban_history set count=%s, last_attempt='%s', country_code='%s', country_name='%s' where % (count, now, country_code, country_name, result['id']) result = run_query(cursor, query, logger) db.commit() else: logger.info("Adding IP-address %s into blacklist DB" % ip_addr) count = 1 query = """insert into ban_history (ip_address, country_code, country_name, count, type, last_attempt, first_attempt) values('%s', '%s', '%s', %s, '%s', '%s', '%s')""" % (ip_addr, country_code, country_name, count, attack_type, now, now) result = run_query(cursor, query, logger) db.commit() else: logger.error("Configuration incomplete") exit(3) def run_query(cursor, query, logger): try: logger.debug("Running query \'%s\'" % query) cursor.execute(query) except MySQLdb.Error, e: logger.error("Error %d: %s" % (e.args[0], e.args[1])) exit(2) else: return True if __name__ == '__main__': try: ROOT_PATH = os.path.dirname(os.path.realpath(__file__)) GEOIP_DAT = os.path.join(ROOT_PATH, 'GeoIP.dat') parser = OptionParser(usage ) parser.add_option("-v", "--verbose", action="store_true", default=False, dest="verbose", help="Verbose output") parser.add_option("-c", "--config", action="store", default=False, dest="cfg_file", help="Full path to configuration file") parser.add_option("--ip", action="store", default=False, dest="ip_addr", help="Attacker IP address") parser.add_option("--type", action="store", default=False, dest="attack_type", help="Type of attack (service)") (options, args) = parser.parse_args() verbose = options.verbose ip_addr = options.ip_addr attack_type = options.attack_type # Reading configuration file cfg_file = options.cfg_file if not cfg_file: cfg_file = os.path.join(ROOT_PATH, 'blacklist_db.cfg') config = ConfigParser.RawConfigParser() config.read(cfg_file) # Logging if config.get('general', 'log_file'): LOGFILE = config.get('general', 'log_file') else: LOGFILE = '/tmp/blacklist_db.log' FORMAT = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') try: rotatetime = logging.handlers.TimedRotatingFileHandler(LOGFILE, when="midnight", interval=1, backupCount=14) except IOError, e: print "ERROR %s: Can not open log file - %s" % (e[0], e[1]) exit(1) except Exception, e: print "Can not configure logger - %s" % e exit(1) formatter = logging.Formatter('%(asctime)s: %(message)s','%y-%m-%d %H:%M:%S') rotatetime.setFormatter(FORMAT) logger = logging.getLogger('BLACKLIST-DB') logger.addHandler(rotatetime) if verbose: lvl = logging.DEBUG console = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s: %(message)s','%y-%m-%d %H:%M:%S') console.setFormatter(formatter) logger.addHandler(console) else: lvl = logging.INFO logger.setLevel(lvl) if ip_addr and attack_type: main(config, logger, ip_addr, attack_type, GEOIP_DAT) else: logger.error("IP address and attack type are needed but not specified") exit(1) except (KeyboardInterrupt): logger.info("CTRL-C. exit") exit(0) except (SystemExit): logger.info("Exit") exit(0)Данные для подключения к БД скрипт берёт из конфигурационного файла, который по умолчанию пытается найти в той же директории, так же можно задать путь при помощи ключа «-c».
Пример кофигурационного файла
[general]
log_file = /var/log/blacklist_db.log
mysql_ip = localhost
mysql_user = db_user
mysql_password = db_pass
mysql_db = fail2ban# Количество банов, после которого мы добавляем IP адрес в блэклист, по умолчанию 10
#ban_count = 10Ключевой момент — скрипт выполняется вместе с добавлением правил в iptables, посему я отредактировал следующие файлы:
/etc/fail2ban/action.d/iptables-allports.conf
# Исходный вариант actionban = iptables -I fail2ban- 1 -s -j # Изменённый вариант actionban = iptables -I fail2ban- 1 -s -j /путь/к/скрипту -v --ip --type
/etc/fail2ban/action.d/iptables-multiport.conf
# Исходный вариант actionban = iptables -I fail2ban- 1 -s -j # Изменённый вариант actionban = iptables -I fail2ban- 1 -s -j /путь/к/скрипту -v --ip --type