Inhaltsverzeichnis
Dovecot Quotas - SQL-Backend
HINWEIS - Die Nachfolgende Konfiguration von Dovecot setzt eine lauffähige Installation von Dovecot sowie eine lauffähige Installation von Postfix Admin voraus, wie unter nachfolgenden internen Links beschrieben !!!
Dovecot ist ein Open-Source-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 große Installationen. Dovecot ist schnell und einfach zu installieren, erfordert keine besonderen Voraussetzungen und ist Ressourcenschonend.
Dovecot wird von Timo Sirainen entwickelt.
Beschreibung | Externer Link |
---|---|
Homepage | http://dovecot.org |
Dokumentation | http://dovecot.org/documentation.html |
Wiki Dovecot2 | http://wiki2.dovecot.org/ |
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:
Vorbereitung
WICHTIG - Diese Konfiguration setzt auf die vollständige Durchführung der unter nachfolgendem Link beschriebenen Quota
-Konfiguration auf. Falls noch nicht geschehen, ist die Konfiguration wie unter nachfolgendem Link beschrieben zuerst durchzuführen !!!
Konfiguration - Allgemein
Nachfolgend sind verschiedene Konfigurationsschritte notwendig, die ggf. auch Kombinationen aus den einzelnen Teilen eines Quota-Systems bestehen.
/etc/dovecot/dovecot.conf
Um zu verhindern, dass jeder einzelne Prozess eine eigene SQL-Verbindung eröffnet, kann die gesamte „Dictionary“ Kommunikation über einen einzelnen „Dictionary“-Server-Prozess abgehandelt werden, welcher die Kommunikation permanent offen hält.
Dies kann durch nachfolgende Konfiguration durchgeführt werden:
(Nur relevanter Ausschnitt)
... ## ## Dictionary server settings ## # Dictionary can be used to store key=value lists. This is used by several # plugins. The dictionary can be accessed either directly or though a # dictionary server. The following dict block maps dictionary names to URIs # when the server is used. These can then be referenced using URIs in format # "proxy::<name>". dict { #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext # Tachtler sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql-user.conf.ext sqldomainquota = mysql:/etc/dovecot/dovecot-sql-domain.conf.ext } ...
/etc/dovecot/dovecot-dict-sql-user.conf.ext
Nachfolgende Konfigurationsdatei ist standardmäßig nicht im Verzeichnis
/etc/dovecot
enthalten.
Jedoch kann die Konfigurationsdatei aus dem installierten rpm
-Paket dovecot
in das Konfigurationsverzeichnis von Dovecot kopiert werden, was mit nachfolgendem Befehl durchführt werden kann:
# cp -a /usr/share/doc/dovecot-2.2.10/example-config/dovecot-dict-sql.conf.ext /etc/dovecot/dovecot-dict-sql-user.conf.ext
Anschließend kann mit nachfolgendem Befehl überprüft werden, ob dies erfolgreich durchgeführt wurde:
# ll /etc/dovecot/dovecot-dict-sql-user.conf.ext -rw-r--r-- 1 root root 1085 May 23 13:06 /etc/dovecot/dovecot-dict-sql-user.conf.ext
(Komplette Konfigurationsdatei)
# This file is commonly accessed via dict {} section in dovecot.conf # Tachtler # default: #connect = host=localhost dbname=mails user=testuser password=pass connect = host=mysql.tachtler.net dbname=postfix user=postfixuser password=geheim # CREATE TABLE quota ( # username varchar(100) not null, # bytes bigint not null default 0, # messages integer not null default 0, # primary key (username) # ); map { pattern = priv/quota/storage # Tachtler # defautl: table = quota table = quota2 username_field = username value_field = bytes } map { pattern = priv/quota/messages # Tachtler # defautl: table = quota table = quota2 username_field = username value_field = messages } # CREATE TABLE expires ( # username varchar(100) not null, # mailbox varchar(255) not null, # expire_stamp integer not null, # primary key (username, mailbox) # ); # Tachtler - DISABLED - #map { # pattern = shared/expire/$user/$mailbox # table = expires # value_field = expire_stamp # # fields { # username = $user # mailbox = $mailbox # } #}
Erläuterungen:
Hier müssen, für die permanente Verbindung des „Dictionary“-Servers zur SQL-Datenbank, die Verbindungsdaten gesetzt werden.
# Tachtler # default: #connect = host=localhost dbname=mails user=testuser password=pass connect = host=mysql.tachtler.net dbname=postfix user=postfixuser password=geheim
Da nicht die Standardtabelle von Dovecot sondern eine Tabelle von Postfix Admin verwendet werden soll, sind nachfolgende Anpassungen notwendig:
map { pattern = priv/quota/storage # Tachtler # default: table = quota table = quota2 username_field = username value_field = bytes }
map { pattern = priv/quota/messages # Tachtler # default: table = quota table = quota2 username_field = username value_field = messages }
Die Verwendung einer Tabelle für Ablaufdaten, soll hier aktuell nicht zum Einsatz kommen:
# Tachtler - DISABLED - #map { # pattern = shared/expire/$user/$mailbox # table = expires # value_field = expire_stamp # # fields { # username = $user # mailbox = $mailbox # } #}
/etc/dovecot/dovecot-dict-sql-domain.conf.ext
Nachfolgende Konfigurationsdatei ist standardmäßig nicht im Verzeichnis
/etc/dovecot
enthalten.
Jedoch kann die Konfigurationsdatei aus dem installierten rpm
-Paket dovecot
in das Konfigurationsverzeichnis von Dovecot kopiert werden, was mit nachfolgendem Befehl durchführt werden kann:
# cp -a /usr/share/doc/dovecot-2.2.10/example-config/dovecot-dict-sql.conf.ext /etc/dovecot/dovecot-dict-sql-domain.conf.ext
Anschließend kann mit nachfolgendem Befehl überprüft werden, ob dies erfolgreich durchgeführt wurde:
# ll /etc/dovecot/dovecot-dict-sql-domain.conf.ext -rw-r--r-- 1 root root 1085 May 23 13:06 /etc/dovecot/dovecot-dict-sql-domain.conf.ext
(Komplette Konfigurationsdatei)
# This file is commonly accessed via dict {} section in dovecot.conf # Tachtler # default: #connect = host=localhost dbname=mails user=testuser password=pass connect = host=mysql.tachtler.net dbname=postfix user=postfixuser password=geheim # CREATE TABLE quota ( # username varchar(100) not null, # bytes bigint not null default 0, # messages integer not null default 0, # primary key (username) # ); map { pattern = priv/quota/storage # Tachtler # defautl: table = quota table = domain # Tachtler # default: username_field = username username_field = domain # Tachtler # default: value_field = bytes value_field = quota } map { pattern = priv/quota/messages # Tachtler # defautl: table = quota table = quota2 username_field = username value_field = messages } # CREATE TABLE expires ( # username varchar(100) not null, # mailbox varchar(255) not null, # expire_stamp integer not null, # primary key (username, mailbox) # ); # Tachtler - DISABLED - #map { # pattern = shared/expire/$user/$mailbox # table = expires # value_field = expire_stamp # # fields { # username = $user # mailbox = $mailbox # } #}
Erläuterungen:
Hier müssen, für die permanente Verbindung des „Dictionary“-Servers zur SQL-Datenbank, die Verbindungsdaten gesetzt werden.
# Tachtler # default: #connect = host=localhost dbname=mails user=testuser password=pass connect = host=mysql.tachtler.net dbname=postfix user=postfixuser password=geheim
Da nicht die Standardtabelle von Dovecot sondern eine Tabelle von Postfix Admin verwendet werden soll, sind nachfolgende Anpassungen notwendig:
map { pattern = priv/quota/storage # Tachtler # defautl: table = quota table = domain # Tachtler # default: username_field = username username_field = domain # Tachtler # default: value_field = bytes value_field = quota }
map { pattern = priv/quota/messages # Tachtler # default: table = quota table = quota2 username_field = username value_field = messages }
Die Verwendung einer Tabelle für Ablaufdaten, soll hier aktuell nicht zum Einsatz kommen:
# Tachtler - DISABLED - #map { # pattern = shared/expire/$user/$mailbox # table = expires # value_field = expire_stamp # # fields { # username = $user # mailbox = $mailbox # } #}
/etc/dovecot/conf.d/10-master.conf
Die nachfolgend beschriebene Konfiguration ermöglichte es den Prozessen der Benutzer von Dovecot auf den Socket
/var/run/dovecot/dict
zuzugreifen.
Die nachfolgende Konfiguration setzt ebenfalls voraus, dass ein Authentifizierungsbenutzer wie unter nachfolgendem internen Link beschrieben
verwendet wird und somit alle Benutzer die gleiche UID und GID haben.
(Nur relevanter Ausschnitt)
... service dict { # If dict proxy is used, mail processes should have access to its socket. # For example: mode=0660, group=vmail and global mail_access_groups=vmail unix_listener dict { # Tachtler # default: #mode = 0600 mode = 0660 # Tachtler # default: #user = user = vmail # Tachtler # default: #group = group = vmail } }
/etc/dovecot/conf.d/90-quota.conf
In der Konfigurationsdatei werden Quota spezifische Einstellungen eingestellt.
WICHTIG - Die hier durchgeführten Konfigurationen sind Änderungen gegenüber der Konfiguration unter nachfolgendem internen Link:
plugin
Quota-Backend Bereich: (Nur relevanter Ausschnitt)
...
##
## Quota backends
##
# Multiple backends are supported:
# dirsize: Find and sum all the files found from mail directory.
# Extremely SLOW with Maildir. It'll eat your CPU and disk I/O.
# dict: Keep quota stored in dictionary (eg. SQL)
# maildir: Maildir++ quota
# fs: Read-only support for filesystem quota
plugin {
#quota = dirsize:User quota
# Tachtler
# default: #quota = maildir:User quota
# Using SQL Tables to store current quota size
quota = dict:Quota:%d:proxy::sqldomainquota
quota = dict:User Quota::proxy::sqluserquota
# Allow 10% more for Trash Folder
quota2_rule = Trash:storage=+10%%
#quota = dict:User quota::proxy::quota
#quota = fs:User quota
}
# Multiple quota roots are also possible, for example this gives each user
# their own 100MB quota and one shared 1GB quota within the domain:
plugin {
#quota = dict:user::proxy::quota
#quota2 = dict:domain:%d:proxy::quota_domain
#quota_rule = *:storage=102400
#quota2_rule = *:storage=1048576
}
...
/etc/dovecot/dovecot-sql.conf.ext
WICHTIG - Nachfolgender interner Link beschreibt die Anpassungen an der Konfigurationsdatei
/etc/dovecot/dovecot-sql.conf.ext
Dovecot Authentifizierung - SQL - /etc/dovecot/dovecot-sql.conf.ext|
(* Bereich CentOS 7 - SQL-QUOTAS)
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.2.10: /etc/dovecot/dovecot.conf # OS: Linux 2.6.32-431.5.1.el6.x86_64 x86_64 CentOS release 6.5 (Final) auth_debug = yes auth_master_user_separator = * auth_mechanisms = plain digest-md5 cram-md5 login auth_verbose = yes dict { sqldomainquota = mysql:/etc/dovecot/dovecot-sql-domain.conf.ext sqluserquota = mysql:/etc/dovecot/dovecot-dict-sql-user.conf.ext } mail_debug = yes mail_location = maildir:~/Maildir mail_plugins = " quota" mbox_write_locks = fcntl namespace inbox { inbox = yes location = mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { special_use = \Trash } prefix = INBOX/ separator = / } passdb { args = /etc/dovecot/master-users driver = passwd-file master = yes pass = yes } passdb { args = /etc/dovecot/dovecot-sql.conf.ext driver = sql } plugin { quota = dict:User Quota::proxy::sqluserquota quota2_rule = Trash:storage=+10%% quota_grace = 10%% 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 } protocols = imap lmtp service dict { unix_listener dict { group = vmail mode = 0660 user = vmail } } service lmtp { inet_listener lmtp { address = 192.168.0.80 port = 24 } } service quota-status { client_limit = 1 executable = quota-status -p postfix inet_listener { address = 192.168.0.80 port = 12340 } } service quota-warning { executable = script /usr/local/bin/quota-warning.sh user = vmail } ssl_cert = </etc/pki/dovecot/certs/CAcert-class3-wildcard_all_in_one.crt 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-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 ssl_dh_parameters_length = 2048 ssl_key = </etc/pki/dovecot/private/tachtler.net.key ssl_prefer_server_ciphers = yes ssl_protocols = !SSLv2 !SSLv3 userdb { args = username_format=%u /etc/dovecot/users driver = passwd-file } verbose_proctitle = yes protocol imap { mail_plugins = " quota imap_quota" }
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 ausschließt !!!
Danach kann der dovecot-Server mit nachfolgendem Befehle neu gestartet werden:
# service dovecot restart Stopping Dovecot Imap: [ OK ] Starting Dovecot Imap: [ OK ]
Ob alle aktuell konfigurierten Dienste von Dovecot gestartet sind, kann mit nachfolgendem Befehl überprüft werden, und sollte eine Ausgabe wie die nachfolgende zurück liefern:
# ps auxwf | grep dovecot root 30198 0.0 0.0 103244 828 pts/1 S+ 15:30 0:00 \_ grep dovecot root 28354 0.0 0.0 23824 1360 ? Ss 14:51 0:00 /usr/sbin/dovecot dovenull 28356 0.1 0.2 43304 4272 ? S 14:51 0:03 \_ dovecot/imap-login [13 connections (13 TLS)] dovecot 28357 0.0 0.0 13304 1140 ? S 14:51 0:00 \_ dovecot/anvil [2 connections] root 28358 0.0 0.0 13436 1336 ? S 14:51 0:00 \_ dovecot/log root 28360 0.0 0.1 20656 2552 ? S 14:51 0:00 \_ dovecot/config dovecot 28362 0.0 0.2 93988 4220 ? S 14:51 0:00 \_ dovecot/auth [0 wait, 0 passdb, 0 userdb] ... root 28479 0.0 0.2 96060 4596 ? S 14:53 0:00 \_ dovecot/auth worker: idling dovecot 28568 0.0 0.2 91564 4076 ? S 14:55 0:00 \_ dovecot/dict ... root 30165 0.0 0.0 18596 1684 ? S 15:29 0:00 \_ dovecot/lmtp [idling] root 30176 0.0 0.0 16524 1536 ? S 15:29 0:00 \_ dovecot/quota-status -p postfix
* Neu ist hier der Prozess dovecot/dict
Beispiel-Anzeige
Nachfolgende Anzeige ist ein Ausschnitt aus der Web-Anwendung Postfix Admin:
Quota-Befehle: doveadm
HINWEIS - Nachfolgende Befehle sind nur verfügbar, wenn das quota
-Plugin aktiv ist!
doveadm quota get
Mit nachfolgenden Befehlen, können Informationen zur Quota-Berechnung/Limit und zur Quota-Verwaltung realisiert werden.
Mit nachfolgendem Befehl, können Informationen zur mailbox (Postfach) eines Benutzer abgefragt werden:
# doveadm quota get -u klaus@tachtler.net Quota name Type Value Limit % User quota STORAGE 91351 1024000 8 User quota MESSAGE 865 - 0 # doveadm quota get -u petra@tachtler.net Quota name Type Value Limit % User quota STORAGE 19485 1024000 1 User quota MESSAGE 91 - 0
HINWEIS - Die Angabe des STORAGE erfolgt in KiloByte!
doveadm quota recalc
Mit nachfolgendem Befehl, kann Dovecot angewiesen werden, die Quota-Berechnung für einen Benutzer neu durchzuführen:
# doveadm quota recalc -u klaus@tachtler.net
HINWEIS - Es erfolgt keine Ausgabe!