Архив метки: Linux

Настройка, прокачка, запуск и автоматизация OpenVAS на Kali Linux

Пользователи часто запрашивают дополнение сканеров уязвимостей в Kali, в первую очередь те, которые начинаются с «N», но из-за ограничений лицензирования мы не включаем их в дистрибутив.

К счастью, Kali включает в себя очень способный OpenVAS, который является бесплатным и c открытым исходным кодом.

Хотя мы вкратце рассмотрели OpenVAS в прошлом, мы решили посвятить более тщательную публикацию о том, как настраивать, запускать и автоматизировать OpenVAS на Kali Linux.

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

Сканеры Vulnerabilty сканируют уязвимости – но они не являются волшебными машинами эксплойта и должны быть одним из многих источников информации, используемых в оценке безопасности.

Слепой запуск сканера уязвимостей на цель почти наверняка закончится разочарованием и горем, с десятками (или даже сотнями) результатов низкого уровня или неинформативных результатов.

Системные Требования

Основная жалоба, которую получают о OpenVAS (или любом другом сканере уязвимостей), можно резюмировать как «она слишком медленная и сбойная и не работает, и это плохо, и очень плохо».

Почти во всех случаях медленность и / или сбои связаны с недостаточными системными ресурсами.

OpenVAS имеет десятки тысяч сигнатур, и если вы не дадите вашей системе достаточного количества ресурсов, особенно оперативной памяти, вы окажетесь в мире страданий.

Для некоторых коммерческих сканеров уязвимостей требуется как минимум 8 ГБ ОЗУ и рекомендуется еще больше.

OpenVAS не требует около такого объема памяти, но чем больше вы можете предоставить ему, тем более плавно система сканирования будет работать.

Для этого урока  наша виртуальная машина Kali имеет 3 процессора и 3 ГБ оперативной памяти, что обычно достаточно для сканирования небольшого количества хостов одновременно.

Начальная установка OpenVAS в Кали

У OpenVAS много движущихся частей, и настройка вручную может быть проблемой.

К счастью, Kali содержит простую в использовании утилиту под названием «openvas-setup», которая занимается настройкой OpenVAS, загрузкой сигнатур и созданием пароля для пользователя admin.

Эта первоначальная настройка может занять довольно много времени, даже при быстром подключении к Интернету, можно просто сидеть сложа руки.

В конце настройки будет отображаться автоматически созданный пароль для пользователя admin.

Обязательно сохраните этот пароль где-нибудь в безопасности.

root@kali:~# openvas-setup

ERROR: Directory for keys (/var/lib/openvas/private/CA) not found!

ERROR: Directory for certificates (/var/lib/openvas/CA) not found!

ERROR: CA key not found in /var/lib/openvas/private/CA/cakey.pem

ERROR: CA certificate not found in /var/lib/openvas/CA/cacert.pem

ERROR: CA certificate failed verification, see /tmp/tmp.7G2IQWtqwj/openvas-manage-certs.log for details. Aborting.ERROR: Your OpenVAS certificate infrastructure did NOT pass validation.

See messages above for details.

Generated private key in /tmp/tmp.PerU5lG2tl/cakey.pem.

Generated self signed certificate in /tmp/tmp.PerU5lG2tl/cacert.pem.

...

/usr/sbin/openvasmd

User created with password 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx'.

Работа с ошибками установки

Иногда скрипт «openvas-setup» будет отображать ошибки в конце загрузки NVT, аналогичные приведенным ниже.

(openvassd:2272): lib kb_redis-CRITICAL **: get_redis_ctx: redis connection error: No such file or directory

(openvassd:2272): lib kb_redis-CRITICAL **: redis_new: cannot access redis at '/var/run/redis/redis.sock'

(openvassd:2272): lib kb_redis-CRITICAL **: get_redis_ctx: redis connection error: No such file or directory

openvassd: no process found

Если вам посчастливилось столкнуться с этой проблемой, вы можете запустить «openvas-check-setup», чтобы узнать, какой компонент вызывает проблемы.

В этом конкретном случае мы получаем следующее из скрипта:

...

ERROR: The number of NVTs in the OpenVAS Manager database is too low.

FIX: Make sure OpenVAS Scanner is running with an up-to-date NVT collection and run 'openvasmd --rebuild'.

...

Скрипт «openvas-check-setup» обнаруживает проблему и даже предоставляет команду для запуска (надеюсь) решения этой проблемы.

