Installation Dovecot

Hier wird die Basis-Installation von Dovecot beschrieben. Falls du von Cyrus zu Dovecot migrieren möchtest, findest du hier die entsprechende Anleitung.

Installation

Dovecot

Aktuell gibt es unter FreeBSD noch keinen dovecot-mysql Port, weshalb ich den Port selber Builde:

cd /usr/ports/mail/dovecot
make install clean

Hier MySQL für den Datenbank Support auswählen:

┌───────────────────────────── dovecot-2.3.2.1 ────────────────────────────────┐
│ ┌──────────────────────────────────────────────────────────────────────────┐ │  
│ │+[x] DOCS            Build and/or install documentation                   │ │  
│ │+[x] EXAMPLES        Build and/or install examples                        │ │  
│ │+[x] LIBWRAP         TCP wrapper support                                  │ │  
│ │+[ ] LUA             Lua scripting language support                       │ │  
│ │+[ ] LZ4             LZ4 compression support                              │ │  
│ │+[ ] VPOPMAIL        vpopmail support                                     │ │  
│ │───────────────────────────── Database support ───────────────────────────│ │  
│ │+[ ] CDB             CDB database support                                 │ │  
│ │+[ ] LDAP            LDAP protocol support                                │ │  
│ │ [x] MYSQL           MySQL database support                               │ │  
│ │+[ ] PGSQL           PostgreSQL database support                          │ │  
│ │+[ ] SQLITE          SQLite database support                              │ │  
│ │───────────────────────── Full text search plugins ───────────────────────│ │  
│ │+[ ] ICU             Use libicu for FTS unicode normalization             │ │  
│ │+[ ] LUCENE          CLucene FTS support                                  │ │  
│ │+[ ] SOLR            Solr FTS support                                     │ │  
│ │+[ ] TEXTCAT         Libtextcat FTS support                               │ │  
│ │─────────────────────── GSSAPI Security API support ──────────────────────│ │  
│ │+(*) GSSAPI_NONE     Build without GSSAPI support                         │ │  
│ │+( ) GSSAPI_BASE     Use GSSAPI from base                                 │ │  
│ │+( ) GSSAPI_HEIMDAL  Use Heimdal GSSAPI from security/heimdal             │ │  
│ │+( ) GSSAPI_MIT      Use MIT GSSAPI from security/krb5                    │ │  
│ └──────────────────────────────────────────────────────────────────────────┘ │  
├──────────────────────────────────────────────────────────────────────────────┤  

Jetzt noch locken, damit es beim nächsten pkg upgrade nicht mit dem vorkompilierten Port überschrieben wird:

pkg lock dovecot

Sieve Plugin

Wegen den Abhängigkeiten muss auch dieser Port manuell gebuildet werden, ansonsten würde Dovecot in zwei Versionen doppelt installiert werden (da ich es vorher ja gelockt habe)

Also das Sieve Plugin mit Managesieve Support installieren:

cd /usr/ports/mail/dovecot-pigeonhole
make install clean
pkg lock dovecot-pigeonhole

Konfiguration

Das Verzeichnis der Config Files: /usr/local/etc/dovecot

Verzeichnisse erstellen

Ich möchte, dass die Mails im Verzeichnis

/mail/dovecot/USERNAME/Maildir 

gespeichert werden. Also mal alle Verzeichnisse erstellen:

mkdir -p /mail/dovecot

adduser vmail

Als erstes den vmail User hinzufügen für die Nutzung einer Single UID und GID für alle User. (Kann bei Bedarf per userdb überschrieben werden)

adduser vmail
Username: vmail
Full name: Dovecot Virtual User
Uid (Leave empty for default):
Login group [vmail]:
Login group is vmail. Invite vmail into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash rbash git-shell nologin) [sh]: nologin
Home directory [/home/vmail]: /mail/dovecot
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]: no
Lock out the account after creation? [no]:

Berechtigungen setzen

chown -R vmail:vmail /mail/dovecot
chmod 0750 /mail/dovecot

Dovecot Konfiguration

Konfigfiles kopieren:

