# wget ftp://www.communigate.com/pub/CommuniGatePro/6.1/CGatePro-Linux-Intel-616.tgz # tar -xvf CGatePro-Linux-Intel.tgz
# CGateProSoftware/CommuniGate/CGServer-static --Base /var/CommuniGate --LogAll
# service communigate start # cat /var/CommuniGate/ProcessID
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
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)
Папки->Создать->Почтовый Ящик->public1 Папки->pubic1->Управление Папкой Идентификатор->user2->Все галочки (задание для слушателей - найти описание прав в справке)
Папки->Управление->Псевдонимы Папок Имя Псевдонима: public1 Имя Папки: ~user1/public1
Folders->Management->Folder Aliases Open Folder: ~user1/Sent Items
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.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@corpX.un> = public1#user1@corpX.un ...
Замена домена компании
Settings->Router ... <*@compX.un> = *@corpX.un ...
Settings->Mail->SMTP->Receiving Verify Return-Path for: ... Check SPF records: ... Non-Client Sender Delay Prompt for: 10
gate.isp.un% mail user1@corpX.un gate.isp.un% tail -f /var/log/maillog
Settings->Router ... <director> = spamtrap ... gate.isp.un% mail user1@corpX.un director@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
Пользователь postmaster создает у себя в интерфейсе сертификат для подписи и шифрования и отправляет подписанное письмо по адресу user1@corpX.un
Подделать текст письма можно:
# vim /var/CommuniGate/Accounts/user1.macnt/INBOX.mbox или # vim /var/CommuniGate/Accounts/user1.macnt/INBOX.mslc/data1
mail.compX.un. A 172.16.1.200+X compX.un. MX 10 mail.compX
Settings->Router ; <*@comp8.un> = *@corp8.un
Users->Domains->CreateDomain->compX.un Users->Domains->compX.un->Domain Settings->Domain Aliases: mail.compX.un
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
http://mail.compX.un:8010/ Безопасность->SSL/TLS->Генератор Сертификатов->Имя-Идентификатор: *.comp20.un
Users->Account Defaults Users->Domains->compX.un->Objects->Template
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
Примечание: использовать кодировку utf-8 и табуляцию между столбцами
Name RealName Password user3 'Сидоров Сидор Сидорович' cpassword3
# 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=<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'; ...
# chmod +x authLDAPNewAD.pl
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
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
Задача: использование адресной книги 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
Задача: Аутентификация доступа пользователей в Internet
Settings->Services->RADIUS Password: testing123 Channels: 3 Listener Port: 1812
# radtest user1 'cpassword1' mail.corpX.un 0 testing123
Задача: сохранять всю исходящую почту в особой папке у системного администратора или у сотрудника, отвечающего за безопасность.
Задача: организовать коллективный почтовый ящик без использования маршрутизации
Settings->Router ... ; <public1@corpX.un> = public1#user1@corpX.un ... Users->Domains-corpX.un->Objects->user1->Settings Aliases: public1
Управление Почтой Добавить Правило: 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 в группу для всех ответов из группы" ) )
# aa-disable usr.sbin.clamd # /etc/init.d/apparmor restart # usermod clamav -G root # service clamav-daemon restart # clamdscan /var/CommuniGate/virus.zip
# 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
Settings->General->Helpers->Content Filtering Enabled: Clamav Program Path: /var/CommuniGate/cgpav
Settings->Mail->Rules Name: Clamav Action: ExternalFilter Parameter: Clamav
Для домена compX пользователи которого заведены на сервере преподавателя
Settings->Router ... <*@comp1.un> = *%comp1.un@isp.un.25.via ...
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
S:<6363@*> = gatewayincoming{pbx,media}#pbx
Users->Domains->corpX.un->Objects->user2->Settings Aliases: 402
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; } )
Settings->Real-Time->Signals Record Call CDRs: yes # ls /var/CommuniGate/SystemLogs/CDRs/
Settings->Router ... Signal:<echotest@*> = 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
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 ...
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
# 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")
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
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 в сигнальном плече.
Pidgin 2.7.1. Так же хорошо работает Psi, Thunderbird (проблема только убедить его поверить самоподписанному клиенту), на Маке - Adium, на мобильных - BeeJive.
Нужен внешний шлюз, который регистрируется в CGPro <http://www.communigate.com/CommuniGatePro/XMPP.html#Components> Мы в тестах использовали JBuddyXMPPGateway <http://www.zionsoftware.com/products/xmpp-gateway/>.
Далее, XMPP клиент, которым пользуется пользователь CgPro, должен тоже поддерживать XEP-0114 (Psi точно поддерживает) и в рамках XMPP сессии предлагать пользователю ввести данные аутентификации в другой системе.
На уровне сервера: 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
# cat /var/CommuniGate/Accounts/WebSkins/strings.data
... LoginTag1 = "..."; LoginTag2 = "..."; ...
# ls /var/CommuniGate/Accounts/WebSkins/russian.data
... LoginTag1 = "..."; LoginTag2 = "..."; ...
Users->Domains->corpX.un->Skins->Named Skins->Create: mySkin # cat /var/CommuniGate/Accounts/WebSkins/mySkin/navigation.wssi
... <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> ...
“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 <LoginPage%*@fict> = *
Приложение 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 = "<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;
http://mail.corpX.un/sys/webcallback.wcgp
Monitors->Access->Sessions KILLACCOUNTSESSIONS user1
Monitors->Logs # tail -f /var/CommuniGate/SystemLogs/`date '+%Y-%m-%d'`.log
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
Надо прописать его в Settings → Real-Time → SMPP server smpp0.nexmo.com:8000, SystemID и Password - из аккаунта на nexmo (api_key и api_secret).
GETMODULE SMPP
my $error = $cli->SendCommand('SetStatElement 1.3.6.1.4.1.5678.2.1.1000.1 SET '.$value);