Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:dovecot_quotas_-_sql-backend

Dies ist eine alte Version des Dokuments!


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

:!: 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 <code> # 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 { quota = mysql:/etc/dovecot/dovecot-dict-sql.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 = scheme=CRYPT username_format=%u /etc/dovecot/users driver = passwd-file } plugin { quota = dict:User quota::proxy::quota 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 = 0600 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“ } </code> :!: 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: <code> # service dovecot restart Stopping Dovecot Imap: [ OK ] Starting Dovecot Imap: [ OK ] </code> 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: <code> # 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 </code> * Neu ist hier der Prozess dovecot/dict ===== 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: <code> # 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 </code> :!: 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: <code> # doveadm quota recalc -u klaus@tachtler.net </code> :!: HINWEIS** - Es erfolgt keine Ausgabe!

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_quotas_-_sql-backend.1491568984.txt.gz · Zuletzt geändert: 2017/04/07 14:43 von klaus