Dies ist die archivierte Version des Blogs vom 05.01.2017. Aktuelle Beiträge findest du unter thomas-leister.de
 

Wenn auf einem Mailserver mehrere E-Mail Konten liegen, macht es Sinn, die einzelnen Postfächer in ihrer Größe zu beschränken und Limits festzulegen. Mit dem Dovecot Plugin „Quota“ können solche Limits für alle Nutzer gleichermaßen oder für einzelne Nutzer individuell eingestellt werden. In diesem Beitrag orientiere ich mich an meinem eigenen Mailserver, der nach dieser Anleitung aufgesetzt wurde: Mailserver mit Dovecot, Postfix und MySQL unter Ubuntu Server einrichten Evtl. muss die Konfiguration an die eigenen Gegebenheiten angepasst werden.

Hier soll es darum gehen, für jeden Benutzer in der MySQL Datenbank ein eigenes Limit festzulegen.

Zunächst wird die UserDB Unterstützung aktiviert. Mit UserDB können benutzerspezifische Einstellungen aus der MySQL Datenbank geladen werden, die dann die Dovecot-eigenen Defaultwerte überschreiben. Dazu wird in die Datei /etc/dovecot/dovecot.conf zunächst dieser Block eingefügt:

# Userdb SQL
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

… so wird festgelegt, dass für die UserDB Abfragen die SQL Commandos in der Datei dovecot-sql.conf.ext genutzt werden sollen. Diese Datei enthält normalerweise schon die SQL Abfragen für die PassDB. Nun kommt die Abfrage für die UserDB hinzu: (in dovecot-sql.conf.ext schreiben)

user_query = SELECT concat('*:storage=', mailbox_limit, 'M') AS quota_rule FROM users WHERE username = '%n' AND domain = '%d'

Die Spalte „mailbox_limit“ in der MySQL Datenbank wird später den maximal bereitgestellten Speicherplatz eines Benutzers in Megabyte (MB) enthalten. Die MySQL Datenbank erhält durch folgendes MySQL Kommando eine neue Spalte „mailbox_limit“, die den Defaultwert „0“ hat. „0“ bedeutet: Kein Limit. Natürlich kann man auch einen anderen Defaultwert setzen.

ALTER TABLE `users` ADD `mailbox_limit` INT NOT NULL DEFAULT '0';

(Vorher via MySQL Kommandozeile in DB einloggen!)

Dovecot muss in der Datei „conf.d/90-quota.conf“ mitgeteilt werden, auf was sich das Limit beziehen soll. In unserem Fall auf jede einzelne Mailbox. Außerdem wird eine eigene Fehlermeldung definiert, die dem Nutzer angezeigt werden soll, wenn das Limit überschritten wurde:

(in conf.d/90-quota.conf)

plugin {
  quota = maildir:User quota
  quota_exceeded_message = Sorry, the mailbox of %u has exceeded the limit. Please consider deleting e-mails to free space.
}

Zum Schluss wird das Quota Plugin aktiviert. Kommentiert dazu in der Datei /etc/dovecot/conf.d/10-mail.conf die Zeile mail_plugins ein und fügt „quota“ hinzu:

# 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.
mail_plugins = quota

In der Datei /etc/dovecot/conf.d/20-imap.conf wird ganz unten ebenfalls mail_plugins einkommentiert und „imap_quota“ hinzugefügt:

protocol imap {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins imap_quota

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

Startet euren Dovecot Mailserver neu:

service dovecot restart

In der MySQL Datenbank können jetzt dynamisch für jeden Benutzer einzeln Mailbox-Limits festgelegt werden. Beachtet, dass die Angabe in Megabyte erfolgt. Ein zugeteilter Wert von „1000“ entspricht also einem Gigabyte Speicher.

Via IMAP wird den Mailclients mitgeteilt, wie viel Speicher noch verfügbar ist. Verantwortlich dafür ist das imap_quota Plugin.

Weitere Informationen findet ihr auf der Dovecot Wiki Seite: Quota Configuration


Post published on 4. April 2014 | Last updated on 18. September 2014
Tags:             

Diesen Blog unterstützen

Wenn Dir der Beitrag gefallen hat, freue ich mich über einen kleinen Obolus :-) Bitcoin QR Code