После восстановления коллекции NVT рекомендуется пройти все проверки.

root@kali:~# openvasmd --rebuild

root@kali:~# openvas-check-setup

openvas-check-setup 2.3.7

Test completeness and readiness of OpenVAS-9

...

It seems like your OpenVAS-9 installation is OK.

...

Управление пользователями OpenVAS

Если вам нужно (или хотите) создать дополнительных пользователей OpenVAS, запустите ‘openvasmd’ с параметром -create-user, который добавит нового пользователя и отобразит случайно сгенерированный пароль.

root@kali:~# openvasmd --create-user=dookie

User created with password 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyy'.

root@kali:~# openvasmd --get-users

admin

dookie

К счастью, изменение паролей пользователей OpenVAS легко осуществляется с помощью опции «openvasmd» и «new-password».

root@kali:~# openvasmd --user=dookie --new-password=s3cr3t

root@kali:~# openvasmd --user=admin --new-password=sup3rs3cr3t

Запуск и остановка OpenVAS

Сетевые службы по умолчанию отключены в Kali Linux, поэтому, если вы не настроили OpenVAS для запуска при загрузке, вы можете запустить необходимые службы, запустив «openvas-start».

root@kali:~# openvas-start

Starting OpenVas ServicesПосле того, как у вас есть список хостов, вы можете импортировать их в разделе «Цели» в меню «Конфигурация».

Когда службы завершают инициализацию, вы должны найти TCP-порты 9390 и 9392, которые прослушивают ваш loopback-интерфейс.

root@kali:~# ss -ant

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 127.0.0.1:9390 *:*

LISTEN 0 128 127.0.0.1:9392 *:*

Из-за нагрузки на системные ресурсы вы, вероятно, захотите остановить OpenVAS, когда вы закончите использовать его, особенно если вы не используете специальную систему для сканирования уязвимостей.

OpenVAS можно остановить, запустив «openvas-stop».

root@kali:~# openvas-stop

Stopping OpenVas Services

Использование Greenbone Security Assistant

Greenbone Security Assistant – это веб-интерфейс OpenVAS, доступный на вашем локальном компьютере (после запуска OpenVAS) на https://localhost: 9392.

После принятия самозаверенного сертификата вам будет представлена страница входа в систему и после аутентификации вы увидите основную панель.

Настройка учетных данных

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

OpenVAS будет использовать эти учетные данные для входа в сканированную систему и выполнения подробного перечисления установленного программного обеспечения, патчей и т. д.

Вы можете добавить учетные данные через запись «Credentials» в меню «Configuration».

Конфигурация цели

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

Вместо того, чтобы полагаться на сканер уязвимостей для идентификации хостов, вы значительно упростите свою жизнь с помощью специализированного сетевого сканера, такого как Nmap или Masscan, и импортируйте список целей в OpenVAS.

root@kali:~# nmap -sn -oA nmap-subnet-86 192.168.86.0/24

root@kali:~# grep Up nmap-subnet-86.gnmap | cut -d " " -f 2 > live-hosts.txt

После того, как у вас есть список хостов, вы можете импортировать их в разделе «target» в меню «Configuration».

Конфигурация сканирования

Перед запуском сканирования уязвимостей вы должны точно настроить Scan Config/,

Это можно сделать в разделе “Scan Configs” в меню “Config”.

Вы можете клонировать любую конфигурацию сканирования по умолчанию и редактировать ее параметры, отключая любые службы или проверки, которые вам не нужны.

Если вы используете Nmap для проведения предварительного анализа ваших целевых объектов, вы можете сэкономить время сканирования уязвимости.

Конфигурация задачи

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

В OpenVAS сканирование уязвимостей проводится как «tasks».

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

С нашей системой с 3 ГБ оперативной памяти мы скорректировали наши настройки задач, как показано ниже.

Благодаря нашим более точно настроенным параметрам сканирования и целевому выбору результаты нашего сканирования намного полезнее.

Автоматизация OpenVAS

Одной из менее известных функций OpenVAS является интерфейс командной строки, с которым вы взаимодействуете с помощью команды «omp».

Его использование не совсем интуитивно, но мы не единственные поклонники OpenVAS, и мы столкнулись с несколькими базовыми скриптами, которые вы можете использовать и расширить сканирование для автоматизации OpenVAS.

