Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
centos:mail_c7:dovecot_8 [06.08.2014 11:22. ] – [Quota-Plugin] djangocentos:mail_c7:dovecot_8 [18.11.2024 07:09. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 30: Zeile 30:
  
 ===== Konfiguration ===== ===== Konfiguration =====
 +==== Quota-Limits ====
 +Die Definition der Quota-Limits erfolgt mit Hilfe der **Quota-Rules** in der Konfigurationsdatei //**/etc/dovecot/conf.d/90-quota.conf**//.
 +
 +
 +   # vim /etc/dovecot/conf.d/90-quota.conf
 +<code bash>...
 +
 +##
 +## Quota limits
 +##
 +
 +# Quota limits are set using "quota_rule" parameters. To get per-user quota
 +# limits, you can set/override them by returning "quota_rule" extra field
 +# from userdb. It's also possible to give mailbox-specific limits, for example
 +# to give additional 100 MB when saving to Trash:
 +
 +plugin {
 +  #quota_rule = *:storage=1G
 +  #quota_rule2 = Trash:storage=+100M
 +
 +  # LDA/LMTP allows saving the last mail to bring user from under quota to
 +  # over quota, if the quota doesn't grow too high. Default is to allow as
 +  # long as quota will stay under 10% above the limit. Also allowed e.g. 10M.
 +  #quota_grace = 10%%
 +  # Django : 2014-08-06
 +  # default: unset
 +  # jeder User bekommt im 1GB Mailstorage zugewiesen
 +  quota_rule = *:storage=100K
 +  # jeder User kann 10k = 10.240 Nachrichten in der INBOX liegen haben
 +  quota_rule2 = INBOX:messages=+10K
 +  # jeder User darf im Unterverzeichnis Trash zusätzlich 125 MB haben
 +  quota_rule3 = INBOX/Trash:storage=+125M
 +  # der Sent-Ordner wird bei der Bewertung ausgenommen
 +  quota_rule4 = INBOX/Sent:ignore
 +  # das Verzeichnis Order darf 25% overquota liegen
 +  quota_rule5 = INBOX/Archiv:storage=+25%%
 +  #
 +  # jeder user darf die Quota-Limitierung einmalig um 10% überschreiten
 +  quota_grace = 10%%
 +}
 +</code>
 +Die einzelnen Konfigurationsparameter sind in dem Konfigurationsbeispiel ausreichend beschrieben.
 +
 +==== Quota-Backend ====
 +Beim Backend verwenden wir das äußerst robuste und stabile Maildir-Backend. Dovecot wird dabei die Quota-Definition und die aktuellen Werte in eine Datei **maildirsize** im Userverzeichnis verwenden.
 +
 +Die Auswahl des Quota-Backends erfolgt am Ende der Konfigurationsdatei //**/etc/dovecot/conf.d/90-quota.conf**//.
 +
 +   # vim /etc/dovecot/conf.d/90-quota.conf
 +<code bash>##
 +## 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
 +  #quota = maildir:User quota
 +  #quota = dict:User quota::proxy::quota
 +  #quota = fs:User quota
 +  # Django : 2014-08-06
 +  # default: unset
 +  # Quota-Backend Maildir++ aktiviert
 +  # ignoreunlimited : Für Benutzer ohne einem Quota-Limit wird keine Quota-Berechnung durchgeführt
 +  # noenforcing     : Es wird zwar eine Quota-Berechnung durchgeführt und protokolliert, bei einer
 +  #                   Überschreitung des Quota-Schwelle aber keine Sperrung vorgenommen.
 +  # ns=<namspace>   : Quota-Berechnung und -Protokollierung nur für der Namespace "namespace"
 +  #                   vornehmen
 +  quota = maildir:User quota:ignoreunlimited:noenforcing
 +}
 +</code>
 +
 ==== Quota-Plugin ==== ==== Quota-Plugin ====
  
Zeile 436: Zeile 513:
 </file> </file>
  
