Wydrukuj tę dokumentację Pokaż jako slajdy

Spis Treści

  1. Konfiguracja Cyrus IMAPd 3.12.x
    1. Dopiski do /etc/services
    2. Konfiguracja cyrus.conf
    3. Konfiguracja imapd.conf
      1. Konfiguracja dla urządzeń Apple
      2. Autokreacja wybranych folderów
      3. Zabezpieczenie protokołów SSL/TLS
        1. Obsługa SNI
        2. Ustawienia poprawnych uprawnień do pliku z kluczem prywatnym
        3. TLS ciphers
        4. Wspierane wersje TLS
      4. Konfiguracja informacji o serwerze
      5. Konfiguracja kalendarzy
        1. cyrus.conf
        2. imapd.conf
    4. Sprawdzenie poprawności konfiguracji
    5. Tworzenie drzewa katalogów
      1. Utworzenie partycji ZFS dla beadm
      2. Utworzenie potrzebnych katalogów
    6. Dodanie podstawowych kont do bazy cyrus-sasl
    7. Utworzenie konta w OpenLDAP
  2. Tworzenie kont UFQDN
  3. Przenoszenie konta (backup)
  4. Tips and tricks
    1. Backup sasldb2
    2. Sprawdzenie rozbieżności pomiędzy bazą danych, a katalogami na dysku
    3. Naprawa brakujących katalogów, plików na dysku, które są w bazie
    4. Kopiowanie kilku skrzynek z całego podrzewa OpenLDAP (tworzenie archiwum)
    5. Kopiowanie kilku skrzynek z całego podrzewa OpenLDAP (rozpakowanie archiwum)
    6. Utworzenie skrzynek na podstawie poddrzewa OpenLDAP
    7. Sprawdzenie duplikatów dla bazy delivery
    8. Usunięcie duplikatów z bazy delivery (aby móc ponownie wykonać program delivery)
    9. Wesłanie maili z pliku mbox do właściwej skrzynki
    10. Usunięcie maili z danej skrzynki spełniających kryteria
  5. Migracja poczty w ramach serwera Cyrus-IMAPd
    1. Ustawienie poprawnie uprawnień do danego folderu
    2. Migracja wiadomości jako użytkownik cyrus
  6. Upgrade serwera
    1. mass sievec
  7. Partycje UUID
  8. Źródła w sieci internet
  9. Odnośniki do dokumentacji

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.

Tworzenie kont UFQDN

W przypadku tworzenia kont pocztowych w formacie UFQDN należy zmienić ustawienia saslauthd oraz dopisać kilka rzeczy w konfiguracji /usr/local/etc/imapd.conf:

admins:         cyrus@localhost.wtp3.org postmaster@localhost.wtp3.org lmtpuser@localhost.wtp3.org cyrus postmaster lmtpuser
sieve_admins:   cyrus@localhost.wtp3.org postmaster@localhost.wtp3.org lmtpuser@localhost.wtp3.org cyrus postmaster lmtpuser
loginrealms:            gpharma.pl gpfinance.com.pl naszaginekologia.pl gph01.bsdserwis.com mx1.gpharma.pl
virtdomains:            userid

Parametr loginrealms zapewnia, że w logach nie będzie komunikatów tego typu:

authentication failure: cross-realm login

Parametr virtdomains zapewnia rozbudowę katalogów w partition-default o nazwę domeny z nazwy użytkownika UFQDN. Więcej informacji można znaleźć w manualu.

Przenoszenie konta (backup)

W celu odzyskania backupu skrzynki cyrusa, należy wykonać następujące polecenia:

tar -czf _skrzynka.tgz -C /var/spool/imap/w/user/wtp .
/usr/local/cyrus/sbin/ctl_mboxlist -d | grep wtp > mbox.dump

Zaś w nowym miejscu:

/usr/local/admin/vuser/useradd_mail.pl wtp
/usr/local/cyrus/sbin/ctl_mboxlist -u < mbox.dump
tar -xzf _skrzynka.tgz -C /var/spool/imap/w/user/wtp

