Różnice pomiędzy wersjami 27 i 29 (Spinanie 2 wersji)
⇤ ← Wersja 27 z 2023-01-31 13:47:09 →
Rozmiar: 13757
Edytor: wtps0n
Komentarz: + kalendarze, ipurge
← Wersja 29 z 2024-11-16 21:35:19 → ⇥
Rozmiar: 14480
Edytor: wtps0n
Komentarz: + chmod w konfiguracji ssl/tls
Usunięcia zostały oznaczone w ten sposób. Dodatki zostały oznaczone w ten sposób.
Linia 8: Linia 8:
= Konfiguracja Cyrus IMAPd 3.2.x = = Konfiguracja Cyrus IMAPd 3.8.x =
Linia 71: Linia 71:

# ustawienie właściwych uprawnień dla klucza prywatnego
chmod 0644 /usr/local/etc/ssl/mx1.domain.tld.key.pem
Linia 138: Linia 141:
# ale czasami prtycja jest w innym miejscu, # ale czasami partycja jest w innym miejscu,
Linia 178: Linia 181:
Parametr ''virtdomains'' zapewnia rozbudowę katalogów w ''partition-default'' o nazwę domeny z nazwy użytkownika UFQDN. Więcej informcji można znaleźć w manualu. 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.
Linia 315: Linia 318:
= 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"
}}}

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"

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