Первый – openvas-automate.sh от mgeeky, полуинтерактивный скрипт Bash, который предлагает вам тип сканирования и заботится обо всем остальном.

Конфигурации сканирования жестко закодированы в сценарии, поэтому, если вы хотите использовать свои настроенные конфиги, их можно добавить в разделе «targets».

root@kali:~# apt -y install pcregrep

root@kali:~# ./openvas-automate.sh 192.168.86.61:: OpenVAS automation script.

mgeeky, 0.1[>] Please select scan type:

1. Discovery

2. Full and fast

3. Full and fast ultimate

4. Full and very deep

5. Full and very deep ultimate

6. Host Discovery

7. System Discovery

9. Exit



--------------------------------

Please select an option: 5



[+] Tasked: 'Full and very deep ultimate' scan against '192.168.86.61'

[>] Reusing target...

[+] Target's id: 6ccbb036-4afa-46d8-b0c0-acbd262532e5

[>] Creating a task...

[+] Task created successfully, id: '8e77181c-07ac-4d2c-ad30-9ae7a281d0f8'

[>] Starting the task...

[+] Task started. Report id: 6bf0ec08-9c60-4eb5-a0ad-33577a646c9b

[.] Awaiting for it to finish. This will take a long while...



8e77181c-07ac-4d2c-ad30-9ae7a281d0f8 Running 1% 192.168.86.61

Мы также наткнулись на сообщение в блоге по code16, которое представляет и объясняет их скрипт Python для взаимодействия с OpenVAS.

Подобно скрипту Bash выше, вам нужно будет внести некоторые изменения в скрипт, если вы хотите настроить тип сканирования.

root@kali:~# ./code16.py 192.168.86.27

------------------------------------------------------------------------------

code16

------------------------------------------------------------------------------

small wrapper for OpenVAS 6[+] Found target ID: 19f3bf20-441c-49b9-823d-11ef3b3d18c2

[+] Preparing options for the scan...

[+] Task ID = 28c527f8-b01c-4217-b878-0b536c6e6416

[+] Running scan for 192.168.86.27

[+] Scan started... To get current status, see below:zZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzz

...

zZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzzZzz



[+] Scan looks to be done. Good.

[+] Target scanned. Finished taskID : 28c527f8-b01c-4217-b878-0b536c6e6416

[+] Cool! We can generate some reports now ... :)

[+] Looking for report ID...

[+] Found report ID : 5ddcb4ed-4f96-4cee-b7f3-b7dad6e16cc6

[+] For taskID : 28c527f8-b01c-4217-b878-0b536c6e6416



[+] Preparing report in PDF for 192.168.86.27



[+] Report should be done in : Report_for_192.168.86.27.pdf

[+] Thanks. Cheers!

 



2018-10-18T09:42:08
Аудит ИБ

Резервирование сервера Elastix с помощью heartbeat и rsync

Одним из простых способов построения отказоустоичивой системы телефонии на основе elastix является использование heartbeat для резервироания серверов и rsync для синхронизации конфигурации. Для начала устанавливаем и настраиваем heartbeat и rsync.

После настройки heartbeat и rsync создаем на основном сервере файл mysqldump.sh

mysqldump -u root -ppassword asterisk > /home/backup/asterisk.sql

mysqldump -u root -ppassword asteriskcdrdb > /home/backup/asteriskcdrdb.sql

mysqldump -u root -ppassword meetme > /home/backup/meetme.sql

cp /etc/sysconfig/iptables /home/backup/

Изменяем права на запуск:

chmod 750 /home/mysqldump.sh

Добавляем его в cron, для этого в файл /var/spool/cron/root добавляем строчку

00 00 * * * * /home/mysqldump.sh

Перезапускаем крон.

/etc/init.d/crond restart

На резервном сервере создадим скрипт который будет синхронизировать конфигурацию с основным сервером.

nano /home/sync_config.sh

Его содержание

rsync  -rc --exclude=Thumbs.db -t -e ssh --rsync-path=/usr/bin/rsync --temp-dir=/tmp root@server1:/home/backup/ /home/backup

rsync  -rc --exclude=Thumbs.db -t -e ssh --rsync-path=/usr/bin/rsync --temp-dir=/tmp root@server1:/etc/asterisk/ /etc/asterisk

rsync  -rc --exclude=Thumbs.db -t -e ssh --rsync-path=/usr/bin/rsync --temp-dir=/tmp root@server1:/var/lib/asterisk/ /var/lib/asterisk

