Kolab Groupware (Частина 2 — Установка)



Якщо ви ще не знаєте що таке Kolab, то ви, ймовірно, захочете прочитати першу статтю, де я робив детальний огляд на цей досить функціональний і повністю вільної поштовий сервер з красивою веб-мордою.
На цей раз ми будемо його встановлювати.

Kolab Groupware (Частина 1 — Огляд)
Kolab Groupware (Частина 2 — Установка)

Установка пакетів
Пакети існують для всіх популярних дистрибутивів: Red Hat Enterprise Linux, CentOS, Fedora, Debian, так само є експерементальні пакети для OpenSUSE і Ubuntu, ArchLinux Kolab можна зібрати з AUR.
Я буду встановлювати на Сentos 7, але на мене орієнтуватися зовсім не обов'язково, на інших дистрибутивах установка мало чим відрізняється.

Отже приступимо

Встановимо репозиторії
ням-y update
yum-y install wget epel-release 
cd /etc/yum.repos.d
wget http://obs.kolabsys.com/repositories/Kolab:/3.4/CentOS_7/Kolab:3.4.repo
wget http://obs.kolabsys.com/repositories/Kolab:/3.4:/Updates/CentOS_7/Kolab:3.4:Updates.repo

Встановимо ключі
gpg --keyserver pgp.mit.edu --recv-key 0x446D5A45
gpg --export --armor devel@lists.kolab.org > devel.asc
rpm --import devel.asc
rm devel.asc

Тепер самі пакети
ням-y install kolab


Установка Kolab
Першим ділом в якості імені хоста необхідно задати повний FQDN, наприклад:
echo "mail.example.org" > /etc/hostname

Крім того, установка dirsrv вимагає, що б ім'я вашої машини резольвилось в належній їй IP-адресу, так що не забуваємо додати відповідну запис в DNS і/або в /etc/hosts файл.

Тепер саме час дізнатися про те, що якщо ви хочете встановити Kolab і використовувати замість стандартного 389 Directory Server (далі dirsrv), який-небудь Active Directory, то вам потрібно перед установкою відредагувати файл /etc/kolab/kolab.conf, і поправити параметри відповідають за LDAP.
При цьому встановлення потрібно буде запускати c параметром --with-ad

Так само в centos-системи перед установкою слід створити користувача dirsrv, при установці пакетів, він чомусь не створюється, в debian цим все гаразд.
adduser dirsrv

Ок, тепер все готово, запускаємо установку:
setup-kolab

Вся установка зводиться до того, що б відповідати на питання, які задасть вам інтерактивний скрипт
Лістинг
Please supply a password for the LDAP administrator user 'admin', used to login
to the graphical console of 389 Directory server.

Administrator password [sQnPqqaKInB2ObB]: 

Please supply a password for the LDAP Directory user Manager, which is the
administrator user you will be using to at least initially log in to the Web
Admin, and that Kolab uses to perform administrative tasks.

Directory password Manager [ohLY9kxxinHGOGE]: 

Please choose the system user and group the service should use to run under.
These should be existing, unprivileged, local system POSIX accounts with no
shell.

User [dirsrv]: 
Group [dirsrv]: 

This setup procedure plans to set up Kolab Groupware for the following domain
name space. This domain name is obtained from the reverse DNS entry on your
network interface. Please confirm this is the appropriate domain name space.

example.org [Y/n]: y

The standard root dn we composed for you follows. Please confirm this is the root
dn you wish to use.

dc=example,dc=org [Y/n]: y

Setup now is going to set up the 389 Directory Server. This may take a little
while (during which period there is no output and no progress indication).

Shutting down dirsrv: 
mail... [ OK ]
Starting dirsrv: 
mail... [ OK ]

Please supply a Cyrus Administrator password. This password is used by to Kolab
execute administrative tasks in Cyrus IMAP. You may also need the password
yourself to troubleshoot Cyrus IMAP and/or perform other administrative tasks
against Cyrus IMAP directly.

Cyrus Administrator password [0DIMW-CLUKmsNEU]: 

Please supply a Kolab Service account password. This account is used by various
services such as Postfix, and Roundcube, as anonymous binds to the LDAP server
will not be allowed.

Kolab Service password [dDGgUZAue2Y-LTW]: 
Shutting down postfix: [FAILED]
Starting postfix: [ OK ]
Shutting down amavisd: The amavisd daemon is apparently not running, no PID file /var/run/amavisd/amavisd.pid
[FAILED]

Starting amavisd: [ OK ]