Tips and tricks

Różne sztuczki i kruczki, które wyszły przy przenoszeniu poczty pomiędzy serwerami

Backup sasldb2

Przy migracji serwera jest możliwe przeniesienie zawartości bazy /usr/local/etc/sasldb2:

# na bieżącym serwerze:
#
db_dump-5 -p /usr/local/etc/sasldb2 > /tmp/sasldb2.backup

# na nowym serwerze:
#
cat /tmp/sasldb2.backup | db_load-5 /usr/local/etc/sasldb2

Sprawdzenie rozbieżności pomiędzy bazą danych, a katalogami na dysku

# zgodnie z dokumentacją może być "ciężkie" dla dysku
#
/usr/local/cyrus/sbin/ctl_mboxlist -v

Naprawa brakujących katalogów, plików na dysku, które są w bazie

su - cyrus -c "/usr/local/cyrus/sbin/reconstruct -x user.tcmagda"
su - cyrus -c "/usr/local/cyrus/sbin/reconstruct -r user.tcmagda"

Kopiowanie kilku skrzynek z całego podrzewa OpenLDAP (tworzenie archiwum)

for m in `ldapsearch -xLLL -b 'ou=__domena__,ou=smtpd,dc=bsdserwis,dc=com' objectClass=person uid | awk '/^uid/ {print $2}'`
do
       p=`echo $m | cut -c1`
       echo -n "Archiving $m ..."
       tar -cf /opt/backups/mx/_${m}.tar -C /var/spool/imap/$p/user/$m .
       echo "Done."
done

Kopiowanie kilku skrzynek z całego podrzewa OpenLDAP (rozpakowanie archiwum)

for m in `ldapsearch -xLLL -b 'ou=__domena__,ou=smtpd,dc=bsdserwis,dc=com' objectClass=person uid | awk '/^uid/ {print $2}'`
do
       p=`echo $m | cut -c1`
       echo -n "Extracting $m ..."
       tar -xf /opt/backups/mx/_${m}.tar -C /var/spool/imap/$p/user/$m
       echo "Done."
done

Utworzenie skrzynek na podstawie poddrzewa OpenLDAP

Głównie dotyczy serwera typu archiwum skrzynek. Tylko oczywiście wcześniej musi działać serwer IMAP :-)

ldapsearch -xLL -b 'ou=__domena__,ou=smtpd,dc=bsdserwis,dc=com' objectClass=person uid | awk '/^uid/ {print $2}' | xargs -n1 -t /usr/local/admin/vusers/mail_useradd --mbox

Sprawdzenie duplikatów dla bazy delivery

/usr/local/cyrus/sbin/ctl_deliver -d | grep __Message_ID__

Usunięcie duplikatów z bazy delivery (aby móc ponownie wykonać program delivery)

/usr/local/cyrus/sbin/cyr_expire -v -E __okres_czasu__ -p user.userid

gdzie okres_czasu jest domyślnie liczony w dniach. Szczegóły można znaleźć w manualu:

man -m /usr/local/cyrus/man cyr_expire

Wesłanie maili z pliku mbox do właściwej skrzynki

formail -ds sh -c 'cat > msg.$FILENO' < plik_mbox

for f in `ls msg.*`
do
      cat $f | egrep -v '^From ' | /usr/local/cyrus/sbin/deliver -a cyrus -m folder userid
done

Usunięcie maili z danej skrzynki spełniających kryteria

Jest dostępne narzędzie ipurge, które pozwala usuwać maila spełniające pewne kryteria (wiek maila w dniach, wielkość, itd.). Domyślnie narzędzie ipurge działa na folderach współdzielonych, niemniej jest możliwość usunięcia również maila u danego użytkownika. Manual nie dostarcza przykładów, zatem poniżej sposób na wyczyszczenie skrzynki archiwum dla maili starszych niż 2 lata:

su -m cyrus -c "/usr/local/cyrus/sbin/ipurge -f -d 750 __user.archeo.folder__"