rsync  -rc --exclude=Thumbs.db -t -e ssh --rsync-path=/usr/bin/rsync --temp-dir=/tmp root@server1:/var/spool/asterisk/monitor/ /var/spool/asterisk/monitor

mysql -u root -ppassword asterisk < /home/backup/asterisk.sql

mysql -u root -ppassword meetme < /home/backup/meetme.sql

mysql -u root -ppassword meetme < /home/backup/asteriskcdrdb.sql

cp /home/backup/iptables /etc/sysconfig/iptables service iptables restart /bin/asterisk.reload

Изменяем права

chmod 750 /home/sync_config.sh

И тоже добавляем его в cron

30 00 * * * * /home/sync_config.sh

Для корректной работы астериска, нужно прописать в  /etc/asterisk/sip.conf

bindaddr=192.168.0.12

Где 192.168.0.12 — общий ip адрес на который переключается сервер с помощью heartbeat.

Для этого в WEB интерфейсе elastix заходим во вкладку PBX->Unembedded freePBX. И на вкладке Tools в меню Asterisk Sip Seting в самом низу есть строка «Bind Address». Здесь прописываем наш адрес.

Так же настраиваем авторизацию по ключу. Чтобы работала синхронизация конфигурации через cron.



2018-10-01T12:04:16
Asterisk

FreePBX, Elastix. Уведомление о пропущенных вызовах

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

Уведомления при потерянных вызовах на IVR

Если вызовы поступают на IVR, и звонящий не дождавшись ответа положил трубку, то для отчетов правим файл /etc/asterisk/extensions_override_freepbx.conf

# nano /etc/asterisk/extensions_override_freepbx.conf

 

[ivr-1] ;Номер ivr

exten => h,1,System(python /usr/local/bin/sendmail.py "Пропущенный вызов в ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}с номера ${CALLERID(name)}")


Сохраняем и делаем reload астериска. Тепер. если позвонивший положит трубку слушая голосовое меню, то на почту прийдет уведомление. Сам  sendmail.py находится в конце статьи.

Уведомление в группах вызова

Если необходимо уведомлять о потерянных вызовах в группах вызова, то также правим файл /etc/asterisk/extensions_override_freepbx.conf

# nano /etc/asterisk/extensions_override_freepbx.conf

 

[ext-group]

exten => h,1,System(python /usr/local/bin/sendmail.py "Пропущенный вызов в ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}с номера ${CALLERID(name)}")

exten => h,2,Macro(hangupcall,)

 Уведомление в очередях

Если же вызов поступает в очередь, то в /etc/asterisk/extensions_override_freepbx.conf  прописываем

[ext-queues]

exten => h,1,ExecIf($["${CDR(dstchannel)}"=""]?System(python /usr/local/bin/sendmail.py "Пропущенный вызов в ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} с номера ${CALLERID(name)}"))

exten => h,2,Macro(hangupcall,)

Сам файл sendmail.py

#!/usr/bin/python

# -*- coding: utf-8 -*-

from email.MIMEText import MIMEText

import smtplib

import sys

sender = 'noanswer@yourdomain.ru' # От кого

recivers = 'youremail' # Ваш e-mail

host = "localhost"

text = sys.argv[1]

msg = MIMEText(text, "", "utf-8")

msg["Subject"] = "Уведомление о пропущенном вызове"

smtpObj = smtplib.SMTP('localhost')

smtpObj.sendmail(sender, recivers, msg.as_string())

smtpObj.close()


Не забудте дать права на запуск

chmod 755 /usr/local/bin/sendmail.py



2018-09-29T23:30:16
Asterisk

Asetrisk, распознавание и генерации речи с помощью yandex speechkit

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

Итак, настройка Asterisk, для простоты настраивать будем через ael:

На Астериске организован цикл while

1234567 => {

Answer;

Set(audio=/var/lib/asterisk/sounds/custom/enteraccount);

flag=1;

label=1;

while (${flag} = 1){

Background(${audio});

Record(/tmp/${UNIQUEID}label${label}.wav,3,20);

Agi(yandex.agi,/tmp/${UNIQUEID}, ${label});

label=${label}+1;



                  };



    };

В начале позвонившему проигрывается фудио файл «enteraccount» с просьбой назвать лицевой счет