Stopping clamd.amavisd: [FAILED]
Starting clamd.amavisd: LibClamAV Warning: **************************************************
LibClamAV Warning: *** The virus database is older than 7 days! ***
LibClamAV Warning: *** Please update it as soon as possible. ***
LibClamAV Warning: **************************************************
[ OK ]
Stopping wallaced: [FAILED]
Starting wallaced: [ OK ]
Stopping mysqld: [ OK ]
Initializing MySQL database: Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin-u root password 'new password'
/usr/bin/mysqladmin-u root-h mail.example.org password 'new password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

[ OK ]
Starting mysqld: [ OK ]
What MySQL server are we setting up?
- 1: Existing MySQL server (with root password already set).
- 2: New MySQL server (needs to be initialized).
Choice: 2

Please supply a root password for MySQL. This password will be the administrative
user for this MySQL server, and it should be kept a secret. After this setup
process has completed, Kolab is going to discard and forget about this password,
but you will need it for administrative tasks in MySQL.

MySQL root password [lhBkALCvQpocaiT]: 

Please supply a password for the MySQL user 'kolab'. This password will be used
by Kolab services, such as the Web Administration Panel.

MySQL kolab password [47rxdTc-vIk3WJ8]: 

Please supply the timezone PHP should be using. You have to use a Continent or
Country / City locality name like 'Europe/Berlin', but not just 'CEST'.

Timezone ID [UTC]: Europe/Moscow

Please supply a password for the MySQL user 'roundcube'. This password will be
used by the Roundcube webmail interface.

MySQL roundcube password [o_yUViK4oRy7SX2]: 
Stopping httpd: [FAILED]
Starting httpd: [ OK ]
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
Stopping kolab-saslauthd: [FAILED]
Starting kolab-saslauthd: [ OK ]
Shutting down cyrus-imapd: [FAILED]
Starting cyrus-imapd: [ OK ]
Stopping kolabd: [FAILED]
Starting kolabd: [ OK ]



Після установки ви маєте вже цілком робочу інсталяцію Kolab, для тестового запуску цього цілком достатньо, але для випуску у продакшен доведеться ще трохи попрацювати напилком :)

Редагуємо конфіг
Конфіг знаходиться тут /etc/kolab/kolab.conf
Тут знайдеться чого покрутити, ось декілька корисних опцій:

Локаль

Локаль за замовчуванням, для російської вкажіть uk_ua
default_locale = en_US

Генерація uid'ів та імен скриньок

Тут зазначено правило за яким генерується основний поштову скриньку
primary_mail = %(surname)s@%(domain)s

А це правила, за якими генеруються додаткові поштові скриньки, як бачите вони можуть бути більш гнучкими, ніж для основного
secondary_mail = { 
0: {
"{0}.{1}@{2}": "format('%(givenname)s'[0:1].capitalize(), '%(surname)s', '%(domain)s')"
}, 
1: {
"{0}@{1}": "format('%(uid)s', '%(domain)s')"
}, 
2: {
"{0}@{1}": "format('%(givenname)s.%(surname)s', '%(domain)s')"
} 
} 

За замовчуванням в Kolab заборонено змінювати через адмінку primary email і uid, тобто вони завжди повинні генеруватися самі виходячи з цих правил.
Мені особисто така схема не подобається, мені більше подобається вказувати username і mail-адресу в ручну, ну або хоча б що б його можна було редагувати. Розповім як можна це зробити:

Відключаємо перевірку імен ящиків
daemon_rcpt_policy = False

Переходимо в адмінку Kolab, переходимо у Settings і для типу Kolab User атрибута uid та mail міняємо значення «Generated (read-only)» на «Generated».
Тепер ми можемо редагувати uid'и і mail-адреси для наших користувачів вручну.

Зберігання пошти