cp -R /usr/local/etc/dovecot/example-config/* /usr/local/etc/dovecot

dovecot.conf

vi /usr/local/etc/dovecot/dovecot.conf

Sieve bei den Protokollen hinzufügen

# Protocols we want to be serving.
#protocols = imap pop3 lmtp submission
protocols = imap pop3 lmtp sieve

dovecot-sql.conf.ext

vi /usr/local/etc/dovecot/dovecot-sql.conf.ext

Verfügbare Variabeln:

  • %u: Kompletter Username (user@domain).
  • %n: Username ohne Domain Part.
  • %d: Domain Part.
  • %h: User Home Verzeichnis (bevorzugt sollte man jedoch ~/ verwenden)

Liste aller Variabeln

Diese Einstellungen sind wieder an die Ursprüngliche Cyrus Config angelehnt:

driver = mysql
#
connect = host=sql.example.com dbname=virtual user=virtual password=blarg
#
default_pass_scheme = PLAIN
#
password_query = SELECT CONCAT(username, '@', domain) AS user, password FROM mail_entries WHERE ( username = '%Lu' OR ( username = '%Ln' AND domain = '%Ld' ) ) AND is_active = 1 AND is_mainaccount = 1
#user_query =
# SELECT home, uid, gid
# FROM users WHERE username = '%n' AND domain = '%d'

Beachte: Ich habe hier die user_query deaktiviert, da ich diese Infos nicht pro User abfrage, sondern im Config global übergebe (Single UID/GID Setup). Somit kann man sich diese Abfrage sparen.

Falls man home/maildir/uid auch für jeden User abfagen möchte, kann man die Query so gestalten:

password_query = 
   SELECT 
     CONCAT(username, '@', domain) AS user, 
     password, 
     home AS userdb_home, 
     CONCAT('maildir:', home) AS userdb_mail, 
     uid AS userdb_uid, 
     gid AS userdb_gid 
   FROM mail_entries 
   WHERE ( username = '%Lu' 
           OR ( username = '%Ln' AND domain = '%Ld' ) 
) AND is_active = 1 AND is_mainaccount = 1

 

conf.d/10-mail.conf

Hier Maillocation und Home Dir anpassen. Ich möchte dieselbe Verzeichnisstruktur, wie ich vorher bei Cyrus hatte. Also mit LAYOUT=fs

vi /usr/local/etc/dovecot/conf.d/10-mail.conf
mail_home = /mail/dovecot/%n
mail_location = maildir:~/Maildir:LAYOUT=fs
namespace inbox {
separator = .
prefix = INBOX.
inbox = yes
}
mail_uid = vmail
mail_gid = vmail

conf.d/10-master.conf

vi /usr/local/etc/dovecot/conf.d/10-master.conf 
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}

conf.d/10-auth.conf

hier auth-sql.conf.ext aktivieren und allen anderen Includes deaktivieren:

vi /usr/local/etc/dovecot/conf.d/10-auth.conf 
disable_plaintext_auth = no
auth_mechanisms = login plain cram-md5 digest-md5
#
#!include auth-system.conf.ext
!include auth-sql.conf.ext

conf.d/auth-sql.conf.ext

Jetzt noch userdb abschalten:

vi /usr/local/etc/dovecot/conf.d/auth-sql.conf.ext

userdb driver=sql abschalten. Static brauchen wir auch nicht zu aktivieren, da wir im 10.-mail.conf die globalen Settings (mail_uid/mail_gid) bereits eingetragen haben.:

# Authentication for SQL users. Included from 10-auth.conf.
#
# <doc/wiki/AuthDatabase.SQL.txt>

passdb {
driver = sql

# Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
}

# "prefetch" user database means that the passdb already provided the
# needed information and there's no need to do a separate userdb lookup.
# <doc/wiki/UserDatabase.Prefetch.txt>
#userdb {
# driver = prefetch
#}

#userdb {
# driver = sql
# args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
#}

# If you don't have any user-specific settings, you can avoid the user_query
# by using userdb static instead of userdb sql, for example:
# <doc/wiki/UserDatabase.Static.txt>
#userdb {
# driver = static
# args = uid=vmail gid=vmail home=/var/vmail/%u
#}

conf.d/10-ssl.conf

SSL Zertifikat erstellen

Dafür nehme ich ein bestehendes SSL Zertifikat -> wie du ein Zertifikat mit Certbot erstellen kannst, ist hier beschrieben:

Let’s Encrypt SSL Zertifikate mit Certbot erstellen

DH Parameters

Ab Dovecot Version 2.3 ist die Angabe von DH Parametern zwingend. Falls für den Server diese noch nicht generiert wurden (achtung: dauert SEHR! lange), müsste dies noch gemacht werden. Wenn man möchte, kann man alternativ auch 2048 generieren – das geht etwas schneller.

openssl dhparam -out /etc/ssl/dhparams_4096.pem 4096

Danach die Config anpassen:

vi /usr/local/etc/dovecot/conf.d/10-ssl.conf 

Folgendes anpassen:

ssl = yes

ssl_cert = </global/configs/letsencrypt_data/live/mail.meinmailserver.com/fullchain.pem
ssl_key = </global/configs/letsencrypt_data/live/mail.meinmailserver.com/privkey.pem

# Individuelle Zertifkate pro Domain
local_name mail.meinmailserver.com {
ssl_cert = </global/configs/letsencrypt_data/live/mail.meinmailserver.com/fullchain.pem
ssl_key = </global/configs/letsencrypt_data/live/mail.meinmailserver.com/privkey.pem
}
local_name mail.meinmailserver2.com {
ssl_cert = </global/configs/letsencrypt_data/live/mail.meinmailserver2.com/fullchain.pem
ssl_key = </global/configs/letsencrypt_data/live/mail.meinmailserver2.com/privkey.pem
}
local_name mail.meinmailserver3.com {
ssl_cert = </global/configs/letsencrypt_data/live/mail.meinmailserver3.com/fullchain.pem
ssl_key = </global/configs/letsencrypt_data/live/mail.meinmailserver3.com/privkey.pem
}

ssl_dh = </etc/ssl/dhparams_4096.pem

Weitere Infos Dovecot SSL Configuration

conf.d/10-logging.conf

Falls man etwas Debuggen möchte, kann man das hier konfigurieren:

vi /usr/local/etc/dovecot/conf.d/10-logging.conf

Welche Logfiles benutzt werden findest du mit dem Befehl:

doveadm log find

Detailierte Infos zu den Logfiles findest du im dovecot Wiki.

conf.d/20-imap.conf

Um die Komprimierung

COMPRESS=DEFLATE

zu aktivieren, wird das zlib Plugin verwendet.

Die Kompression kann für das Lesen (IMAP) und Schreiben (LMTP) aktiviert werden:

vi /usr/local/etc/dovecot/conf.d/20-imap.conf
protocol imap {
mail_plugins = $mail_plugins zlib imap_zlib
}

conf.d/20-lmtp.conf

Hier die Kompression ebenfalls noch aktivieren:

vi /usr/local/etc/dovecot/conf.d/20-lmtp.conf
protocol lmtp {
mail_plugins = $mail_plugins zlib
}

conf.d/90-plugin.conf

Und jetzt noch die Plugins:

vi /usr/local/etc/dovecot/conf.d/90-plugin.conf
plugin {
#setting_name = value
zlib_save_level = 6 # 1..9; default is 6
zlib_save = gz # or bz2, xz or lz4
}

Konfiguration anschauen/testen:

doveconf -n

 

Sendmail / SASL Konfigurieren

SASL (Simple Authentication and Security Layer) wird für die Sendmail/SMTP Authentifizierung benötigt.

Dovecot bietet zwar auch SASL an (siehe Dovecot Wiki) – allerdings nicht für Sendmail. Daher verwenden wir das SASL von Cyrus

pkg install cyrus-sasl-sql
pkg install sendmail+tls+sasl2

Nun die SASL Konfiguration anpassen:

vi /usr/local/lib/sasl2/Sendmail.conf

Das kann dann so aussehen:

pwcheck_method: auxprop
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: localhost
sql_user: dbuser
sql_passwd: dbpasswd
sql_database: mydatabase
sql_verbose: no
sql_select: SELECT password FROM mail_entries WHERE ( username = '%u' OR ( username = '%u' AND domain = '%r' ) ) AND is_active = 1 AND is_mainaccount = 1
sql_usessl: 0
mech_list: login plain cram-md5 digest-md5
log_level: 1

Jetzt noch Sendmail (in deinem Custom sendmail.mc File):

FEATURE(`local_lmtp',`[IPC]',`FILE /var/run/dovecot/lmtp')dnl
MODIFY_MAILER_FLAGS(`LOCAL', `+u')dnl
MODIFY_MAILER_FLAGS(`LOCAL', `-w')dnl
[.. hier die restlichen MAILER Definitionen ..]
MAILER(`local')dnl

Dovecot aktivieren


Im rc.conf aktivieren:

vi /etc/rc.conf
#-----------------------------------------------#
# Mail System
#-----------------------------------------------#
dovecot_enable="YES"

Starten

service dovecot start

und auch noch Sendmail neu starten. Ich mach sicherheitshalber ein killall, da ein einfaches sendmail restart nicht immer den gewünschten Erfolg bringt.

killall sendmail
service sendmail start

Dovecot Administrieren

Die Mailboxen werden mit doveadm administriert. Weitere Infos dazu im Dovecot Wiki.

Mailbox erstellen

Als erstes die Mailbox Daten (username/passwort etc.) im mysql erfassen. Danach mit doveadm die Mailboxen erstellen:

# user eröffnen
doveadm mailbox create -u mailboxusername INBOX
# ein paar default mailboxen erstellen
doveadm mailbox create -u mailboxusername INBOX.Sent
doveadm mailbox create -u mailboxusername INBOX.Trash
doveadm mailbox create -u mailboxusername INBOX.Drafts

Die Mailboxen werden dann in automatisch erstellt in unserem vordefinierten Dovecot Home Directory :

/mail/dovecot

Ach, die Folders Sent, Trash und Drafts muss man im Thunderbird „Abonnieren“, sonst werden sie nicht angezeigt. 😉

Folders zwischen Accounts verschieben

Wenn man einen neuen Email Account eröffnet hat und Folders von einem ehemaligen Account in den neuen verschieben möchte, kann das sehr lange dauern, wenn man das mit Thunderbird oder einem anderen Email Client macht. Einfacher geht es, wenn man die Folders direkt auf dem Server von einem Account zum anderen schieben kann.

In diesem Beispiel verschieben wir die Inhalte des Folders „Lieferanten“ von account1 nach account2:

cd /mail/dovecot
cp -R account1/Maildir/Lieferanten/* account2/Maildir/Lieferanten/
rm -rf account1/Maildir/Lieferanten

Nun müssen die Index Files gelöscht werden, diese werden nach dem Dovecot Restart automatisch neu erstellt.

rm account1/Maildir/dovecot.index.*
rm account2/Maildir/Lieferanten/dovecot.index.*
service dovecot restart

Jetzt noch die Folders abonnieren. Diesen Befehl habe ich öfters angetroffen, funktioniert aber leider NICHT:

doveadm mailbox subscribe -u fabulouseinkauf "*"

Man muss einen loop verwenden, dann gehts. Also alle boxen auflisten und subscriben:

doveadm mailbox subscribe -u account2 
$( doveadm mailbox list -u account2 )

Probleme machen hier jedoch alle Folder, die einen Leerschlag / Space drin haben.

doveadm(account2): Error: Can't - mailbox subscribe to: Mailbox can't be subscribed
doveadm(account2): Error: Can't Ich mailbox subscribe to: Mailbox can't be subscribed
doveadm(account2): Error: Can't habe mailbox subscribe to: Mailbox can't be subscribed
doveadm(account2): Error: Can't Spaces mailbox subscribe to: Mailbox can't be subscribed

Die Subscribtions sind einfach als Textfile im Root des jeweiligen Accounts gespeichert. Das File kann man entweder manuell anpassen oder man macht es über den Email Client.

$/mail/dovecot/account2/Maildir)> vi subscriptions 

Hier einfach die fehlerhaften Einträge löschen oder ergänzen bis alles stimmt. Oder eben einfach über den Thunderbird alles Abonnieren. Geht vielleicht einfacher 😉

Testen

Übersicht der einzelnen Ports:

SMTP (Ausgehende Mails):

  • Port 25 oder 587 – Unverschlüsselt, Auth: AUTH
  • Port 587 – Secure (TLS), Auth: STARTTLS
  • Port 465 – Secure (SSL), Auth: SSL

IMAP (Eingehende Mails):

  • Port 143 – Unverschlüsselt, Auth: AUTH
  • Port 143 – Secure (TLS), Auth: STARTTLS
  • Port 993 – Secure (SSL), Auth: SSL

POP3 (Eingehende Mails):

  • Port 110 – Unverschlüsselt, Auth: AUTH
  • Port 995 – Secure (SSL), Auth: SSL

Unverschlüsselte Verbindungen Testen:

# telnet localhost 110
Trying ::1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
# telnet localhost 143
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=LOGIN AUTH=PLAIN AUTH=CRAM-MD5 AUTH=DIGEST-MD5] Dovecot ready.

Verschlüsselte Verbindungen Testen:

# telnet localhost 143
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=LOGIN AUTH=PLAIN AUTH=CRAM-MD5 AUTH=DIGEST-MD5] Dovecot ready.
a starttls
a OK Begin TLS negotiation now.

oder per OpenSSL:

openssl s_client -connect mail.meintestserver.com:143 -starttls imap

Der Output sollte dann etwa so aussehen:

CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = mail.meintestserver.com
verify return:1
---
Certificate chain
0 s:/CN=mail.meintestserver.com
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGFjCCBP6gAwIBAgISA03xPYgVq7hj5JQfQhgHNtA3MA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODA2MjkyMTAwNDZaFw0x
ODA5MjcyMTAwNDZaMCExHzAdBgNVBAMTFm1haWwuc3l6emxpbmdtZWRpYS5jb20w
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGlLJBHOV/fUFM4zRMrdtX
8R/n/9lQAj+KTOtxIpjDaJzTBZKuY6tsoGslncYDQukUOsJycQ4IKZ+67g9S/v2k
MTJk3mcTGlQSzzGw9Ldjj9L2H5y6l/enG6108bxn2IgiGz44aolVPXj6LoOV9h3/
sfXP9vTNRa9yZLmp21q4vA27OG6L47V/zoLzawNntGSEx3CxkyTx9BTwUnGuv4z5
fZ8Uj5bYF4fRv6+BdgnqJVTkKZ8VuCOSpmwVFu/T0il3CxYNsfaBdKdqfZm/66wS
t/iD9CF4IdDC5i1O67pvN7QtMYER3VEUwMP9+B/HvFGRziV+6HxXCadYxX0M4PQf
AgMBAAGjggMdMIIDGTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUH
AwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMlBTZJqsyOTKlRo
m6EYszzRERCYMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsG
AQUFBwEBBGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNl
bmNyeXB0Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNl
bmNyeXB0Lm9yZy8wIQYDVR0RBBowGIIWbWFpbC5zeXp6bGluZ21lZGlhLmNvbTCB
/gYDVR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYB
BQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCB
ngyBm1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkg
UmVseWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUg
Q2VydGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQu
b3JnL3JlcG9zaXRvcnkvMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHUA23Sv7ssp
7LH+yj5xbSzluaq7NveEcYPHXZ1PN7Yfv2QAAAFkTZAYrwAABAMARjBEAiBVHA0b
UqiqUjs8d26ggrTJk0bPh3FAkpiEa99mnMpEywIgRH6YfZyiyuxW+6iowFe4Xp0g
bYWdexsnPB0GoXeldtkAdgApPFGWVMg5ZbqqUPxYB9S3b79Yeily3KTDDPTlRUf0
eAAAAWRNkBiyAAAEAwBHMEUCIFTdedyB2QYW/3YoWwCrDfXgdFwvi5IqsuWcckxO
WdE8AiEAxxNFC1aN+UAZSctJFXwRDqbKGgvcCmdcklkYyTGI8DEwDQYJKoZIhvcN
AQELBQADggEBACGZxs8HuwvqjqqveLwU+4bPmdtu0Yhct4syBsyrvGmZD/1STZ0S
r0oc2i6rZAcLRSj+m2q8s5bZOGmUIwP0mnDR/leJdINHy6BK2iWrP7TpnQ8weG42
ry+P3oyeTay6jr1IiOUQF12JeMfH0CnmYFM9nV0Nt/xmUNrI/a0GLpc8MvLnmft8
xV2cHrdSfJb/w2kCExTpaQTMXlQniOFgaXpQ3mmMp6LOWx9YFrYG5YIdVjbvaX8C
4SZS+8dTxmkrGe0R2WbMfhgg2UY0sQSxCotACeeAEn7tnGMO+JGSFJxcfNNNWjVX
R1yfzLGmFRTNyn8XuuivSci1xwkSB5YaVdA=
-----END CERTIFICATE-----
subject=/CN=mail.meintestserver.com
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3789 bytes and written 457 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: 821B689033000291733BE247A6577EE719ECB83BA6CE83FAA7A5CEAC8DA5BC16
Session-ID-ctx:
Master-Key: D1B41EEE4283FC3BC289AB2F2478CB9974DFB439271847C8733FD8F54E2690BDEDD19D393BC7C0B43E9B0DA295651B36
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - 8b 87 bf e7 6a 14 7f 9d-8b 3b db ba 4e 24 c8 b8 ....j....;..N$..
0010 - 5a f0 0a 52 f2 a2 7f 1b-27 23 74 f6 e6 63 f2 28 Z..R....'#t..c.(
0020 - 6a 30 fa 89 5d 02 cc 2d-6c 65 33 8e 4e d5 53 64 j0..]..-le3.N.Sd
0030 - 10 e5 fe 97 fb e7 a4 1b-63 a1 dd 80 0f ef 73 08 ........c.....s.
0040 - 78 f5 7c 16 51 10 91 e1-a7 27 00 09 fa ad b6 cc x.|.Q....'......
0050 - 08 46 9b 0d 10 eb 21 5e-3d 7b f2 8e 78 41 85 b5 .F....!^={..xA..
0060 - 49 29 11 7b df a0 9b a7-dd 14 a6 d5 8e d8 cb 33 I).{...........3
0070 - f4 2a cc c9 39 f0 b6 ff-86 f0 52 02 94 d9 9a c6 .*..9.....R.....
0080 - ff 24 ce 03 fb 40 d8 d7-6a f1 73 42 78 d1 b6 1b .$...@..j.sBx...
0090 - 08 c9 d2 fd 4c 58 11 7b-ab 07 8c d4 70 dc df d5 ....LX.{....p...

Start Time: 1532194218
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
. OK Pre-login capabilities listed, post-login capabilities have more.

Weitere Tests:

openssl s_client -connect mail.testserver.com:993 -servername mail.testserver.com
openssl s_client -connect mail.testserver.com:465 -servername mail.testserver.com
openssl s_client -connect mail.testserver.com:587 -servername mail.testserver.com

 

Login testen

Erst mal Login über localhost testen, danach natürlich auch über einen externen Computer remote (telnet mail.meintestserver.com 143)

# telnet localhost 143
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=LOGIN AUTH=PLAIN AUTH=CRAM-MD5 AUTH=DIGEST-MD5] Dovecot ready.
a login meinusername meinpasswort
a OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY LITERAL+ NOTIFY SPECIAL-USE COMPRESS=DEFLATE] Logged in

Mailboxen auflisten

# telnet localhost 143
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=LOGIN AUTH=PLAIN AUTH=CRAM-MD5 AUTH=DIGEST-MD5] Dovecot ready.
a login meinusername meinpasswort
a OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY LITERAL+ NOTIFY SPECIAL-USE COMPRESS=DEFLATE] Logged in
a LIST "" *
* LIST (HasChildren) "." INBOX
* LIST (HasNoChildren) "." INBOX.Linux
* LIST (HasNoChildren Trash) "." INBOX.Trash
* LIST (HasChildren UnMarked) "." INBOX.Archiv
* LIST (HasNoChildren UnMarked) "." INBOX.Archiv.Medien
* LIST (HasNoChildren UnMarked) "." INBOX.Classes_Helpers
* LIST (HasChildren UnMarked) "." INBOX.Archives
* LIST (HasNoChildren UnMarked) "." INBOX.Archives.2016
* LIST (HasNoChildren UnMarked) "." INBOX.Archives.2018
* LIST (HasNoChildren) "." INBOX.Business
* LIST (HasNoChildren UnMarked Drafts) "." INBOX.Drafts
* LIST (HasNoChildren UnMarked Sent) "." INBOX.Sent
* LIST (HasChildren UnMarked) "." INBOX.TODOs
* LIST (HasNoChildren UnMarked) "." INBOX.TODOs.Server
* LIST (HasNoChildren UnMarked) "." INBOX.TODOs.PaymentSolutions
a OK List completed (0.020 + 0.000 + 0.020 secs).

Weitere Tests

Gibt es im Dovecot Wiki

Fehlermeldungen

pw: user ‚dovecot‘ disappeared during update

Während der Installation tauchte dieser Fehler auf:

New packages to be INSTALLED:
	dovecot: 2.3.2

Number of packages to be installed: 1

The process will require 20 MiB more space.
4 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/1] Fetching dovecot-2.3.2.txz: 100%    4 MiB   4.0MB/s    00:01    
Checking integrity... done (0 conflicting)
[1/1] Installing dovecot-2.3.2...
===> Creating groups.
Creating group 'dovecot' with gid '143'.
Creating group 'dovenull' with gid '144'.
===> Creating users
Creating user 'dovecot' with uid '143'.
pw: user 'dovecot' disappeared during update
Creating user 'dovenull' with uid '144'.
pw: user 'dovenull' disappeared during update
pkg: PRE-INSTALL script failed

Lösung: Die Passwort Datenbank ist fehlerhaft. Um dies zu korrigieren, folgenden Befehl ausführen:

pwd_mkdb /etc/master.passwd

Danach kann man die Installation erfolgreich durchführen.

Damit dieser Fehler nicht auftaucht (siehe Bugreport):

Symlink zu Configfile erstellen, sofern dieser noch nicht vorhanden ist:

ln -s /usr/local/etc/dovecot/dovecot.conf /var/run/dovecot/dovecot.conf

error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177

Folgende Tests schlugen zuerst fehl:

SSL Verbindung:

teslina@Black32 ~ $ openssl s_client -connect mail.testserver.com:993 -servername mail.testserver.com
CONNECTED(00000003)
140685460174488:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 336 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1532097717
Timeout : 300 (sec)
Verify return code: 0 (ok)

TLS:

teslina@Black32 ~ $ openssl s_client -connect mail.testserver.com:143 -servername mail.testserver.com

CONNECTED(00000003)
140050245203608:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 336 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1532097709
Timeout : 300 (sec)
Verify return code: 0 (ok)
---

Im Maillog:

dovecot: imap-login: Error: Failed to initialize SSL server context: Couldn't parse DH parameters: error:0906D06C:PEM routines:PEM_read_bio:no start line: Expecting: DH PARAMETERS: user=<>, rip=46.126.137.118, lip=178.22.71.83, session=<tNRZR3Bxeqwufol2>

Lösung: Ab Version Dovecot Version 2.3 ist die Angabe der DH Parameter zwingend. Generieren und einbinden wie in diesem Abschnitt beschrieben.

COMPRESS=DEFLATE wird nicht angezeigt

Beachte: COMPRESS=DEFLATE wird unter Dovecot erst nach dem Login angezeigt, sofern es korrekt konfiguriert wurde. So kann man es testen:

telnet mail.testserver.com 143
Trying 111.22.33.44...
Connected to mail.testserver.com.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=LOGIN AUTH=PLAIN AUTH=CRAM-MD5 AUTH=DIGEST-MD5] Dovecot ready.
a login "username" "passwort"
a OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY LITERAL+ NOTIFY SPECIAL-USE COMPRESS=DEFLATE] Logged in

dovecot: master: Warning: service(imap-login): process_limit (100) reached, client connections are being dropped

Es sind zuviele Connections aktiv. Man kann nun einfach das process_limit erhöhen. Default Wert ist 100:

vi /usr/local/etc/dovecot/conf.d/10-master.conf
service imap {
# Most of the memory goes to mmap()ing files. You may need to increase this
# limit if you have huge mailboxes.
#vsz_limit = $default_vsz_limit

# Max. number of IMAP processes (connections)
#process_limit = 1024
process_limit = 500
}

Danach dovecot neu starten

service dovecot restart

Connections anzeigen:

Imap Prozesse:

ps ax | grep imap | wc

Imap Login Prozesse:

ps ax | grep imap-login | wc

dovecot Connections:

doveadm who -1 2>/dev/null | wc -l

nur Imap:

doveadm who -1 2>/dev/null | grep -Fc imap

Weiterführende Informationen: https://doc.dovecot.org/admin_manual/login_processes/

.

  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben