Różnice pomiędzy wersjami 5 i 28 (Spinanie 23 wersji)
⇤ ← Wersja 5 z 2014-05-27 12:32:20 →
Rozmiar: 3094
Edytor: wtps0n
Komentarz:
← Wersja 28 z 2024-02-08 21:44:12 → ⇥
Rozmiar: 14364
Edytor: wtps0n
Komentarz: + rozdział o aktualizacjach; wyczyszczenie literówek
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
}}}

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 122:
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 152:
{{{ {{{#!highlight bash numbers=off
# dodanie kont postmaster
Linia 53: Linia 156:

# pokazanie zawartości bazy sasldb2
Linia 57: Linia 162:
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 182:
{{{#!shell numbers=off {{{#!highlight bash numbers=off
Linia 63: Linia 184:
/usr/local/cyrus/bin/ctl_mboxlist -d | grep wtp > mbox.dump
}}}
/usr/local/cyrus/sbin/ctl_mboxlist -d | grep wtp > mbox.dump
}}}
Linia 66: Linia 188:
{{{#!shell numbers=off {{{#!highlight bash numbers=off
Linia 68: Linia 190:
/usr/local/cyrus/bin/ctl_mboxlist -u < mbox.dump /usr/local/cyrus/sbin/ctl_mboxlist -u < mbox.dump
Linia 75: Linia 197:
== 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
}}}
Linia 76: Linia 210:
{{{#!shell numbers=off {{{#!highlight bash numbers=off
Linia 79: Linia 213:
/usr/local/cyrus/bin/ctl_mboxlist -v /usr/local/cyrus/sbin/ctl_mboxlist -v
Linia 83: Linia 217:
{{{#!shell numbers=off
su - cyrus -c "/usr/local/cyrus/bin/reconstruct -x user.tcmagda"
su - cyrus -c "/usr/local/cyrus/bin/reconstruct -r user.tcmagda"
}}}
{{{#!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:
{{{
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"
}}}

= Ź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 89: Linia 336:
{*} 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

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"

Ź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)