На каждом шаге цикла, позвонившему человеку проигрывается аудио файл «audio», путь к которому получен из agi скрипта, далее записывается ответ, и путь к полученному записанному файлу отправляется agi скрипту, также в скрипт отправляется текущий шаг «label», после чего шаг увеличивается на 1, и цикл повторяется. Из agi скрипта астерис получает 2 параметра, это обязательный параметр «audio», путь к аудиофайлу который нужно проиграть, и не обязательный «label», метка с помощью которой происходит синхронизация астериска и agi. Выход из цикла происходит если человек положил трубку, а также если из agi прийдет параметр «flag» не равный 1.

Еще неплохо бы после завершения вызова удалить все временные файлы, для этого в макросе который срабатывает после завершения вызова пропишем

[macro-hangupcall]

exten => s,1,System(find /tmp/ -name "${UNIQUEID}*" | xargs rm);

На этом настройка астериска завершена.

Далее сам скрипт yandex.agi, написанный на python, для работы необходимо установить pyst

# wget http://heanet.dl.sourceforge.net/project/pyst/pyst/0.6.50/pyst-0.6.50.zip

# unzip pyst-0.6.50.zip

# cd pyst-0.6.50

# python setup.py install

Сам agi:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import urllib2

import urllib

import sys

import random

from xml.dom.minidom import *

import os

import asterisk.agi



agi=asterisk.agi.AGI()

uuid=''

key='28b22b47-a7b0-40d2-892d-ad79bbdbc304'

def yadexASR(uuid, key, topic, callid):

# Функция для преобразования аудио файла в текст

# Генерим уникальный код id для запроса

    while (len(uuid)<32):

        uuid=uuid+random.choice('1234567890abcdef')

    #Ссылка для пост запроса 

    url = 'https://asr.yandex.net/asr_xml?uuid=%s&key=%s&topic=%s&lang=ru-RU' % (uuid, key, topic)

    filename = callid+'.wav'

    #Считываем файл в двоичном режиме

    audio = open(filename,'rb').read()

    #Указываем тип аудиофайла для заголовка в POST запрос

    headers={'Content-Type': 'audio/x-pcm;bit=16;rate=8000'}

    #Отправляем запрос

    request = urllib2.Request(url, data=audio, headers=headers)

    response = urllib2.urlopen(request)

    #Считываем ответ

    answer=response.read()

    # Создаем xml файл для полученного ответа

    f_answer=('%s.xml' % callid)

    f=open(f_answer, 'w')

    # записываем в файл ответ полученный на POST запрос (ответ получен в xml формате)

    f.write(answer)

    f.close()

    # Парсим xml файл

    xml = parse(f_answer)

    # Выбираем из файла значение между тегами variant

    var = xml.getElementsByTagName('variant')

    # Выбираем первое значение из xml файла, оно же наиболее точное в распознании

    result=var[0].childNodes[0].nodeValue

    return result



def generate(key,text, file):

# Функция для преобразования текста в аудио формат

    #Форматируем текс для GET запрса (нужен для корректной обработки кирилици)

    text_f=urllib.quote_plus(text.encode('utf-8'))

    #отправляем запрос на яндекс

    url='http://tts.voicetech.yandex.net/generate?text=%s&format=mp3&lang=ru-RU&speaker=jane&key=%s' % (text_f, key)

    # Сохраняем айдио файл в file

    urllib.urlretrieve(url, file)



if sys.argv[2].replace(' ','')=="1":

    agi.verbose('label='+sys.argv[2].replace(' ',''))

    try:

        # Распознаем полученный файл

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

        # Формируем ответ

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Вы сказали '+result+u'Скажите да или Нет', file+'.mp3')

        agi.set_variable('audio', file)

    except:

        agi.set_variable('audio', '/var/lib/asterisk/sounds/custom/enteraccount')

        agi.set_variable('label', '0')

        agi.verbose('label=0')



elif sys.argv[2].replace(' ','')=="2":

    agi.verbose('label='+sys.argv[2].replace(' ',''))

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

    except:

        agi.set_variable('label', '1')

    if 'Да' in str(result.encode('utf-8')):

        agi.verbose('Yes')

        #///////////////////////////////

        # Здест должна быть проверка на существование абонента в базе данных

        #/////////////////////////////

    

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Показания какого счетчика вы хотите сообщить горячего или холодного?', file+'.mp3')

        agi.set_variable('audio', file)

    elif 'Нет' in str(result.encode('utf-8')):

        agi.verbose('No')

        # Ставим метку в 0 что бы вернуться к шагй 1 и проигрываем файл

        agi.set_variable('label', '0')

        agi.set_variable('audio', '/var/lib/asterisk/sounds/custom/enteraccount')

    else:

        agi.verbose('Error')

        # Если ответ не да и ни нет, говорим об ошибки и ставим метку на 1 что бы вернуться к шагу 2

        agi.set_variable('label', '1')

