|
Rozmiar: 3094
Komentarz:
|
Rozmiar: 14364
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
Spis Treści
- Konfiguracja Cyrus IMAPd 3.8.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
- Źródła w sieci internet
- Odnośniki do dokumentacji
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
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 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
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.
