|
Rozmiar: 15644
Komentarz: + opis uuid
|
← Wersja 31 z 2025-10-27 21:01:47 ⇥
Rozmiar: 16560
Komentarz: * atkualizacja dla imapd 3.12
|
| 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.8.x = | = Konfiguracja Cyrus IMAPd 3.12.x = |
| Linia 67: | Linia 67: |
| 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 |
Serwer [[FreshPorts:mail/cyrus-imapd312|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ć'' [[FreshPorts:net/haproxy|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'': {{{#!highlight json numbers=off 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: {{{#!highlight bash numbers=off # ustawienie właściwych uprawnień dla klucza prywatnego (szybko) # |
| Linia 74: | Linia 83: |
| }}} |
# 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 ==== |
| Linia 81: | Linia 96: |
| ==== Wspierane wersje TLS ==== |
Wydrukuj tę dokumentację Pokaż jako slajdy
Spis Treści
- Konfiguracja Cyrus IMAPd 3.12.x
- Tworzenie kont UFQDN
- Przenoszenie konta (backup)
-
Tips and tricks
- Backup sasldb2
- Sprawdzenie rozbieżności pomiędzy bazą danych, a katalogami na dysku
- Naprawa brakujących katalogów, plików na dysku, które są w bazie
- Kopiowanie kilku skrzynek z całego podrzewa OpenLDAP (tworzenie archiwum)
- Kopiowanie kilku skrzynek z całego podrzewa OpenLDAP (rozpakowanie archiwum)
- Utworzenie skrzynek na podstawie poddrzewa OpenLDAP
- Sprawdzenie duplikatów dla bazy delivery
- Usunięcie duplikatów z bazy delivery (aby móc ponownie wykonać program delivery)
- Wesłanie maili z pliku mbox do właściwej skrzynki
- Usunięcie maili z danej skrzynki spełniających kryteria
- Migracja poczty w ramach serwera Cyrus-IMAPd
- Upgrade serwera
- Partycje UUID
- Źródła w sieci internet
- 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
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:
Poprawki w konfiguracji saslauthd
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:
- 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
Odnośniki do dokumentacji
Konfiguracja protokołu LMTP
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.
