Różnice pomiędzy wersjami 2 i 19 (Spinanie 17 wersji)
⇤ ← Wersja 2 z 2014-03-05 23:51:43 →
Rozmiar: 2479
Edytor: wtps0n
Komentarz: +zfs
← Wersja 19 z 2018-09-02 21:04:29 → ⇥
Rozmiar: 8555
Edytor: wtps0n
Komentarz: *** KREACJA ***
Usunięcia zostały oznaczone w ten sposób. Dodatki zostały oznaczone w ten sposób.
Linia 4: Linia 4:
= Konfiguracja Cyrus imapd =

=== Dopiski do /etc/services ===
<<Action(print, Wydrukuj tę dokumentację)>>` `<<Action(SlideShow, Pokaż jako slajdy)>><<BR>>
<<Navigation(children)>>
<<TableOfContents()>><<BR>>

= Konfiguracja Cyrus imapd 3.0.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).
Linia 10: Linia 15:
sieve 4203/tcp # dla LMTP należy wybrać jedno z dwóch
#
lmtp 4192/tcp
Linia 15: Linia 22:
=== Konfiguracja cyrus.conf ===
Należy odkomentować poniższą linię:
A następnie wykonać przebudowę bazy serwisów:
{{{#!highlight bash numbers=off
/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:
{{{#!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


notify cmd="notifyd" listen="/var/imap/socket/notify" proto="udp" prefork=1
}}}

== Konfiguracja imapd.conf ==
[[attachment: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:
Linia 18: Linia 46:
notify cmd="notifyd" listen="/var/imap/socket/notify" proto="udp" prefork=1
}}}

=== Konfiguracja imapd.conf ===
[[attachment:imapd.conf|Patrz załącznik]]

=== 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 łątwo robić backupy (snapshoty), czy zrobić inne ustawienia (np. kompresja).

{{{#!shell numbers=off
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
}}}

== Sprawdzenie poprawności konfiguracji ==
{{{#!highlight bash numbers=off
su -l cyrus -c "/usr/local/cyrus/sbin/cyr_info conf-lint -C /etc/imapd.conf -M /etc/cyrus.conf"
}}}

== Tworzenie drzewa katalogów ==
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
Linia 29: Linia 87:
chown cyrus:cyrus /var/imap/ /var/spool/imap/ /var/imap/user chown cyrus:cyrus /var/imap/ /var/spool/imap/ /var/imap/user /var/imap/sieve
Linia 33: Linia 91:
{{{#!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
}}}

=== Dodanie podstawowych kont do bazy cyrus-sasl ===
{{{

== Dodanie podstawowych kont do bazy cyrus-sasl ==
{{{#!highlight bash numbers=off
# dodanie kont postamaster
Linia 51: Linia 97:

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

=== Przenoszenie konta (backup) ===
== Utworzenie konta w OpenLDAP ==
Z analogicznym (jak powyżej) loginem oraz hasłem należy wykreować konto (SSO) w lokalnej bazie LDAP.

= Przenoszenie konta (backup) =
Linia 59: Linia 107:
{{{ {{{#!highlight bash numbers=off
Linia 62: Linia 110:
tar -czf _skrzynka_seen.tgz -C /var/imap/user/w/ wtp*
}}}
}}}
Linia 65: Linia 113:
{{{ {{{#!highlight bash numbers=off
Linia 69: Linia 117:
mkdir -p -C /var/imap/user/w/
tar -xzf skrzynka_seen.tgz -C /var/imap/user/w/
}}}
}}}

= 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
}}}

= 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
}}}

= Ź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]]
Linia 74: Linia 221:
{*} Wszelkie uwagi proszę zgłaszać do administratora strony. {i} ` `<<GetVal(SlownikNewBsd,adm-podpis)>>

Wydrukuj tę dokumentację Pokaż jako slajdy


Konfiguracja Cyrus imapd 3.0.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

Sprawdzenie poprawności konfiguracji

su -l cyrus -c "/usr/local/cyrus/sbin/cyr_info conf-lint -C /etc/imapd.conf -M /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).

mkdir -p /var/imap/sieve /var/spool/imap/ /var/imap/user
chown cyrus:cyrus /var/imap/ /var/spool/imap/ /var/imap/user /var/imap/sieve
chmod 0750 /var/imap/ /var/spool/imap/
su - cyrus -c "mkimap"

Dodanie podstawowych kont do bazy cyrus-sasl

# dodanie kont postamaster
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.

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/bin/ctl_mboxlist -d | grep wtp > mbox.dump

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

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

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

Źródła w sieci internet

  1. strona domowa Cyrus IMAP

  2. Upgrade do 3.0-stable


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