Added Unbound/Dovecot manual/guides + German Translation

Dieser Commit ist enthalten in:
Niklas Meyer 2022-02-02 11:37:12 +01:00
Ursprung 1f59fbba89
Commit 9b17570281
25 geänderte Dateien mit 897 neuen und 12 gelöschten Zeilen

Datei anzeigen

@ -0,0 +1,9 @@
Am 17. August haben wir die Möglichkeit, mit "jedem" oder "allen authentifizierten Benutzern" zu teilen, standardmäßig deaktiviert.
Diese Funktion kann wieder aktiviert werden, indem `ACL_ANYONE` auf `allow` in mailcow.conf gesetzt wird:
```
ACL_ANYONE=allow
```
Wenden Sie die Ă„nderungen an, indem Sie `docker-compose up -d` ausfĂĽhren.

Datei anzeigen

@ -0,0 +1,9 @@
On August the 17th, we disabled the possibility to share with "any" or "all authenticated users" by default.
This function can be re-enabled by setting `ACL_ANYONE` to `allow` in mailcow.conf:
```
ACL_ANYONE=allow
```
Apply the changes by running `docker-compose up -d`.

Datei anzeigen

@ -0,0 +1,3 @@
Der Dovecot-Parameter `sieve_vacation_dont_check_recipient` - der in mailcow-Konfigurationen vor dem 21. Juli 2021 standardmäßig auf `yes` gesetzt war - erlaubt Urlaubsantworten auch dann, wenn eine Mail an nicht existierende Mailboxen wie Catch-All-Adressen gesendet wird.
Wir haben uns entschlossen, diesen Parameter wieder auf `nein` zu setzen und dem Benutzer zu erlauben, die Empfängeradresse zu spezifizieren, die eine Urlaubsantwort auslöst. Die auslösenden Empfänger können auch in SOGos Autoresponder-Funktion konfiguriert werden.

Datei anzeigen

@ -0,0 +1,3 @@
The Dovecot parameter `sieve_vacation_dont_check_recipient` - which was by default set to `yes` in mailcow configurations pre 21st July 2021 - allows for vacation replies even when a mail is sent to non-existent mailboxes like a catch-all addresses.
We decided to switch this parameter back to `no` and allow a user to specify which recipient address triggers a vacation reply. The triggering recipients can also be configured in SOGos autoresponder feature.

Datei anzeigen

@ -0,0 +1,95 @@
Wenn Sie alte Mails aus den Ordnern `.Junk` oder `.Trash` löschen wollen oder vielleicht alle gelesenen Mails, die älter als eine bestimmte Zeitspanne sind, können Sie das dovecot-Tool doveadm [man doveadm-expunge](https://wiki.dovecot.org/Tools/Doveadm/Expunge) verwenden.
## Der manuelle Weg
Dann wollen wir mal loslegen:
Löschen Sie die Mails eines Benutzers im Junk-Ordner, die **gelesen** und **älter** als 4 Stunden sind
```
docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'Junk' SEEN not SINCE 4h
```
Lösche **alle** Mails des Benutzers im Junk-Ordner, die **älter** als 7 Tage sind
```
docker-compose exec dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 7d
```
Löscht **alle** Mails (aller Benutzer) in **allen** Ordnern, die **älter** als 52 Wochen sind (internes Datum der Mail, nicht das Datum, an dem sie auf dem System gespeichert wurde => `before` statt `savedbefore`). Nützlich zum Löschen sehr alter Mails in allen Benutzern und Ordnern (daher besonders nützlich für GDPR-Compliance).
```
docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w
```
Löschen von Mails in einem benutzerdefinierten Ordner **innerhalb** des Posteingangs eines Benutzers, die **nicht** gekennzeichnet und **älter** als 2 Wochen sind
```
docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'INBOX/custom-folder' not FLAGGED not SINCE 2w
```
!!! info
Für mögliche [Zeitspannen](https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_date_specification) oder [SearchQuery](https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_search_keys) schauen Sie bitte in [man doveadm-search-query](https://wiki.dovecot.org/Tools/Doveadm/SearchQuery)
## Job-Scheduler
### ĂĽber das Host-System cron
Wenn Sie eine solche Aufgabe automatisieren wollen, können Sie einen Cron-Job auf Ihrem Rechner erstellen, der ein Skript wie das folgende aufruft:
```
#!/bin/bash
# Pfad zu mailcow-dockerized, z.B. /opt/mailcow-dockerized
cd /pfad/zu/ihrem/mailcow-dockerized
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 2w
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' SEEN not SINCE 12h
[...]
```
Um einen Cronjob zu erstellen, können Sie `crontab -e` ausführen und etwas wie das Folgende einfügen, um ein Skript auszuführen:
```
# Jeden Tag um 04:00 Uhr morgens ausfĂĽhren.
0 4 * * * /pfad/zu/ihr/expunge_mailboxes.sh
```
### ĂĽber Docker Job Scheduler
Um dies mit einem Docker-Job-Scheduler zu archivieren, verwenden Sie diese docker-compose.override.yml mit Ihrer Mailcow:
```
version: '2.1'
services:
ofelia:
image: mcuadros/ofelia:latest
restart: always
command: daemon --docker
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
network_mode: none
dovecot-mailcow:
labels:
- "ofelia.enabled=true"
- "ofelia.job-exec.dovecot-expunge-trash.schedule=0 4 * * *"
- "ofelia.job-exec.dovecot-expunge-trash.command=doveadm expunge -A mailbox 'Junk' savedbefore 2w"
- "ofelia.job-exec.dovecot-expunge-trash.tty=false"
```
Der Job-Controller braucht nur Zugriff auf den Docker Control Socket, um das Verhalten von "exec" zu emulieren. Dann fügen wir unserem Dovecot-Container ein paar Labels hinzu, um den Job-Scheduler zu aktivieren und ihm in einem Cron-kompatiblen Scheduling-Format mitzuteilen, wann er laufen soll. Wenn Sie Probleme mit dem Scheduling-String haben, können Sie [crontab guru](https://crontab.guru/) verwenden.
Diese docker-compose.override.yml löscht jeden Tag um 4 Uhr morgens alle Mails, die älter als 2 Wochen sind, aus dem Ordner "Junk". Um zu sehen, ob alles richtig gelaufen ist, können Sie nicht nur in Ihrer Mailbox nachsehen, sondern auch im Docker-Log von Ofelia, ob es etwa so aussieht:
```
common.go:124 â–¶ NOTICE [Job "dovecot-expunge-trash" (8759567efa66)] Started - doveadm expunge -A mailbox 'Junk' savedbefore 2w,
common.go:124 â–¶ NOTICE [Job "dovecot-expunge-trash" (8759567efa66)] Finished in "285.032291ms", failed: false, skipped: false, error: none,
```
Wenn der Vorgang fehlgeschlagen ist, wird dies angegeben und die Ausgabe von doveadm im Protokoll aufgefĂĽhrt, um Ihnen die Fehlersuche zu erleichtern.
Falls Sie weitere Jobs hinzufügen wollen, stellen Sie sicher, dass Sie den "dovecot-expunge-trash"-Teil nach "ofelia.job-exec." in etwas anderes ändern, er definiert den Namen des Jobs. Die Syntax der Labels finden Sie unter [mcuadros/ofelia](https://github.com/mcuadros/ofelia).

Datei anzeigen

@ -0,0 +1,93 @@
If you want to delete old mails out of the `.Junk` or `.Trash` folders or maybe delete all read mails that are older than a certain amount of time you may use dovecot's tool doveadm [man doveadm-expunge](https://wiki.dovecot.org/Tools/Doveadm/Expunge).
## The manual way
That said, let's dive in:
Delete a user's mails inside the junk folder that **are read** and **older** than 4 hours
```
docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'Junk' SEEN not SINCE 4h
```
Delete **all** user's mails in the junk folder that are **older** than 7 days
```
docker-compose exec dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 7d
```
Delete **all** mails (of all users) in **all** folders that are **older** than 52 weeks (internal date of the mail, not the date it was saved on the system => `before` instead of `savedbefore`). Useful for deleting very old mails on all users and folders (thus especially useful for GDPR-compliance).
```
docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w
```
Delete mails inside a custom folder **inside** a user's inbox that are **not** flagged and **older** than 2 weeks
```
docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'INBOX/custom-folder' not FLAGGED not SINCE 2w
```
!!! info
For possible [time spans](https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_date_specification) or [search keys](https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_search_keys) have a look at [man doveadm-search-query](https://wiki.dovecot.org/Tools/Doveadm/SearchQuery)
## Job scheduler
### via the host system cron
If you want to automate such a task you can create a cron job on your host that calls a script like the one below:
```
#!/bin/bash
# Path to mailcow-dockerized, e.g. /opt/mailcow-dockerized
cd /path/to/your/mailcow-dockerized
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 2w
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' SEEN not SINCE 12h
[...]
```
To create a cron job you may execute `crontab -e` and insert something like the following to execute a script:
```
# Execute everyday at 04:00 A.M.
0 4 * * * /path/to/your/expunge_mailboxes.sh
```
### via Docker job scheduler
To archive this with a docker job scheduler use this docker-compose.override.yml with your mailcow:
```
version: '2.1'
services:
ofelia:
image: mcuadros/ofelia:latest
restart: always
command: daemon --docker
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
network_mode: none
dovecot-mailcow:
labels:
- "ofelia.enabled=true"
- "ofelia.job-exec.dovecot-expunge-trash.schedule=0 4 * * *"
- "ofelia.job-exec.dovecot-expunge-trash.command=doveadm expunge -A mailbox 'Junk' savedbefore 2w"
- "ofelia.job-exec.dovecot-expunge-trash.tty=false"
```
The job controller just need access to the docker control socket to be able to emulate the behavior of "exec". Then we add a few label to our dovecot-container to activate the job scheduler and tell him in a cron compatible scheduling format when to run. If you struggle with that schedule string you can use [crontab guru](https://crontab.guru/).
This docker-compose.override.yml deletes all mails older then 2 weeks from the "Junk" folder every day at 4 am. To see if things ran proper, you can not only see in your mailbox but also check Ofelia's docker log if it looks something like this:
```
common.go:124 â–¶ NOTICE [Job "dovecot-expunge-trash" (8759567efa66)] Started - doveadm expunge -A mailbox 'Junk' savedbefore 2w,
common.go:124 â–¶ NOTICE [Job "dovecot-expunge-trash" (8759567efa66)] Finished in "285.032291ms", failed: false, skipped: false, error: none,
```
If it failed it will say so and give you the output of the doveadm in the log to make it easy on you to debug.
In case you want to add more jobs, ensure you change the "dovecot-expunge-trash" part after "ofelia.job-exec." to something else, it defines the name of the job. Syntax of the labels you find at [mcuadros/ofelia](https://github.com/mcuadros/ofelia).

Datei anzeigen

@ -0,0 +1,7 @@
Erstellen Sie eine Datei `data/conf/dovecot/extra.conf` - falls nicht vorhanden - und fügen Sie Ihren zusätzlichen Inhalt hier ein.
Starten Sie `dovecot-mailcow` neu, um Ihre Ă„nderungen zu ĂĽbernehmen:
```
docker-compose restart dovecot-mailcow
```

Datei anzeigen

@ -0,0 +1,7 @@
Create a file `data/conf/dovecot/extra.conf` - if missing - and add your additional content here.
Restart `dovecot-mailcow` to apply your changes:
```
docker-compose restart dovecot-mailcow
```

Datei anzeigen

@ -0,0 +1,57 @@
## FTS Solr
Solr wird für Setups mit Speicher >= 3,5 GiB verwendet, um eine Volltextsuche in Dovecot zu ermöglichen.
Bitte beachten Sie, dass Anwendungen wie Solr _vielleicht_ von Zeit zu Zeit gewartet werden mĂĽssen.
Außerdem verbraucht Solr eine Menge RAM, abhängig von der Nutzung Ihres Servers. Bitte vermeiden Sie es auf Maschinen mit weniger als 3 GB RAM.
Die Standard-Heap-Größe (1024 M) ist in mailcow.conf definiert.
Da wir in Docker laufen und unsere Container mit dem "restart: always" Flag erstellen, wird eine oom Situation zumindest nur einen Neustart des Containers auslösen.
### FTS-bezogene Dovecot-Befehle
```
# Einzelbenutzer
docker-compose exec dovecot-mailcow doveadm fts rescan -u user@domain
# alle Benutzer
docker-compose exec dovecot-mailcow doveadm fts rescan -A
```
Dovecot Wiki: "Scannt, welche Mails im Volltextsuchindex vorhanden sind und vergleicht diese mit den tatsächlich in den Postfächern vorhandenen Mails. Dies entfernt Mails aus dem Index, die bereits gelöscht wurden und stellt sicher, dass der nächste doveadm-Index alle fehlenden Mails (falls vorhanden) indiziert."
Dies indiziert **nicht** eine Mailbox neu. Es repariert im Grunde einen gegebenen Index.
Wenn Sie die Daten sofort neu indizieren wollen, können Sie den folgenden Befehl ausführen, wobei '*' auch eine Postfachmaske wie 'Sent' sein kann. Sie müssen diese Befehle nicht ausführen, aber es wird die Dinge ein wenig beschleunigen:
```
# einzelner Benutzer
docker-compose exec dovecot-mailcow doveadm index -u user@domain '*'
# alle Benutzer, aber offensichtlich langsamer und gefährlicher
docker-compose exec dovecot-mailcow doveadm index -A '*'
```
Dies **wird** einige Zeit in Anspruch nehmen, abhängig von Ihrer Maschine und Solr kann oom ausführen, überwachen Sie es!
Da die Neuindizierung sehr sinnvoll ist, haben wir sie nicht in die mailcow UI integriert. Sie mĂĽssen sich um eventuelle Fehler beim Re-Indizieren einer Mailbox kĂĽmmern.
### Löschen der Mailbox-Daten
mailcow wird die Indexdaten eines Benutzers löschen, wenn eine Mailbox gelöscht wird.
---
## FTS Xapian (Release 2022)
Der Solr-Ersatz Xapian befindet sich derzeit in der Entwicklungs-/Testphase.
Xapian ist viel effizienter als Solr, da es nicht auf Java basiert.
Xapian ist auch nicht so anfällig für Sicherheitslücken (die bei Java-Anwendungen häufig auftreten).
Der gravierendste Unterschied zwischen den beiden FTS ist, dass Xapian (im Gegensatz zu Solr) keinen extra Container mehr benötigt, sondern fortan direkt in Dovecot (als Plugin) läuft.
Sollten Sie mehr ĂĽber das Xapian Plugin wissen wollen schauen Sie [hier](https://github.com/grosjo/fts-xapian).
**Alle Einstellungen der mailcow.conf, die Solr betreffen, werden auf Xapian umgestellt**.

Datei anzeigen

@ -0,0 +1,57 @@
## FTS Solr
Solr is used for setups with memory >= 3.5 GiB to provide full-text search in Dovecot.
Please be aware that applications like Solr _may_ need maintenance from time to time.
Besides that, Solr will eat a lot of RAM, depending on the usage of your server. Please avoid it on machines with less than 3 GB RAM.
The default heap size (1024 M) is defined in mailcow.conf.
Since we run in Docker and create our containers with the "restart: always" flag, a oom situation will at least only trigger a restart of the container.
### FTS related Dovecot commands
```
# single user
docker-compose exec dovecot-mailcow doveadm fts rescan -u user@domain
# all users
docker-compose exec dovecot-mailcow doveadm fts rescan -A
```
Dovecot Wiki: "Scan what mails exist in the full text search index and compare those to what actually exist in mailboxes. This removes mails from the index that have already been expunged and makes sure that the next doveadm index will index all the missing mails (if any)."
This does **not** re-index a mailbox. It basically repairs a given index.
If you want to re-index data immediately, you can run the followig command, where '*' can also be a mailbox mask like 'Sent'. You do not need to run these commands, but it will speed things up a bit:
```
# single user
docker-compose exec dovecot-mailcow doveadm index -u user@domain '*'
# all users, but obviously slower and more dangerous
docker-compose exec dovecot-mailcow doveadm index -A '*'
```
This **will** take some time depending on your machine and Solr can run oom, monitor it!
Because re-indexing is very sensible, we did not include it to mailcow UI. You will need to take care of any errors while re-indexing a mailbox.
### Delete mailbox data
mailcow will purge index data of a user when deleting a mailbox.
---
## FTS Xapian (Release 2022)
The Solr replacement Xapian is currently in the development/testing phase.
Xapian is much more efficient than Solr because it is not based on Java.
Xapian is also not as vulnerable to security vulnerabilities (which often occur in Java applications).
The most serious difference between the two FTS is that Xapian (unlike Solr) no longer needs an extra container but from then on runs directly in Dovecot (as a plugin).
If you want to know more about the Xapian plugin look [here](https://github.com/grosjo/fts-xapian).
**All settings of the mailcow.conf which concern Solr are converted to Xapian**.

Datei anzeigen

@ -0,0 +1,35 @@
# Ă„ndern des IMAP-IDLE-Intervalls
## Was ist das IDLE-Intervall?
Standardmäßig sendet Dovecot eine "Ich bin noch da"-Benachrichtigung an jeden Client, der eine offene Verbindung mit Dovecot hat, um Mails so schnell wie möglich zu erhalten, ohne sie manuell abzufragen (IMAP PUSH). Diese Benachrichtigung wird durch die Einstellung [`imap_idle_notify_interval`](https://wiki.dovecot.org/Timeouts) gesteuert, die standardmäßig auf 2 Minuten eingestellt ist.
Ein kurzes Intervall führt dazu, dass der Client viele Nachrichten für diese Verbindung erhält, was für mobile Geräte schlecht ist, da jedes Mal, wenn das Gerät diese Nachricht erhält, die Mailing-App aufwachen muss. Dies kann zu einer unnötigen Entladung der Batterie führen.
## Bearbeiten Sie den Wert
### Konfiguration ändern
Erstellen Sie eine neue Datei `data/conf/dovecot/extra.conf` (oder bearbeiten Sie sie, falls sie bereits existiert).
Fügen Sie die Einstellung ein, gefolgt von dem neuen Wert. Um zum Beispiel das Intervall auf 5 Minuten zu setzen, können Sie Folgendes eingeben:
```
imap_idle_notify_interval = 5 mins
```
29 Minuten ist der maximale Wert, den der [entsprechende RFC](https://tools.ietf.org/html/rfc2177) erlaubt.
!!! warning
Dies ist keine Standardeinstellung in mailcow, da wir nicht wissen, wie diese Einstellung das Verhalten anderer Clients verändert. Seien Sie vorsichtig, wenn Sie dies ändern und ein anderes Verhalten beobachten.
### Dovecot neu laden
Nun laden Sie Dovecot neu:
```
docker-compose exec dovecot-mailcow dovecot reload
```
!!! info
Sie können den Wert dieser Einstellung überprüfen mit
```
docker-compose exec dovecot-mailcow dovecot -a | grep "imap_idle_notify_interval"
```
Wenn Sie den Wert nicht geändert haben, sollte er auf 2m stehen. Wenn Sie ihn geändert haben, sollten Sie den neuen Wert sehen.

Datei anzeigen

@ -0,0 +1,34 @@
# Changing the IMAP IDLE interval
## What is the IDLE interval?
Per default, Dovecot sends a "I'm still here" notification to every client that has an open connection with Dovecot to get mails as quickly as possible without manually polling it (IMAP PUSH). This notification is controlled by the setting [`imap_idle_notify_interval`](https://wiki.dovecot.org/Timeouts), which defaults to 2 minutes.
A short interval results in the client getting a lot of messages for this connection, which is bad for mobile devices, because every time the device receives this message, the mailing app has to wake up. This can result in unnecessary battery drain.
## Edit the value
### Change configuration
Create a new file `data/conf/dovecot/extra.conf` (or edit it if it already exists).
Insert the setting followed by the new value. For example, to set the interval to 5 minutes you could type:
```
imap_idle_notify_interval = 5 mins
```
29 minutes is the maximum value allowed by the [corresponding RFC](https://tools.ietf.org/html/rfc2177).
!!! warning
This isn't a default setting in mailcow because we don't know how this setting changes the behavior of other clients. Be careful if you change this and monitor different behavior.
### Reload Dovecot
Now reload Dovecot:
```
docker-compose exec dovecot-mailcow dovecot reload
```
!!! info
You can check the value of this setting with
```
docker-compose exec dovecot-mailcow dovecot -a | grep "imap_idle_notify_interval"
```
If you didn't change it, it should be at 2m. If you did change it, you should see your new value.

Datei anzeigen

@ -0,0 +1,33 @@
Die Mails werden komprimiert (lz4) und verschlĂĽsselt gespeichert. Das SchlĂĽsselpaar ist in crypt-vol-1 zu finden.
Wenn Sie vorhandene maildir-Dateien entschlüsseln/verschlüsseln wollen, können Sie das folgende Skript auf eigene Gefahr verwenden:
Rufen Sie Dovecot auf, indem Sie `docker-compose exec dovecot-mailcow /bin/bash` im mailcow-dockerisierten Verzeichnis ausfĂĽhren.
```
# EntschlĂĽsseln Sie /var/vmail
find /var/vmail/ -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do
if [[ $(head -c7 "$file") == "CRYPTED" ]]; then
doveadm fs get compress lz4:0:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
"$file" > "/tmp/$(basename "$file")"
if [[ -s "/tmp/$(basename "$file")" ]]; then
chmod 600 "/tmp/$(basename "$file")"
chown 5000:5000 "/tmp/$(basename "$file")"
mv "/tmp/$(basename "$file")" "$file"
else
rm "/tmp/$(basename "$file")"
fi
fi
done
# VerschlĂĽsseln von /var/vmail
find /var/vmail/ -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do
if [[ $(head -c7 "$file") != "CRYPTED" ]]; then
doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
"$file" "$file"
chmod 600 "$file"
chown 5000:5000 "$file"
fi
done
```

Datei anzeigen

@ -0,0 +1,32 @@
Mails are stored compressed (lz4) and encrypted. The key pair can be found in crypt-vol-1.
If you want to decode/encode existing maildir files, you can use the following script at your own risk:
Enter Dovecot by running `docker-compose exec dovecot-mailcow /bin/bash` in the mailcow-dockerized location.
```
# Decrypt /var/vmail
find /var/vmail/ -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do
if [[ $(head -c7 "$file") == "CRYPTED" ]]; then
doveadm fs get compress lz4:0:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
"$file" > "/tmp/$(basename "$file")"
if [[ -s "/tmp/$(basename "$file")" ]]; then
chmod 600 "/tmp/$(basename "$file")"
chown 5000:5000 "/tmp/$(basename "$file")"
mv "/tmp/$(basename "$file")" "$file"
else
rm "/tmp/$(basename "$file")"
fi
fi
done
# Encrypt /var/vmail
find /var/vmail/ -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do
if [[ $(head -c7 "$file") != "CRYPTED" ]]; then
doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
"$file" "$file"
chmod 600 "$file"
chown 5000:5000 "$file"
fi
done
```

Datei anzeigen

@ -0,0 +1,48 @@
Hier ist nur eine unsortierte Liste von nützlichen `doveadm`-Befehlen, die nützlich sein könnten.
## doveadm quota
Die Befehle `quota get` und `quota recalc`[^1] werden verwendet, um die Quota-Nutzung des aktuellen Benutzers anzuzeigen oder neu zu berechnen. Die angezeigten Werte sind in *Kilobytes*.
Um den aktuellen Quota-Status fĂĽr einen Benutzer / eine Mailbox aufzulisten, tun Sie folgendes:
```
doveadm quota get -u 'mailbox@example.org'
```
Um den Quota-Speicherwert fĂĽr **alle** Benutzer aufzulisten, tun Sie folgendes:
```
doveadm quota get -A |grep "STORAGE"
```
Berechnen Sie die Quota-Nutzung eines einzelnen Benutzers neu:
```
doveadm quota recalc -u 'mailbox@example.org'
```
## doveadm search
Der Befehl `doveadm search`[^2] wird verwendet, um Nachrichten zu finden, die Ihrer Anfrage entsprechen. Er kann den Benutzernamen, die Mailbox-GUID / -UID und die Nachrichten-GUIDs / -UIDs zurĂĽckgeben.
Um die Anzahl der Nachrichten im **.Trash** Ordner eines Benutzers zu sehen:
```
doveadm search -A mailbox 'Trash' | awk '{print $1}' | sort | uniq -c
```
Alle Nachrichten im **Postfach** eines Benutzers anzeigen, die älter als 90 Tage sind:
```
doveadm search -u 'mailbox@example.org' mailbox 'INBOX' savedbefore 90d
```
Zeige **alle Nachrichten** in **beliebigen Ordnern**, die **älter** sind als 30 Tage für `mailbox@example.org`:
```
doveadm search -u 'mailbox@example.org' mailbox "*" savedbefore 30d
```
[^1]:https://wiki.dovecot.org/Tools/Doveadm/Quota
[^2]:https://wiki.dovecot.org/Tools/Doveadm/Search

Datei anzeigen

@ -0,0 +1,48 @@
Here is just an unsorted list of useful `doveadm` commands that could be useful.
## doveadm quota
The `quota get` and `quota recalc`[^1] commands are used to display or recalculate the current user's quota usage. The reported values are in *kilobytes*.
To list the current quota status for a user / mailbox, do:
```
doveadm quota get -u 'mailbox@example.org'
```
To list the quota storage value for **all** users, do:
```
doveadm quota get -A |grep "STORAGE"
```
Recalculate a single user's quota usage:
```
doveadm quota recalc -u 'mailbox@example.org'
```
## doveadm search
The `doveadm search`[^2] command is used to find messages matching your query. It can return the username, mailbox-GUID / -UID and message-GUIDs / -UIDs.
To view the number of messages, by user, in their **.Trash** folder:
```
doveadm search -A mailbox 'Trash' | awk '{print $1}' | sort | uniq -c
```
Show all messages in a user's **inbox** older then 90 days:
```
doveadm search -u 'mailbox@example.org' mailbox 'INBOX' savedbefore 90d
```
Show **all messages** in **any folder** that are **older** then 30 days for `mailbox@example.org`:
```
doveadm search -u 'mailbox@example.org' mailbox "*" savedbefore 30d
```
[^1]:https://wiki.dovecot.org/Tools/Doveadm/Quota
[^2]:https://wiki.dovecot.org/Tools/Doveadm/Search

Datei anzeigen

@ -0,0 +1,45 @@
Erstellen Sie einen neuen öffentlichen Namespace "Public" und eine Mailbox "Develcow" innerhalb dieses Namespaces:
Bearbeiten oder erstellen Sie `data/conf/dovecot/extra.conf`, fĂĽgen Sie hinzu:
```
namespace {
type = public
separator = /
prefix = Public/
location = maildir:/var/vmail/public:INDEXPVT=~/public
subscriptions = yes
mailbox "Develcow" {
auto = subscribe
}
}
```
`:INDEXPVT=~/public` kann weggelassen werden, wenn die Flags, die pro Benutzer gesehen werden, nicht gewĂĽnscht sind.
Die neue Mailbox im öffentlichen Namensraum wird von den Benutzern automatisch abonniert.
Um allen authentifizierten Benutzern vollen Zugriff auf das neue Postfach (nicht auf den gesamten Namespace) zu gewähren, führen Sie aus:
```
docker-compose exec dovecot-mailcow doveadm acl set -A "Public/Develcow" "authenticated" lookup read write write-seen write-deleted insert post delete expunge create
```
Passen Sie den Befehl an Ihre Bedürfnisse an, wenn Sie detailliertere Rechte pro Benutzer vergeben möchten (verwenden Sie z.B. `-u user@domain` anstelle von `-A`).
## Erlaube authentifizierten Benutzern den Zugriff auf den gesamten öffentlichen Namespace
Um allen authentifizierten Benutzern vollen Zugriff auf den gesamten öffentlichen Namespace und seine Unterordner zu gewähren, erstellen Sie eine neue Datei `dovecot-acl` im Namespace-Stammverzeichnis:
Ă–ffnen/bearbeiten/erstellen Sie `/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl` (passen Sie den Pfad entsprechend an), um die globale ACL-Datei mit dem folgenden Inhalt zu erstellen:
```
authenticated kxeilprwts
```
kxeilprwts" ist gleichbedeutend mit "lookup read write write-seen write-deleted insert post delete expunge create".
Sie können `doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read` verwenden, um den Zugriff für einen einzelnen Benutzer zu beschränken. Sie können es auch umdrehen und den Zugriff für alle Benutzer auf "lr" beschränken und nur einigen Benutzern vollen Zugriff gewähren.
Siehe [Dovecot ACL](https://doc.dovecot.org/settings/plugin/acl/) fĂĽr weitere Informationen ĂĽber ACL.

Datei anzeigen

@ -0,0 +1,44 @@
Create a new public namespace "Public" and a mailbox "Develcow" inside that namespace:
Edit or create `data/conf/dovecot/extra.conf`, add:
```
namespace {
type = public
separator = /
prefix = Public/
location = maildir:/var/vmail/public:INDEXPVT=~/public
subscriptions = yes
mailbox "Develcow" {
auto = subscribe
}
}
```
`:INDEXPVT=~/public` can be omitted if per-user seen flags are not wanted.
The new mailbox in the public namespace will be auto-subscribed by users.
To allow all authenticated users access full to that new mailbox (not the whole namespace), run:
```
docker-compose exec dovecot-mailcow doveadm acl set -A "Public/Develcow" "authenticated" lookup read write write-seen write-deleted insert post delete expunge create
```
Adjust the command to your needs if you like to assign more granular rights per user (use `-u user@domain` instead of `-A` for example).
## Allow authenticated users access to the whole public namespace
To allow all authenticated users access full access to the whole public namespace and its subfolders, create a new `dovecot-acl` file in the namespace root directory:
Open/edit/create `/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl` (adjust the path accordingly) to create the global ACL file with the following content:
```
authenticated kxeilprwts
```
`kxeilprwts` equals to `lookup read write write-seen write-deleted insert post delete expunge create`.
You can use `doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read` to limit access for a single user. You may also turn it around to limit access for all users to "lr" and grant only some users full access.
See [Dovecot ACL](https://doc.dovecot.org/settings/plugin/acl/) for further information about ACL.

Datei anzeigen

@ -0,0 +1,21 @@
Zufällige Master-Benutzernamen und Passwörter werden automatisch bei jedem Neustart von dovecot-mailcow erstellt.
**Das wird empfohlen und sollte nicht geändert werden.**
Wenn der Benutzer trotzdem statisch sein soll, geben Sie bitte zwei Variablen in `mailcow.conf` an.
**Beide** Parameter dĂĽrfen nicht leer sein!
```
DOVECOT_MASTER_USER=mymasteruser
DOVECOT_MASTER_PASS=mysecretpass
```
FĂĽhren Sie `docker-compose up -d` aus, um Ihre Ă„nderungen zu ĂĽbernehmen.
Der statische Master-Benutzername wird zu `DOVECOT_MASTER_USER@mailcow.local` erweitert.
Um sich als `test@example.org` anzumelden, wĂĽrde dies `test@example.org*mymasteruser@mailcow.local` mit dem oben angegebenen Passwort entsprechen.
Eine Anmeldung bei SOGo ist mit diesem Benutzernamen nicht möglich. Für Admins steht eine Click-to-Login-Funktion für SOGo zur Verfügung, wie [hier] beschrieben (https://mailcow.github.io/mailcow-dockerized-docs/debug-admin_login_sogo/)
Es wird kein Hauptbenutzer benötigt.

Datei anzeigen

@ -0,0 +1,21 @@
Random master usernames and passwords are automatically created on every restart of dovecot-mailcow.
**That's recommended and should not be changed.**
If you need the user to be static anyway, please specify two variables in `mailcow.conf`.
**Both** parameters must not be empty!
```
DOVECOT_MASTER_USER=mymasteruser
DOVECOT_MASTER_PASS=mysecretpass
```
Run `docker-compose up -d` to apply your changes.
The static master username will be expanded to `DOVECOT_MASTER_USER@mailcow.local`.
To login as `test@example.org` this would equal to `test@example.org*mymasteruser@mailcow.local` with the specified password above.
A login to SOGo is not possible with this username. A click-to-login function for SOGo is available for admins as described [here](https://mailcow.github.io/mailcow-dockerized-docs/debug-admin_login_sogo/)
No master user is required.

Datei anzeigen

@ -0,0 +1,59 @@
## Der "neue" Weg
!!! warning
Neuere Docker-Versionen scheinen sich über bestehende Volumes zu beschweren. Man kann dies vorübergehend beheben, indem man das bestehende Volume entfernt und mailcow mit der Override-Datei startet. Aber es scheint nach einem Neustart problematisch zu sein (muss bestätigt werden).
Ein einfacher, schmutziger, aber stabiler Workaround ist es, mailcow zu stoppen (`docker-compose down`), `/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data` zu entfernen und einen neuen Link zu Ihrem entfernten Dateisystem zu erstellen, zum Beispiel:
```
mv /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data_backup
ln -s /mnt/volume-xy/vmail_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data
```
Starten Sie anschlieĂźend mailcow.
---
## Der "alte" Weg
Wenn man einen anderen Ordner für das vmail-Volume verwenden möchte, kann man eine `docker-compose.override.yml` Datei erstellen und den folgenden Inhalt hinzufügen:
```
version: '2.1'
volumes:
vmail-vol-1:
driver_opts:
type: none
device: /data/mailcow/vmail
o: bind
```
### Verschieben eines bestehenden vmail-Ordners:
- Finden Sie den aktuellen vmail-Ordner anhand seines "Mountpoint"-Attributs: `docker volume inspect mailcowdockerized_vmail-vol-1`
``` hl_lines="10"
[
{
"CreatedAt": "2019-06-16T22:08:34+02:00",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "mailcowdockerized",
"com.docker.compose.version": "1.23.2",
"com.docker.compose.volume": "vmail-vol-1"
},
"Mountpoint": "/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data",
"Name": "mailcowdockerized_vmail-vol-1",
"Options": null,
"Scope": "local"
}
]
```
- Kopieren Sie den Inhalt des `Mountpoint`-Ordners an den neuen Speicherort (z.B. `/data/mailcow/vmail`) mit `cp -a`, `rsync -a` oder einem ähnlichen, nicht strikten Kopierbefehl
- Stoppen Sie mailcow durch AusfĂĽhren von `docker-compose down` aus Ihrem mailcow-Stammverzeichnis (z.B. `/opt/mailcow-dockerized`)
- Erstellen Sie die Datei `docker-compose.override.yml`, bearbeiten Sie den Gerätepfad entsprechend
- Löschen Sie den aktuellen vmail-Ordner: `docker volume rm mailcowdockerized_vmail-vol-1`
- Starten Sie mailcow durch AusfĂĽhren von `docker-compose up -d` aus Ihrem mailcow-Stammverzeichnis (z.B. `/opt/mailcow-dockerized`)
*** Ăśbersetzt mit www.DeepL.com/Translator (kostenlose Version) ***

Datei anzeigen

@ -0,0 +1,57 @@
## The "new" way
!!! warning
Newer Docker versions seem to complain about existing volumes. You can fix this temporarily by removing the existing volume and start mailcow with the override file. But it seems to be problematic after a reboot (needs to be confirmed).
An easy, dirty, yet stable workaround is to stop mailcow (`docker-compose down`), remove `/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data` and create a new link to your remote filesystem location, for example:
```
mv /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data_backup
ln -s /mnt/volume-xy/vmail_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data
```
Start mailcow afterwards.
---
## The "old" way
If you want to use another folder for the vmail-volume, you can create a `docker-compose.override.yml` file and add the following content:
```
version: '2.1'
volumes:
vmail-vol-1:
driver_opts:
type: none
device: /data/mailcow/vmail
o: bind
```
### Moving an existing vmail folder:
- Locate the current vmail folder by its "Mountpoint" attribute: `docker volume inspect mailcowdockerized_vmail-vol-1`
``` hl_lines="10"
[
{
"CreatedAt": "2019-06-16T22:08:34+02:00",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "mailcowdockerized",
"com.docker.compose.version": "1.23.2",
"com.docker.compose.volume": "vmail-vol-1"
},
"Mountpoint": "/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data",
"Name": "mailcowdockerized_vmail-vol-1",
"Options": null,
"Scope": "local"
}
]
```
- Copy the content of the `Mountpoint` folder to the new location (e.g. `/data/mailcow/vmail`) using `cp -a`, `rsync -a` or a similar non strcuture breaking copy command
- Stop mailcow by executing `docker-compose down` from within your mailcow root folder (e.g. `/opt/mailcow-dockerized`)
- Create the file `docker-compose.override.yml`, edit the device path accordingly
- Delete the current vmail folder: `docker volume rm mailcowdockerized_vmail-vol-1`
- Start mailcow by executing `docker-compose up -d` from within your mailcow root folder (e.g. `/opt/mailcow-dockerized`)

Datei anzeigen

@ -0,0 +1,34 @@
Wenn Sie einen externen DNS-Dienst verwenden wollen oder müssen, können Sie entweder einen Forwarder in Unbound einstellen oder eine Override-Datei kopieren, um externe DNS-Server zu definieren:
!!! warning
Bitte verwenden Sie keinen öffentlichen Resolver, wie wir es im obigen Beispiel getan haben. Viele - wenn nicht sogar alle - Blacklist-Lookups werden mit öffentlichen Resolvern fehlschlagen, da der Blacklist-Server Grenzen hat, wie viele Anfragen von einer IP gestellt werden können und öffentliche Resolver diese Grenzen normalerweise erreichen.
**Wichtig**: Nur DNSSEC-validierende DNS-Dienste werden funktionieren.
## Methode A, Unbound
Bearbeiten Sie `data/conf/unbound/unbound.conf` und fĂĽgen Sie die folgenden Parameter hinzu:
```
forward-zone:
name: "."
forward-addr: 8.8.8.8 # VERWENDEN SIE KEINE Ă–FFENTLICHEN DNS-SERVER - NUR EIN BEISPIEL
forward-addr: 8.8.4.4 # VERWENDET KEINE Ă–FFENTLICHEN DNS-SERVER - NUR EIN BEISPIEL
```
Unbound neu starten:
```
docker-compose restart unbound-mailcow
```
## Methode B, Ăśberschreiben der Datei
```
cd /opt/mailcow-dockerized
cp helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml .
```
Bearbeiten Sie `docker-compose.override.yml` und passen Sie die IP an.
FĂĽhren Sie `docker-compose down ; docker-compose up -d` aus.

Datei anzeigen

@ -0,0 +1,34 @@
If you want or have to use an external DNS service, you can either set a forwarder in Unbound or copy an override file to define external DNS servers:
!!! warning
Please do not use a public resolver like we did in the example above. Many - if not all - blacklist lookups will fail with public resolvers, because blacklist server has limits on how much requests can be done from one IP and public resolvers usually reach this limits.
**Important**: Only DNSSEC validating DNS services will work.
## Method A, Unbound
Edit `data/conf/unbound/unbound.conf` and append the following parameters:
```
forward-zone:
name: "."
forward-addr: 8.8.8.8 # DO NOT USE PUBLIC DNS SERVERS - JUST AN EXAMPLE
forward-addr: 8.8.4.4 # DO NOT USE PUBLIC DNS SERVERS - JUST AN EXAMPLE
```
Restart Unbound:
```
docker-compose restart unbound-mailcow
```
## Method B, Override file
```
cd /opt/mailcow-dockerized
cp helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml .
```
Edit `docker-compose.override.yml` and adjust the IP.
Run `docker-compose down ; docker-compose up -d`.

Datei anzeigen

@ -94,19 +94,19 @@ nav:
- 'Statistics with pflogsumm': 'manual-guides/Postfix/u_e-postfix-pflogsumm.md'
- 'Whitelist IP in Postscreen': 'manual-guides/Postfix/u_e-postfix-postscreen_whitelist.md'
- 'Unbound':
- 'Using an external DNS service': 'u_e-unbound-fwd.md'
- 'Using an external DNS service': 'manual-guides/Unbound/u_e-unbound-fwd.md'
- 'Dovecot':
- 'Customize/Expand dovecot.conf': 'u_e-dovecot-extra_conf.md'
- 'Enable "any" ACL settings': 'u_e-dovecot-any_acl.md'
- 'Expunge a Users mails': 'u_e-dovecot-expunge.md'
- 'FTS (Solr)': 'u_e-dovecot-fts.md'
- 'IMAP IDLE interval': 'u_e-dovecot-idle_interval.md'
- 'Mail crypt': 'u_e-dovecot-mail-crypt.md'
- 'More Examples with DOVEADM': 'u_e-dovecot-more.md'
- 'Move Maildir (vmail)': 'u_e-dovecot-vmail-volume.md'
- 'Public folders': 'u_e-dovecot-public_folder.md'
- 'Static master user': 'u_e-dovecot-static_master.md'
- 'Vacation replies for catchall addresses': 'u_e-dovecot-catchall_vacation.md'
- 'Customize/Expand dovecot.conf': 'manual-guides/Dovecot/u_e-dovecot-extra_conf.md'
- 'Enable "any" ACL settings': 'manual-guides/Dovecot/u_e-dovecot-any_acl.md'
- 'Expunge a Users mails': 'manual-guides/Dovecot/u_e-dovecot-expunge.md'
- 'FTS (Solr)': 'manual-guides/Dovecot/u_e-dovecot-fts.md'
- 'IMAP IDLE interval': 'manual-guides/Dovecot/u_e-dovecot-idle_interval.md'
- 'Mail crypt': 'manual-guides/Dovecot/u_e-dovecot-mail-crypt.md'
- 'More Examples with DOVEADM': 'manual-guides/Dovecot/u_e-dovecot-more.md'
- 'Move Maildir (vmail)': 'manual-guides/Dovecot/u_e-dovecot-vmail-volume.md'
- 'Public folders': 'manual-guides/Dovecot/u_e-dovecot-public_folder.md'
- 'Static master user': 'manual-guides/Dovecot/u_e-dovecot-static_master.md'
- 'Vacation replies for catchall addresses': 'manual-guides/Dovecot/u_e-dovecot-catchall_vacation.md'
- 'Nginx':
- 'Create subdomain webmail.example.org': 'u_e-webmail-site.md'
- 'Custom sites': 'u_e-nginx.md'