Dodanie opcji "-n" do polecenia ipurge zapewni wykreowanie listy maili, które zostaną usunięte.

Po wykonanych porządkach dostaniemy podsumowanie takiego folderu po wykonanych porządkach:

Total messages                   2217
Total bytes                      2238085301
Deleted messages                 1300
Deleted bytes                    1217974136
Remaining messages               917
Remaining bytes                  1020111165

To jeszcze nie zwalnia miejsca. Trzeba jeszcze "wymusić" usunięcie maili poprzez cyr_expire

su -m cyrus -c "/usr/local/cyrus/sbin/cyr_expire -X 0 -v -u __archeo___"

Migracja poczty w ramach serwera Cyrus-IMAPd

Chodzi o przeniesienie maili z jednej skrzynki (dowolny użytkownik) do drugiej skrzynki (lub folderu). Teoretycznie powinno zadziałać:

cat _plik_z_mailem | /usr/local/cyrus/sbin/deliver -m folder userid

Ale to domyślnie nie zadziała, a po drugie ponowne próby nie dają pozytywnego rezultatu. A wszystko z powodu ochrony przed duplikatami.

Ustawienie poprawnie uprawnień do danego folderu

Domyślnie program deliver jest uruchamiany z uprawnieniami anonymous. Tak więc poprzez cyradm należy dać użytkownikowi anonymous uprawnienia p (raczej cała ścieżka w dla danego userid).

Migracja wiadomości jako użytkownik cyrus

Albo uruchomić program deliver z odpowiednimi opcjami:

cat _plik_z_mailem | /usr/local/cyrus/sbin/deliver -a cyrus -m folder userid

Upgrade serwera

mass sievec

Od wersji 2.x.y serwer imapd przechowuje skrypty Sieve w postacji byte code (skrypty posiadają rozszerzenie .bc). Przy upgrade serwera dobrze jest wykonać rekompilację skryptów sieve, aby:

Rozwiązaniem jest narzędzie masssievec, które wykonuje rekompilację dla wszystkich użytkowników:

su -l cyrus -c "/usr/local/cyrus/sbin/masssievec /usr/local/cyrus/sbin/sievec"

Partycje UUID

Od wersji 3.6.x albo 3.8.x domyślnym sposobem przechowywania maili na dysku są katalogi UUID (zamiast poprzednio zgodnie z nazwą użytkownika). Co ważne każdy folder pocztowy ma swój UUID (inny aniżeli główna skrzynka odbiorcza). Aby to wszystko znaleźć, twórcy dostarczyli program mbpath, który pokazuje jaki katalog na dysku jest powiązany z danym INBOXem (danym folderem pocztowym) przechowującym maile. Sposób użycia jest następujący:

# pokaż INBOX danego użytkownika
/usr/local/cyrus/sbin/mbpath -u __user__

# j.w. z podziałem na partycje w ramach folderu
/usr/local/cyrus/sbin/mbpath -a -u __user__

# Archive: /var/spool/imap/uuid/f/5/f5138f83-5de3-4439-babf-183f791168f0
# Data: /var/spool/imap/uuid/f/5/f5138f83-5de3-4439-babf-183f791168f0
# Meta: /var/spool/imap/uuid/f/5/f5138f83-5de3-4439-babf-183f791168f0
# Sieve: /var/imap/sieve/uuid/0/1/012f7f27-6d61-4d4f-bd0e-bd37b9c2a619
# User: /var/imap/user/uuid/0/1/012f7f27-6d61-4d4f-bd0e-bd37b9c2a619

# pokaż ścieżkę na dysku dla konkretnego folderu
/usr/local/cyrus/sbin/mbpath user.__user__.__folder__

Źródła w sieci internet

  1. strona domowa Cyrus IMAP

  2. Upgrade do 3.0-stable

  3. ACL w cyrus-imapd

Odnośniki do dokumentacji


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

CyrusImapd (ostatnio edytowane 2025-10-27 21:01:47 przez wtps0n)