elif sys.argv[2].replace(' ','')=="3":

    agi.verbose('label='+sys.argv[2].replace(' ',''))

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

    except:

        agi.set_variable('label', '2')

    if 'Горяч' in str(result.encode('utf-8')):

        agi.verbose('Hot')      

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Сообщите показания горячего счетчика', file+'.mp3')

        agi.set_variable('audio', file)

    elif 'Холод' in str(result.encode('utf-8')):

        agi.verbose('Cold')     

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Сообщите показания холодного счетчика', file+'.mp3')

        agi.set_variable('audio', file)

    else:

        agi.verbose('Error')

        agi.set_variable('label', '2')

elif sys.argv[2].replace(' ','')=="4":

    agi.verbose('label='+sys.argv[2].replace(' ',''))

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))      

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Ваши показания '+result+u'Скажите да или Нет', file+'.mp3')

        agi.set_variable('audio', file)

    except:

        agi.set_variable('label', '3')

        agi.verbose('label=3')

elif sys.argv[2].replace(' ','')=="5":

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

    except:

        agi.set_variable('label', '1')

    if 'Да' in str(result.encode('utf-8')):

        

        #/////////////

        #Обрабатываем результат и заносим в базу

        #/////////////

 

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Хотите сообщить показания другого счетчика да или нет?', file+'.mp3')

        agi.set_variable('audio', file)

    elif 'Нет' in str(result.encode('utf-8')):

        agi.set_variable('label', '2')

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Показания какого счетчика вы хотите сообщить горячего или холодного?', file+'.mp3')

        agi.set_variable('audio', file)

    else:

        agi.verbose('Error')

        agi.set_variable('label', '2')

elif sys.argv[2].replace(' ','')=="6":

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

    except:

        agi.set_variable('label', '1')

    if 'Да' in str(result.encode('utf-8')):

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Показания какого счетчика вы хотите сообщить горячего или холодного?', file+'.mp3')

        agi.set_variable('audio', file)

        agi.set_variable('label', '2')

    elif 'Нет' in str(result.encode('utf-8')):

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Досвидания', file+'.mp3')

        agi.set_variable('audio', file)

    else:

        agi.verbose('Error')

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Хотите сообщить показания другого счетчика да или нет', file+'.mp3')

        agi.set_variable('label', '5')



2018-09-29T23:27:08
Asterisk

Elastix, права на прослушивание записей и просмотр статистики звонков

По умолчанию прослушивать запись и просматривать статистику всех звонков в Elastix может только пользователь admin, все остальные пользователи могут прослушивать и просматривать статистику только своих звонков. Если же нужно разрешить пользователю из группы Operator доступ ко всем звонкам, но при этом не делать его администратором, то в Elastix, в файле:

var/www/html/libs/paloSantoACL.class.php

В функции:

function isUserAdministratorGroup($username)

после строчки:

 $is = array_search('1', $arrGroup);

Добавить следующий код:

if(isset($arrGroup['Operator']))

$is=true;


После этого все пользователи группы Operator смогут просматривать отчет по всем звонкам, а также прослушивать все разговоры.



2018-09-29T23:25:09
Asterisk

Сброс пароля Elastix на web интерфейс

Если в качестве IP PBx вы используете Elastix, и забыли пароль на доступ по WEB интерфейсу. Есть простой способ сменить пароль администратора на WEB интерфейс, для этого у вас должен быть root доступ на консоль. Для изменения пароля на пароль по умолчанию «palosanto» нужно в консоли выполнить следующую команду:

sqlite3 /var/www/db/acl.db "update acl_user set md5_password='7a5210c173ea40c03205a5de7dcd4cb0' where id=1"

На Elastix 3.0, вышеописанная инструкция не работает. Сменить пароль можно командой

/usr/bin/elastix-admin-passwords --change

Ну и не забываем что теперь пользователь у нас superadmin и у пароля есть большие ограничения по сложности (не менее 10 разнокалиберных символов и цифр).



2018-09-28T12:32:17
Asterisk