Категории
Самые читаемые
PochitayKnigi » Компьютеры и Интернет » Программное обеспечение » Asterisk™: будущее телефонии Второе издание - Джим Меггелен

Asterisk™: будущее телефонии Второе издание - Джим Меггелен

Читать онлайн Asterisk™: будущее телефонии Второе издание - Джим Меггелен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 51 52 53 54 55 56 57 58 59 ... 136
Перейти на страницу:

Демилитаризованная зона (DMZ). Размещение системы VoIP в демилитаризованной зоне может обеспечить дополнительный уровень защиты локальной сети, предоставляя при этом возможность соединения для соответствующих приложений. Если система VoIP будет подвергнута несанкционированному доступу, будет намного сложнее использовать ее для распространения атаки на остальную сеть, поскольку она не является доверенной. Но даже если развертывание системы выполняется в демилитаризованной зоне, любой необычный трафик, исходящий из системы, должен находиться под подозрением. Укрепление сервера. Укрепление сервера Asterisk является критически важным. Это обеспечивает не только преимущества по производительности (выполнение второстепенных процессов может съедать ценные ресурсы ЦП и оперативной памяти); устранение всего ненужного сократит шанс того, что уязвимость операционной системы может быть использована для получения доступа и организации атак на другие части вашей сети.

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

Шифрование

Даже несмотря на то что Asterisk до сих пор не обеспечивает полной поддержки SRTP, трафик VoIP можно шифровать. Например, между узлами связи может использоваться VPN. В этом случае необходимо исходить из затрат на обеспечение необходимой производительности,

но, как правило, это очень эффективный и относительно простой в реализации способ защиты трафика VoIP.

Физическая безопасность

Нельзя пренебрегать и физической безопасностью. Все оконечное оборудование (такое, как коммутаторы, маршрутизаторы и сама офисная АТС) должно размещаться в безопасном месте с возможностью доступа к нему только людей, имеющих на то специальное разрешение. На стороне пользователя (например, под столом) довольно сложно обеспечить физическую безопасность, но, если сеть отвечает только знакомым устройствам (например, если в DHCP все выдаваемые IP-адреса жестко привязаны к, MAC-адресам устройств, которые известны), риск неавторизованного вторжения можно несколько снизить.

Заключение

Если верить слухам, распространяемым в телекоммуникационной отрасли, можно подумать, что VoIP - это будущее телефонии. Но для Asterisk VoIP из области «это мы уже проходили». Для Asterisk будущее телефонии намного более захватывающее. Но мы обратимся к этому несколько позднее, в главе 15. В следующей главе мы собираемся углубиться в одну более революционную и мощную концепцию Asterisk: AGI (Asterisk Gateway Interface) - шлюзовой интерфейс Asterisk.

9

Шлюзовой интерфейс Asterisk (AGI)

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

- Дуглас Адамс «Лосось сомнений»

Шлюзовой интерфейс Asterisk, или AGI, предоставляет стандартный интерфейс, посредством которого внешние программы могут управлять диалпланом Asterisk. Как правило, сценарии AGI используются для реализации расширенной логики, соединения с реляционными базами данных (такими, как PostgreSQL или MySQL) и доступа к другим внешним ресурсам. Передача управления диалпланом внешнему сценарию AGI позволяет Asterisk без труда реализовывать задачи, выполнение которых в противном случае было бы сложным или невозможным. В данной главе рассматриваются основы использования AGI. Она не научит вас программировать, напротив, здесь предполагается, что читатель уже является достаточно квалифицированным разработчиком, чтобы понимать, как создаются AGI-программы. Если вы не знаете, как писать компьютерные программы, вероятно, эта глава не для вас. Пропустите ее и переходите к следующей.

По ходу данной главы будет написана AGI-программа с использованием разных языков программирования: Perl, PHP и Python. Однако обратите внимание, что, поскольку Asterisk предоставляет стандартный интерфейс для AGI-сценариев, эти сценарии могут быть написаны практически на любом современном языке программирования. Мы решили остановиться на Perl, PHP и Python, потому что эти языки чаще всего используются для программирования AGI.

Основы обмена информацией с AGI

AGI не реализует API для программирования. AGI-сценарии взаимодействуют с Asterisk по каналам связи (посредством описателей файла, выражаясь на языке программистов), которые известны как STDIN, STDOUT и STDERR. Большинство программистов знают эти каналы, но все- таки, на случай если вы не знакомы с ними, они будут рассмотрены здесь.

