User Tools

Site Tools


communigate_pro_new

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
communigate_pro_new [2019/07/25 08:57]
val [5.6 Перлюстрация писем]
— (current)
Line 1: Line 1:
-====== Communigate Pro New ====== 
  
-  * [[http://​www.communigate.com/​ru/​|Официальный сайт]] 
-  * [[http://​www.communigate.com/​Papers/​CommuniGatePro-ReviewersGuide-v5.1-1r.pdf|Краткое Ознакомительное Руководство]] 
-  * [[http://​wiki.rsu.edu.ru/​wiki/​Communigate_Pro|Полнофункциональная система унифицированных коммуникаций (почта+телефония+IM) с защитой от вирусов,​ спама и нежелательного контента,​ с возможностью обучения фильтра пользователями]] 
- 
-===== Модуль 1. Установка,​ интерфейс администрирования и запуск CGP ===== 
- 
-===== Теория ===== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​CommuniGate_Pro|CommuniGate Pro - Википедия]] 
-  * [[http://​ru.wikipedia.org/​wiki/​Унифицированные_коммуникации|Унифицированные коммуникации]] 
-  * Примеры больших клиентов ([[http://​www.connect.ru/​newsdetail.asp?​id=6605|Tele2]],​ [[http://​www.amby.ru/​news-24.01.2006.html|SIPnet]]) 
-  * [[http://​www.communigate.com/​CommuniGatePro/​russian/​|Документация]] 
- 
-===== Лабораторные работы ===== 
- 
-==== 1.1 Схема стенда,​ настройка системы ==== 
- 
-  * 1Gb ОЗУ 
-  * [[Настройка стендов слушателей]] 
-<​code>​ 
-hostname: mail.corpX.un 
-ip/mask: 172.16.1.100+X/​24 
-gate: 172.16.1.254 
-dns: 172.16.1.254 
-</​code>​ 
- 
-  * [[Сервис NTP#​Локализация временной зоны]] 
- 
-==== 1.2 Установка сервера ==== 
- 
-  * [[ftp://​www.communigate.com/​pub/​CommuniGatePro/​]] 
- 
-=== Debian/​Ubuntu === 
-<​code>​ 
-# wget ftp://​www.communigate.com/​pub/​CommuniGatePro/​6.2/​CGatePro-Linux_6.2c-3_i386.deb 
- 
-# wget http://​rep/​unix/​CGP/​CGatePro-Linux_6.2c-3_i386.deb 
- 
-# dpkg -i CGatePro-Linux_6.2c-3_i386.deb 
- 
-# service CommuniGate start 
- 
-# cat /​var/​CommuniGate/​ProcessID 
-</​code>​ 
- 
-=== Для любого Linux === 
-<​code>​ 
-# wget ftp://​www.communigate.com/​pub/​CommuniGatePro/​6.1/​CGatePro-Linux-Intel-616.tgz 
- 
-# tar -xvf CGatePro-Linux-Intel.tgz 
- 
-# mv CGateProSoftware/​ /opt 
- 
-# CGateProSoftware/​CommuniGate/​CGServer-static --Base /​var/​CommuniGate --LogAll 
- 
-# cat /​var/​CommuniGate/​ProcessID 
-</​code>​ 
- 
-  * [[Управление сервисами в Linux#​Пример файла конфигурации для запуска/​остановки сервиса]] 
- 
-<​code>​ 
-# service communigate start 
-</​code>​ 
- 
-==== 1.3 Первоначальная настройка ==== 
- 
-  * [[http://​172.16.1.100+X:​8010]] 
- 
-<​code>​ 
-Postmaster Password: xxxxxx 
-Main Domain Name: corpX.un 
-Time Zone: Europa/​Moscow 
-Interface: Expert 
- 
-# cat /​var/​CommuniGate/​Settings/​Main.settings 
- 
-Settings->​Network->​Blacklisted IPs->​UnBlacklistable (White Hole) IP Addresses: 172.16.1.0/​24 
- 
-# cat /​var/​CommuniGate/​Settings/​WhiteHoles.data 
-</​code>​ 
- 
-==== 1.4 Тестирование работоспособности почтовой подсистемы ==== 
- 
-<​code>​ 
-# echo Hello | /​opt/​CommuniGate/​mail -s Hello postmaster@localhost 
- 
-# cat /​var/​CommuniGate/​Accounts/​postmaster.macnt/​INBOX.mbox 
- 
-  или 
- 
-# cat /​var/​CommuniGate/​Accounts/​postmaster.macnt/​INBOX.mslc/​data1 
-</​code>​ 
- 
-===== Вопросы ===== 
- 
-  - Откуда берет название Stalker Software - компания разработчик Communigate?​ :) 
-  - Какая функциональность,​ по утверждению разработчиков,​ должна присутствовать в системе,​ что бы на нее можно было портировать Communigate?​ 
-  - Что необходимо сделать сразу после первого запуска только что установленного сервера Communigate?​ 
-  - Какие форматы почтовых ящиков поддерживает Communigate,​ в чем их достоинства и недостатки?​ 
- 
-===== Модуль 2. Управление учетными записями ===== 
- 
-===== Теория ===== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%A3%D1%87%D1%91%D1%82%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C|Учётная запись - Википедия]] 
-  * Форматы почтовых ящиков:​ [[https://​ru.wikipedia.org/​wiki/​Mbox|Mbox]],​ [[https://​ru.wikipedia.org/​wiki/​Maildir|Maildir]] 
-  * [[http://​www.communigate.com/​cgatepro/​russian/​Mailboxes.html|Папки Communigate]] 
-  * [[http://​www.stalker.com/​CommuniGatePro/​russian/​CLI.html|Интерфейс Командной Строки / API]] 
- 
-===== Лабораторные работы ===== 
- 
-==== 2.1 Иерархия параметров конфигурации Communigate ==== 
- 
-  * Можно показать для настройки Language 
-  * Настройки по умолчанию:​ для сервера,​ для домена (основного и дополнительных),​ для шаблона,​ для пользователя 
-<​code>​ 
-Users->​Account Defaults->​Mail Settings->​Mailbox Storage->​New Mailbox Format: Sliced 
-# cat /​var/​CommuniGate/​Settings/​DomainDefault.settings 
- 
-Users->​Domains->​corpX.un->​Account Defaults->​Mail Settings->​Mailbox Storage->​New Mailbox Format: Sliced 
-# cat /​var/​CommuniGate/​Accounts/​Settings/​domain.settings 
- 
-Users->​Domains->​corpX.un->​Objects->​Template->​Mail Settings->​Mailbox Storage->​New Mailbox Format: Sliced 
-# cat /​var/​CommuniGate/​Accounts/​Settings/​template.settings 
- 
-Users->​Domains->​corpX.un->​Objects->​postmaster->​Mail->​Mailbox Storage->​New Mailbox Format: Sliced 
-# cat /​var/​CommuniGate/​Accounts/​postmaster.macnt/​account.settings 
-</​code>​ 
- 
-==== 2.2 Создание учетной записи через интерфейс администратора ==== 
- 
-<​code>​ 
-Users->​Domains->​corpX.un->​Objects->​ 
- 
-Create Account: user1 
-Real Name: Иван Иванович Иванов 
-CommuniGate Password: cpassword1 
- 
-# ls /​var/​CommuniGate/​Accounts/​user1.macnt/​ 
-</​code>​ 
- 
-Задание:​ назначить учетной записи postmaster свое ФИО, должность,​ телефон ... 
- 
-==== 2.3 Создание учетной записи через CLI ==== 
- 
-  * [[http://​communigate.com/​communigatepro/​russian/​CLI.html|Интерфейс Командной Строки / API]] 
- 
-<​code>​ 
-shell> telnet localhost 106 
- 
-или 
- 
-shell> nc localhost 106 
-</​code><​code>​ 
-USER postmaster 
- 
-PASS Pa$$w0rd 
- 
-NOTIMEOUT 
- 
-LISTACCOUNTS corpX.un 
- 
-GETACCOUNTSETTINGS user1 
- 
-GETACCOUNTDEFAULTS corpX.un 
- 
-GETACCOUNTEFFECTIVESETTINGS user1 
- 
-GETACCOUNTINFO user1 
- 
-CREATEACCOUNT user2 {Password = "​cpassword2";​RealName = "​Петр Петрович Петров";​} 
- 
-QUIT 
-</​code>​ 
- 
-==== 2.4 Создание учетной записи из внешней программы ==== 
- 
-**Примечание**:​ демонстрирует преподаватель 
- 
-  * Perl [[Язык программирования Perl#​Пример 5]] 
- 
-==== 2.5 Создание пользователей с помощью текстового файла ==== 
- 
-**Примечание**: ​ 
-  - использовать кодировку utf-8 и табуляцию между столбцами 
-  - удалить пользователей по окончании работы 
-  - добавить символ новой строки в конце файла 
-<​code>​ 
-Name RealName Password 
-user3 Сидор Сидорович Сидоров cpassword3 
-user4 Василий Муркович Кошкин cpassword4 
-</​code>​ 
- 
-==== 2.6 Управление дополнительным доменами в CGP ==== 
- 
-=== Настройка дополнительного ip адреса (ip alias) в ОС === 
- 
-  * [[Настройка сети в Linux#​Статическая настройка параметров]] (потребуется перезапуск CGP) 
- 
-=== Создаем новый домен === 
-<​code>​ 
-Users->​Domains->​CreateDomain->​compX.un 
- 
-Users->​Domains->​compX.un->​Domain Settings->​Domain Aliases: mail.compX.un 
-</​code>​ 
- 
-=== Создаем пользователя в новом домене и назначаем ему права администратора === 
-<​code>​ 
-Users->​Domains->​compX.un->​Objects->​Create Account: user3 
- 
-Real Name: Сидоров Сидор Сидорович 
-CommuniGate Password: cpassword3 
- 
-Users->​Domains->​compX.un->​Objects->​user3->​Settings->​ 
-Access Rights->​Can Modify This Domain and its Accounts Settings 
-!!!И Все галочки TABом и пробелом!!! 
- 
-# less /​var/​CommuniGate/​Domains/​compX.un/​Settings/​access.settings 
- 
-GETACCOUNTINFO user3@compX.un 
-</​code>​ 
- 
-=== Для будущей поддержки SSL/TLS привязываем домены к разным адресам сервера === 
-<​code>​ 
-Users->​Domains->​compX.un->​Domain Settings->​Assigned IP Addresses->​[172.16.1.200+X] 
- 
-Users->​Domains->​corpX.un->​Domain Settings->​Assigned IP Addresses->​[172.16.1.100+X],​ [127.0.0.1] 
-</​code>​ 
- 
-=== Логинемся как user3 из домена compX.un и управляем доменом === 
-<​code>​ 
-http://​172.16.1.200+X:​8010/​ 
-</​code>​ 
- 
-===== Вопросы ===== 
- 
-  - По какой причине учетная запись администратора Communigate называется postmaster? 
-  - Перечислите способы создания учетных записей в Communigate. 
-  - Перечислите уровни конфигурации на которых можно определить параметры учетной записи. 
-  - Что нужно сделать,​ что бы делегировать права управления доменом отдельному администратору?​ 
- 
-===== Модуль 3. Настройка интерфейсов пользователей ===== 
- 
-===== Теория ===== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%A2%D0%BE%D0%BB%D1%81%D1%82%D1%8B%D0%B9_%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82|Толстый клиент - Википедия]] 
-  * Протоколы доступа к почтовым ящикам:​ [[https://​ru.wikipedia.org/​wiki/​POP3|POP3]] и [[https://​ru.wikipedia.org/​wiki/​IMAP|IMAP]] 
-  * Протокол доступа к каталогам данных [[https://​ru.wikipedia.org/​wiki/​LDAP|LDAP]] 
-  * Протокол для работы с почтой/​календарями/​контактами/​задачами [[https://​ru.wikipedia.org/​wiki/​ActiveSync|ActiveSync]] 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%92%D0%B5%D0%B1-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5|Веб-приложение - Википедия]] 
-  * [[https://​www.communigate.com/​Communigatepro/​russian/​WebApp.html|Веб Приложения Communigate]] 
-  * [[http://​www.communigate.com/​ru/​guide/​HTTP.html|HTTP Модули Communigate]] 
-  * Универсальный протокол для работы с сервером Communigate [[https://​en.wikipedia.org/​wiki/​XIMSS|XIMSS]] 
- 
-===== Лабораторные работы ===== 
- 
-==== 3.1 Создание сертификата TLS для доменов ==== 
- 
-=== Настройка DNS === 
-<​code>​ 
-mail.corpX.un. A 172.16.1.100+X 
- 
-mail.compX.un. A 172.16.1.200+X 
-</​code>​ 
- 
-=== Сертификат для домена corpX.un === 
-<​code>​ 
-Users->​Domains->​corpX.un->​Security->​SSL/​TLS 
-</​code><​code>​ 
-PKI Services: Enable 
-</​code><​code>​ 
-Private Key  
-Key Size: 1024 
-</​code><​code>​ 
-Generate Key 
-Certificate Generator 
-Common Name: mail.corpX.un 
-Country: RU 
-State/​Province:​ Moscow region 
-City: Mosсow 
-Organization:​ cko 
-Unit: noc 
-Contact: postmaster@corpX.un 
-</​code><​code>​ 
-Generate Self Signed 
-</​code>​ 
- 
-=== Сертификат для домена compX.un === 
-<​code>​ 
-Безопасность->​SSL/​TLS->​Генератор Сертификатов->​Имя-Идентификатор:​ mail.compX.un 
-</​code>​ 
- 
-==== 3.2 Подключение почтовых клиентов ==== 
- 
-=== По протоколу POP3 === 
- 
-  * [[Протокол POP3]] 
- 
-=== По протоколам SMTP и IMAP === 
- 
-  * Развернуть систему client1 
-  * [[https://​mail.bmstu.ru/​~val@bmstu.ru/​5.Dostup_k_serveru_s_ispol'​zovaniem_pochtovogo_klienta_Mozilla_Thunderbird.pdf|Доступ к серверу с использованием почтового клиента Mozilla Thunderbird]] 
-  * [[Thunderbird#​Назначение папок]] 
- 
-=== По протоколам MS Exchange и Active Sync === 
- 
-  * Работу выполнять на host системе 
-  * Имя пользователя указывать полностью,​ с доменом 
-  * [[http://​wiki.rsu.edu.ru/​wiki/​%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_Microsoft_Outlook_2007|Настройка Microsoft Outlook 2007]] 
- 
-==== 3.3 Использование общей адресной книги по протоколу LDAP ==== 
- 
-=== Через интерфейс администратора === 
-<​code>​ 
-Directory->​Browser 
-</​code>​ 
- 
-=== Из командной строки === 
- 
-**Примечание**:​ демонстрирует преподаватель 
- 
-Чтение данных с аутентификацией 
- 
-  * [[Авторизация с использованием LDAP сервера#​Установка сертификатов]] 
- 
-<​code>​ 
-# ldapsearch -x -D "​user1@corpX.un"​ -W -b"​cn=corpX.un"​ -H ldaps://​mail.corpX.un:​636 ​ 
-</​code>​ 
- 
-Чтение данных без аутентификации 
- 
-<​code>​ 
-Directory->​Access Rights 
- 
-Name: ReadAll 
-Bind DN: anyone вместо uid=* 
-</​code><​code>​ 
-# ldapsearch -x -b"​cn=corpX.un"​ -H ldap://​mail.corpX.un:​389 
-</​code>​ 
- 
-  * Добавление атрибутов 
-<​code>​ 
-Directory->​Units->​Main->​Schema 
- 
-Users->​Directory Integration 
-Public Info: telephoneNumber 
-</​code>​ 
- 
-=== Подключение адресной книги к почтовому клиенту === 
- 
-  * [[Thunderbird#​Получение списка контактов через LDAP]] 
- 
-==== 3.4 Подключение через web интерфейс ==== 
- 
-=== Базовая конфигурация веб интерфейсов === 
-<​code>​ 
-Users->​Domains->​corpX.un->​Domain Settings->​Domain Aliases: mail.corpX.un 
- 
-Settings->​Services->​HTTPU->​Listener 
-  Port 80 Init SSL/TLS Off 
-  Port 443 Init SSL/TLS On 
- 
-# cat /​var/​CommuniGate/​Settings/​HTTPU.settings 
-</​code>​ 
- 
-=== Выбор интерфейса и локализация пользователя === 
- 
-**Примечание**:​ при первом подключении установить само подписанный сертификат в базу данных доверенных сертификатов серверов в firefox 
- 
-<​code>​ 
-Users->​Account Defaults->​Preferences 
-Users->​Domains->​corpX.un->​Account Defaults->​Preferences 
-Users->​Domains->​corpX.un->​Objects->​postmaster->​Preferences 
- 
-Language: Russian 
-Layout: Basic|Crystal|Pronto Flash(Pronto4)|hPronto(Pronto) 
- 
-Пользователи->​Домены->​corpX.un->​Объекты->​postmaster->​Настройки->​Язык:​ ...(English) 
-</​code>​ 
- 
-==== 3.5 Управление подключениями ==== 
-<​code>​ 
-Monitors->​Access->​Sessions 
- 
-KILLACCOUNTSESSIONS user1 
-</​code>​ 
- 
-==== 3.6 Персонализация интерфейса для компании ==== 
- 
-=== Заменяем логотип в basic (корневом) интерфейсе === 
-<​code>​ 
-На уровне сервера:​ 
-Users->​Skins 
- 
-На уровне домена:​ 
-Users->​Domains->​corpX.un->​Skins 
- 
-  Create Custom Unnamed Skin 
- 
-Upload File: logo.gif ​ 
- 
-# ls /​opt/​CommuniGate/​WebSkins/​ 
- 
-# ls /​var/​CommuniGate/​WebSkins/​logo.gif 
-# ls /​var/​CommuniGate/​Accounts/​WebSkins/​logo.gif 
-</​code>​ 
- 
-=== Заменяем логотип в hpronto интерфейсе === 
-<​code>​ 
-# find /​opt/​CommuniGate/​WebSkins/​ -type d 
- 
-Named Skins: Create: hPronto- 
- 
-Upload File: logo-big-fresh.png 
-</​code>​ 
- 
-=== Заменяем строку в тесте === 
-<​code>​ 
-# ls /​var/​CommuniGate/​Accounts/​WebSkins/​russian.data 
-</​code><​code>​ 
-... 
-  LoginTag1 = "​...";​ 
-  LoginTag2 = "​...";​ 
-... 
-</​code>​ 
- 
-**Дополнительное задание**:​ Сделать то же самое через пользовательский интерфейс postmaster 
- 
-=== Создаем свой skin и добавляем какую-нибудь совершенно новую ссылку в  интерфейс === 
-<​code>​ 
-Users->​Domains->​corpX.un->​Skins->​Named Skins->​Create:​ mySkin 
- 
-# cat /​var/​CommuniGate/​Accounts/​WebSkins/​mySkin/​navigation.wssi 
-</​code><​code>​ 
-... 
-  <td nowrap="​nowrap"><​a href="​mailbox.wssp?​mailbox=INBOX&">​%%HTML:​SETTINGS("​InboxDisplay"​)%%</​a></​td>​ 
-  <td nowrap="​nowrap"><​a href="​mailbox.wssp?​mailbox=Sent Items&">​Sent Items</​a></​td>​ 
-... 
-</​code>​ 
- 
-===== Вопросы ===== 
- 
-  - Что необходимо сделать для включения поддержки SSL/TLS в Communigate?​ 
-  - Какие протоколы поддерживает Communigate для работы с почтовыми клиентами,​ какими особенностями они обладают?​ 
-  - Какие способы работы с адресной книгой предоставляет Communigate для почтовых клиентов?​ 
-  - Перечислите основные варианты Web интерфейсов для пользователей Communigate. 
-  - В какой папке должны хранится элементы персонализации Web интерфейса компании? ​ 
- 
-===== Модуль 4. Маршрутизация почты и борьба со SPAMом ===== 
- 
-===== Теория ===== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D1%87%D1%82%D0%B0|Электронная почта - Википедия]] 
-  * [[https://​ru.wikipedia.org/​wiki/​SMTP|SMTP - Википедия]] 
-  * [[https://​ru.wikipedia.org/​wiki/​Спам|Спам - Википедия]] 
- 
- 
-  * [[http://​ru.wikipedia.org/​wiki/​Серый_список]] 
-  * RFC 2821 4.5.4.1 ([[http://​rfc.com.ru/​rfc2821.htm]]) 
- 
-===== Лабораторные работы ===== 
- 
-==== 4.1 Протокол SMTP ==== 
- 
-=== Настройка DNS === 
-<​code>​ 
-mail.corpX.un. A 172.16.1.100+X 
- 
-corpX.un. MX 10 mail.corpX.un. 
- 
-mail.corpX.un. A 172.16.1.200+X 
- 
-compX.un. MX 10 mail.corpX.un. 
-</​code>​ 
- 
-=== Пример диалога === 
- 
-  * [[Сервис MTA#​Протокол SMTP]] 
-<​code>​ 
-$ gate.isp.un$ mail postmaster@corpX.un 
-</​code>​ 
- 
-=== Почтовый relay для локальной сети === 
- 
-  * Продемонстрировать отправку письма в thunderbird без аутентификации из локальной сети на внешний ящик 
- 
-<​code>​ 
-# cat /​var/​CommuniGate/​Settings/​WhiteHoles.data 
- 
-Settings->​Network->​Client IPs:  
- 
-!172.16.1.254 
-172.16.1.0/​24 
-</​code>​ 
- 
-==== 4.2 Использование встроенных средств CGP для борьбы со SPAMом ==== 
- 
-  * [[http://​systemzone.ru/​misc/​sommunigate/​522-ispolzovanie-vstroennyx-vozmozhnostej-communigate-pro-dlya-borby-so-spamom.html|Использование встроенных возможностей CommuniGate Pro для борьбы со спамом]] 
- 
-=== Настройка параметров приемника SMTP === 
-<​code>​ 
-Settings->​Mail->​SMTP->​Receiving 
-Verify 
-  Return-Path for: ... 
-  Check SPF records: ... 
-Non-Client Sender 
-  Delay Prompt for: 10 
-</​code><​code>​ 
-gate.isp.un% mail user1@corpX.un 
- 
-gate.isp.un% tail -f /​var/​log/​maillog 
-</​code>​ 
- 
-=== Технология Honeypot === 
-<​code>​ 
-Settings->​Router 
-... 
-<​director>​ = spamtrap 
-... 
- 
-gate.isp.un% mail user1@corpX.un director@corpX.un 
-</​code>​ 
- 
-==== 4.3 Использование внешних фильтров для борьбы с вирусами и SPAMом ==== 
- 
-Сейчас,​ если вы используете какой-нибудь из наших плагинов (Cloudmark иди SpamCatcher),​ то в файле hPronto-/​strings.data в строках SpamFalseNegativeReportEmail и SpamFalsePositiveReportEmail можете указать адреса,​ куда перенаправлять неправильно определённые письма,​ например как в <​http://​www.communigate.com/​CGPSpamCatcher/#​rprt>​ 
-Тогда в hPronto появятся кнопки для этого. ​ 
- 
-  * [[http://​program.farit.ru/​doc/​cgpav-rus.html|Clamav,​ SpamAssassin внешний фильтр для CommuniGate Pro]] 
- 
-=== Развертывание антивируса === 
-  * [[Сервис Clamav]] 
-  * [[http://​media.kaspersky.com/​utilities/​ConsumerUtilities/​eicar.zip|eicar.zip]] 
-<​code>​ 
-# usermod -G mail clamav 
- 
-# service clamav-daemon restart 
- 
-# clamdscan /​var/​CommuniGate/​eicar.zip 
-</​code>​ 
- 
-=== Развертывание антиспама === 
- 
-  * [[Защита почты от вирусов и SPAMа#​Технология взвешенной оценки]] на принадлежность письма к SPAMу 
- 
-<​code>​ 
-# cat /​etc/​default/​spamassassin 
-</​code><​code>​ 
-... 
-OPTIONS="​-m 10 -x -q -u mail -i 127.0.0.1 -p 783" 
-... 
-</​code>​ 
- 
-=== Сборка программы Helper === 
- 
-  * Управление ПО в Linux, [[Управление ПО в Linux#​Работа с исходными текстами]] 
-<​code>​ 
-# wget http://​program.farit.ru/​antivir/​cgpav-1.4.tar.gz 
- 
-# tar -xvf cgpav-1.4.tar.gz 
- 
-# cd cgpav-1.4/ 
- 
-# ./configure --with-antivirus=clamav --with-spamassassin=yes --with-cgpro_dir=/​var/​CommuniGate 
- 
-# make && make install 
- 
-# cat /​var/​CommuniGate/​Settings/​cgpav.conf 
-</​code><​code>​ 
-... 
-# не добавляется,​ если письмо распознано как SPAM 
-add_not_infected_header = true 
-... 
-clamd_socket = /​var/​run/​clamav/​clamd.ctl 
-... 
-enable_spamassassin = true 
-... 
-spam_scan_local = true 
-... 
-spamassassin_socket_type = tcp 
-... 
-</​code><​code>​ 
-# /​var/​CommuniGate/​cgpav 
-1 FILE eicar.zip 
-1 DISCARD 
-</​code>​ 
- 
-=== Подключение хелпера к CGP === 
-<​code>​ 
-Settings->​General->​Helpers->​Content Filtering 
-Enabled: ClamSpam 
-Program Path: /​var/​CommuniGate/​cgpav 
-</​code><​code>​ 
-# ps ax | grep cgpav 
-</​code>​ 
- 
-=== Включение хелпера с помощью глобальных правил обработки почты === 
-<​code>​ 
-Settings->​Mail->​Rules 
-Name: ClamSpam 
-Action: ExternalFilter 
-Parameter: ClamSpam 
-</​code>​ 
- 
-=== Настройка правила для перемещения SPAM писем в папку администратора домена === 
- 
-!!! Заработало только на уровне сервера,​ поправить !!! 
- 
-<​code>​ 
-GETSERVERMAILRULES 
- 
-SETDOMAINMAILRULES corp1.un ((5,​spam,​(("​Header Field",​ is, "​X-Spam-Status:​ Yes*"​)),​(("​Store in", "​~postmaster/​spam"​),​ (Discard)))) 
- 
-GETDOMAINMAILRULES corpX.un 
-</​code><​code>​ 
-200 data follow 
-( 
-  ( 
-    5, 
-    spam, 
-    (("​Header Field",​ is, "​X-Spam-Status:​ Yes*"​)),​ 
-    (("​Store in", "​~postmaster/​spam"​),​ (Discard)) 
-  ) 
-) 
-</​code>​ 
-==== 4.4 Использование CGP в качестве пограничного сервера ==== 
- 
-Для домена compX пользователи которого заведены на сервере преподавателя 
- 
-<​code>​ 
-Settings->​Router 
-... 
-<​*@compX.un>​ = *%compX.un@mail.isp.un.25.via 
-... 
-</​code>​ 
- 
-===== Вопросы ===== 
- 
-  - Что используется в протоколе SMTP для поиска IP адреса сервера назначения?​ 
-  - Что означает термин relay в электронной почте? 
-  - Перечислите технологии борьбы со SPAM, доступные в Communigate. 
-  - Какой механизм используется для подключения внешних программ обработки писем в Communigate?​ 
-===== Модуль 5. Использование Communigate для совместной работы ===== 
- 
-===== Теория ===== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B|Программное обеспечение совместной работы - Википедия]] 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BC%D0%B3%D0%BD%D0%BE%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B0_%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%D0%BC%D0%B8|Система мгновенного обмена сообщениями - Википедия]] 
-  * Протокол обмена сообщениями и информацией о присутствии [[https://​ru.wikipedia.org/​wiki/​XMPP|XMPP - Википедия]] 
-  * Протокол для поддержки удаленной работы с файлами (в том числе с календарями и задачами) на серверах [[https://​ru.wikipedia.org/​wiki/​WebDAV|WebDAV - Википедия]] 
- 
- 
-===== Лабораторные работы ===== 
- 
-==== 5.1 Организация групповых почтовых адресов ==== 
- 
-=== Использование списков рассылки и серверных правил === 
- 
-По окончании тестирования,​ удалить правила и список рассылки 
- 
-  * Создаем группу group1 с пользователями user1 и user2 
-<​code>​ 
-  Set Reply-To to Group: no 
-</​code>​ 
- 
-  * Создаем правила,​ меняющие заголовок для писем в группу,​ и заменяющие Reply-To для писем из группы ​ 
- 
-<​code>​ 
-GETSERVERMAILRULES 
-</​code><​code>​ 
-200 data follow 
-( 
-  ( 
-    6, 
-    mark_to_group1,​ 
-    ((Subject, "is not", "​*[group1]*"​),​ ("Any To or Cc", is, "​*group1@corpX*"​)),​ 
-    (("Tag Subject",​ "​[group1] ")), 
-    "​Помечаем тему всех писем, идущих в группу"​ 
-  ), 
-  ( 
-    4, 
-    replace_from_group1,​ 
-    ((Subject, is, "​*[group1]*"​),​ (To, "is not", "​*group1@corpX*"​)),​ 
-    (("Add Header",​ "​Reply-To:​ group1@corpX.un"​)),​ 
-    "​Устанавливаем Reply-To в группу для всех ответов из группы"​ 
-  ) 
-) 
-</​code>​ 
- 
-=== Использование общих папок и прав доступа к ним === 
- 
-  * user1: 
-<​code>​ 
-Папки->​Создать->​Почтовый Ящик->​group1 
- 
-Папки->​pubic1->​Управление Папкой 
- 
-Идентификатор->​user2->​Все галочки (задание для слушателей - найти описание прав в справке) 
-</​code>​ 
- 
-  * user2: 
-<​code>​ 
-Папки->​Управление->​Псевдонимы Папок 
- 
-Имя Псевдонима:​ group1 
-Имя Папки: ~user1/​group1 
-</​code>​ 
- 
-=== Использование расширеного формата почтовых адресов === 
-<​code>​ 
-gate.isp.un% mail group1#​user1@corpX.un 
- 
-mail.corpX.un#​ echo Hello | mail -s Hello group1#​user1@corpX.un 
-</​code>​ 
- 
-=== Преобразование адресов правилами маршрутизации === 
- 
-Направление публичной почты в соответствующий ящик 
- 
-По окончании тестирования,​ правило удалить 
-<​code>​ 
-Settings->​Router 
-... 
-<​group1@corpX.un>​ = group1#​user1@corpX.un 
-... 
-</​code>​ 
- 
-=== Применение пользовательских правил для управления почтой === 
- 
-  * Создание алиаса 
- 
-<​code>​ 
-Users->​Domains-corpX.un->​Objects->​user1->​Settings 
-Aliases: group1 
-</​code>​ 
- 
-  * От имени user1 создаем правила:​ 
- 
-<​code>​ 
-Управление Почтой 
-  Добавить Правило:​ Move to group1 
-  Изменить 
-    Любой Кому/​Копия:​ равно *group1* 
-    Записать в: group1 
-    Выбросить 
-</​code>​ 
-==== 5.2 Электронная подпись и шифрование S/MIME ==== 
- 
-  * Устанавливаем в базу данных доверенных сертификатов серверов в Thunderbird само подписанный сертификат CGP 
- 
-Пользователь user1 создает у себя в интерфейсе сертификат для подписи и шифрования и отправляет подписанное письмо по адресу postmaster@corpX.un 
- 
-Подделать текст письма можно: 
-<​code>​ 
-# vim /​var/​CommuniGate/​Accounts/​postmaster.macnt/​INBOX.mbox 
-</​code>​ 
- 
-==== 5.3 IM and Presence ==== 
- 
-  * [[Thunderbird#​Настройка учетной записи XMPP]] в Thunderbird 
- 
-==== 5.4 Общие календари и задания ==== 
- 
-==== 5.5 Использование облачного хранилища ==== 
- 
-  * Settings->​Services->​HTTPU->​Request Size Limit: unlimited 
-  * ​[[https://​mail.bmstu.ru/​~val/​7.Ispolzovanie_setevogo_diska.pdf|Использование облачного хранилища]] 
- 
-==== 5.6 Перлюстрация писем ==== 
- 
-Задача:​ Предоставить доступ администратора (postmaster) к ящикам пользователей 
-<​code>​ 
-Folders->​Management->​Folder Aliases 
- 
-Open Folder: ~user1/Sent Items 
-</​code>​ 
- 
-Задача:​ сохранять всю исходящую почту в особой папке у системного администратора или у сотрудника,​ отвечающего за безопасность. ​ 
- 
-  * [[http://​www.communigate.com/​CommuniGatePro/​russian/​HowTo.html#​StoreAll]] 
- 
-===== Вопросы ===== 
- 
-  - Перечислите способы организации групповых адресов в Communigate. 
-===== Модуль 6. Интеграция с внешними системами ===== 
- 
-===== Теория ===== 
- 
-  * Протоколы идентификации пользователей ([[https://​ru.wikipedia.org/​wiki/​Аутентификация|Аутентификация]],​ [[https://​ru.wikipedia.org/​wiki/​Авторизация|Авторизация]]) 
-  * [[https://​ru.wikipedia.org/​wiki/​LDAP|Протокол доступа к каталогам - LDAP]] 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D0%B5%D0%B4%D0%B8%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B2%D1%85%D0%BE%D0%B4%D0%B0|Технология единого входа]] 
-  * [[https://​ru.wikipedia.org/​wiki/​Kerberos|Сетевой протокол аутентификации Kerberos]] 
-  * [[https://​ru.wikipedia.org/​wiki/​RADIUS|Сетевой протокол аутентификации RADIUS]] 
- 
-===== Лабораторные работы ===== 
- 
-==== 6.1 Внешняя аутентификация,​ скрипт для Microsoft AD ==== 
- 
-  * [[Развертывание Active Directory]] (ip: 172.16.1.X) 
-  * Добавляем в домен пользователей user100+X/​Pa$$w0rd100+X (Sidor S. Sidorov) 
-  * Добавляем в AD DNS хост mail.corpX.un 
-  * Устанавливаем хелпер и необходимые компоненты 
-<​code>​ 
-# ldapsearch -x -D "​cn=Administrator,​cn=Users,​dc=corpX,​dc=un"​ -W -h server -b "​dc=corpX,​dc=un"​ "​sAMAccountName=user100+X"​ 
- 
-# wget http://​www.stalker.com/​CGPerl/​CLI.pm 
- 
-# mv CLI.pm /etc/perl/ 
- 
-# apt install libauthen-simple-ldap-perl 
- 
-# wget http://​www.communigate.com/​CGAUTH/​authLDAPNewAD.pl 
-</​code>​ 
- 
-  * Настраиваем хелпер 
-<​code>​ 
-# cat authLDAPNewAD.pl 
-</​code><​code>​ 
-... 
-my %domains=( # e-mail domains 
-  '​corpX.un'​ => { 
-    address=>'​ldap://​pdc.valtest.bmstu.ru:​389', ​ #the URI or address of LDAP server 
-    timeout=>​5,​ # timeout in seconds, 20 by default 
-    adminDN=>'​CN=Administrator,​CN=Users,​DC=corpX,​DC=un', ​    # the DN for admin bind 
-    adminPassword=>'​Pa$$w0rd',​ 
- 
-    searchBase=>'​CN=Users,​DC=corpX,​DC=un',​ 
-    searchFilter=>'​(&​(sAMAccountName=<​user>​)(objectclass=*))',​ 
-    updatePasswords=>​1, ​ #if need to update CommuniGate internal password 
-  }, 
-); 
- 
-my $CGServerAddress =  '​127.0.0.1'; ​  # You should redefine these values 
-my $CLILogin = '​postmaster';​ 
-my $CLIPassword = '​Pa$$w0rd';​ 
-... 
-</​code><​code>​ 
- 
-# chmod +x authLDAPNewAD.pl 
-</​code>​ 
- 
-  * Подключаем хелпер к CGP 
-<​code>​ 
-Settings->​General->​Helpers->​External Authentication 
- 
-Program Path: /​root/​authLDAPNewAD.pl 
-или 
-Program Path: C:​\Perl\bin\perl C:​\var\CommuniGate\authLDAPNewAD.pl 
-</​code><​code>​ 
-# ps ax | grep authLDAPNewAD 
-</​code><​code>​ 
-Users->​Domains->​corpX.ru->​Domain Settings 
-Consult External for Unknown: Yes 
-Consult External on Provision: Yes 
- 
-Users->​Domains->​corpX.un->​Account Defaults->​Settings 
-External Password: Enabled 
-</​code>​ 
- 
-==== 6.2 Миграция почты пользователей ==== 
-<​code>​ 
-cat /​root/​AccountList.txt 
-Name    Password 
-user100+X Pa$$w0rd100+X 
- 
-cd /​opt/​CommuniGate/​Migration/​ 
- 
-./​MoveAccounts --IMAP /​root/​AccountList.txt 172.16.1.254 127.0.0.1 
-</​code>​ 
- 
-==== 6.3 SSO аутентификация в Microsoft AD ==== 
- 
-  * [[https://​www.communigate.com/​communigatepro/​Security.html]] 
-  * Включение в домен Windows client1 ([[Развертывание Active Directory#​Включение в домен Windows клиентов]]) !!! указать DNS 172.16.1.X 
-  * Создание принципала для протокола IMAP 
-<​code>​ 
-C:​\>​ktpass -princ imap/​mail.corpX.un@CORPX.UN -mapuser cgatepro -pass Pa$$w0rd -out keytab.data -crypto RC4-HMAC-NT -ptype KRB5_NT_SRV_HST 
-</​code>​ 
- 
-  * Перенос ключа принципала в CGP (Users->​Domains->​corpX.un->​Security->​Kerberos) 
-  * Входим в домен как user100+X с рабочей станции client1 
-  * [[Thunderbird#​Авто конфигурация клиента]] Thunderbird (IMAP GSSAPI) 
- 
-==== 6.4 Использование CGP в качестве RADIUS сервера ==== 
- 
-**Задача:​ Аутентификация доступа пользователей в Internet** 
- 
-  * Включаем и настраиваем сервис в CGP 
-<​code>​ 
-Settings->​Services->​RADIUS 
-Password: testing123 
-Channels: 3 
-Listener 
-Port: 1812 
-</​code>​ 
- 
-  * Тестирование 
-<​code>​ 
-# radtest user1 '​cpassword1'​ mail.corpX.un 0 testing123 
-</​code>​ 
- 
-  * Использование в SQUID [[Аутентификация доступа к SQUID|RADIUS basic аутентификация]] 
- 
-===== Модуль 7. SIP, PBX, встроенные приложения,​ номерной план, пример своего приложения ===== 
- 
-===== Теория ===== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​IP-%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%B8%D1%8F|IP-телефония]] и протокол [[https://​ru.wikipedia.org/​wiki/​SIP|SIP]] 
-  * [[http://​mx.demos.su/​lists/​cgp-russian/​2013_06/​17732.html|Односторонняя слышимость при переводе звонка]] 
-  * [[https://​www.communigate.com/​CommunigatePro/​russian/​NAT.html|Прохождение NAT]] 
-===== Лабораторные работы ===== 
- 
-  * [[ZoIPer]] user3 
-  * [[SIP Phone Panasonic KX-HDVXXX]] 401 
- 
-==== 7.1 Локализация PBX ==== 
- 
-<​code>​ 
-Users->​Domains->​corpX.un->​PBX->​Create Custom Enviroment 
- 
-Languages->​Create:​ Russian 
- 
-select russian 
-</​code>​ 
-  * [[ftp://​ftp.stalker.com/​pub/​stuff/​noarch/​pbx_russian_files_51.zip]] 
-<​code>​ 
-!!! Upload tar файлов из архива !!! 
- 
-# ls CGateProSoftware/​CommuniGate/​PBXApps/​ 
- 
-# ls /​var/​CommuniGate/​Accounts/​PBXApps 
-</​code>​ 
- 
-==== 7.2 Таблица маршрутизации применительно к SIP, номерной план ==== 
- 
-=== Через таблицу маршрутизации === 
-<​code>​ 
-S:<​6363@*>​ = gatewayincoming{pbx,​media}#​pbx 
-</​code>​ 
- 
-=== Организация внутреннего плана нумерации === 
-<​code>​ 
-Users->​Domains->​corpX.un->​Objects->​user2->​Settings 
-Aliases: 402 
-</​code>​ 
- 
-=== Информация о регистрации SIP пользовательского оборудования === 
-<​code>​ 
-Users->​Domains->​corpX.un->​Objects->​user1->​Status 
- 
-или 
- 
-GETACCOUNTINFO user1 KEY SIPContacts 
-200 data follow 
-( 
-  { 
-    ""​ =  "​sip:​user1@195.19.35.219:​5060";​ 
-    @regdata =  { 
-      Allow =  (ACK, BYE, CANCEL, INFO, INVITE, NOTIFY, OPTIONS, REFER); 
-      CSeq =  #68190; 
-      Call-ID =  3498b62-d4014eab@195.19.35.219;​ 
-      Supported =  (x-sipura); 
-      User-Agent =  "​Linksys/​SPA3102-3.3.6(GW)";​ 
-    }; 
-    Expires =  #​T14-10-2014_05:​30:​41;​ 
-  } 
-) 
-</​code>​ 
- 
-=== CDR === 
-<​code>​ 
-Settings->​Real-Time->​Signals 
-   ​Record Call CDRs: yes 
- 
-# ls /​var/​CommuniGate/​SystemLogs/​CDRs/​ 
-</​code>​ 
- 
-==== 7.3 Правила для голоса ==== 
- 
-<​code>​ 
-Settings->​Router 
-... 
-Signal:<​echotest@*> ​ = echotest#​pbx@localhost ​ ; testing address 
-... 
-</​code>​ 
- 
-pbx - пользователь 
- 
-<​code>​ 
-Users->​Domains->​corpX.un->​Objects->​pbx->​Settings->​Access Rights 
- 
-  Can Modify This Domain and its Accounts Settings 
-    Can Access All Files 
-    Can Impersonate 
-    Can Administer Other Domains 
-</​code>​ 
- 
-==== 7.4 Встроенные приложения ​ ==== 
- 
-=== IVR === 
-<​code>​ 
-Users->​Domains->​corpX.un->​Object->​pbx->​Real-Time->​Advanced 
- 
-Department Menu: Custom: techsupport conference 
-Directory Prefix: 4   - с какой цифры внутренний план нумерации 
-Directory Digits: 3   - длина номера внутреннего плана нумерации 
-</​code>​ 
-<​code>​ 
-пункт techsupport - можно заменить на свое название,​ например abcd 
-для озвучивания пункта необходимо загрузить файл forabcd.wav через 
-Users->​Domains->​corpX.un->​PBX 
-</​code>​ 
-<​code>​ 
-Для пере направления вызова сотрудникам необходимо включить их в одноименную с пунктом меню группу. 
- 
-Users->​Domains->​corpX.un->​Objects->​Create Group: techsupport 
-Members: user1 
-Members: user2 
-</​code>​ 
- 
-=== Голосовая почта === 
-<​code>​ 
-Пользователю необходимо позвонить на свой номер и записать приветствие, ​ 
-далее из своего веб интерфейса выполнить:​ 
- 
-Управление Звонками->​Голосовая Почта->​После:​ 10 сек 
-</​code>​ 
- 
- 
-=== Голосовые конференции === 
- 
-**Вариант1**:​ Позвонить на номер 200, создать конференцию,​ получить по почте номер конференции,​ разослать этот номер всем участникам,​ через номер 200 подключиться вместе со всеми. 
- 
-<​code>​ 
-GETACCOUNTINFO pbx KEY Meetings 
-... 
-</​code>​ 
- 
-**Вариант2**:​ Создать событие,​ у которого место проведения (Location) установлено в phone или conference, а в качестве участников перечислены аккаунты. 
- 
-<​code>​ 
-GETACCOUNTINFO user1 KEY Meetings 
-... 
-</​code>​ 
- 
- 
-==== 7.5 Пишем свое небольшое приложение ==== 
- 
-  * [[http://​www.communigate.com/​CommuniGatePro/​russian/​CGPL.html|Язык Программирования CommuniGate Pro (CG/PL)]] 
- 
-=== Hello World по номеру 301 === 
- 
-<​code>​ 
-Users->​Domains-corpX.un->​PBX->​russian 
-  Upload File: sayhello.sppr 
- 
-или 
- 
-# cat /​var/​CommuniGate/​Accounts/​PBXApps/​russian/​sayhello.sppr 
-</​code><​code>​ 
-entry main is 
-  var errCode = AcceptCall();​ 
-  if isString(errCode) then 
-    syslog("​Failed to accept the call: " + errCode); 
-  else 
-    PlayFile("​blank",​ 500); // 0.5 sec of silence 
-    PlayFile("​Welcome"​);​ 
-  end if; 
-end entry; 
-</​code><​code>​ 
-Users->​Domains-corpX.un 
-  Create Forwarder: 301 
-  Forward To: sayhello#​pbx 
-</​code>​ 
- 
-pbx - имя аккаунта от которой запускается приложение sayhello 
- 
-=== Тоже Hello World, но с CallBack === 
- 
-<​code>​ 
-# cat /​var/​CommuniGate/​Accounts/​PBXApps/​russian/​sayhello_cb.sppr 
-</​code><​code>​ 
-entry main is 
-  var data = Vars().startParameter[0];​ 
-  syslog("​Will call to " + ObjectToString(data));​ 
-  var errCode = StartCall(EmailToSIPURI(data));​ 
-  if isString(errCode) then 
-    syslog("​Call failed: " + errCode); 
-    stop; 
-  end if; 
-  loop 
-    data = ReadInput(10);​ 
-  exitif isCallCompletedEvent(data);​ 
-  end loop; 
-  if isConnected() then 
-    PlayFile("​blank",​ 500); 
-    PlayFile("​welcome"​);​ 
-    PlayFile("​blank",​ 500); 
-    PlayFile("​goodbye"​);​ 
-  end if; 
-end entry; 
-</​code><​code>​ 
-STARTPBXTASK pbx PROGRAM sayhello_cb PARAM ("​401"​) 
-</​code>​ 
- 
-=== Перевод звонка без сопровождения (blind transfer) === 
- 
-В приложении пример скрипта,​ реализующего b2bua в режиме бриджа (не миксера) и позволяющего с помощью DTMF команд выполнить перевод звонка без сопровождения (blind transfer). Данный скрипт воспринимает DTMF команды,​ посланные как SIP INFO запросы,​ а не в медиа канале (например,​ в hPronto на странице Preferences -> Dialer опцию "​Sending Method"​ нужно установить в signal). 
-Если нужно, чтобы DTMF команды работали и в том случае,​ когда они посылаются в голосовом канале (rfc2833 или inband), то нужно подключать стороны через миксер,​ а не через бридж, для этого нужно немного модифицировать часть скрипта до вызова процедуры bridgedCallLoop(). 
- 
-Пожалуйста,​ дайте нам знать, если потребуется помощь в модификации скрипта для подключения сторон с использованием миксера (чтобы обрабатывать DTMF, отправленные как inband или rfc2833). 
- 
-Сам механизм перевода следующий. При установлении соединения каждый из участников может набрать #nnnn (4-значный номер),​ чтобы дать сигнал для перевода партнера на 4-значный номер nnnn. После удачного перевода инициатор перевода будет отсоединен. На набор каждой цифры номера дается не более 5 секунд. Если за это время не было введена цифра, то перевод не осуществляется и нужно будет заново набирать #nnnn для осуществления попытки перевода (см. комментарии в скрипте). Также в процессе набора номера,​ если уже ошиблись,​ можно набрать *, чтобы начать набор #nnnn заново. 
- 
-Логику меню набора номера для перевода можно адаптировать. 
- 
-Приложение b2bua-transfer.sppr нужно закачать в PBX окружение (в WebAdmin -> Users -> PBX). 
-Для направления звонков в это приложение лучше использовать серверное сигнальное правило,​ потому что при направлении через запись в маршрутизаторе нужно будет вводить префиксы,​ чтобы не было зацикливания. 
- 
-Серверное сигнальное правило может выглядить примерно так: 
- 
-<​code>​ 
-Data 
-Operation ​      ​IS ​      ​INVITE 
-Call Type       ​IS ​      AV 
-Submit Address ​ IS NOT   LOCAL [0.0.0.0]* 
-Target Address ​ IS       ​sip:​*@domain.name 
- 
-Action 
-Redirect To              b2bua-transfer#​pbx@domain.name 
-Discard Rules 
-</​code>​ 
- 
-Здесь первые три условия стандартные,​ третье условие позволяет избежать зацикливания данного правила,​ так как оно не будет применяться для звонков,​ инициированных PBX приложением (то есть для вызова из исходящей ноги Caller приложения правило уже применяться не будет). 
-Далее нужно прописать набор условий (например,​ Target Address), которые будут задавать набор адресов отправителей и получателей звонка,​ для которых должно запускаться это приложение с логикой перевода через DTMF. В примере выше правило будет запускаться для всех номеров получателей в домене domain.name. 
-В логике скрипта можно дополнительно добавить проверку,​ чтобы пользоваться данными DTMF командами могли только локальные пользователи,​ а не внешние и т.п. 
- 
-Скрипт приведен как пример,​ он тщательно не тестировался,​ но функционал трансфера проверили - работает. Если будут какие-либо ошибки или вопросы по его использованию,​ пожалуйста,​ обращайтесь. 
- 
-<​code>​ 
-// ================================================== // 
-//             ​simple B2BUA application ​              // 
-//             ​supporting DTMF commands ​              // 
-// ================================================== // 
- 
-entry     ​Caller ​                  ​forward;​ 
-procedure bridgedCallLoop(peerLeg) forward; 
-function ​ transferTo(numDigits) ​   forward; 
-procedure doSysLog(str) {SysLog("​B2BUA:​ " + str);} 
- 
-// 
-// ingress task entry 
-// 
-entry Main { 
-  var callParams ​             = NewDictionary();​ 
-  callParams.(""​) ​            = LocalURI(); 
-  callParams.fromName ​        = RemoteRealName();​ 
-  callParams.From ​            = RemoteURI();​ 
-  callParams.("​Call-ID"​) ​     = PendingRequestData("​Call-ID"​) + "​.b2b";​ 
-  callParams.("​Max-Forwards"​) = PendingRequestData("​Max-Forwards"​)-1;​ 
-  callParams.customIdentity ​  = "";​ 
- 
-  doSysLog("​callParams:​ " + callParams.objectToString());​ 
-  var peerLeg = spawn Caller(callParams);​ 
-  if(!IsTask(peerLeg)) { 
-    doSysLog("​failed to spawn Caller task"​);​ 
-    RejectCall(peerLeg);​ stop; 
-  } 
- 
-  var errorCode = StartBridge(peerLeg);​ 
-  if(errorCode != null) { 
-    void(SendEvent(peerLeg,"​stop",​errorCode));​ 
-    doSysLog("​call failed: " + errorCode.string());​ 
-    RejectCall(errorCode);​ stop; 
-  } 
- 
-  bridgedCallLoop(peerLeg);​ 
-  stop; 
-} 
- 
-// 
-// egress task entry 
-// 
-entry Caller { 
-  var peerLeg = Vars().parent,​ callParams = Vars().startParameter,​ bridgeEvent,​input,​errorCode;​ 
- 
-  void(Impersonate(SIPURIToEmail(callParams.From)));​ 
-  void(SignalOption("​refer","​peer"​));​ 
-  void(SignalOption("​bridgeBreak","​disconnect"​));​ 
- 
-  bridgeEvent = ReadInput(10);​ 
-  if(!IsStartBridgeEvent(bridgeEvent) || bridgeEvent.sender != peerLeg) {doSysLog("​unexpected start event: " + bridgeEvent.objectToString());​ stop;} 
-  errorCode = StartBridgedCall(callParams,​bridgeEvent);​ 
-  ​ 
-  if(errorCode) {RejectBridge(bridgeEvent,​errorCode);​ stop;} 
- 
-  while(true) { 
-    input = ReadInput(3600);​ 
-  exitif !IsCallProvisionEvent(input);​ 
-  } 
- 
-  if((IsDictionary(input) && input.what == "​stop"​) || IsBreakBridgeEvent(input)) {stop;} 
-  if(!IsCallCompletedEvent(input)) { 
-    doSysLog("​unexpected event: " + input.objectToString());​ 
-    errorCode = "​unexpected event";​ 
-  } elif(input.parameter != null) { 
-    doSysLog("​call failed: " + input.parameter);​ 
-    errorCode = input.parameter;​ 
-  } 
-  if(errorCode) {RejectBridge(bridgeEvent,​errorCode);​ stop;} 
- 
-  bridgedCallLoop(peerLeg);​ 
-  stop; 
-} 
- 
-// 
-// Main loop: processing events and DTMF commands in the connected state 
-// 
-procedure bridgedCallLoop(peerLeg) { 
-  if(!IsTask(peerLeg)) {return;} 
-  
-  while(IsConnected()) { 
-    var input = ReadInput(60);​ 
-    doSysLog("​main loop INPUT: " + (input.string() || "​NULL"​));​ 
- 
-    if(input == "#"​) { 
-      input = transferTo(4); ​ // after "#"​ enter 4-digit number to transfer the call to 
-      if(IsString(input)) { 
-        void(SendEvent(peerLeg,"​peerTransfer",​input + "​@"​ + MyDomain()));​ 
-        input = null; 
-      } 
-    } 
-    ​ 
-    if(input == null) { 
-      null; 
-    ​ 
-    } elif(IsDictionary(input) && input.sender == peerLeg && input.what == "​peerTransfer"​ && IsString(input.parameter)) { 
-      var transferError = TransferCall(input.parameter);​ 
-      if(transferError == null) { 
-        doSysLog("​call transferred to: " + input.parameter);​ 
-        Disconnect();​ 
-      } else { 
-        doSysLog("​transfer failed: " + transferError.string());​ 
-      } 
- 
-    } elif(IsDisconnectEvent(input) || IsBreakBridgeEvent(input)) { 
-      void(SendEvent(peerLeg,"​stop","​disconnected"​));​ 
-      Disconnect();​ 
- 
-    } elif(IsDictionary(input) && input.what == "​stop"​) { 
-      Disconnect();​ 
- 
-    } elif(IsString(input)) { 
-      void(SendEvent(peerLeg,"​dtmf",​input));​ 
- 
-    } elif(IsCallInfoEvent(input)) { 
-      doSysLog("​relaying INFO received: " + input.objectToString());​ 
-      void(SendEvent(peerLeg,"​info",​input.parameter));​ 
- 
-    } elif(IsDictionary(input) && input.what == "​dtmf"​) { 
-      void(SendDTMF(input.parameter));​ 
- 
-    } elif(IsDictionary(input) && input.what == "​info"​) { 
-      void(SendCallInfo(input.parameter));​ 
- 
-    } else { 
-      doSysLog("​unknown event: " + input.objectToString());​ 
-    } 
-  } 
-  return; 
-} 
- 
-// 
-// Entering a number with '​numDigits'​ digits, 5-second timeout to enter one digit. 
-// If entered number has less than '​numDigits'​ digits, do nothing and return back to the main loop. 
-// If '​*'​ is entered, return back to the main loop immediately without waiting of 5-second timeout. 
-// After returning to mail loop one can enter the '#'​ again and make another attempt to enter the number to transfer the call. 
-// 
-function transferTo(numDigits) { 
-  var buffer = "";​ 
-  if(!IsNumber(numDigits) || numDigits <= 0) {return null;} 
-  for(var i = 0; i < numDigits; i += 1) { 
-    var input = ReadInput(5);​ 
-    doSysLog("​transfer INPUT: " + (input.string() || "​NULL"​));​ 
-    if(input == null || input == "​*"​) {  // return to the mail loop where one can make another attempt to enter #nnnn 
-      return null; 
-    } elif(IsDigit(input)) { 
-      buffer += input; 
-    } else {    // unexpected event, for example, Disconnect or BreakBridge event 
-      return input; 
-    } 
-  } 
-  return buffer; ​ // return the entered number with '​numDigits'​ digits 
-} 
-</​code>​ 
- 
-==== 7.6 Роутинг SIP-звонков ==== 
- 
-=== Добавление маршрута для номерного плана на SIP шлюз === 
-<​code>​ 
-Settings->​Router 
-... 
-S:<​1(2d)@*> ​    = 1*@192.168.1.3 ;​smg1016 ​ 
- 
-S:<​0X(3d)@*> ​   = *@mail.corpX.un 
-... 
-</​code>​ 
- 
-=== Организация исходящих вызовов в PSTN через voip провайдера с аутентификацией === 
-<​code>​ 
-Settings->​Router 
-... 
- 
-<​8(10d)@*> ​   = 8*@telnum 
-<​+7(10d)@*> ​   = +7*@telnum 
- 
-;<​+(7-20d)@*> ​        = +*@telnum ​              ; +nnnnn calls -> to telnum 
-;... 
-... 
-Signal:​telnum ​       = pstn                    ; unknown telnum -> PSTN 
-Signal:<​*@pstn> ​     = gatewaycaller{*}#​pbx ​   ; start '​gatewaycaller'​ app 
-... 
- 
-Users->​Account Defaults->​PSTN 
-  или 
-Users->​Domains->​corpX.un->​Account Defaults->​PSTN 
-  или 
-Users->​Domains->​corpX.un->​Objects->​user1->​Real-Time->​PSTN 
- 
-Gateway Domain: voip1.un 
-Name for Gateway: 00000X 
-Password for Gateway: spasswordX 
-</​code>​ 
- 
-=== Организация входящих вызовов из PSTN (регистрация на voip провайдере) === 
-<​code>​ 
-Users->​Domains->​corpX.un->​Objects->​pbx->​Real-Time->​RSIP 
-Name: voip1 
-Register Every: 5 min 
-Account: 00000X 
-at Host: voip1.un 
-Authentication Name: 00000X 
-Password: spasswordX 
-Target: 
- 
-GETACCOUNTRSIPS pbx 
-200 data follow 
-{ 
-  sipnet =  { 
-    authName =  00000X; 
-    domain =  voip1.un; 
-    fromName =  00000X; 
-    password =  spasswordX; 
-    period =  5m; 
-  }; 
-} 
- 
- 
-Users->​Domains->​corpX.un->​Objects->​pbx->​Real-Time->​Incoming Call Rules->​Edit 
-Redirect To is #pbx 
-</​code>​ 
- 
-===== Модуль 8. Использование CGP в качестве Web сервера ===== 
- 
-===== Лабораторные работы ===== 
- 
-==== 8.1 Создание персональных страниц пользователей ==== 
- 
-Доступ:​ http://​corpX.un/​~user1 
- 
-Местоположение и файл по умолчанию 
-<​code>​ 
-# cat /​var/​CommuniGate/​Accounts/​user1.macnt/​account.web/​default.html 
-</​code>​ 
- 
-Доступ по имени http://​user1.corpX.un ([[http://​www.communigate.com/​CommuniGatePro/​russian/​HowTo.html|WebURL]]) 
-<​code>​ 
-Settings->​Router 
-... 
-mail.corpX.un = corpX.un 
- 
-*.corpX.un = *@fict 
-<​LoginPage%*@fict>​ = * 
-</​code>​ 
- 
- 
-==== 8.2 Разработка CGI приложений на CG/PL ==== 
- 
-Приложение Web Callback 
- 
-<​code>​ 
-STARTPBXTASK pbx PROGRAM rendezvous PARAM ("​401","​8916XXXXXXX"​) 
-</​code><​code>​ 
-Users->​Skins->​Upload File: webcallback.wcgp 
- 
-или 
- 
-# cat /​var/​CommuniGate/​WebSkins/​webcallback.wcgp 
-</​code><​code>​ 
-entry sysEntry is 
- 
-  SetHTTPResponseType("​text","​html"​);​ 
-  SetHTTPResponseCode(200);​ 
- 
-  var phone = GetHTTPParameter("​phone"​);​ 
-  var operatorphone = "​401";​ 
-  var data = "";​ 
-  var cmd = "";​ 
-  ​ 
-  if not isString(phone) ​ 
-  then  
-    data = "<​h1>​Enter phone number</​h1><​form action=webcallback.wcgp><​input name=phone><​input type=submit></​form>"; ​ 
-  else 
- cmd = "​STARTPBXTASK pbx PROGRAM rendezvous PARAM(\""​ + phone + "​\",​\""​ + operatorphone + "​\"​)";​ 
-    data = "<​h1>​Waiting call on phone " + phone + "</​h1>";​ 
-    var errCode = ExecuteCLI(cmd);​ 
-  end if; 
- 
-  SetHTTPResponseData(data);​ 
-end entry; 
-</​code><​code>​ 
-http://​mail.corpX.un/​sys/​webcallback.wcgp 
-</​code>​ 
- 
-==== 8.3 Поддержка Provisioning для телефонных аппаратов ==== 
- 
-  * [[Сервис DHCP]] 
-  * tftp: Settings->​Access->​TFTP->​Listener 
-  * [[SIP Phone Panasonic KX-HDVXXX]] 
-===== Модуль 9. Разное ===== 
- 
-==== Анализ журналов ==== 
-<​code>​ 
-Monitors->​Logs 
- 
-# tail -f /​var/​CommuniGate/​SystemLogs/​`date '​+%Y-%m-%d'​`.log 
-</​code>​ 
- 
-==== Использование триггеров ==== 
- 
-=== HTTP SMS шлюзы === 
- 
-<​code>​ 
-Settings->​General->​Triggers 
-  Events 
-    httpAdminAuthFailed: ​ ... 
-    failedAUTHs: ​ ... 
-  Handlers 
-    Send URL: https://​rest.nexmo.com/​sms/​json?​api_key=e5610a90&​api_secret=1d98ff2a&​from=NEXMO&​to=79164115716&​text=mail.corpX.un+par+^0+val+=+^2 
-</​code>​ 
- 
-Параметр ^1 возвращает строку с пробелом,​ которая некорректно передается от CGP к NEXMO 
- 
-=== Отправка SMS по SMPP === 
- 
-Надо прописать его в Settings -> Real-Time -> SMPP 
-server smpp0.nexmo.com:​8000,​ SystemID и Password - из аккаунта на nexmo (api_key и  api_secret). 
- 
-<​code>​ 
-GETMODULE SMPP 
-</​code>​ 
- 
-==== Использование custom счетчиков ==== 
-<​code>​ 
-my $error = $cli->​SendCommand('​SetStatElement 1.3.6.1.4.1.5678.2.1.1000.1 SET '​.$value);​ 
-</​code>​ 
- 
-==== Использование snmp ==== 
- 
-==== Использование в качестве syslog сервера ==== 
- 
-===== Cluster ===== 
- 
-  * [[http://​www.communigate.com/​ru/​main/​solutions/​cluster.html]] 
- 
-===== Дополнительные материалы ===== 
- 
-==== Пример web редиректа ==== 
-<​code>​ 
-> Здравствуйте. 
-> 
-> Подскажите,​ есть ли возможность средствами CGP перенаправлять подключения пользователей к 
-> 
-> http://​student.bmstu.ru 
-> 
-> на 
-> 
-> https://​student.bmstu.ru 
- 
-Да, конечно. Страничку login.wssp в дефолтном скине домена надо подправить,​ добавить что-то типа 
- 
-<!--%%IF NOT(REQUESTSECURE() | "​YES"​) --><​META HTTP-EQUIV="​Refresh"​ CONTENT="​0;​ URL=https://​%%domainName%%"><​!--%%ENDIF-->​ 
- 
-Со стандартным вариантом login.wssp можно поступить так: 
- 
-<!--%%IF secureChannel --> 
-the standard login.wssp data 
-<​!--%%ELSE --> 
-<​HTML>​ 
-<​HEAD>​ 
- <​META HTTP-EQUIV=REFRESH CONTENT="​0;​ url=https://​%%domainName%%/">​ 
- <​TITLE>​Redirecting to secure interface</​TITLE>​ 
-</​HEAD>​ 
-</​HTML>​ 
-<​!--%%ENDIF--> ​ 
-</​code>​ 
- 
-==== Не соответствие значений знимаемого места в интерфейсе CGP и на диске для учетной ==== 
-<​code>​ 
-Такое может произойти. если из директории аккаунта без ведома сервера были удалены почтовые папки. Проверьте соответствие списка папок в account.info куальному содержимому этого аккаунта. ​ 
- 
-Можно просто удалить account.info (и, желательно,​ перезапустить сервер,​ потоьу что содержимое может кэшироваться в памяти) Сервер потом сам перечитает папки и воссоздаст строчки для них. ​ 
-</​code>​ 
communigate_pro_new.1564034229.txt.gz · Last modified: 2019/07/25 08:57 by val