Różnice pomiędzy wersjami 4 i 30 (Spinanie 26 wersji)
⇤ ← Wersja 4 z 2014-03-29 21:18:43 →
Rozmiar: 2627
Edytor: wtps0n
Komentarz:
← Wersja 30 z 2025-06-15 18:26:57 → ⇥
Rozmiar: 15644
Edytor: wtps0n
Komentarz: + opis uuid
Usunięcia zostały oznaczone w ten sposób. Dodatki zostały oznaczone w ten sposób.
Linia 4: Linia 4:
<<Action(print, Wydrukuj tę dokumentację)>>` `<<Action(SlideShow, Pokaż jako slajdy)>><<BR>>
<<Navigation(children)>>
Linia 6: Linia 8:
= Konfiguracja Cyrus imapd = = Konfiguracja Cyrus IMAPd 3.8.x =
Linia 9: Linia 11:
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). 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).
Linia 13: Linia 15:
# dla LMTP należy wybrać jedno z dwóch
#
lmtp 4192/tcp
Linia 17: Linia 22:
A następnie wykonać przebudowę bazy serwisów:
{{{#!highlight bash numbers=off
/usr/sbin/services_mkdb -q -o /var/db/services.db /etc/services
}}}
Linia 18: Linia 28:
Należy odkomentować poniższą linię:
{{{
Należy zapewnić, aby poniższe linie były aktywne oraz zawierały wartości:
{{{#!highlight ini numbers=off
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

Linia 26: Linia 43:
=== 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 [[SaslAuthd|konfiguracji saslauthd]]
 1. Poprawki w konfiguracji `imapd.conf`
{{{#!highlight json numbers=off
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 [[http://www.OpenLDAP.org|OpenLDAP|target="_blank"]]).

=== Autokreacja wybranych folderów ===
{{{#!highlight json numbers=off
autocreate_quota: 100000
autocreate_post: 1
autocreate_inbox_folders: Draft|Sent|Trash|Spam|Nonspam
}}}

=== Zabezpieczenie protokołów SSL/TLS ===
Serwer [[FreshPorts:mail/cyrus-imapd36|Cyrus IMAPd]] nie posiada dedykowanej opcji w celu podania ''DH parameters'' (tak jak można to zrobić w serwerze [[NginxWebServer|nginx]] lub [[ApacheUpgradeDo24|apache]]). Niemniej można to zrobić poprzez "''doklejenie''" ''DH parameters'' (w formacie PEM) do pliku z kluczem:

{{{#!highlight bash numbers=off
cat /usr/local/etc/ssl/mx1.domain.tld.2048.dh.pem >> /usr/local/etc/ssl/mx1.domain.tld.key.pem

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

Drugim parametrem zabezpieczającym jest jawne podanie akceptowanych ''TLS ciphers'':
{{{#!highlight json numbers=off
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
}}}

Dodatkowo można wybrać wspierane wersje TLS:
{{{#!highlight json numbers=off
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 [[NginxWebServer|nginx]]:

{{{#!highlight json numbers=off
serverinfo: min
}}}

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

==== cyrus.conf ====
{{{#!highlight ini numbers=off
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 ====
{{{#!highlight json numbers=off

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

# Konfiguracja kalendarzy
#
calendarprefix: #calendars
}}}

== Sprawdzenie poprawności konfiguracji ==
{{{#!highlight bash numbers=off
su -l cyrus -c "/usr/local/cyrus/sbin/cyr_info conf-lint -C /usr/local/etc/imapd.conf -M /usr/local//etc/cyrus.conf"
}}}
Linia 27: Linia 125:
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 łątwo robić backupy (snapshoty), czy zrobić inne ustawienia (np. kompresja).

{{{#!shell numbers=off
mkdir -p /var/imap/sieve /var/spool/imap/ /var/imap/user
chown cyrus:cyrus /var/imap/ /var/spool/imap/ /var/imap/user
chmod 0750 /var/imap/ /var/spool/imap/
su - cyrus -c "mkimap"
}}}
{{{#!shell numbers=off
# wersja dla ZFS

# partycja imap zawiera "konfigurację" skrzynek, czy skryptów sieve. Zatem można kompresję włączyć, bo nie wiele to kosztuje
#
zfs create -o compress=gzip -o mountpoint=/var/imap tank/v/imap

# partycja spool zawiera już pocztę. Kompresja? Hmm, może być zbyt wielkim obciążeniem.
# Ale zawsze zablokowanie setuid, czy exec może być pomocne (jako dziedziczone):
#
zfs create -o mountpoint=/var/spool tank/v/spool
zfs create tank/v/spool/imap
Jeżeli jest to partycja UFS, to po prostu tworzenie drzewa katalogów. Ale jeżeli [[PodzialNaPartycjeBeAdm|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 [[PodzialNaPartycjeBeAdm|zalecaną dokumentacją]] należy utworzyć partycje w razie konieczności (powinny być utworzone w trakcie instalacji serwera):
{{{#!highlight bash numbers=off
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).

{{{#!highlight bash numbers=off
# 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"
Linia 50: Linia 155:
{{{ {{{#!highlight bash numbers=off
# dodanie kont postmaster
Linia 53: Linia 159:

# pokazanie zawartości bazy sasldb2
Linia 57: Linia 165:
Z analogicznym (jak powyżej) loginem oraz hasłem należyć wykreować konto (SSO) w lokalnej bazie LDAP.

== Przenoszenie konta (backup) ==
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|saslauthd]] oraz dopisać kilka rzeczy w konfiguracji `/usr/local/etc/imapd.conf`:
{{{#!highlight json numbers=off
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) =
Linia 61: Linia 185:
{{{#!highlight bash numbers=off
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:
{{{#!highlight bash numbers=off
/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`:
{{{#!highlight bash numbers=off
# 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 ==
{{{#!highlight bash numbers=off
# 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 ==
{{{#!highlight bash numbers=off
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) ==
{{{#!highlight bash numbers=off
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) ==
{{{#!highlight bash numbers=off
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 :-)
{{{#!highlight bash numbers=off
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 ==
{{{#!highlight bash numbers=off
/usr/local/cyrus/sbin/ctl_deliver -d | grep __Message_ID__
}}}

== Usunięcie duplikatów z bazy delivery (aby móc ponownie wykonać program delivery) ==
{{{#!highlight bash numbers=off
/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:
{{{#!highlight bash numbers=off
man -m /usr/local/cyrus/man cyr_expire
}}}

== Wesłanie maili z pliku mbox do właściwej skrzynki ==
{{{#!highlight bash numbers=off
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:
{{{#!highlight bash numbers=off
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:
Linia 62: Linia 287:
tar -czf _skrzynka.tgz -C /var/spool/imap/w/user/wtp .
/usr/local/cyrus/bin/ctl_mboxlist -d | grep wtp > mbox.dump
tar -czf _skrzynka_seen.tgz -C /var/imap/user/w/ wtp*
}}}
Zaś w nowym miejscu:
{{{
/usr/local/admin/vuser/useradd_mail.pl wtp
/usr/local/cyrus/bin/ctl_mboxlist -u < mbox.dump
tar -xzf _skrzynka.tgz -C /var/spool/imap/w/user/wtp
mkdir -p -C /var/imap/user/w/
tar -xzf skrzynka_seen.tgz -C /var/imap/user/w/
}}}
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'''

{{{#!highlight bash numbers=off
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ć:
{{{#!highlight bash numbers=off
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:
{{{#!highlight bash numbers=off
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:
 * działały poprawnie
 * były uruchamiane dla jednego użytkownika, zamiast dla wszystkich jednoczesnych odbiorców maili

Rozwiązaniem jest narzędzie `masssievec`, które wykonuje rekompilację dla wszystkich użytkowników:
{{{#!highlight bash numbers=off
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:
{{{#!highlight bash numbers=off
# 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. [[http://cyrusimap.org/|strona domowa Cyrus IMAP|target="_blank]]
 1. [[http://cyrusimap.org/imap/download/upgrade.html|Upgrade do 3.0-stable|target="_blank]]
 1. [[https://www.cyrusimap.org/imap/reference/admin/access-control/rights-reference.html|ACL w cyrus-imapd|target="_blank]]

= Odnośniki do dokumentacji =
 * Konfiguracja [[PostfixLmtp|protokołu LMTP]]
Linia 76: Linia 358:
{*} Wszelkie uwagi proszę zgłaszać do administratora strony. {i} ` `<<GetVal(SlownikNewBsd,adm-podpis)>>

Wydrukuj tę dokumentację Pokaż jako slajdy


Konfiguracja Cyrus IMAPd 3.8.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 nie posiada dedykowanej opcji w celu podania DH parameters (tak jak można to zrobić w serwerze nginx lub apache). Niemniej można to zrobić poprzez "doklejenie" DH parameters (w formacie PEM) do pliku z kluczem:

cat /usr/local/etc/ssl/mx1.domain.tld.2048.dh.pem >> /usr/local/etc/ssl/mx1.domain.tld.key.pem

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

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

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:

  • działały poprawnie
  • były uruchamiane dla jednego użytkownika, zamiast dla wszystkich jednoczesnych odbiorców maili

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)