Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:dovecot_archlinux_-_zlib-komprimierung

Dovecot ArchLinux - Zlib-Komprimierung

:!: HINWEIS - Die Nachfolgende Konfiguration von Dovecot setzt eine lauffähige Installation von Dovecot voraus, wie unter nachfolgendem internen Link beschrieben:

* Dovecot ArchLinux

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.

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

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/dovecot_archlinux_-_zlib-komprimierung.txt · Zuletzt geändert: von klaus