PayPal-Seite: https://www.paypal.me/ThomasLeister
Meine Bitcoin-Adresse: 15z8 QkNi dHsx q9WW d8nx W9XU hsdf Qe5B 4s

Siehe auch: Unterstützung

Informationen zum Autor

Thomas Leister

Geb. 1995, Kurzhaar-Metaller, Geek und Blogger. Nutzt seit Anfang 2013 ausschließlich Linux auf Desktop und Servern. Student der Automobilinformatik an der Hochschule für angewandte Wissenschaften in Landshut.

8 thoughts on “Mailserver: Dovecot E-Mail Postfächer Speicherlimit mit MySQL

  • Super Anleitung ! :)

    Ich benutze: Ubuntu 14.04
    Ich bin nach deinen Anleitungen vorgegangen, 1:1 kopiert.

    Allerdings erhalte ich in dieser Konfiguration eine Fehlermeldung (/var/log/mail.log und /var/log/mail.err):

    lmtp(1829): Error: dlopen(/usr/lib/dovecot/modules/lib11_imap_quota_plugin.so) failed: /usr/lib/dovecot/modules/lib11_imap_quota_plugin.so: undefined symbol: command_unregister

    lmtp(1829): Fatal: Couldn’t load required plugins

    • Ich nutze: Ubuntu 14.04

      Okay, bei mir klappt es jetzt.

      Anstatt, die Datei /etc/dovecot/dovecot.conf mit:
      ————————————————-
      mail_plugins = quota imap_quota
      ————————————————-
      zu erweitern.

      Habe ich in der dovecot.conf Datei nur:
      ————————————————-
      mail_plugins = quota
      ————————————————-
      eingefügt. Also das „imap_quota“ habe ich von der Zeile entfernt.

      Ist das so in Ordnung?

      • Hi,

        gerade habe ich auf meinem neuen Server (auch 14.04) Quota eingerichtet. Ich hatte dieselbe Fehlermeldung. Hab dann imap_quota auch rausgenommen und es läuft :)
        Nur in Thunderbird bekomme ich jetzt keine Warnung mehr wenn die maximale Größe für das Konto überschritten wird… :(

        LG Thomas

    • Der Fehler ist nun behoben und die Anleitung ausgebessert :)
      Es daran, dass die Plugins nicht global geladen werden dürfen (zumindest nicht das imap_quota Plugin, das muss in „protocol imap“ geladen werden)
      Anscheinend war die Dovecot Version unter 12.04 da noch toleranter, was sich mit 14.04 nun geändert hat. Aber jetzt funktioniert es ja wieder :)

      LG Thomas

  • Hey,

    deine Anleitungen ist Super, folgendes Problem habe ich, leider .

    Wie kann ich das machen das Mails die ich lösche direkt Weg sind also sofort gelöscht, wenn ich In Thunderbird lösche und in outlook schaue sind sie nur durch gestrichen also als löschen markieren oder so.. Was ich möchte das Die Mails direkt gelöscht werden ohne wenn und aber :D

  • Hi,
    cooler Blog! Danke für Deine vielen Anleitungen. Die helfen mir echt weiter.

    Aber mal eine Frage zu den Upstart Skripten…
    Habe die beiden Skripte unter „/etc/init/“ als „log.io-server.conf“ und „log.io-harvester.conf“ abgelegt, das ganze mit „initctl reload-configuration“ neu geladen, aber die beiden Skripte werden nicht ausgeführt…
    Wenn ich das „log.io-server“-Skript manuell mit „initctl start log.io-server“ aufrufe, bekomme ich nur einen „initctl: Job failed to start“…

    Kannst Du mir hier weiterhelfen?
    System Ubuntu 14.04…

    Danke und Gruß,
    Jens

  • Danke für Deine super Anleitungen. Super zu verstehen und es haben bis jetzt auch alle funktioniert !!!!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.