Что такое STDIN, STDOUT и STDERR

STDIN, STDOUT и STDERR - это каналы, по которым программы в UNIX-по- добных средах обмениваются информацией с внешними программами. STDIN, или стандартный ввод, - это информация, передаваемая в программу или с клавиатуры, или из другой программы. В нашем случае данные, поступающие от самой Asterisk, приходят в описатель файла STDIN. STDOUT, или стандартный вывод, - это описатель файла, применяемый сценарием AGI для передачи информации в Asterisk. И наконец, сценарий AGI может использовать описатель файла STDERR (стандартная ошибка) для записи сообщений об ошибке в консоль Asterisk. Подытожим эти три концепции обмена информацией:

• Сценарий AGI читает из STDIN для получения информации от Asterisk.

• Сценарий AGI записывает данные в STDOUT для отправки информации в Asterisk.

• Сценарий AGI может записывать данные в STDERR для отправки отладочной информации в консоль Asterisk.

На данный момент запись в STDERR из сценария AGI обеспечивает запись данных только в первую консоль Asterisk - точнее, в первую консоль Asterisk, запущенную с параметром -с. Это довольно неудачно, и мы надеемся, что данный недостаток будет вскоре устранен разработчиками Asterisk. Если для запуска Asterisk используется программа safe_ asterisk (скорее всего, вы так и поступаете), она запускает удаленную консоль на TTY9. (Проверьте, получите ли вы интерфейс командной строки Asterisk, нажав сочетание клавиш Ctrl+Alt+F9.) Это означает, что вся отладочная информация AGI будет выводиться только в той удаленной консоли. Вероятно, вы захотите деактивировать эту консоль в safe_asterisk, чтобы получить возможность видеть отладочную информацию в другой консоли. (Также, вероятно, эту консоль необходимо отключить из соображений безопасности: вам не нужно, чтобы каждый, подошедший к вашему серверу Asterisk, имел доступ к консоли без всякой аутентификации.)

Стандартная схема обмена информацией с AGI

Обмен информацией между Asterisk и сценарием AGI идет по заранее установленной схеме. Перечислим все этапы и затем последовательно рассмотрим один из примеров сценария AGI, поставляемого с Asterisk. Когда сценарий AGI запускается, Asterisk передает в него список переменных и их значений. Эти переменные могут выглядеть примерно так:

agi _request: test.py agi _channel: Zap/1-1 agi _language en agi _callerid agi _context: default agi _extensior : 123

agi_priority: 2

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

На этом этапе сценарий AGI посылает команды в Asterisk, выполняя запись в STDOUT. На каждую команду, передаваемую сценарием, Asterisk возвращает ответ, который сценарий AGI должен прочитать. Эти действия (отправка команд в Asterisk и чтение ответов) могут продолжаться в течение всего времени выполнения сценария AGI. Наверное, вас интересует, какие команды можно использовать в сценарии AGI. Хороший вопрос. Очень скоро мы рассмотрим основные ко- манды[99].

Вызов сценария AGI из диалплана

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

exten => 123,1,Answer() exten => 123,2,AGI(agi-test.agi)

Сценарии AGI часто располагаются в папке AGI (которая обычно находится в папке /var/lib/asterisk/agi-bin), но можно указать и полный путь к сценарию AGI.

В этой главе сначала мы рассмотрим сценарий agi-test.agi, поставляемый с Asterisk (который написан на Perl), затем напишем AGI-про- грамму на PHP для получения сводки погоды и напоследок создадим математическую игру в виде AGI-программы на Python.

AGI(), EAGI(), DeadAGI() и FastAGI()

Кроме приложения AGI(), существует еще несколько AGI-при- ложений, подходящих для разных ситуаций. Хотя они не будут рассмотрены в данной главе, поняв азы работы со сценариями AGI, разобраться с ними будет довольно просто.

Приложение EAGI() (улучшенный AGI) ведет себя так же, как и AGI(), но обеспечивает возможность сценарию AGI читать входящий аудиопоток в описатель файла номер три.

1 ... 51 52 53 54 55 56 57 58 59 ... 136
Перейти на страницу:
Тут вы можете бесплатно читать книгу Asterisk™: будущее телефонии Второе издание - Джим Меггелен.
Комментарии