SOGo
Сервер групповой работы, аналогичный Microsoft Exchange, с веб-интерфейсом и доступом по MAPI для Microsoft Outlook
- Сайт: http://www.sogo.nu
- Лицензия: GPLv2 и LGPLv2
Возможности
- Общие почтовые папки, календари и адресные книги;
- Веб-интерфейс, аналогичный Outlook Web Access;
- Поддержка протоколов CalDAV, CardDAV, GroupDAV, Microsoft ActiveSync, IMAP и SMTP;
- Доступ по MAPI для Microsoft Outlook, не требующий внешних модулей;
- Делегирование, уведомления, резервирование, поддержка категорий и почтовых фильтров;
- Поддержка нескольких почтовых ящиков в веб-интерфейсе;
- Single sign-on с помощью CAS, WebAuth или Kerberos.
{{#ev:youtube|1hcBSB4Kxww}}
Установка
Для установки стабильной версии SOGo (доступна в стабильных ветках p9/p10/p11 и нестабильном репозитории Sisyphus) выполните:
apt-get install task-sogo
(драйвер к PostgreSQL будет установлен автоматически)
Подготовка среды
PostgreSQL
Предварительная подготовка к запуску службы согласно PostgreSQL.
Создаём пользователя sogo и базу данных sogo (под правами root):
su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole sogo'
su - postgres -s /bin/sh -c 'createdb -O sogo sogo'
service postgresql restart
Samba DC
Пользователи доменные — из Active Directory на контроллере Samba DC (см. предварительное создание домена).
Создадим в домене пользователя sogo с паролем Pa$$word (при запросе ввести его дважды):
samba-tool user create sogo
Отключим срок действия пароля:
samba-tool user setexpiry --noexpiry sogo
SOGo
Настраивается на домен test.alt.
1. Заполняем файл конфигурации /etc/sogo/sogo.conf:
{
SOGoProfileURL = "postgresql://sogo@/sogo/sogo_user_profile";
OCSFolderInfoURL = "postgresql://sogo@/sogo/sogo_folder_info";
OCSSessionsFolderURL = "postgresql://sogo@/sogo/sogo_sessions_folder";
OCSEMailAlarmsFolderURL = "postgresql://sogo@/sogo/sogo_alarms_folder";
SOGoEnableEMailAlarms = YES;
SOGoDraftsFolderName = Drafts;
SOGoSentFolderName = Sent;
SOGoTrashFolderName = Trash;
SOGoIMAPServer = "imaps://localhost:993";
SOGoMailingMechanism = sendmail;
SOGoForceExternalLoginWithEmail = NO;
NGImap4ConnectionStringSeparator = "/";
SOGoUserSources = (
{
id = sambaLogin;
displayName = "SambaLogin";
canAuthenticate = YES;
type = ldap;
CNFieldName = cn;
IDFieldName = cn;
UIDFieldName = sAMAccountName;
hostname = "ldaps://127.0.0.1";
baseDN = "CN=Users,DC=test,DC=alt";
bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
bindPassword = "Pa$$word";
bindFields = (sAMAccountName);
},
{
id = sambaShared;
displayName = "Shared Addressbook";
canAuthenticate = NO;
isAddressBook = YES;
type = ldap;
CNFieldName = cn;
IDFieldName = mail;
UIDFieldName = mail;
hostname = "ldaps://127.0.0.1";
baseDN = "CN=Users,DC=test,DC=alt";
bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
bindPassword = "Pa$$word";
filter = "((NOT isCriticalSystemObject='TRUE') AND (mail='*') AND (NOT objectClass=contact))";
},
{
id = sambaContacts;
displayName = "Shared Contacts";
canAuthenticate = NO;
isAddressBook = YES;
type = ldap;
CNFieldName = cn;
IDFieldName = mail;
UIDFieldName = mail;
hostname = "ldaps://127.0.0.1";
baseDN = "CN=Users,DC=test,DC=alt";
bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
bindPassword = "Pa$$word";
filter = "((((objectClass=person) AND (objectClass=contact) AND ((uidNumber>=2000) OR (mail='*')))
AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE') AND (NOT uid=Guest))
OR (((objectClass=group) AND (gidNumber>=2000)) AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE')))";
mapping = {
displayname = ("cn");
};
}
);
SOGoSieveScriptsEnabled = NO;
SOGoLanguage = Russian;
SOGoTimeZone = Europe/Moscow;
SOGoFirstDayOfWeek = 1;
}
# plparse /etc/sogo/sogo.conf
Parsing '/etc/sogo/sogo.conf' - a dictionary
2. Делаем необходимые службы по умолчанию и перезапускаем их:
for s in samba postgresql memcached sogo httpd2;do chkconfig $s on;service $s restart;done
3. Смотрим на предмет возможных ошибок файл журнала /var/log/sogo/sogo.log
tlsVerifyMode=allowInsecureLocalhost
SOGoIMAPServer = "imaps://localhost:993/?tlsVerifyMode=allowInsecureLocalhost";
Включение веб-интерфейса
Подробнее: http://www.openchange.org/cookbook/backends/sogo/webui.html
a2enmod proxy a2enmod proxy_http a2enmod authn_core a2enmod authn_file a2enmod auth_basic a2enmod authz_user a2enmod env a2enmod dav a2enmod headers a2enmod rewrite a2enmod version a2enmod setenvif a2ensite SOGo service httpd2 restart service sogo restart
Войти по адресу:
https://адрес_сервера/SOGo/
Настройка электронной почты
Для использования электронной почты в SOGo необходимо настроить аутентификацию в Active Directory для Postfix и Dovecot. Подробнее это описано в разделе ActiveDirectory/PostfixDovecot
Проблемы
- Для правильной работы SOGo на устройствах должна быть обновленная текущая база часовых поясов. Особенно это касается устройств под управлением iOS и macOS.
- Если при входе в веб-интерфейс возникает ошибка "Неправильный логин или пароль" (хотя учетные данные верны) и в логах /var/log/sogo/sogo.log есть ошибки наподобие этих:
Feb 03 14:39:18 sogod [17543]: [ERROR] <0x0x55d2461cafe0[LDAPSource]> Could not bind to the LDAP server ldaps://127.0.0.1 (389) using the bind DN: CN=sogo,CN=Users,DC=test,DC=alt
Feb 03 14:39:18 sogod [17543]: [ERROR] <0x0x55d2461cafe0[LDAPSource]> <NSException: 0x55d2463f43b0> NAME:LDAPException REASON:operation bind failed: Can't contact LDAP server (0xFFFFFFFF) INFO:{"error_code" = "-1"; login = "CN=sogo,CN=Users,DC=test,DC=alt"; }
Добавьте опцию "TLS_REQCERT allow" в /etc/openldap/ldap.conf.
Перестартуйте службы:
# systemctl restart samba sogo
Отладка
Для вывода более подробных сообщений отладки необходимо добавить в файл /etc/sogo/sogo.conf параметры:
GCSFolderDebugEnabled = YES;
GCSFolderStoreDebugEnabled = YES;
LDAPDebugEnabled = YES;
MySQL4DebugEnabled = YES;
NGImap4DisableIMAP4Pooling = YES;
ImapDebugEnabled = YES;
OCSFolderManagerSQLDebugEnabled = YES;
PGDebugEnabled = YES;
SOGoDebugRequests = YES;
SOGoMailKeepDraftsAfterSend = YES;
SOGoUIxDebugEnabled = YES;
SoDebugObjectTraversal = YES;
SoSecurityManagerDebugEnabled = YES;
WODontZipResponse = YES;
WODebugZipResponse = YES;
SoClassRegistryDebugEnabled = YES;
SoDebugKeyLookup = YES;
SoDebugProductLoading = YES;
SoDebugProductRegistry = YES;
SoDebugRequestClassification = YES;
SoDebugTraversal = YES;
SoLogSecurityDeclarations = YES;
SoOFSDebugAuthLookup = YES;
SoOFSDebugFactory = YES;
SoOFSDebugNegotiate = YES;
SoOFSDebugPlistObject = YES;
SoOFSDebugRestore = YES;
SoOFSResourceManagerDebugEnabled = YES;
SoOFSWebMethodDebugEnabled = YES;
SoObjCClassDebugEnabled = YES;
SoObjectDataSourceDebugEnabled = YES;
SoObjectMethodDispatcherDebugEnabled = YES;
SoObjectRequestHandlerDebugEnabled = YES;
SoObjectSOAPDispatcherDebugEnabled = YES;
SoPageInvocationDebugEnabled = YES;
SoProductResourceManagerDebugEnabled = YES;
SoRedirectToDefaultMethods = YES;
SoRendererDebugEnabled = YES;
SoSecurityManagerDebugEnabled = YES;
WOIsRedirectionEnabled = YES;
SOGoEASDebugEnabled = YES;
Отладочные сообщения будут помещены в файл /var/log/sogo/sogo.log.
Советы и секреты
Заведение адресов в AD
$ ldapmodify -D 'CN=Administrator,CN=Users,DC=test,DC=alt' -H 'ldap://127.0.0.1' -w 'Pa$$word'
dn: CN=petrov,CN=Users,DC=test,DC=alt
changetype: modify
add: proxyAddresses
proxyAddresses: petrov@test.alt