====== Communigate Pro ====== * [[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. Установка сервера, настройка почты, анти-спам стратегии ===== ===== Теория ===== * Про Communigate (архитектура решения, функциональность) * [[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/|Документация]] * Про почтовые протоколы: [[https://ru.wikipedia.org/wiki/SMTP|SMTP]] * Почему появляется [[https://ru.wikipedia.org/wiki/Спам|спам]] * [[https://ru.wikipedia.org/wiki/IMAP|IMAP]] и [[https://ru.wikipedia.org/wiki/POP3|POP3]] разница между протоколами * Общие почтовые ящики, псевдонимы ящиков ===== Лабораторные работы ===== ==== 1.1 Установка сервера, Демонстрация стандартных интерфейсов (Pronto, WebUser) ==== === Установка === * [[Настройка стендов слушателей]] * [[ftp://www.communigate.com/pub/CommuniGatePro/]] # wget ftp://www.communigate.com/pub/CommuniGatePro/6.1/CGatePro-Linux-Intel-616.tgz # tar -xvf CGatePro-Linux-Intel.tgz === Запуск из командной строки === * [[Сервис NTP#Локализация временной зоны]] # CGateProSoftware/CommuniGate/CGServer-static --Base /var/CommuniGate --LogAll === Автоматический запуск === * [[Управление сервисами в Linux#Пример файла конфигурации для запуска/остановки сервиса]] # service communigate start # cat /var/CommuniGate/ProcessID === Первоначальная настройка === * [[http://mail.corpX.un:8010]] Postmaster Password: xxxxxx Main Domain Name: corpX.un Time Zone: Europa/Moscow Interface: Expert # cat /var/CommuniGate/Settings/Main.settings Users->Account Defaults->Mail Settings->Mailbox Storage->New Mailbox Format: Sliced # cat /var/CommuniGate/Settings/DomainDefault.settings Settings->Network->Blacklisted IPs->UnBlacklistable (White Hole) IP Addresses: 172.16.1.0/24 # cat /var/CommuniGate/Settings/WhiteHoles.data Settings->Network->Client IPs: !172.16.1.254 172.16.1.0/24 === Создание учетных записей === Users->Domains->corpX.un->Objects-> Create Account: user1 Real Name: Иванов Иван Иванович CommuniGate Password: cpassword1 Create Account: user2 Real Name: Петров Петр Петрович CommuniGate Password: cpassword2 # cat /var/CommuniGate/Accounts/user1.macnt/account.settings === Настройка web интерфейсов пользователей === 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 Users->Account Defaults->Preferences Language: Russian Layout: Basic Пользователи->Домены->corpX.un->Объекты->postmaster->Настройки->Язык: ...(English) === Общие почтовые ящики === * user1: Папки->Создать->Почтовый Ящик->public1 Папки->pubic1->Управление Папкой Идентификатор->user2->Все галочки (задание для слушателей - найти описание прав в справке) * user2: Папки->Управление->Псевдонимы Папок Имя Псевдонима: public1 Имя Папки: ~user1/public1 === Доступ администратора к ящикам пользователей === Folders->Management->Folder Aliases Open Folder: ~user1/Sent Items ==== 1.2 Роутинг почты ==== === Настройка DNS === mail.corpX.un. A 172.16.1.100+X corpX.un. MX 10 mail.corpX.un. compX.un. MX 10 mail.corpX.un. === Расширение формата почтовых адресов === gate.isp.un% mail public1#user1@corpX.un === Использование утилиты mail === mail.corpX.un# file /usr/bin/mail /usr/bin/mail: symbolic link to /opt/CommuniGate/mail mail.corpX.un# echo Hello | mail -s Hello public1#user1@corpX.un === Преобразование адресов правилами маршрутизации === Направление публичной почты в соответствующий ящик Settings->Router ... = public1#user1@corpX.un ... Замена домена компании Settings->Router ... <*@compX.un> = *@corpX.un ... ==== 1.3 Различные методы борьбы со спамом, подкручиваем сервер ==== * [[https://ru.wikipedia.org/wiki/Электронная_почта|Электронная почта]] * [[https://ru.wikipedia.org/wiki/Спам|Спам]] * [[https://ru.wikipedia.org/wiki/Sender_Policy_Framework|Sender Policy Framework]] === Настройка параметров приемника SMTP === Settings->Mail->SMTP->Receiving Verify Return-Path for: ... Check SPF records: ... Non-Client Sender Delay Prompt for: 10 === Тестирование параметров приемника SMTP === gate.isp.un% mail user1@corpX.un gate.isp.un% tail -f /var/log/maillog === Использование технологии Honeypot === Settings->Router ... = spamtrap ... gate.isp.un% mail user1@corpX.un director@corpX.un ==== 1.4 Сертификаты безопасности, обслуживание нескольких доменов одновременно ==== === Создание сертификата TLS для домена corpX.un === Устанавливаем в базу данных доверенных сертификатов серверов Users->Domains->corpX.un->Security->SSL/TLS PKI Services: Enable Private Key Key Size: 1024 Generate Key Certificate Generator Common Name: *.corpX.un Country: RU State/Province: Moscow region City: Mosсow Organization: cko Unit: noc Contact: postmaster@corpX.un Generate Self Signed === Использование S/MIME === Пользователь postmaster создает у себя в интерфейсе сертификат для подписи и шифрования и отправляет подписанное письмо по адресу user1@corpX.un Подделать текст письма можно: # vim /var/CommuniGate/Accounts/user1.macnt/INBOX.mbox или # vim /var/CommuniGate/Accounts/user1.macnt/INBOX.mslc/data1 === Настройка DNS и маршрутизации почты === mail.compX.un. A 172.16.1.200+X compX.un. MX 10 mail.compX Settings->Router ; <*@comp8.un> = *@corp8.un === Настройка дополнительного ip адреса (ip alias) в ОС === * [[Настройка сети в Linux#Статическая настройка параметров]] === Создаем второй домен compX.un === Users->Domains->CreateDomain->compX.un Users->Domains->compX.un->Domain Settings->Domain Aliases: mail.compX.un === Для поддержки SSL/TLS привязываем домены к разным адресам сервера === 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] === Создаем пользователя в новом домене и назначаем ему права администратора === 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 === Логинемся как user3 из домена compX.un и управляем доменом === http://mail.compX.un:8010/ Безопасность->SSL/TLS->Генератор Сертификатов->Имя-Идентификатор: *.comp20.un ===== Модуль 2. Управление пользователями, внешняя аутентификация, внешние фильтры ===== ===== Теория ===== * Протоколы идентификации пользователей ([[https://ru.wikipedia.org/wiki/Аутентификация|Аутентификация]], [[https://ru.wikipedia.org/wiki/Авторизация|Авторизация]]) * Решения для борьбы со [[https://ru.wikipedia.org/wiki/Спам|спамом]] ===== Лабораторные работы ===== ==== 2.1 Регистрация учетных записей пользователей ==== === Создаем шаблон нового пользователя === Users->Account Defaults Users->Domains->compX.un->Objects->Template === Использование CLI === * [[http://www.stalker.com/CommuniGatePro/russian/CLI.html|Интерфейс Командной Строки / API]] shell> telnet mail.corpX.un 106 или shell> nc mail.corpX.un 106 USER postmaster PASS Pa$$w0rd NOTIMEOUT LISTACCOUNTS corpX.un GETACCOUNTSETTINGS user1 GETACCOUNTDEFAULTS corpX.un GETACCOUNTEFFECTIVESETTINGS user1 GETACCOUNTINFO user1 GETACCOUNTINFO user3@compX.un CREATEACCOUNT user4 {Password = "cpassword4";RealName = "Кошкин Василий Муркович";} QUIT === Создаем пользователя через CLI === * Perl [[Язык программирования Perl#Пример 5]] === Создаем пользователя через файл со списком === Примечание: использовать кодировку utf-8 и табуляцию между столбцами Name RealName Password user3 'Сидоров Сидор Сидорович' cpassword3 ==== 2.2 Внешняя аутентификация, скрипт для AD ==== === Аутентификация с созданием пользователя === * [[Развертывание Active Directory]] (ip: 172.16.1.X) * Добавляем в домен пользователей user3/Pa$$w0rd3 (Sidor S. Sidorov) * Добавляем в AD DNS хост mail.corpX.un * Устанавливаем хелпер и необходимые компоненты # ldapsearch -x -D "cn=Administrator,cn=Users,dc=corpX,dc=un" -W -h server -b "dc=corpX,dc=un" "sAMAccountName=user3" # wget http://www.stalker.com/CGPerl/CLI.pm # mv CLI.pm /etc/perl/ # apt-get install libauthen-simple-ldap-perl # wget http://www.communigate.com/CGAUTH/authLDAPNewAD.pl * Настраиваем хелпер # cat authLDAPNewAD.pl ... my %domains=( # e-mail domains 'corpX.un' => { address=>'172.16.1.X', #the address or IP of LDAP server port=>389, # LDAP port, 389 by default 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=)(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'; ... # chmod +x authLDAPNewAD.pl * Подключаем хелпер к CGP Settings->General->Helpers->External Authentication Program Path: /root/authLDAPNewAD.pl или Program Path: C:\Perl\bin\perl C:\var\CommuniGate\authLDAPNewAD.pl 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 === SSO AD аутентификация === * [[https://www.communigate.com/communigatepro/Security.html]] * Включение в домен Windows client1 ([[Развертывание Active Directory#Включение в домен Windows клиентов]]) !!! указать DNS 172.16.1.X * Создание принципала для протокола IMAP 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 * Перенос ключа принципала в CGP (Users->Domains->corpX.un->Security->Kerberos) * Входим в домен как user3 с рабочей станции client1 * [[Thunderbird#Авто конфигурация клиента]] Thunderbird (IMAP GSSAPI) ==== 2.3 Использование Communigate в качестве информационной системы ==== === LDAP === **Задача: использование адресной книги imap/pop3 клиентами** * Включаем синхронизацию объектов домена с каталогом Users->Directory Integration->Domain Subtree->Create It Directory->Browser * Чтение данных с аутентификацией FreeBSD: # setenv LDAPTLS_REQCERT never или # pkg install ca_root_nss # setenv LDAPTLS_CACERT /usr/local/etc/ssl/cert.pem Linux: # export LDAPTLS_REQCERT=never Linux/FreeBSD: # ldapsearch -x -D "user1@corpX.un" -W -b"cn=corpX.un" -H ldaps://mail.corpX.un:636 * Разрешаем читать публичные данные без аутентификации Directory->Access Rights Name: ReadAll Bind DN: anyone * Добавление атрибутов Directory->Units->Main->Schema Users->Directory Integration Public Info: telephoneNumber === RADIUS === **Задача: Аутентификация доступа пользователей в Internet** * Включаем и настраиваем сервис в CGP Settings->Services->RADIUS Password: testing123 Channels: 3 Listener Port: 1812 * Тестирование # radtest user1 'cpassword1' mail.corpX.un 0 testing123 * Использование в SQUID [[Аутентификация доступа к SQUID|RADIUS basic аутентификация]] ==== 2.4 Фильтрация писем, почтовые правила ==== Задача: сохранять всю исходящую почту в особой папке у системного администратора или у сотрудника, отвечающего за безопасность. * [[http://www.communigate.com/CommuniGatePro/russian/HowTo.html#StoreAll]] Задача: организовать коллективный почтовый ящик без использования маршрутизации * На уровне сервера создаем алиас для user1: Settings->Router ... ; = public1#user1@corpX.un ... Users->Domains-corpX.un->Objects->user1->Settings Aliases: public1 * На уровне user1 создаем правила: Управление Почтой Добавить Правило: Move to public1 Изменить Любой Кому/Копия: равно *public1* Записать в: public1 Выбросить Задача: организовать список рассылки с фиксированным списком чиcлом участников Создаем группу public2 с пользователями user1 и user2 Set Reply-To to Group: no GETSERVERMAILRULES 200 data follow ( ( 6, mark_to_noc, ((Subject, "is not", "*[public2]*"), ("Any To or Cc", is, "*public2@corpX*")), (("Tag Subject", "[public2] ")), "Помечаем тему всех писем, идущих в группу" ), ( 4, replace_from_noc, ((Subject, is, "*[public2]*"), (To, "is not", "*public2@corpX*")), (("Add Header", "Reply-To: public2@corpX.un")), "Устанавливаем Reply-To в группу для всех ответов из группы" ) ) ==== 2.5 Внешние фильтры для писем, устанавливаем антиспам ==== * [[http://program.farit.ru/doc/cgpav-rus.html|Clamav, SpamAssassin внешний фильтр для CommuniGate Pro]] === Установка антивируса === * [[Сервис Clamav]] === Подготовка clamd для использования с CGP === # aa-disable usr.sbin.clamd # /etc/init.d/apparmor restart # usermod clamav -G root # service clamav-daemon restart # clamdscan /var/CommuniGate/virus.zip === Компиляция, настройка и тестирование хелпера === * Управление ПО в Linux, [[Управление ПО в Linux#Работа с исходными текстами]] # 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=no --with-cgpro_dir=/var/CommuniGate # make && make install # cat /var/CommuniGate/Settings/cgpav.conf ... clamd_socket = /var/run/clamav/clamd.ctl ... # /var/CommuniGate/cgpav 1 FILE virus.zip 1 DISCARD === Подключение хелпера к CGP === Settings->General->Helpers->Content Filtering Enabled: Clamav Program Path: /var/CommuniGate/cgpav === Включение хелпера с помощью глобальных правил обработки почты === Settings->Mail->Rules Name: Clamav Action: ExternalFilter Parameter: Clamav ==== 2.6 Использование CGP в качестве пограничного сервера ==== Для домена compX пользователи которого заведены на сервере преподавателя Settings->Router ... <*@comp1.un> = *%comp1.un@isp.un.25.via ... ===== Модуль 3. SIP, PBX, встроенные приложения, номерной план, пример своего приложения ===== ===== Теория ===== * Общие принципы организации звонков (SIP + Media); * Сигналы в Communigate Pro; * PBX приложения и PBX среда; ===== Лабораторные работы ===== ==== 3.1 Локализация PBX ==== Users->Domains->corpX.un->PBX->Create Custom Enviroment Languages->Create: Russian select russian Download ftp://ftp.stalker.com/pub/stuff/noarch/pbx_russian_files_51.zip !!! Upload tar файлов из архива !!! # ls CGateProSoftware/CommuniGate/PBXApps/ # ls /var/CommuniGate/Accounts/PBXApps ==== 3.2 Таблица маршрутизации применительно к SIP, номерной план ==== === Через таблицу маршрутизации === S:<6363@*> = gatewayincoming{pbx,media}#pbx === Организация внутреннего плана нумерации === Users->Domains->corpX.un->Objects->user2->Settings Aliases: 402 === Информация о регистрации SIP пользовательского оборудования === 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; } ) === CDR === Settings->Real-Time->Signals Record Call CDRs: yes # ls /var/CommuniGate/SystemLogs/CDRs/ ==== 3.3 Правила для голоса ==== Settings->Router ... Signal: = echotest#pbx@localhost ; testing address ... pbx - пользователь 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 ==== 3.4 Встроенные приложения ==== === IVR === Users->Domains->corpX.un->Object->pbx->Real-Time->Advanced Department Menu: Custom: techsupport conference Directory Prefix: 4 - с какой цифры внутренний план нумерации Directory Digits: 3 - длина номера внутреннего плана нумерации пункт techsupport - можно заменить на свое название, например abcd для озвучивания пункта необходимо загрузить файл forabcd.wav через Users->Domains->corpX.un->PBX Для пере направления вызова сотрудникам необходимо включить их в одноименную с пунктом меню группу. Users->Domains->corpX.un->Objects->Create Group: techsupport Members: user1 Members: user2 === Голосовая почта === Пользователю необходимо позвонить на свой номер и записать приветствие, далее из своего веб интерфейса выполнить: Управление Звонками->Голосовая Почта->После: 10 сек === Голосовые конференции === **Вариант1**: Позвонить на номер 200, создать конференцию, получить по почте номер конференции, разослать этот номер всем участникам, через номер 200 подключиться вместе со всеми. GETACCOUNTINFO pbx KEY Meetings ... **Вариант2**: Создать событие, у которого место проведения (Location) установлено в phone или conference, а в качестве участников перечислены аккаунты. GETACCOUNTINFO user1 KEY Meetings ... ==== 3.5 Пишем свое небольшое приложение ==== * [[http://www.communigate.com/CommuniGatePro/russian/CGPL.html|Язык Программирования CommuniGate Pro (CG/PL)]] === Hello World по номеру 301 === Users->Domains-corpX.un->PBX->russian Upload File: sayhello.sppr или # cat /var/CommuniGate/Accounts/PBXApps/russian/sayhello.sppr 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; Users->Domains-corpX.un Create Forwarder: 301 Forward To: sayhello#pbx pbx - имя аккаунта от которой запускается приложение sayhello === Тоже Hello World, но с CallBack === # cat /var/CommuniGate/Accounts/PBXApps/russian/sayhello_cb.sppr 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; STARTPBXTASK pbx PROGRAM sayhello_cb PARAM ("401") ===== Модуль 4. Работа с внешними SIP шлюзами, объединение двух IP АТС ===== ===== Теория ===== * [[http://mx.demos.su/lists/cgp-russian/2013_06/17732.html|Односторонняя слышимость при переводе звонка]] ===== Лабораторные работы ===== ==== 4.1 Роутинг SIP-звонков с аутентификацией на стороннем сервере — обычно это SIP провайдеры ==== === Организация исходящих вызовов в PSTN === Settings->Router ... <8916(7d)@*> = 8916*@telnum <8495(7d)@*> = 8495*@telnum <8499(7d)@*> = 8499*@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 === Организация входящих вызовов из PSTN === 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 Комментарии службы поддержки по поводу реальной строки регистрации: gatewayincoming--pbx--val.bmstu.ru%23pbx@195.19.32.125 CommuniGatePro-callLeg/6.0.9 Я: gatewayincoming - видимо приложение? СП: Да, аналогично приёму звонка через gatewayincoming{pbx@val.bmstu.ru,media}#pbx@195.19.32.125, то есть: доставить INVITE в аккаунт pbx домена, которому принадлежит (в настройках CGPro, не в DNS!) IP 195.19.32.125 и от его имени выполнить скрипт, передав ему pbx@val.bmstu.ru в качестве параметра. Скрипт реализует B2BUA: терминирует входной звонок, создёт задачу, которая инициирует исходящий звонок на URI из параметра, потом устанавливает между задачами мост (стандартная библиотечная функция в PBX среде для этого лежит в callerleg.sppi). B2BUA нужен для изоляции SIP диалогов (например, REFER от одной из сторон дальше принявшего плеча не уйдёт, переключение будет сделано внутри B2BUA) и специальной обработки медиа параметров: прксировать медиа или использовать миксер для полной терминации во избежание re-INVITE в сигнальном плече. ==== 4.2 Роутинг SIP-звонков без аутентификации (2-ая лабораторная) — обычно это сервера под нашим контролем или очень примитивные шлюзы ==== ===== Модуль 5. IM ===== ===== Теория ===== * [[https://ru.wikipedia.org/wiki/XMPP]] * [[https://ru.wikipedia.org/wiki/SMPP]] ===== Лабораторные работы ===== ==== Клиентские программы ==== Pidgin 2.7.1. Так же хорошо работает Psi, Thunderbird (проблема только убедить его поверить самоподписанному клиенту), на Маке - Adium, на мобильных - BeeJive. ==== CGP и шлюз в ICQ ==== Нужен внешний шлюз, который регистрируется в CGPro Мы в тестах использовали JBuddyXMPPGateway . Далее, XMPP клиент, которым пользуется пользователь CgPro, должен тоже поддерживать XEP-0114 (Psi точно поддерживает) и в рамках XMPP сессии предлагать пользователю ввести данные аутентификации в другой системе. ===== Модуль 6. Web интерфейсы и их модификация ===== ===== Теория ===== * Изучаем систему формирования web интерфейсов; * Знакомимся с WSSP-страницами; * [[https://www.communigate.com/Communigatepro/russian/WebApp.html|Веб Приложения]] * [[http://www.communigate.com/ru/guide/HTTP.html|HTTP Модули]] ===== Лабораторные работы ===== ==== 6.1 Заменяем логотип в стандартном интерфейсе ==== На уровне сервера: Users->Skins На уровне домена: Users->Domains->corpX.un->Skins->Create Custom Unnamed Skin Upload File: logo.gif # ls /var/CommuniGate/WebSkins/logo.gif # ls /var/CommuniGate/Accounts/WebSkins/logo.gif ==== 6.2 Заменяем строку на английском и на русском ==== # cat /var/CommuniGate/Accounts/WebSkins/strings.data ... LoginTag1 = "..."; LoginTag2 = "..."; ... # ls /var/CommuniGate/Accounts/WebSkins/russian.data ... LoginTag1 = "..."; LoginTag2 = "..."; ... ==== 6.3 Создаем свой skin и добавляем какую-нибудь совершенно новую ссылку в интерфейс ==== Users->Domains->corpX.un->Skins->Named Skins->Create: mySkin # cat /var/CommuniGate/Accounts/WebSkins/mySkin/navigation.wssi ... %%HTML:SETTINGS("InboxDisplay")%% Sent Items ... ==== 6.4 Создание персональных страниц пользователей ==== "Request Size Limit:" в Settings->Services->HTTPU, поставьте его в unlimited Доступ: http://corpX.un/~user1 Местоположение и файл по умолчанию # cat /var/CommuniGate/Accounts/user1.macnt/account.web/default.html Доступ по имени http://user1.corpX.un ([[http://www.communigate.com/CommuniGatePro/russian/HowTo.html#WebURL]]) Settings->Router ... mail.corpX.un = corpX.un *.corpX.un = *@fict = * ==== 6.5 CGP CGI на CG/PL ==== Приложение Web Callback STARTPBXTASK pbx PROGRAM rendezvous PARAM ("401","8916XXXXXXX") Users->Skins->Upload File: webcallback.wcgp или # cat /var/CommuniGate/WebSkins/webcallback.wcgp 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 = "

Enter phone number

"; else cmd = "STARTPBXTASK pbx PROGRAM rendezvous PARAM(\"" + phone + "\",\"" + operatorphone + "\")"; data = "

Waiting call on phone " + phone + "

"; var errCode = ExecuteCLI(cmd); end if; SetHTTPResponseData(data); end entry;
http://mail.corpX.un/sys/webcallback.wcgp ===== Модуль 7. Мониторинг ===== ==== Управление подключениями ==== Monitors->Access->Sessions KILLACCOUNTSESSIONS user1 ==== Анализ журналов ==== Monitors->Logs # tail -f /var/CommuniGate/SystemLogs/`date '+%Y-%m-%d'`.log ==== Использование триггеров ==== === HTTP SMS шлюзы === 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 Параметр ^1 возвращает строку с пробелом, которая некорректно передается от CGP к NEXMO === Отправка SMS по SMPP === Надо прописать его в Settings -> Real-Time -> SMPP server smpp0.nexmo.com:8000, SystemID и Password - из аккаунта на nexmo (api_key и api_secret). GETMODULE SMPP ==== Использование custom счетчиков ==== my $error = $cli->SendCommand('SetStatElement 1.3.6.1.4.1.5678.2.1.1000.1 SET '.$value); ==== Использование snmp ==== ==== Использование в качестве syslog сервера ==== ===== Cluster ===== * [[http://www.communigate.com/ru/main/solutions/cluster.html]]