По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
В наших материалах по Cisco, посвященных конфигурации сетевых устройств мы часто встречаемся со стандартными листами (списками) контроля доступа. А теперь поговорим о расширенных. Расширенные листы могут также фильтровать трафик по следующим параметрам:
IP-адреса - фильтрация на основе IP-адреса источника и адреса назначения;
Порты - фильтрация на основе порта источника / порта назначения;
Тип протокола TCP/IP - протоколы TCP, UDP, IP и так далее;
Что делать?
Для начала необходимо создать лист. Сделаем это с помощью команды:
access list NUMBER permit|deny IP_PROTOCOL SOURCE_ADDRESS WILDCARD_MASK [PROTOCOL_INFORMATION] DESTINATION_ADDRESS WILDCARD_MASK PROTOCOL_INFORMATION
Синтаксис команды следующий:
NUMBER - номер листа;
PERMIT/DENY - разрешение или запрет трафика;
SOURCE/DESTINATION ADDRESS - адреса источника и назначения;
WILDCARD_MASK - обратная маска;
PROTOCOL_INFORMATION - название или номер протокола TCP, UDP, IP и так далее;
Кстати, для расчета wildcard (обратной) маски, вы можете воспользоваться нашим калькулятором подсетей:
Калькулятор подсетей
Следующим шагом необходимо применить наш свежесозданный лист на интерфейс и его направление (на вход или выход):
ip access-group NUMBER out
Параметры in и out определяют направление, на котором будет применен лист контроля доступа
Для нумерации расширенных листов контроля доступа необходимо использовать следующую нумерацию: со 100 до 199 и с 2000 до 2699
Пример настройки (сценарий №1)
В топологии указанной ниже, нам нужно разрешить пользователям из подсети 10.0.0.0/24 доступ к серверу S2 (адрес 192.168.0.1), но не к серверу S1 (адрес 172.16.0.1/24).
Для начала, напишем ACL и разрешим доступ к серверу S2. Сделаем это мы следующей командой:
access-list 100 permit ip 10.0.0.0 0.0.0.255 192.168.0.1 0.0.0.0
Данная команда разрешает весь трафик из подсети 10.0.0.0 на хост 192.168.1.0. Затем, запретим доступ к серверу S1:
access-list 100 deny ip 10.0.0.0 0.0.0.255 172.16.0.1 0.0.0.0
Наконец, применим данные листы контроля доступа на интерфейсе R1:
int fa0/0
ip access-group 100 in
Пример настройки (сценарий №2)
Приведем иной пример использования расширенных листов контроля доступа: У нас снова есть сеть 10.0.0.0/24 и сервер S1, который слушает порт 80. Нам нужно разрешить пользователям доступ к веб-ресурсам на данном сервере, но также необходимо запретить какой-либо другой доступ, к примеру Telnet.
Для начала, нам нужно разрешить трафик из пользовательской подсети к веб-серверу на порту 80, что выполняется командой
access-list 100 permit tcp 10.0.0.0 0.0.0.255 172.16.0.1 0.0.0.0 eq 80
Используя ключевое слово TCP, мы можем фильтровать пакеты по портам источника и назначения. В примере выше, мы разрешили путь трафику из подсети 10.0.0.0 на хост 172.16.0.1 на порт 80 (веб-порт).
Теперь нужно запретить Telnet трафик из подсети 10.0.0.0 в подсеть 172.16.0.1. Для этого нужен еще один аксес-лист, на этот раз с запрещающим выражением:
access-list 100 deny tcp 10.0.0.0 0.0.0.255 172.16.0.1 0.0.0.0 eq 23
Далее, применим его на интерфейс с помощью следующих команд:
int fa0/0
ip access-group 100 in
Как мы уже описывали в предыдущей статье, в конце каждого листа всегда есть всезапрещающее правило. После применения первого правила, весь остальной трафик ходить не будет.
Сегодня хотим рассказать про любопытный сценарий, которой наверняка может быть полезен в сфере E-commerce. Речь пойдет про автоматизацию клиентского обслуживания, а именно:
/p>
Клиент звонит в интернет – магазин и ему предлагают ввести номер заказа;
Введенные абонентом значения по DTMF передаются в AGI скрипт;
По номеру заказа, мы формируем SQL – запрос к базе данных, где храним информацию о заказах. Из соответствующей таблицы мы получаем статус заказа и имя клиента;
Мы формируем строку, которую необходимо озвучить клиенту и отправляем ее на аудио-генерацию в сторону API Yandex.SpeechKit (TTS технология – text to speech);
Получаем аудио файл от Yandex, декодируем его в нужный нам формат (.wav, 8k) и воспроизводим клиенту;
Удаляем воспроизведенный файл и завершаем звонок клиента;
На наш взгляд это любопытная автоматизация. Приступаем к настройке? :)
Получение API - токена Yandex.SpeechKit
Для знакомства с технологией Яндекс предоставляет бесплатный тестовый период в 1 месяц с момента отправки первого запроса. После этого, чтобы продолжить использование Yandex. SpeechKit Cloud нужно заключить договор. Подробности условия использования можно прочитать здесь.
Первым делом перейдите в кабинет разработчика по ссылке https://developer.tech.yandex.ru и нажмите Получить ключ:
Имя ключа - введите имя для ключа. Например, Asterisk + TTS;
Подключение - выберите из списка SpeechKit Cloud;
Запоминаем значение, которое выделено красным на скриншоте выше – это и есть ваш токен. Переходим к настройке AGI – скрипта.
Создаем таблицу с заказами
Создадим SQL – таблицу, в которой будем хранить данные о заказах. В лабораторных целях, мы развернем ее на том же хосте, что и IP – АТС Asterisk (+ это снизит задержку и процессинг по времени). Итак, вводим следующие команды в консоли сервера (предварительно подключитесь по SSH):
use asteriskcdrdb;
CREATE TABLE zakazy(name varchar(20),phone varchar(20),nomerzakaza varchar(20),status varchar(20));
INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Александр", "79257777777", 300388, "Отправлен");
INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Иван", "79251111111", 476656, "Оплачен");
INSERT INTO zakazy (name, phone, nomerzakaza, status) VALUES ("Сергей", "79252222222", 0089822, "Доставлен");
Мы создали и наполнили таблицу. Теперь необходимо создать пользователя, который сможет иметь SELECT – доступ к таблице:
CREATE USER 'логин_mysql'@'localhost' IDENTIFIED BY 'пароль_mysql';
GRANT SELECT ON asteriskcdrdb.zakazy TO 'логин_mysql';
Запомните ваш логин и пароль и переходите к следующему шагу – адаптации скрипта AGI. Традиционно, комментарии к коду после двойного слеша //:
AGI - скрипт
Ниже представлена структура скрипта:
#!/usr/bin/php -q
<?php
error_reporting(0);
require('phpagi.php');
$agi = new AGI();
$result = $agi->get_data('custom/generate', 6000, 10); //принимаем DTMF от клиента;
$number= $result['result']; //записываем в переменную введенный клиентом номер заказа;
$hostname = "localhost"; // у нас localhost. У вас может быть IP адрес сервера, на котором хранится БД с заказами (настройте предварительно pg_hba.conf на удаленном хосте);
$username = "логин_mysql"; // логин, который вы создали этапом ранее;
$password = "пароль_mysql"; // пароль, который вы создали этапом ранее;
$dbName = "asteriskcdrdb";
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_select_db($dbName) or die(mysql_error());
$query = "SELECT * FROM zakazy WHERE `nomerzakaza`='$number';"; // подключаемся и парсим данные по номеру заказа;
$res=mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_assoc($res)) {
$status = $row['status'];
$name = $row['name']; // имя и статус, полученные из SQL пишем в переменные;
};
$str = 'Дорогой '.$name.'! Статус вашего заказа '.$status.' Спасибо за обращение, всего доброго!'; // формируем строку, которую необходимо синтезировать;
$qs = http_build_query(array("format" => "wav","lang" => "ru-RU","speaker" => "jane","key" => "ваш_токен","emotion" => "good", "text" => $str)); //описываем переменные, которые будем отправлять в сторону API Яндекса. Вы можете регулировать формат файла, локаль, спикера (мужской или женский голоса) и эмоциональный окрас. Заменить "ваш_токен" на ключ, полученный от API Yandex. SpeechKit Cloud;
$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer:
")));
$soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx);
$file = fopen("file1.wav", "w");
fwrite($file, $soundfile);
fclose($file); // получаем аудио файл (сохраняем его как file1.wav);
shell_exec('sox -t raw -r 48k -e signed-integer -b 16 -c 1 file1.wav -t wav -r 8k -c 1 /var/lib/asterisk/sounds/ru/custom/output1.wav'); // выполняем преобразование аудио в нужный для Asterisk аудио-формат и копируем его в директорию /var/lib/asterisk/sounds/ru/custom/;
shell_exec('chown asterisk:asterisk /var/lib/asterisk/sounds/ru/custom/output1.wav');
shell_exec('chmod 775 /var/lib/asterisk/sounds/ru/custom/output1.wav'); // даем файлу нужные пермишны;
$agi->exec('Playback',"custom/output1"); // передаем в AGI команду проиграть полученный аудио – файл;
shell_exec('rm -f /var/lib/asterisk/sounds/ru/custom/output1.wav');
shell_exec('rm -f file1.wav'); // удаляем оба файла;
Скачать скрипт AGI
После загрузки файла, сохраните его с расширением .php
Сохраните скрипт под именем tts.php в директории /var/lib/asterisk/agi-bin и дайте следующие команды в консоль сервера:
dos2unix /var/lib/asterisk/agi-bin/tts.php
chown asterisk:asterisk /var/lib/asterisk/agi-bin/tts.php
chmod 775 /var/lib/asterisk/agi-bin/tts.php
Адаптируем функционал в «продакшн»
Итак, первым делом, открываем файл /etc/asterisk/extensions_custom.conf для редактирования и добавляем в него следующую запись:
[tts_menu]
exten => s,1,Answer()
exten => s,2,AGI(tts.php)
Очень хорошо. Сделаем вызов кастомного контекста из FreePBX. Для этого воспользуемся модулем Custom Destinations. Переходим по пути Admin → Custom Destinations и нажимаем Add Destination:
Нажимаем Submit и Apply Config. Мы хотим чтобы из главного IVR – меню клиент при нажатии 4 мог бы узнать статус своего заказа. Переходим в главный IVR и в секции IVR Entries добавляем следующее:
Готово. Если что – либо не получилось, напишите нам в комментариях, постараемся помочь :)
Привет! Мы в одной из предыдущих статей уже рассказывали про то, как зарегистрировать IP-телефон в CME (CUCME) , работающий по протоколу SCCP. Сегодня поговорим про то, как зарегистрировать Third Party SIP телефоны (то есть от других производителей) в CME.
Настройка
Для начала инициализируем SIP звонки и сервер регистрации:
CME(config)#voice service voip
CME(conf-voi-serv)#allow-connections sip to sip
CME(conf-voi-serv)#sip
CME(conf-serv-sip)#registrar server
voice service voip – вход в режим конфигурации voip;
allow-connections sip to sip – по-умолчанию IOS не разрешает SIP вызовы;
sip – команда sip, введенная в меню конфигурации voice service voip позволяет использовать команды для настройки SIP;
registrar server – определяет CME как сервер регистрации для сторонних SIP телефонов;
Далее применим глобальные настройки CME:
CME(config)#voice register global
CME(config-register-global)#mode CME
CME(config-register-global)#max-dn 10
CME(config-register-global)#max-pool 10
CME(config-register-global)#source-address 192.168.1.1 port 5060
CME(config-register-global)#tftp-path flash:
CME(config-register-global)#authenticate register
CME(config-register-global)#camera
CME(config-register-global)#video
CME(config-register-global)#create profile
voice register global– вход в режим глобальных настроек CME;
mode CME – устанавливает поведение устройства как CME;
max-dn [X] – максимальное количество номеров dn (directory number);
max-pool [Y] – максимальное количество телефонов;
source-address X.X.X.X port Y – указываем откуда будут загружаться конфигурационные файлы для IP-телефонов;
tftp-path flash: - корневой каталог TFTP это flash память маршрутизатора;
authenticate register – аутентификация для телефонов, находящихся в другой подсети;
camera – команда включает камеру;
video – команда включает видео;
create profile – создает конфигурационные файлы;
После этого создадим номер:
CME(config)#voice register dn1
CME(config-register-dn) number 1001
voice register dn1 – создание ephone-dn с меткой 1;
number [номер] – указываем номер;
Далее зарегистрируем SIP телефон в CME:
CME(config)#voice register pool 1
CME(config-register-pool)#id mac 0123.45ab.cdef
CME(config-register-pool)#type 9971
CME(config-register-pool)#number 1 dn 1
CME(config-register-pool)#username admin password admin
CME(config-register-pool)#codec g711ulaw
CME(config-register-pool)#dtmf-relay rtp-nte
CME(config-register-pool)#camera
CME(config-register-pool)#video
voice register pool [X] – режим конфигурации SIP телефонов (тут pool означает телефоны);
id mac XXXX.XXXX.XXXX – mac-адрес устройства (для third-party можно ввести любой);
type – указываем тип телефона, для third party эта команда не обязательна;
number [X] dn [Y] – назначаем на копку X номер Y;
username XXXX password YYYY – включает аутентификацию для SIP телефонов с указанными данными;
codec g711ulaw – указываем используемый кодек;
dtmf-relay rtp-nte – указываем тип DTMF-relay;
Теперь переходим к настройке на самом third-party софтфоне (на примере софтфона 3CX):
Здесь необходимо заполнить следующие поля:
Extension – номер, который мы создали на CME;
ID – username, созданный на CME;
Password – пароль, созданный на CME;
IP of your PBX/SIP server – IP адрес CME;