Продовжуємо розбирати конфіг, тут вказано які папки слід створювати за замовчуванням новому користувачеві
autocreate_folders = { 
'Архів': {
'quota': 0,
}, 
'Calendar': {
'annotations': {
'/private/виробника/kolab/folder-type': "event.default",
'/shared/виробника/kolab/folder-type': "event",
}, 
...

При бажанні можна винести різні папки на різні сховища, наприклад що б всі папки були на швидкому сховище, а папку archive на повільному.
Для цього в конфіги cyrus слід вказати де шукати ці сховища.
echo "partition-default: /var/spool/imap" >> /etc/imapd.conf
echo "partition-archive: /var/spool/imap-archive" >> /etc/imapd.conf

І додати параметр partition до папки Archive, приблизно так:
...
'Архів': {
'quota': 0,
'partition': 'архів'
}, 
...


Мультидоменная конфігурація
Kolab з коробки не зовсім підтримує декілька доменів. Вірніше в адмінці все для цього є, але всі інші сервіси, такі як postfix, cyrus-imap, amavis, roundcube — всі вони за замовчуванням налаштовані для підтримки тільки одного домену.
Якщо вам все ж необхідно налаштувати декілька доменів, на офіційній wiki є дуже докладний гайд про те як налаштувати весь цей зоопарк, для роботи з декількома доменами
Варто зауважити, що після описаних дій ваші логіни в пошту поміняються з простого username на username@example.org
Якщо вам ця функція не потрібна, просто пропускаємо цей пункт.

Налаштування SSL
Убезпечимо наш сервер, отримуємо сертифікат на ваш домен, якщо ви ще не зробили цього раніше.
Так само знадобиться сертифікат центру сертифікації (у разі StartSSL — sub.class1.server.ca.pem

Встановимо mod_ssl для apache
ням-y install mod_ssl 


Тепер копіюємо наші ключі за наступними шляхами:
/etc/pki/tls/private/mail.example.org.key
/etc/pki/tls/certs/mail.example.org.crt
/etc/pki/tls/certs/sub.class1.server.ca.pem

# Створимо ланцюжки для наших сертифікатів

cat /etc/pki/tls/certs/mail.example.org.crt /etc/pki/tls/private/mail.example.org.key /etc/pki/tls/certs/sub.class1.server.ca.pem > /etc/pki/tls/private/mail.example.org.bundle.pem
cat /etc/pki/tls/certs/mail.example.org.crt /etc/pki/tls/certs/sub.class1.server.ca.pem > /etc/pki/tls/certs/mail.example.org.bundle.pem
cat /etc/pki/tls/certs/sub.class1.server.ca.pem > /etc/pki/tls/certs/mail.example.org.ca-chain.pem

# Налаштуємо права
chown-R root:mail /etc/pki/tls/private
chmod 600 /etc/pki/tls/private/mail.example.org.key
chmod 750 /etc/pki/tls/private
chmod 640 /etc/pki/tls/private/*

# Додамо сертифікат центру сертифікації в системне сховище
cat /etc/pki/tls/certs/sub.class1.server.ca.pem >> /etc/pki/tls/certs/ca-bundle.crt

# Налаштуємо сертифікати в apache
sed-i-e '/SSLCertificateFile \/etc\/pki/c\SSLCertificateFile /etc/pki/tls/certs/mail.example.org.crt' /etc/httpd/conf.d/ssl.conf
sed-i-e '/SSLCertificateKeyFile \/etc\/pki/c\SSLCertificateKeyFile /etc/pki/tls/private/mail.example.org.key' /etc/httpd/conf.d/ssl.conf
sed-i-e '/SSLCertificateChainFile \/etc\/pki/c\SSLCertificateChainFile /etc/pki/tls/certs/mail.example.org.ca-chain.pem' /etc/httpd/conf.d/ssl.conf

# Налаштуємо редирект на HTTPS за замовчуванням
cat >> /etc/httpd/conf/httpd.conf << EOF 

<VirtualHost _default_:80>
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}\$1 [R=301,L]
</VirtualHost>
EOF

# Налаштуємо сертифікати в cyrus-imap
sed-r-i \
-e 's|^tls_server_cert:.*|tls_server_cert: /etc/pki/tls/certs/mail.example.org.crt|g' \
-e 's|^tls_server_key:.*|tls_server_key: /etc/pki/tls/private/mail.example.org.key|g' \
-e 's|^tls_server_ca_file:.*|tls_server_ca_file: /etc/pki/tls/certs/mail.example.org.ca-chain.pem|g' \
/etc/imapd.conf

# Налаштуємо сертифікати в Postfix
postconf-e smtpd_tls_key_file=/etc/pki/tls/private/mail.example.org.key
postconf-e smtpd_tls_cert_file=/etc/pki/tls/certs/mail.example.org.crt
postconf-e smtpd_tls_CAfile=/etc/pki/tls/certs/mail.example.org.ca-chain.pem

# Вкажемо kolab-cli нову посилання на api
sed-r-i \
-e '/api_url/d' \
-e "s#\[kolab_wap\]#[kolab_wap]\napi_url = https://$(hostname -f)/kolab-webadmin/api#g" \
/etc/kolab/kolab.conf

# Налаштуємо Roundcube
sed-i-e 's/http:/https:/' /etc/roundcubemail/libkolab.inc.php
sed-i-e 's/http:/https:/' /etc/roundcubemail/kolab_files.inc.php
sed-i-e '/^?>/d' /etc/roundcubemail/config.inc.php

# Розповімо iRony про нові посилання для DAV-протоколів
cat >> /etc/roundcubemail/config.inc.php << EOF
# caldav/webdav
\$config['calendar_caldav_url'] = "https://%h/iRony/calendars/%u/%i";
\$config['kolab_addressbook_carddav_url'] = 'https://%h/iRony/addressbooks/%u/%i';
EOF

# Вкажемо Rouncdcube примусово працювати по HTTPS
cat >> /etc/roundcubemail/config.inc.php << EOF
# Force https redirect http requests for
\$config['force_https'] = true;
EOF

На цьому налаштування SSL можна вважати завершеною.

і DKIM SPF
Що б Gmail та інші поштові сервери не заносили наші листи в спам, рекомендується налаштувати і DKIM SPF запису на нашому сервері.
В якості серверної частини для DKIM пропоную використовувати OpenDKIM, настроювання якого на хабре вже була чудова стаття

Налаштування доставки спаму з Amavis
За замовчуванням amavis весь спам просто видаляє. Особисто я вважаю, що не зовсім правильно і що спам повинен доставлятися в особисті спам-папки користувача

Справа в тому, що в cyrus-imap можна зробити глобальний sieve скрипт, як це можна було зробити наприклад в dovecot, але зате він дозволяє доставляти пошту відразу в потрібну папку, використовуючи для цього спеціальний роздільник в поштовій адресі.

Налаштуємо amavis
# відключимо додавання ***spam*** у тему листа
sed-i '/^[^#]*$sa_spam_subject_tag/s/^/#/' /etc/amavisd/amavisd.conf
# включимо використання префікса spam+ для доставки пошти
sed-i '/^# $recipient_delimiter/s/^# //' /etc/amavisd/amavisd.conf
# дозволимо доставку спаму
sed-i 's/^\($final_spam_destiny.*= \).*/\1D_PASS;/' /etc/amavisd/amavisd.conf

Ще один момент, що б пошту можна було доставляти відразу в папку spam, для цієї теки користувач anyone повинен мати дозвіл p (тобто поміщати в цю папку листа), в іншому випадку все буде сипатися в INBOX.
До речі стосується це і Shared Folders, якщо ви хочете отримувати в них листи, вам слід встановити для них аналогічні дозволу.

На жаль я не знайшов у cyrus-imap штатної можливості визначити неглассные права для користувача anyone.
Але у мене є на це рішення, додаємо рядок у crontab, і кожні 4 години kolab буде смикати cyrus-imap що б у кожного користувача в вашому домені стояло «anyone p» для папки spam.
0 4 * * * kolab sam user/%/Spam@example.org anyone p

Якщо хтось знає рішення краще, буду радий вислухати ваші рекомендації на цей рахунок

Захист від брутфорса з Fail2ban
Fail2ban — це сервіс, який моніторить логи інших сервісів на занадто часте повторення неправильних спроб входу.
Наприклад, якщо занадто часто повторюються спроби входу з неправильним паролем з одного IP, то цей IP отримує бан на кілька хвилин.

Встановимо Fail2ban з офіційних репозиторіїв
ням-y install fail2ban


Створимо фільтри для Fail2ban
cat > /etc/fail2ban/filter.d/kolab-cyrus.conf << EOF
[Definition]
failregex = (imaps|pop3s)\[[0-9]*\]: badlogin: \[<HOST>\] (plain|PLAIN|login|plaintext) .*
ignoreregex =
EOF

cat > /etc/fail2ban/filter.d/kolab-postfix.conf << EOF
[Definition]
failregex = postfix\/submission\/smtpd\[[0-9]*\]: warning: unknown\[<HOST>\]: SASL (PLAIN|LOGIN) authentication failed: authentication failure
ignoreregex =
EOF

cat > /etc/fail2ban/filter.d/kolab-roundcube.conf << EOF
[Definition]
failregex = <.*> Failed login for .* from <HOST> in session .*
ignoreregex =
EOF

cat > /etc/fail2ban/filter.d/kolab-irony.conf << EOF
[Definition]
failregex = <.*> Failed login for .* from <HOST> in session .*
ignoreregex =
EOF

cat > /etc/fail2ban/filter.d/kolab-chwala.conf << EOF
[Definition]
failregex = <.*> Failed login for .* from <HOST> in session .*
ignoreregex =
EOF

cat > /etc/fail2ban/filter.d/kolab-syncroton.conf << EOF
[Definition]
failregex = <.*> Failed login for .* from <HOST> in session .*
ignoreregex =
EOF

Тепер же натравим на них Fail2ban
cat >> /etc/fail2ban/jail.conf << EOF

[kolab-cyrus]
enabled = true
filter = kolab-cyrus
action = iptables-multiport[name=cyrus-imap,port="143,993,110,995,4190"]
logpath = /var/log/maillog
maxretry = 5

[kolab-postfix]
enabled = true
filter = kolab-postfix
action = iptables-multiport[name=kolab-postfix,port="25,587"]
logpath = /var/log/maillog
maxretry = 5

[kolab-roundcube]
enabled = true
filter = kolab-roundcube
action = iptables-multiport[name=kolab-roundcube, port="http,https"]
logpath = /var/log/roundcubemail/userlogins
maxretry = 5

[kolab-irony]
enabled = true
filter = kolab-irony
action = iptables-multiport[name=kolab-irony,port="http,https"]
logpath = /var/log/iRony/userlogins
maxretry = 5

[kolab-chwala]
enabled = true
filter = kolab-chwala
action = iptables-multiport[name=kolab-chwala,port="http,https"]
logpath = /var/log/chwala/userlogins
maxretry = 5

[kolab-syncroton]
enabled = true
filter = kolab-syncroton
action = iptables-multiport[name=kolab-syncroton,port="http,https"]
logpath = /var/log/kolab-syncroton/userlogins
maxretry = 5
EOF


Налаштуємо Roundcube

Тема

Як я вже писав в попередній статті, якщо вам не подобається за замовчуванням тема Chameleon, ви легко можете замінити її на Larry
sed-i "s/\$config\['skin'\] = '.*';/\$config\['skin'\] = 'larry';/g" /etc/roundcubemail/config.inc.php


Плагін zipdownload

Деякі користувачі скаржаться, що немає такої можливості завантажити всі вкладення до листа відразу.
Так от, така можливість є в плагіні zipdownload для Roundcube

Завантажити репозиторій roundcube, і скопіюємо плагін в папку з плагінами нашого Roundcube
git clone https://github.com/roundcube/roundcubemail/ --depth 1 /tmp/roundcube
mv /tmp/roundcube/plugins/zipdownload/ /usr/share/roundcubemail/plugins/
rm-rf /tmp/roundcube/

Тепер лише залишилося його активувати додавши його в $config['plugins'] масив у файлі /etc/roundcubemail/config.inc.php
sed-i "/'contextmenu',/a \ 'zipdownload'," /etc/roundcubemail/config.inc.php

Ще один момент: у модулі php_zlib, у версіях поставляються з дистрибутивами є баг, в результаті якого, якщо в листі є файли з кирилическими іменами, то при упаковці в zip-файл їх імена перетворюються в кракозябру.
Що б вирішити це, зберемо новий php_zlib:
ням-y install php-devel zlib-devel pcre-devel gcc
pecl install zip


Kolab ActiveSync Server
Ще пара слів про синхронізації: сервіс kolab-synroton (форк z-push за замовчуванням має 2 режими роботи: folder-mode і flat-mode.

У випадку з folder-mode всі папки, які ви відзначите у налаштуваннях синхронізації в Roundcube передаються як є.
У випадку ж з flat-mode всі ці папки об'єднуються в одну для пошти, контактів, одну для календаря…

Apple і Windows техніка за замовчуванням працює folder-mode, а ось для Android, в силу слабкої підтримки folder-mode (так кажуть разроботчікі), за замовчуванням включений flat-mode.
При бажанні ви можете спробувати і якщо ваш пристрій все-таки підтримує folder-mode, ви можете внести його назву в масив $ext_devices у файлі /usr/share/kolab-syncroton/lib/kolab_sync_data.php

Висновок
На цьому установку можна вважати закінченою, ще раз рестартуем всі сервіси і перевіряємо запускаються вони автоматично при старті системи.

Поштовий клієнт доступний за посиланням: mail.example.org/webmail
Адмінка: mail.example.org/kolab-webadmin

Ви так само можете налаштувати автоматичний редирект з mail.example.org на mail.example.org/webmail
sed-i-e 's/<Directory \/>/<Directory \/>\n RedirectMatch \^\/$ \/webmail\//g' /etc/httpd/conf/httpd.conf

Офіційний сайт проекту: kolab.org

Так само хотів би вибачитися за те, що не розповів про налаштування Prosody, хоч і обіцяв, матеріалу мабуть набереться на окрему статтю.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.