Inhaltsverzeichnis
Dovecot ArchLinux - Zlib-Komprimierung
|
---|
Dovecot ist ein Quelloffener IMAP-und POP3-E-Mail-Server für Linux bzw. UNIX-ähnlichen Systeme, entwickelt mit dem Hauptaugenmerk auf Sicherheit. Dovecot ist eine ausgezeichnete Wahl für kleine und grosse Installationen. Dovecot ist schnell und einfach zu installieren, erfordert keine besonderen Voraussetzungen und ist Ressourcenschonend.
Dovecot wird von Timo Sirainen entwickelt und soll hier in der Version CE zum Einsatz kommen.
Beschreibung | Externer Link |
---|---|
Homepage | Dovecot |
Dokumentation | https://doc.dovecot.org/2.3/ |
Mail logger | https://doc.dovecot.org/2.3/configuration_manual/plugins/mail_event_logging/ |
Logger Config | https://doc.dovecot.org/2.3/settings/plugin/mail-log-plugin/#plugin-mail-log |
Ab hier werden root
-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root
zu werden geben Sie bitte folgenden Befehl ein:
$ su - Password:
Voraussetzungen
Für die nachfolgende Installation wird vorausgesetzt,
- dass eine lauffähige Version von Dovecot ab Version 2.3
vorhanden ist und die unter nachfolgenden Links beschriebenen Installationen und Konfigurationen von Dovecot als Mindestvoraussetzung zwingend durchgeführt wurden:
Vorbereitungen
Dieses Plugin wird dazu verwendet, um komprimierte mbox-, maildir- oder dbox-Dateien zu lesen. Es kann auch verwendet werden, um (über IMAP, LDA und/oder LMTP Server) komprimierte Nachrichten in dbox- oder Maildir-Postfächer zu schreiben.
Dazu kann Dovecot aktuell vier (aktive) Varianten anbieten:
bz2
gz
lz4
zstd
Durch den Einsatz einer Kompression bei der Ablage der e-Mails im Dateisystem, können nachfolgende Vorteile erzielt werden, bei gleichzeitigem in kauf nehmen von nachfolgend genannten Nachteilen:
Vorteile:
- spart Speicherplatz und damit Speicherkosten
- weniger I/O-Operationen im Dateisystem
- Besseres Caching durch bereits komprimierte Daten
- Schnellere Sicherung der Dateien, da diese bereits komprimiert sind und daher auch ein geringeres Sicherungsvolumen haben
Nachteile:
- höhere CPU-Belastung durch Komprimierung und Entkomprimierung
Da die Vorteile überwiegen und die Nachteile bei immer schnelleren CPU's immer geringer werden, sollte auf jeden Fall die Komprimierung zum Einsatz kommen, egal welche Grösse das System hat!
/etc/dovecot/conf.d/10-mail.conf
In der Konfigurationsdatei wird festgelegt, welche Art von „Ablagesystem“ Mailbox-Format verwendet werden soll und wo die e-Mail (Postfächer) im Dateisystem abgelegt werden sollen und welche plugins verwendet werden.
mail_plugins
HINWEIS - Die hier nachfolgend ebenfalls schon aufgelistet Plugins stammen aus vorhergehenden Konfigurationen:
Um das Plugin zlib
zu laden und zu aktivieren, sind nachfolgende Ergänzungen erforderlich:
Information | Beschreibung |
---|---|
Dokumentation | https://doc.dovecot.org/2.3/settings/core/ Dovecot Configuration Manual - Plugins - Zlib plugin |
Defaultwert | mail_plugins = |
Neuer Wert | mail_plugins = $mail_plugins quota notify mail_log zlib |
Konfiguration | # Space separated list of plugins to load for all services. Plugins specific to # IMAP, LDA, etc. are added to this list in their own .conf files. # Tachtler # default: #mail_plugins = mail_plugins = $mail_plugins quota notify mail_log zlib } |
Beschreibung | Eine durch Leerzeichen getrennte Liste der zu ladenden Plugins. |
HINWEIS -
$mail_plugins
fügt bestehende plugins, aus evtl. anderen Konfigurationen und den Wert zlib
gemeinsam, dem Parameter mail_plugins
hinzu!
/etc/dovecot/conf.d/20_imap.conf
mail_plugins
HINWEIS - Die hier nachfolgend ebenfalls schon aufgelistet Plugins stammen aus vorhergehenden Konfigurationen:
Um das Plugin imap_zlib
zu laden und zu aktivieren, sind nachfolgende Ergänzungen erforderlich:
Information | Beschreibung |
---|---|
Dokumentation | https://doc.dovecot.org/2.3/settings/core/ Dovecot Configuration Manual - Plugins - Zlib plugin |
Defaultwert | mail_plugins = |
Neuer Wert | mail_plugins = $mail_plugins imap_quota imap_zlib |
Konfiguration | protocol imap { # Space separated list of plugins to load (default is global mail_plugins). # Tachtler # default: #mail_plugins = $mail_plugins mail_plugins = $mail_plugins imap_quota imap_zlib # Maximum number of IMAP connections allowed for a user from each IP address. # NOTE: The username is compared case-sensitively. #mail_max_userip_connections = 10 } |
Beschreibung | Eine durch Leerzeichen getrennte Liste der zu ladenden Plugins. |
HINWEIS -
$mail_plugins
fügt bestehende plugins, aus evtl. anderen Konfigurationen und den Wert imap_zlib
gemeinsam, dem Parameter mail_plugins
hinzu!
HINWEIS - Dies ermöglicht Clients (die dies unterstützen), die Übertragung Ihrer IMAP-Daten in komprimierter Form zum MDA Dovecot, was die Bandbreitenauslastung vermindert!
/etc/dovecot/conf.d/90-plugin.conf
In der Konfigurationsdatei wird festgelegt, welche Plugins von Dovecot verwendet werden können, falls diese nicht in anderen Konfigurationsdateien bereits konfiguriert werden.
plugin
Abschliessend muss festgelegt werden, welches Komprimierungs-Verfahren zum Einsatz kommen soll und wie hoch der Grad der Komprimierung sein soll.
Information | Beschreibung |
---|---|
Dokumentation | https://doc.dovecot.org/2.3/settings/core/ Dovecot Configuration Manual - Plugins - Zlib plugin |
Defaultwert | zlib_save_level = |
Neuer Wert | zlib_save_level = 6 # 0...9 |
Konfiguration | ## ## Plugin settings ## # All wanted plugins must be listed in mail_plugins setting before any of the # settings take effect. See <doc/wiki/Plugins.txt> for list of plugins and # their configuration. Note that %variable expansion is done for all values. plugin { #setting_name = value # Tachtler - NEW - zlib_save_level = 6 # 1...9 zlib_save = gz # bz2, gz, lz4 or zstd } |
Beschreibung | Mit dem Parameter wird festgelegt, wie hoch der Grad der Komprimierung sein soll. Beste Ergebnisse zwischen dem Grad der Komprimierung und CPU-Verbrauch, lassen sich hier mit dem Wert 6 erzielen. |
Information | Beschreibung |
---|---|
Dokumentation | https://doc.dovecot.org/2.3/settings/core/ Dovecot Configuration Manual - Plugins - Zlib plugin |
Defaultwert | zlib_save = |
Neuer Wert | zlib_save = gz # bz2, gz, lz4 or zstd |
Konfiguration | ## ## Plugin settings ## # All wanted plugins must be listed in mail_plugins setting before any of the # settings take effect. See <doc/wiki/Plugins.txt> for list of plugins and # their configuration. Note that %variable expansion is done for all values. plugin { #setting_name = value # Tachtler - NEW - zlib_save_level = 6 # 1...9 zlib_save = gz # bz2, gz, lz4 or zstd } |
Beschreibung | Mit dem Parameter wird festgelegt, welches Komprimierungs-Verfahren zum Einsatz kommt. |
Neustart
Bevor der der dovecot
-Daemon/Dienst neu gestartet werden soll, ist eine Überprüfung der korrekten Konfiguration durch nachfolgenden Befehl, zu empfehlen
doveconf -n
# 2.3.21.1 (d492236fa0): /etc/dovecot/dovecot.conf # OS: Linux 6.12.20-1-lts x86_64 # Hostname: vml080.idmz.tachtler.net auth_mechanisms = plain digest-md5 cram-md5 login auth_verbose = yes listen = 127.0.0.1, 10.0.0.80, ::1, fd00::10:10:0:0:80, 2001:db8::10:10:0:0:80 mail_location = maildir:~/Maildir mail_plugins = " quota notify mail_log zlib" namespace inbox { inbox = yes location = mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Sent { auto = subscribe special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { auto = subscribe special_use = \Trash } prefix = INBOX/ separator = / type = private } passdb { args = scheme=CRYPT username_format=%u /etc/dovecot/users driver = passwd-file } plugin { mail_log_events = delete undelete expunge save copy mailbox_create mailbox_delete mailbox_rename mail_log_fields = uid box msgid size vsize from quota = maildir:User quota quota_grace = 10%% quota_max_mail_size = 50M quota_rule = *:storage=1G quota_rule2 = INBOX/Trash:storage=+100M quota_status_nouser = DUNNO quota_status_overquota = 552 5.2.2 Mailbox is over quota quota_status_success = DUNNO quota_warning = storage=95%% quota-warning 95 %u quota_warning2 = storage=80%% quota-warning 80 %u zlib_save = gz zlib_save_level = 6 } protocols = imap lmtp service auth { inet_listener auth { address = 10.0.0.80, fd00::10:10:0:0:80 port = 12345 } } service lmtp { inet_listener lmtp { address = 10.0.0.80, fd00::10:10:0:0:80 port = 24 ssl = yes } user = vmail } service quota-status { client_limit = 1 executable = quota-status -p postfix inet_listener { address = 10.0.0.80, fd00::10:10:0:0:80 port = 12340 } } service quota-warning { executable = script /usr/local/bin/quota-warning.sh unix_listener quota-warning { user = vmail } user = vmail } service stats { unix_listener stats-reader { user = vmail } unix_listener stats-writer { user = vmail } } ssl = required ssl_cert = </etc/dovecot/ssl/certs/fullchain.pem ssl_cipher_list = 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-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA :ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-SHA :AES128-GCM-SHA256:AES256-GCM-SHA384:!CAMELLIA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK :!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA ssl_cipher_suites = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 :TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256 ssl_dh = # hidden, use -P to show it ssl_key = # hidden, use -P to show it ssl_prefer_server_ciphers = yes userdb { args = username_format=%u /etc/dovecot/users driver = passwd-file } verbose_proctitle = yes protocol lmtp { auth_ssl_require_client_cert = yes ssl = required ssl_ca = </etc/dovecot/ssl/certs/server-lmtp-chain.pem ssl_require_crl = no ssl_verify_client_cert = yes } protocol imap { mail_plugins = " quota notify mail_log zlib imap_quota imap_zlib" }
HINWEIS - Die Konfiguration der Parameter
ssl_cipher_list
ssl_cipher_suites
erfolgt in einer Zeile - OHNE - Zeilenumbrüche!
HINWEIS - die Konfiguration des
dovecot
-Daemon/Dienst konnte korrekt gelesen werden, wenn die Konfiguration erscheint, was letztendlich zwar nicht bedeutet, das Sie auch korrekt ist, aber syntaktische Fehler ausschliesst !!!
Danach kann der dovecot-Server mit nachfolgendem Befehle neu gestartet werden:
# systemctl restart dovecot.service
Überprüfung erfolgreicher Neustart
Um zu Überprüfen, ob der Neustart des dovecot
-Daemons/Dienstes erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden:
# ss -tauben | grep dovecot tcp LISTEN 0 1000 10.0.0.80:12345 0.0.0.0:* ino:16554 sk:1001 cgroup:/system.slice/dovecot.service <-> tcp LISTEN 0 100 10.0.0.80:12340 0.0.0.0:* ino:16568 sk:1002 cgroup:/system.slice/dovecot.service <-> tcp LISTEN 0 100 10.0.0.80:24 0.0.0.0:* ino:16482 sk:1003 cgroup:/system.slice/dovecot.service <-> tcp LISTEN 0 100 127.0.0.1:143 0.0.0.0:* ino:16505 sk:1004 cgroup:/system.slice/dovecot.service <-> tcp LISTEN 0 100 10.0.0.80:143 0.0.0.0:* ino:16506 sk:1005 cgroup:/system.slice/dovecot.service <-> tcp LISTEN 0 100 127.0.0.1:993 0.0.0.0:* ino:16510 sk:1006 cgroup:/system.slice/dovecot.service <-> tcp LISTEN 0 100 10.0.0.80:993 0.0.0.0:* ino:16511 sk:1007 cgroup:/system.slice/dovecot.service <-> tcp LISTEN 0 100 [::1]:993 [::]:* ino:16512 sk:100a cgroup:/system.slice/dovecot.service v6only:1 <-> tcp LISTEN 0 100 [fd00::10:10:0:0:80]:993 [::]:* ino:16513 sk:100b cgroup:/system.slice/dovecot.service v6only:1 <-> tcp LISTEN 0 100 [2001:db8::10:10:0:0:80]:143 [::]:* ino:16509 sk:100c cgroup:/system.slice/dovecot.service v6only:1 <-> tcp LISTEN 0 100 [fd00::10:10:0:0:80]:12340 [::]:* ino:16569 sk:100d cgroup:/system.slice/dovecot.service v6only:1 <-> tcp LISTEN 0 1000 [fd00::10:10:0:0:80]:12345 [::]:* ino:16555 sk:100e cgroup:/system.slice/dovecot.service v6only:1 <-> tcp LISTEN 0 100 [fd00::10:10:0:0:80]:24 [::]:* ino:16483 sk:100f cgroup:/system.slice/dovecot.service v6only:1 <-> tcp LISTEN 0 100 [2001:db8::10:10:0:0:80]:993 [::]:* ino:16514 sk:1010 cgroup:/system.slice/dovecot.service v6only:1 <-> tcp LISTEN 0 100 [fd00::10:10:0:0:80]:143 [::]:* ino:16508 sk:1011 cgroup:/system.slice/dovecot.service v6only:1 <-> tcp LISTEN 0 100 [::1]:143 [::]:* ino:16507 sk:1012 cgroup:/system.slice/dovecot.service v6only:1 <->
oder auch dieser Befehl:
# ps auxwf | grep dovecot | grep -v grep root 1723 0.0 0.2 8148 5248 ? Ss 10:53 0:00 /usr/bin/dovecot -F dovecot 1725 0.0 0.1 4424 2816 ? S 10:53 0:00 \_ dovecot/anvil [0 connections] root 1726 0.0 0.1 4560 2944 ? S 10:53 0:00 \_ dovecot/log root 1727 0.0 0.2 7344 4736 ? S 10:53 0:00 \_ dovecot/config
bzw. auch dieser Befehl:
# systemctl status dovecot.service ● dovecot.service - Dovecot IMAP/POP3 email server Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; preset: > Active: active (running) since Wed 2025-04-01 18:09:15 CET; 1min 15s ago Invocation: 2d378761f9bc4a57934c39a42cf869b3 Docs: man:dovecot(1) https://doc.dovecot.org/ Main PID: 1723 (dovecot) Status: "v2.3.21.1 (d492236fa0) running" Tasks: 4 (limit: 2315) Memory: 3.6M (peak: 4M) CPU: 78ms CGroup: /system.slice/dovecot.service ├─1723 /usr/bin/dovecot -F ├─1725 "dovecot/anvil [0 connections]" ├─1726 "dovecot/log " └─1727 "dovecot/config " Apr 01 18:09:15 server systemd[1]: Starting Dovecot IMAP/POP3 email server... Apr 01 18:09:15 server dovecot[1723]: master: Dovecot v2.3.21.1 (d492236fa0) st> Apr 01 18:09:15 server systemd[1]: Started Dovecot IMAP/POP3 email server.
Test
Mittels Einlieferung einer E-Mail kann mit herausgefunden werden, ob lokal erzeugte e-Mails auch an Dovecot: imap.tachtler.net
über Port 24
und via TLS-Verschlüsselung - zugestellt werden kann, was ausnahmsweise mit nachfolgendem Befehl (und nicht mit telnet
) durchgeführt werden soll z.B. überprüft werden, ob die entsprechenden Log-Felder im Log von Dovecot ersichtlich sind:
# echo "Test-E-Mail (zlib)" | /usr/sbin/sendmail root
Nachfolgende die Log-Schreibung, welche im systemd-journald
-Log ersichtlich ist und mit z.B. dem Befehl
# journalctl -u dovecot.service
zur Ansicht gebracht werden kann:
Apr 01 18:09:15 server dovecot[3521]: lmtp(3565): Connect from 10.0.0.60 Apr 01 18:09:15 server dovecot[3824]: lmtp(klaus@tachtler.net)<3860><rnBVG+Ko62cUDwAAhuu2+w>: save: box=INBOX, uid=2, msgid=<20250401085042.016238C@vml080.idmz.tachtler.net>, size=1129, vsize=1151, f> Apr 01 18:09:15 server dovecot[3824]: lmtp(klaus@tachtler.net)<3860><rnBVG+Ko62cUDwAAhuu2+w>: msgid=<20250401085042.016238C@vml080.idmz.tachtler.net>: saved mail to INBOX Apr 01 18:09:15 server dovecot[3824]: lmtp(3860): Disconnect from 10.0.0.60: Logged out (state=READY)
Speicherverbrauch
Wenn eine nicht komprimierte und eine komprimierte E-Mail im Postfach-Ordner des Benutzers, durch nachfolgenden Befehl (vorausgesetzt die e-Mails wurden noch nicht gelesen) auflistet werden,
# ls -l /srv/vmail/tachtler.net/klaus/Maildir/new total 8 -rw------- 1 vmail vmail 1132 Apr 1 18:06 '1743492811.M25134P3565.vml080,S=1132,W=1154' -rw------- 1 vmail vmail 511 Apr 1 18:09 '1743497442.M502104P3860.vml080,S=1129,W=1151'
oder, (falls die e-Mails bereits gelesen wurden, im Postfach-Ordner)
# ls -l /srv/vmail/tachtler.net/klaus/Maildir/cur total 8 -rw------- 1 vmail vmail 1132 Apr 1 18:06 '1743492811.M25134P3565.vml080,S=1132,W=1154:2,S' -rw------- 1 vmail vmail 511 Apr 1 18:09 '1743497442.M502104P3860.vml080,S=1129,W=1151:2,S'
HINWEIS - Die Grösse von zwei Inhaltlich (fast) identischen E-Mails ist
- komprimiert =
511
Byte - unkomprimiert =
1132
Byte
HINWEIS - Das ist im vorher stehenden Beispiel eine Komprimierung um: 45 %
Dateitypen
Nachfolgende Befehle ermitteln jeweils den Inhalt der vorangestellten Dateien, so dass einfach ermittelt werden kann, ob die E-Mails im jeweiligen Postfach unkomprimiert oder komprimiert sind:
unkomprimiert:
# file -b /srv/vmail/tachtler.net/klaus/Maildir/new/1743492811.M25134P3565.vml080\,S\=1132\,W\=1154 SMTP mail, ASCII text
komprimiert:
# file -b /srv/vmail/tachtler.net/klaus/Maildir/new/1743497442.M502104P3860.vml080\,S\=1129\,W\=1151 gzip compressed data, from Unix, original size modulo 2^32 1129
Nachträgliche Komprimierung
Um bereits bestehenden Postfächer zu komprimieren, kann dazu beispielsweise der nachfolgende Aufruf verwendet werden (E-Mails sind bereits im Postfach-Ordner: cur
):
# find /srv/vmail/tachtler.net/klaus/Maildir/cur -type f -name "*,S=*:2*" -exec gzip -S Z -6 '{}' +
Anschliessend kann mit nachfolgenden Befehlen überprüft werden, ob die nachträgliche Komprimierung erfolgreich war:
# ls -l /srv/vmail/tachtler.net/klaus/Maildir/cur/ total 8 -rw------- 1 vmail vmail 561 Apr 1 09:33 '1743492811.M25134P3565.vml080,S=1132,W=1154:2,SZ' -rw------- 1 vmail vmail 583 Apr 1 10:50 '1743497442.M502104P3860.vml080,S=1129,W=1151:2,SZ'
und
# file -b /srv/vmail/tachtler.net/klaus/Maildir/cur/1743492811.M25134P3565.vml080\,S\=1132\,W\=1154\:2\,SZ gzip compressed data, was "1743492811.M25134P3565.vml080,S=1132,W=1154:2,S", last modified: Tue Apr 1 18:33:31 2025, from Unix, original size modulo 2^32 1132
HINWEIS - Allerdings kann es durchaus passieren, dass einmalig bei einigen E-Mails diese als „ungelesen“ markiert werden!
* Vielen Dank für diesen Beitrag an Frank J. Dürring