-==== Quota-Roots beim Quota-Backend maildir ==== + 
-FIXME + 
-==== Quota-Roots beim Quota-Backend dict ==== + 
-FIXME+ 
 + 
 + 
 + 
 + 
 + 
 +==== Quota-Warnung via eMail ==== 
 +Zur Information der Endnutzer bei Überschreiten der Quota-Warnschwellen, kann der Service **quota-warning** verwendet werden. Bei Überschreitung der definierten Warnschwellen wird einmalig der Service **quota-warning** mit dem definierten Wert für die Warnschwellen und dem Usernamen angesprochen. **quota-warning** startet ein Shell-Script mit den Ausführungsrechten unseres virtuellen Users **vmail**, damit das scripot in die jeweiligen Postfächer der Benutzer schreiben kann. 
 + 
 +Die Definition der Warnschwellen **quota_warning** und des Service **quota-warning** erfolgt über die Konfigurationsdatei //**/etc/dovecot/conf.d/90-quota.conf**// 
 + 
 +   # vim /etc/dovecot/conf.d/90-quota.conf 
 +<code bash>... 
 + 
 +# You can execute a given command when user exceeds a specified quota limit. 
 +# Each quota root has separate limits. Only the command for the first 
 +# exceeded limit is excecuted, so put the highest limit first. 
 +# The commands are executed via script service by connecting to the named 
 +# UNIX socket (quota-warning below). 
 +# Note that % needs to be escaped as %%, otherwise "% " expands to empty. 
 + 
 +plugin { 
 +  #quota_warning = storage=95%% quota-warning 95 %u 
 +  #quota_warning2 = storage=80%% quota-warning 80 %u 
 +  # Django : 2014-08-06 
 +  # default: unset 
 +  # Quotawarnings aktiviert 
 +  quota_warning = storage=100%% quota-warning 100 %u 
 +  quota_warning2 = storage=95%% quota-warning 95 %u 
 +  quota_warning3 = storage=80%% quota-warning 80 %u 
 +
 + 
 +# Example quota-warning service. The unix listener's permissions should be 
 +# set in a way that mail processes can connect to it. Below example assumes 
 +# that mail processes run as vmail user. If you use mode=0666, all system users 
 +# can generate quota warnings to anyone. 
 +# Django : 2014-08-06 
 +# default: unset 
 +service quota-warning { 
 +  executable = script /usr/local/bin/quota-warning.sh 
 +  user = vmail 
 +  unix_listener quota-warning { 
 +  user = vmail 
 +  } 
 +
 + 
 +... 
 +</code> 
 + 
 +Beim Shell-Script orientieren wir uns an dem Musterbeispiel aus dem [[http://wiki2.dovecot.org/Quota/Configuration#Quota_warnings|Dovecot Wiki]]. 
 +   # vim /usr/local/bin/quota-warning.sh 
 + 
 +<file bash /usr/local/bin/quota-warning.sh>#!/bin/sh 
 +PERCENT=$1 
 +USER=$2 
 +cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing" 
 +From: postmaster@nausch.org 
 +To: $USER 
 +Date: `date +"%a, %d %b %Y %H:%M:%S %z"` 
 +Subject: Quota Warnung zu Ihrem eMailkonto! 
 +Content-Type: text/html; charset=UTF-8 
 +Content-Transfer-Encoding: 8bit 
 + 
 +Ihr Postkorb $USER ist aktuell zu $PERCENT% gefüllt.  
 + 
 +Bitte archivieren oder löschen Sie alte, nicht mehr benötige Nachrichten. Andernfalls  
 +könnte es vorkommen, dass Sie keine neuen Nachrichten mehr empfangen könnten! 
 + 
 +Ihr Postmaster! 
 +EOF 
 +</file> 
 + 
 +Damit der Service **quota-warning** das Shell-Script als User **vmail** starten kann, setzen wir noch die Datei-(ausführungs)-Rechte des Scripts. 
 +   # chmod 700 /usr/local/bin/quota-warning.sh 
 + 
 +   # chown vmail:vmail /usr/local/bin/quota-warning.sh 
 + 
 + 
 +==== Quota-Informationen via IMAP ==== 
 +Den Konfigurationsparameter **imap_quota** haben wir bereits in der Konfigurationsdatei //**/etc/dovecot/conf.d/20-imap.conf**// beim Protokoll **imap** gesetzt. 
 +   # vim /etc/dovecot/conf.d/20-imap.conf 
 +<code bash>... 
 + 
 +protocol imap { 
 +  # Space separated list of plugins to load (default is global mail_plugins). 
 +  #mail_plugins = $mail_plugins 
 +  # Django : 2014-08-06 Quota-Informationen via IMAP zur Verfügung stellen 
 +  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 
 +
 + 
 +... 
 +</code> 
 + 
 +Somit werden dem Client während seiner Verbindung zu unserem IMAP-Server Informationen bei Quota-Überschreitungen zur Verfügung gestellt. 
 + 
 +{{ :centos:mail_c7:imap-overquota.png?nolink |Bild: IMAP-Over-Qouta-Meldung beim Mailclient Thunderbird.}} 
 + 
 +Diese Meldung können wir noch individualisieren, um so z.B. auf eine Hilfeseite zu verweisen, wo der Endanwender nähere Informationen zu der Meldung und dem Thema **//Quota//** finden kann. 
 +   # vim /etc/dovecot/conf.d/90-quota.conf 
 +<code bash>... 
 + 
 +# Django : 2014-08-07 
 +# default: quota_exceeded_message = 
 +# Individuelle Over-Quota-Nachricht mit link zum Wiki mit weiteren Informationen, die  
 +# der Client während der IMAP-Sitzung bei Überschreitung der gesetzten Schwellen erhält. 
 +plugin { 
 +  quota_exceeded_message = Quota überschritten, weitere Infos finden Sie hier: http://dokuwiki.nausch.org/doku.php/centos:mail_c7:dovecot_8 
 +
 + 
 +... 
 +</code> 
 +Zum Aktivieren der individualisierten Meldung muss noch ein **Reload** des **Dovecot-Daemon** durchgeführt werden. 
 +   # systemctl reload dovecot 
 + 
 +{{ :centos:mail_c7:imap-overquota2.png?nolink |Bild: IMAP-Over-Qouta-Meldung beim Mailclient Thunderbird.}} 
 + 
 +==== 90-quota.conf Gesamtkonfigurationsdatei ==== 
 +In Summe ergibt sich also folgende Gesamtkonfigurationsdatei unserer Quota-Einstellungen. 
 +   # vim /etc/dovecot/conf.d/90-quota.conf 
 +<file bash /etc/dovecot/conf.d/90-quota.conf>## 
 +## Quota configuration. 
 +## 
 + 
 +# Note that you also have to enable quota plugin in mail_plugins setting. 
 +# <doc/wiki/Quota.txt> 
 + 
 +## 
 +## Quota limits 
 +## 
 + 
 +# Quota limits are set using "quota_rule" parameters. To get per-user quota 
 +# limits, you can set/override them by returning "quota_rule" extra field 
 +# from userdb. It's also possible to give mailbox-specific limits, for example 
 +# to give additional 100 MB when saving to Trash: 
 + 
 +plugin { 
 +  #quota_rule = *:storage=1G 
 +  #quota_rule2 = Trash:storage=+100M 
 + 
 +  # LDA/LMTP allows saving the last mail to bring user from under quota to 
 +  # over quota, if the quota doesn't grow too high. Default is to allow as 
 +  # long as quota will stay under 10% above the limit. Also allowed e.g. 10M. 
 +  #quota_grace = 10%% 
 +  # Django : 2014-08-06 
 +  # default: unset 
 +  # jeder User bekommt im 1GB Mailstorage zugewiesen 
 +  quota_rule = *:storage=100K 
 +  # jeder User kann 10k = 10.240 Nachrichten in der INBOX liegen haben 
 +  quota_rule2 = INBOX:messages=+10K 
 +  # jeder User darf im Unterverzeichnis Trash zusätzlich 125 MB haben 
 +  quota_rule3 = INBOX/Trash:storage=+125M 
 +  # der Sent-Ordner wird bei der Bewertung ausgenommen 
 +  quota_rule4 = INBOX/Sent:ignore 
 +  # das Verzeichnis Order darf 25% overquota liegen 
 +  quota_rule5 = INBOX/Archiv:storage=+25%% 
 +  # 
 +  # jeder user darf die Quota-Limitierung einmalig um 10% überschreiten 
 +  quota_grace = 10%% 
 +
 + 
 +## 
 +## Quota warnings 
 +## 
 + 
 +# You can execute a given command when user exceeds a specified quota limit. 
 +# Each quota root has separate limits. Only the command for the first 
 +# exceeded limit is excecuted, so put the highest limit first. 
 +# The commands are executed via script service by connecting to the named 
 +# UNIX socket (quota-warning below). 
 +# Note that % needs to be escaped as %%, otherwise "% " expands to empty. 
 + 
 +plugin {  
 +  #quota_warning = storage=95%% quota-warning 95 %u 
 +  #quota_warning2 = storage=80%% quota-warning 80 %u 
 +  # Django : 2014-08-06 
 +  # default: unset 
 +  # Quotawarnings aktiviert 
 +  quota_warning = storage=100%% quota-warning 100 %u 
 +  quota_warning2 = storage=95%% quota-warning 95 %u 
 +  quota_warning3 = storage=80%% quota-warning 80 %u 
 +
 + 
 +# Example quota-warning service. The unix listener's permissions should be 
 +# set in a way that mail processes can connect to it. Below example assumes 
 +# that mail processes run as vmail user. If you use mode=0666, all system users 
 +# can generate quota warnings to anyone. 
 +# Django : 2014-08-06 
 +# default: unset 
 +service quota-warning { 
 +  executable = script /usr/local/bin/quota-warning.sh 
 +  user = vmail 
 +  unix_listener quota-warning { 
 +  user = vmail 
 +  } 
 +
 + 
 +# Django : 2014-08-07 
 +# default: quota_exceeded_message = 
 +# Individuelle Over-Quota-Nachricht mit link zum Wiki mit weiteren Informationen, die  
 +# der Client während der IMAP-Sitzung bei Überschreitung der gesetzten Schwellen erhält. 
 +plugin { 
 +  quota_exceeded_message = Quota überschritten, weitere Infos finden Sie hier: http://dokuwiki.nausch.org/doku.php/centos:mail_c7:dovecot_8 
 +
 + 
 + 
 + 
 +## 
 +## 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 
 +  #quota = maildir:User quota 
 +  #quota = dict:User quota::proxy::quota 
 +  #quota = fs:User quota 
 +  # Django : 2014-08-06 
 +  # default: unset 
 +  # Quota-Backend Maildir++ aktiviert 
 +  # ignoreunlimited : Für Benutzer ohne einem Quota-Limit wird keine Quota-Berechnung durchgeführt 
 +  # noenforcing     : Es wird zwar eine Quota-Berechnung durchgeführt und protokolliert, bei einer 
 +  #                   Überschreitung des Quota-Schwelle aber keine Sperrung vorgenommen. 
 +  # ns=<namspace>   : Quota-Berechnung und -Protokollierung nur für der Namespace "namespace" 
 +  #                   vornehmen 
 +  quota = maildir:User quota:ignoreunlimited:noenforcing 
 +
 + 
 +# 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 
 +
 +</file> 
 +==== Individuelle Quotas ==== 
 +In den seltensten Fällen werden wir nicht alle Mailbox-Inhalber über einen Kamm scheren können, wenn es um Speicherkontingenzte geht. So werden diejenigen, die mehr bezahlen mehr Speicherplatz zur Verfügung gestellt bekommen. Auch ist klar dass der **BOfH**((**B**astard **O**perator **f**rom **H**ell)) unlimitierten Platz bekommt, wie der Datenmessie eben weniger. 
 + 
 +Abhängig von unserem **[[centos:mail_c7:dovecot_6|Authentifizierungs-Mechanismus]]** können wir auch //**benutzerspezifische Quotas**// setzen. 
 + 
 +=== passwd === 
 +Nutzen wir die passwd-Datei //**/etc/dovecot/users**// nutzen wir die **//UserDB Extra Fields//** um die Benutzer individuellen Quotas festzulegen. Haben wir bereits Definitionen bei den UserDB Extra Fields trennen wir unsere Quota-Definition mit einem **Leerzeichen %%" "%%** ab. 
 +   # vim /etc/dovecot/users 
 +<file bash /etc/dovecot/users># Django : 2014-07-30 
 +# Musterbeispiel eines Eintrages für den passdb-file Authentifizierungsmechanismus 
 +
 +# Beispiel für einen Nutzer "django@nausch.org" und dem (Klartext)Passwort "Dj4n90_d3r_G33k!"
 +
 +django@nausch.org:{PLAIN}Dj4n90_d3r_G33k!:10000:10000::/srv/vmail/nausch.org/django::userdb_quota_rule=*:storage=42G 
 +</file> 
 + 
 +=== SQL === 
 +Bei Nutzung eines MySQL-Backends zur Authentifikation können wir die Quota-Definition der eMail-Konten aus der Userverwaltung von **[[centos:mail_c6:pfadmin_1|postfixadmin]]** verwenden. Die SQL-Statements aus der **[[centos:mail_c7:dovecot_6#auth-sqlconfext|auth-sql.conf.ext]]** passen wir, falls wir das noch nicht bei der Erstkonfiguration erledigt haben an. 
 +  * <code>user_query = SELECT CONCAT('/var/spool/mail/vmail/', maildir) AS home, 10000 AS uid, 10000 AS gid, \ 
 +             CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1';</code> 
 +  * <code>password_query = SELECT username AS user, password, 10000 AS userdb_uid, 10000 AS userdb_gid, \ 
 +                 CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u'
 +                 AND active = '1';</code> 
 + 
 +Zum Testen, ob unser SQL-Statement das gewünschte Ergebnis liefert, verbinden wir uns von unserem Dovecot-Host aus mit unserer Datenbank. 
 +Die Eingaben am Client sind in der Farbe <html><font style="color: rgb(0, 0, 255)"><b>blau</b></font></html> und die Rückmeldungen des MySQL-Servers in der Farbe <html><font style="color: rgb(66, 66, 66)"><b>hellgrau</b></font></html> gekennzeichnet.  
 + 
 +<html><pre class="code"> 
 +<font style="color: rgb(0, 0, 0)">$ </font><font style="color: rgb(0, 0, 255)">mysql -h mysql.dmz.nausch.org -D postfix -u dovecot_user -p</font> 
 +<font style="color: rgb(66, 66, 66)">Enter password:</font><font style="color: rgb(0, 0, 255)">D45_157_5uP3r57r3n9_g3h31m!</font> 
 +<font style="color: rgb(66, 66, 55)">Reading table information for completion of table and column names 
 +You can turn off this feature to get a quicker startup with -A 
 + 
 +<b>Welcome to the MariaDB monitor.  Commands end with ; or \g. 
 +Your MySQL connection id is 58334 
 +Server version: 5.1.73 Source distribution 
 + 
 +Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. 
 + 
 +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.</b> 
 + 
 +MySQL [postfix]> </font><font style="color: rgb(0, 0, 255)">SELECT CONCAT('/var/spool/mail/vmail/', maildir) AS home, 10000 AS uid, 10000 AS gid, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = 'django@nausch.org' AND active='1';</font> 
 +<font style="color: rgb(66, 66, 66)">+-------------------------------+-------+-------+--------------------+ 
 +| home                          | uid   | gid   | quota_rule         | 
 ++-------------------------------+-------+-------+--------------------+ 
 +| /srv/vmail/nausch.org/django/ | 10000 | 10000 | *:bytes=5120000000 | 
 ++-------------------------------+-------+-------+--------------------+ 
 +<b>1 row in set (0.00 sec)</b> 
 + 
 +MySQL [postfix]> </font><font style="color: rgb(0, 0, 255)">SELECT username AS user, password, 10000 AS userdb_uid, 10000 AS userdb_gid, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = 'django@nausch.org' AND active = '1';</font> 
 +<font style="color: rgb(66, 66, 66)">+-------------------+------------------+------------+------------+--------------------+ 
 +| user              | password         | userdb_uid | userdb_gid | quota_rule         | 
 ++-------------------+------------------+------------+------------+--------------------+ 
 +| django@nausch.org | Dj4n90_d3r_G33k! |      10000 |      10000 | *:bytes=5120000000 | 
 ++-------------------+------------------+------------+------------+--------------------+ 
 +<b>1 row in set (0.00 sec)</b> 
 + 
 +MySQL [postfix]> </font><font style="color: rgb(0, 0, 255)">quit;</font> 
 +<font style="color: rgb(66, 66, 66)">Bye</font> 
 +</pre></html> 
 + 
 +===== Quotas und doveadm ===== 
 +==== Neuberechnung mit recalc ==== 
 +Hat man größere Migrationsarbeiten an einem Dovecot-Server hinter sich, oder musste auf ein Backup mehrerer User oder Maildomänen zurückgreifen, kann es notwendig und hilfreich sein, die Berechnung der Quotas neu anzustoßen. Hierzu benutzt man die option **quota** beim Befehl **doveadm**. 
 +Die Quota-Neuberechnung des User-Kontos //django@nausch.org// erreicht man mit folgendem Aufruf. 
 +   # doveadm quota recalc -u django@nausch.org 
 + 
 +Die Neuberechung aller Nutzrkonten würde dann mit folgendem Aufruf erfolgen: 
 +   # doveadm quota recalc -A 
 + 
 +==== Abfrage mit get ==== 
 +Genau so, wie wir die Neuberechnung eines einzelnen Nutzerkontos anstossen können, ist auch die Abfrage der Quota-Daten eines Nutzers möglich. 
 +   # doveadm quota get -u django@nausch.org 
 + 
 +   Quota name Type    Value Limit                                                                          % 
 +   User quota STORAGE   117   500                                                                         23 
 +   User quota MESSAGE                                                                                  0 
 + 
 +Einen Überblick über alle Nutzerkonten erhält man mit der Option **-A**. 
 + 
 +   # doveadm quota get -A 
 + 
 +   Username          Quota name Type    Value Limit                                                        % 
 +   django@nausch.org User quota STORAGE   117   500                                                       23 
 +   django@nausch.org User quota MESSAGE                                                                0 
 +   ... 
 + 
 +===== Quota-Status für den Frontend-Mailserver (Postfix-SMTP-Server) ===== 
 +Unser Prontend-Mailserver nimmt eMails entgegen, sofern der postfix-Mailserver sich für die Maildomain zuständig, ein gültiges Userpostfach vorhanden sowie die ganzen SPAM- und AV((Anti Virus))-Maßnahmen überstanden wurden. Wird das Frontend-System anschließend die Post nicht beim Backendsystem los, bleibt ihm nichts anderes übrig, als die Nachricht zum Absender zurückzuschicken - ein sog. **//late-bounce//**. War die Absender-Adresse gefälscht, würde dieser Bounce zurück an die Adresse eines unbeteiligten Dritten geschickt - **BACKSCATTER**! Sowas kann natürlich bei entsprechener Masse sehr schnell unangenehm für den betreiber des Mailservers werden und ist daher dringendst zu vermeiden. 
 + 
 +Dovecot kann **Quota-Stati** unserem Frontend-Mailserver **[[centos:mail_c6:mta_1|Postfix]]** über einen Policy-Server zur Verfügung stellen. 
 + 
 +==== Dovecot Konfiguration ==== 
 +Die Konfiguration des Quota-Policy-Daemon nehmen wir am Ende der Konfigurationsdatei //**/etc/dovecot/conf.d/90-quota.conf**// vor. 
 + 
 +   # vim /etc/dovecot/conf.d/90-quota.conf 
 +<code bash>... 
 + 
 +## 
 +## Quota Policy Daemon 
 +## 
 + 
 +# Django : 2014-08-07 
 +# Policy-Daemon für Postfix Frontend-Mailserver (MTA) 
 +# Kapitel 11.11 "Der Quota-Policy-Server für Postfix" 
 +# Dovecotbuch (ISBN 978-3-95539-74-7) Seite 219 ff. 
 +
 +service quota-status { 
 +  executable = quota-status -p postfix 
 +  inet_listener { 
 +    address = 10.0.0.70 
 +    port = 10000 
 +  } 
 +  client_limit = 1 
 +
 + 
 +
 +# quota_status_success   : Ist das Speicher noch möglich, nichts machen "DUNNO" 
 +# quota_status_nouser    : Ist der Nutzer unbekannt, auch nichts machen "DUNNO". Ein anderes Backend 
 +#                          könnte dafür ev. zuständig sein. 
 +# quota_status_overquota : Errorcode und Fehlermeldung, die bei Erreichen der gesetzte Quota an den 
 +#                          Frontend-Mailserver (MTA) Postfix zurückgemeldet wird.  
 +plugin { 
 +  quota_status_success DUNNO 
 +  quota_status_nouser DUNNO 
 +  quota_status_overquota "552 5.2.2 Mailbox is over quota / Mailbox ist voll" 
 +
 +</code> 
 + 
 +Zur Aktivierung der Konfigurationsänderung führen wir einen **Reload** unseres Dovecot-Servers durch. 
 +   # systemctl reload dovecot 
 + 
 +Überprüfen wir nun die offenen Ports unseres Dovecot-Servers, sehen wir auch den Port **10000** unseres Quota-Status-Policy-Daemon. 
 +   # netstat -tulpen | grep dovecot 
 + 
 +   tcp        0      0 10.0.0.70:4190          0.0.0.0:              LISTEN      0          97758      10151/dovecot        
 +   tcp        0      0 10.0.0.70:993           0.0.0.0:              LISTEN      0          97821      10151/dovecot        
 +   tcp        0      0 10.0.0.70:995           0.0.0.0:              LISTEN      0          97784      10151/dovecot        
 +   tcp        0      0 10.0.0.70:110           0.0.0.0:              LISTEN      0          97783      10151/dovecot        
 +   tcp        0      0 10.0.0.70:143           0.0.0.0:              LISTEN      0          97820      10151/dovecot        
 +   tcp        0      0 10.0.0.70:10000         0.0.0.0:              LISTEN      0          98545      10151/dovecot        
 +   tcp        0      0 10.0.0.70:24            0.0.0.0:              LISTEN      0          97793      10151/dovecot  
 + 
 + 
 +==== Paketfilter Konfiguration ==== 
 +Damit nun nicht jeder fremde Host sich mit dem Port **10000** verbinden kann, regeln wir den Zugriff über eine Firewall-Regel so, dass nur der vorgeschaltete **MTA** Postfix-Mailserver sich mit unserem **Dovecot-Server** auf Port **10000** verbinden kann.  
 + 
 +Unter **CentOS 7** wird als Standard-Firewall die dynamische **firewalld** verwendet. Ein großer Vorteil der dynamischen Paketfilterregeln ist unter anderem, dass zur Aktivierung der neuen Firewall-Regel(n) nicht der Daemon durchgestartet werden muss und somit alle aktiven Verbiundungen kurz getrennt werden. Sondern unsere Änderungen können **//on-the-fly//** aktiviert oder auch wieder deaktiviert werden. 
 + 
 +In unserem Konfigurationsbeispiel hat unser Postfix-Server die IP-Adresse 10.0.0.80 und unser Dovecot-Server die 10.0.0.70. Wir brauchen also eine Firewall-Definition, die ausschließlich Verbindungen von der **Source-IP** 10.0.0.80 auf die **Destination-IP** 10.0.0.70 auf Port **10000** gestattet. 
 + 
 +Mit Hilfe des Programms **firewall-cmd** legen wir nun eine **permanente** Regel in der Zone **public**, dies entspricht in unserem Beispiel das Netzwerk-Interface **eth0** mit der IP **10.0.0.70** an. Als Source-IP geben wir die IP-Adresse unseres Postfix-Servers also die **10.0.0.80** an. Genug der Vorrede, mit nachfolgendem Befehl wird diese restriktive Regel angelegt. 
 +   # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="10.0.0.80/32" port protocol="tcp" port="10000" destination address="10.0.0.70/32" accept" 
 + 
 +Zum Aktivieren brauchen wir nun nur einen reload des Firewall-Daemon vornehmen. 
 +   # firewall-cmd --reload 
 + 
 +Fragen wir nun den Regelsatz unserer **iptables**-basieten Firewall ab, finden wir in der Chain **IN_public_allow** unsere aktive Regel. 
 +   # iptables -nvL IN_public_allow 
 + 
 +<code>Chain IN_public_allow (1 references) 
 + pkts bytes target     prot opt in     out     source               destination          
 +    0     0 ACCEPT     tcp  --  *      *       10.0.0.80            10.0.0.70            tcp dpt:10000 ctstate NEW 
 +    0     0 ACCEPT     tcp  --  *      *       10.0.0.80            10.0.0.70            tcp dpt:24 ctstate NEW 
 +    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/           0.0.0.0/           tcp dpt:22 ctstate NEW 
 +    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/           0.0.0.0/           tcp dpt:110 ctstate NEW 
 +    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/           0.0.0.0/           tcp dpt:143 ctstate NEW 
 +    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/           0.0.0.0/           tcp dpt:4190 ctstate NEW 
 +    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/           0.0.0.0/           tcp dpt:993 ctstate NEW 
 +    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/           0.0.0.0/           tcp dpt:995 ctstate NEW 
 +</code> 
 + 
 +==== Postfix Konfiguration ==== 
 +Wie schon angesprochen, wollen wir den **//Dovecot-Policy-Daemon//** erst ansprechen, wenn alle Vorprüfungen in Sachen Antivirus und SPAM erfolgt sind und bevor die Nachricht vom Postfix-Server mit einem **permit** angenommen wird. 
 + 
 +Bei der Installation und **[[centos:mail_c6:mta_3|Grundabsicherung von Postfix]]** haben wir uns bereits ein umfangreiches **[[centos:mail_c6:mta_3#restrictions-regelwerk|Restriction-Regelwerk]]** angelegt. Dort tragen wir nun vor dem abschließendem **//permit//** den **//Quota-Status-Check am Dovecot Backend-System//** ein. 
 +   # vim /etc/postfix/main.cf 
 +<code bash>... 
 + 
 +
 +# Django : 2012-02-06 
 +# Schutz durch Restrictions für unseren Postfix-Mailserver  
 +
 + 
 +smtpd_recipient_restrictions = 
 +# Postmaster, abuse und andere aufgaben- oder funktionsgebundene E-Mail-Adressen (Role-Accounts) whitelisten 
 +        check_recipient_access btree:/etc/postfix/access_recipient-rfc, 
 +# Black- und Whitelisting                               (Kapitel 8.2.3 White- und Blacklisting) 
 +        check_client_access cidr:/etc/postfix/access_client, 
 +        check_helo_access btree:/etc/postfix/access_helo, 
 +        check_sender_access btree:/etc/postfix/access_sender, 
 +        check_recipient_access btree:/etc/postfix/access_recipient, 
 +# Unsauberer eMails nicht annehmen                      (Kapitel 8.2.4 Anforderungen an Mailadressen) 
 +        reject_non_fqdn_sender, 
 +        reject_non_fqdn_recipient, 
 +        reject_unknown_sender_domain, 
 +        reject_unknown_recipient_domain, 
 +# Unsere eigenen Nutzer zulassen-/erlauben              (Kapitel 8.2.2 Relaying erlauben und verbieten) 
 +        permit_sasl_authenticated, 
 +        permit_mynetworks, 
 +# RBL überprüfen                                        (Kapitel 10.11 Realtime Blackhole Lists) 
 +        reject_rbl_client zen.spamhaus.org, 
 +        reject_rbl_client ix.dnsbl.manitu.net, 
 +        reject_rbl_client bl.spamcop.net, 
 +        reject_rhsbl_client multi.uribl.com, 
 +# Greylisting via postgrey checken via Unix-Socket      (Kapitel 9.2.5 postgrey installieren) 
 +        check_policy_service unix:postgrey/socket, 
 +# Policyd-Weight check over TCP-Connection              (Kapitel 9.3 policyd-weight installieren) 
 +        check_client_access btree:/etc/postfix/policyd_weight_client_whitelist, 
 +        check_policy_service inet:127.0.0.1:12525, 
 +# Dynamische Prüfung auf existente Relay-Empfänger      (Kapitel 12.2.2 Dynamische Empfänger-Verifizierung) 
 +        reject_unverified_recipient, 
 +# Backupserver (MX) erlauben 
 +        permit_mx_backup, 
 +# alles andere an relaying verbieten                    (Kapitel 8.2.2 Relaying erlauben und verbieten) 
 +        reject_unauth_destination, 
 +# Quota-Status-Policy-Daemon am Dovecot-Backend-System 
 +# Dovecotbuch (ISBN 978-3-95539-74-7) Seite 219 ff.     (Kapitel 11.11 "Der Quota-Policy-Server für Postfix"
 +        check_policy_service inet:10.0.0.70:10000, 
 +# Zu guter Letzt alles durchlassen, was bis jetzt noch nicht beanstandet wurde 
 +        permit 
 + 
 +... 
 +</code> 
 + 
 +Zum Aktivieren der Konfigurationsänderung starten wir den Postfix-Mailserver einmal durch. 
 +   # systemctl restart postfix 
 + 
 + 
 +===== Mailclient auf Benutzerseite ===== 
 +Mailclients haben bisweilen sehr unterschiedliche Arten, die Informationen aus dem **imap_quota** Plugin darzustellen.  
 +==== kMail ==== 
 +kMail stelle die Informationen des **imap_quota-//Plugins//** zur Verfügung, wenn der Mauszeiger über den betreffenden Mailkonto plaziert wird. 
 + 
 +{{ :centos:mail_c7:kmail_001.png?nolink&700 |Bild: Bildschirmphoto des eMail-Clientprogramm kMail}} 
 + 
 +Wir die Quota überschritten wir zusätzlich der Ordner-Name mit der Schriftfarbe **rot** dargestellt. 
 + 
 +{{ :centos:mail_c7:kmail_002.png?nolink&700 |Bild: Bildschirmphoto des eMail-Clientprogramm kMail}} 
 + 
 +==== Thunderbird ==== 
 +Im Gegensatz zum Mailclient kMail, stellt Thunderbird keine Informationen zur Quota-Auslastung in der Statuszeile an, wenn der Schwellwert noch nicht errreicht wurde. 
 + 
 +Ist die Quota-Informationsgrenze noch nicht erreicht, wird in der Statusleiste keine Information zum aktuellen Stand der Quota zur Verfügung gestellt. 
 + 
 +{{ :centos:mail_c7:thunderbird_001.png?nolink |Bild: Bildschirmhardcopy der Statusleiste vom eMail-Client Thunderbird}} 
 + 
 +Erst bei erreichen der Schwelle wir eine Information angezeigt. 
 + 
 +{{ :centos:mail_c7:thunderbird_002.png?nolink |Bild: Bildschirmhardcopy der Statusleiste vom eMail-Client Thunderbird}} 
 + 
 +Abhilfe schafft da das **[[https://addons.mozilla.org/de/thunderbird/addon/display-quota/|Display-Quota Plugin]]**. 
 + 
 +{{ :centos:mail_c7:display_quota_plugin.png?direct&777 |Bild: Informationen zum Display-Quota-Plugin}} 
 + 
 +Wird es installiert, werden immer aktuelle Quota-Status-Informationen in der Startleiste angezeigt. 
 + 
 +{{ :centos:mail_c7:thunderbird_003.png?nolink |Bild: Bildschirmhardcopy der Statusleiste vom eMail-Client Thunderbird}} 
 + 
 +Entsprechend ist hier die Anzeige bei Überschreitung der Quota-Einstellungen. 
 + 
 + 
 +{{ :centos:mail_c7:thunderbird_004.png?nolink |Bild: Bildschirmhardcopy der Statusleiste vom eMail-Client Thunderbird}} 
 + 
 +==== Horde Framework/Webmail ==== 
 +Auch die Nutzer des Webmailers **IMP** unserer Horde-Framework-Installation kommen natürlich in den Genuß der Quota-Anzeige. Wir müssen diese lediglich in der Konfig aktivieren. Hierzu öffnen wir die **backends.local.php** und tragen nachfolgende Zeilen nach. 
 +   # vim /var/www/horde/imp/config/backends.local.php 
 +<code php>... 
 + 
 +$servers['advanced'] = array( 
 +    // Disabled by default 
 +    // Django : 2013-02-01 
 +    'disabled' => false, 
 +    'name' => 'mein Advanced Dovecot-IMAP Server', 
 +    'hostspec' => '10.0.0.70', 
 +    'hordeauth' => 'full', 
 +    'protocol' => 'imap', 
 +    'port' => 143, 
 +    'secure' => 'tls', 
 +    'maildomain' => 'nausch.org', 
 +    'smtp' => array( 
 +    'localhost' => 'vml000090.dmz.nausch.org', 
 +    'host' => 'vml000080.dmz.nausch.org', 
 +    'port' => 25, 
 +    ), 
 +    // Django : 2014-08-11 
 +    'quota' => array( 
 +        'driver' => 'imap', 
 +        'params' => array( 
 +            'hide_when_unlimited' => false, 
 +            'unit' => 'MB', 
 +            'format' => array('short' => 'Quota Status: %.0f%% bei einer Belegung von %.0f %s') 
 +       ) 
 +    ), 
 +    // 
 +    'acl' => true, 
 +    'cache' => false, 
 +); 
 + 
 +... 
 +</code> 
 + 
 +Sobald wir uns bei unserem Horde-Webmailer anmelden und die Applikation **IMP** auswählen, wird der aktuelle Status zur Quota-Belegung in der Statuszeile angezeigt. 
 + 
 +{{ :centos:mail_c7:horde_quota_001.jpg?nolink&500 |Bild: Horde Framework Quota Anzeige}} 
 + 
 + 
 + 
 +====== Links ====== 
 +  * **[[centos:mail_c7:start|Zurück zum Kapitel >>Mailserverinstallation unter CentOS 7<<]]** 
 +  * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]** 
 +  * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]** 
  
  • centos/mail_c7/dovecot_8.1407324126.txt.gz
  • Zuletzt geändert: 06.08.2014 11:22.
  • von django