Konfiguracja Cyrus IMAPd 3.12.x

Dopiski do /etc/services

Sam service sieve doczekał się oficjalnego wpisu w /etc/services jako 4190/tcp. Tak więc tylko te dwa wpisy (o ile będziemy korzystać z FUD lub LMTP).

# --- added by wtp for cyrus-imapd ------------------------------------
#
# dla LMTP należy wybrać jedno z dwóch
#
lmtp            4192/tcp
lmtp            4205/tcp
fud             4201/udp

A następnie wykonać przebudowę bazy serwisów:

/usr/sbin/services_mkdb -q -o /var/db/services.db /etc/services

Konfiguracja cyrus.conf

Należy zapewnić, aby poniższe linie były aktywne oraz zawierały wartości:

idled         cmd="idled"

  # at least one LMTP is required for delivery
  lmtp          cmd="lmtpd" listen="127.0.0.1:lmtp" prefork=0
  lmtpunix      cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0


notify       cmd="notifyd" listen="/var/imap/socket/notify" proto="udp" prefork=1

Konfiguracja imapd.conf

Patrz załącznik

Konfiguracja dla urządzeń Apple

(!) Dotyczy konfiguracji związanej z obsługą urządzeń Apple (iPhone). Apple nie respektuje ustawień login+hasło, tylko buduje dane do logowania na podstawie:

login@_serwer_poczty_przychodzacej_ hasło

Można to poprawić poprzez następujące kroki:

  1. Poprawki w konfiguracji saslauthd

  2. Poprawki w konfiguracji imapd.conf

allowplaintext:         yes
allowapop:              no

Powyższe ustawienie wyłącza mechanizm APOP (authentication pop), które zawsze korzysta z bazy sasldb2 zamiast z mechanizmu wskazanego w parametrach samego saslauthd. Wyłączenie mechanizmu APOP powoduje, że urządzenie Apple zaczyna korzystać saslauthd (czyli bazy OpenLDAP).

Autokreacja wybranych folderów

autocreate_quota:       100000
autocreate_post:        1
autocreate_inbox_folders: Draft|Sent|Trash|Spam|Nonspam

Zabezpieczenie protokołów SSL/TLS

Serwer Cyrus IMAPd posiada już rozbudowane parametry dotyczące certyfikatów SSL. Aczkolwiek nadal (stan na 10.2025) nie dorobił się obsługi Server Name Indication (SNI). Jest to jeszcze do sprawdzenia, niemniej cyrus-imapd można przykryć HA Proxy. SNI zapewni haproxy

Obsługa SNI

Wg dokumentacji w ustawieniach SSL/TLS można wskazać dwa pliki z kluczem oraz dwa pliki z certyfikatem. Odpowiednio wersję RSA2048 oraz Eliptic Curve:

tls_server_cert:     /usr/local/etc/ssl/cert_rsa2048,/usr/local/etc/ssl/cert_ec
tls_server_key:      /usr/local/etc/ssl/key_rsa2048,/usr/local/etc/ssl/key_ec
tls_server_dhparam:  /usr/local/etc/ssl/dhparam-key-rsa2048

Ustawienia poprawnych uprawnień do pliku z kluczem prywatnym

Po wgraniu plików z certyfikatami, należy się upewnić, że użytkownik cyrus ma prawo do czytania pliku z kluczem prywatnym - w przeciwnym przypadku imapd zwraca błędy. Można to zrobić na dwa sposoby:

# ustawienie właściwych uprawnień dla klucza prywatnego (szybko)
#
chmod 0644 /usr/local/etc/ssl/mx1.domain.tld.key.pem

# ustawienie właściwych uprawnień dla klucza prywatnego (precyzyjnie)
#
chmod 0640 /usr/local/etc/ssl/mx1.domain.tld.key.pem
chgrp cyrus /usr/local/etc/ssl/mx1.domain.tld.key.pem

TLS ciphers

Drugim parametrem zabezpieczającym jest jawne podanie akceptowanych TLS ciphers:

tls_ciphers:            ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

Wspierane wersje TLS

Dodatkowo można wybrać wspierane wersje TLS:

tls_versions:           tls1_2 tls1_3 tls1_1 tls1_0

Konfiguracja informacji o serwerze

Domyślnie serwer pokazuje pełen baner o sobie: jakie oprogramowanie, wersja, etc. Można to zmniejszyć analogicznie do ustawień server_tokens w serwerze nginx:

serverinfo: min

Konfiguracja kalendarzy

Można uruchomić obsługę kalendarzy w serwerze imapd. Trzeba wykonać modyfikacje w plikach:

cyrus.conf

SERVICES {
# [...]
  # these are only necessary if using HTTP for CalDAV, CardDAV, or RSS
  http          cmd="httpd" listen="127.0.0.1:48870" prefork=0
}

imapd.conf

# Konfiguracja us/lugi HTTP(S)
#
## httpmodules:         caldav, tzdist
httpmodules:            caldav
## zoneinfo_dir:                /var/imap/tzid

# Konfiguracja kalendarzy
#
calendarprefix:         #calendars

Sprawdzenie poprawności konfiguracji

su -l cyrus -c "/usr/local/cyrus/sbin/cyr_info conf-lint -C /usr/local/etc/imapd.conf -M /usr/local//etc/cyrus.conf"

Tworzenie drzewa katalogów

Jeżeli jest to partycja UFS, to po prostu tworzenie drzewa katalogów. Ale jeżeli korzystamy z ZFS, to warto stworzyć oddzielne partycje. Dzięki temu można będzie łatwo robić backupy (snapshoty), czy zrobić inne ustawienia (np. kompresja).

Utworzenie partycji ZFS dla beadm

Zgodnie z zalecaną dokumentacją należy utworzyć partycje w razie konieczności (powinny być utworzone w trakcie instalacji serwera):

zfs create -o mountpoint=/var/imap sys/data/v/imap
zfs create sys/data/v/spool/imap

Utworzenie potrzebnych katalogów

(Poniższe również dla partycji UFS).

# domyślna partycja
export _imap_spool_=/var/spool/imap

# ale czasami partycja jest w innym miejscu,
export _imap_spool_=/opt/imap

# więc teraz łatwiej wykonywać polecenia dotyczące uprawnień
mkdir -p /var/imap/sieve /var/imap/user ${_imap_spool_}
chown cyrus:cyrus /var/imap/ /var/imap/user /var/imap/sieve ${_imap_spool_}
chmod 0750 ${_imap_spool_}

# ustawienia od razu uprawnień dla lmtpunix
chmod 0751 /var/imap
su - cyrus -c "/usr/local/cyrus/sbin/mkimap"

Dodanie podstawowych kont do bazy cyrus-sasl

# dodanie kont postmaster
saslpasswd2 postmaster@localhost.<domain>
saslpasswd2 postmaster@<hostname>

# pokazanie zawartości bazy sasldb2
sasldblistusers2

Utworzenie konta w OpenLDAP

Z analogicznym (jak powyżej) loginem oraz hasłem należy wykreować konto (SSO) w lokalnej bazie LDAP.