Dieser Commit ist enthalten in:
milkmaker 2022-04-28 09:22:55 +00:00
Ursprung 917aa12ea8
Commit 0ec3458b2f
205 geänderte Dateien mit 2026 neuen und 2026 gelöschten Zeilen

Datei anzeigen

@ -2428,9 +2428,9 @@
<p>To restore make sure you are actually restoring to the same mailcow it was deleted from or you use the same encryption keys in <code>crypt-vol-1</code>.</p>
<p><strong>Make sure the user you want to restore exists in your mailcow</strong>. Re-create them if they are missing.</p>
<p>Copy the folders from <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/_garbage/[timestamp]_[domain_sanitized][user_sanitized]</code> back to <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/[domain]/[user]</code> and resync the folder and recalc the quota:</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net &#39;*&#39;
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net &#39;*&#39;
docker-compose exec dovecot-mailcow doveadm quota recalc -u restoreme@example.net
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2454,7 +2454,7 @@
<p>Please do not copy this script to another location.</p>
<p>To run a backup, write "backup" as first parameter and either one or more components to backup as following parameters.
You can also use "all" as second parameter to backup all components. Append <code>--delete-days n</code> to delete backups older than n days.</p>
<div class="highlight"><pre><span></span># Syntax:
<div class="highlight"><pre><span></span><code># Syntax:
# ./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)
# Backup all, delete backups older than 3 days
@ -2465,19 +2465,19 @@ You can also use "all" as second parameter to backup all components. Append <cod
# Backup vmail
./helper-scripts/backup_and_restore.sh backup vmail
</pre></div>
</code></pre></div>
<p>The script will ask you for a backup location. Inside of this location it will create folders in the format "mailcow_DATE".
You should not rename those folders to not break the restore process.</p>
<p>To run a backup unattended, define MAILCOW_BACKUP_LOCATION as environment variable before starting the script:</p>
<div class="highlight"><pre><span></span>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all
</pre></div>
<div class="highlight"><pre><span></span><code>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all
</code></pre></div>
<h4 id="cronjob">Cronjob<a class="headerlink" href="#cronjob" title="Permanent link">&para;</a></h4>
<p>You can run the backup script regularly via cronjob. Make sure <code>BACKUP_LOCATION</code> exists:</p>
<div class="highlight"><pre><span></span>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3
</pre></div>
<div class="highlight"><pre><span></span><code>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3
</code></pre></div>
<p>Per default cron sends the full result of each backup operation by email. If you want cron to only mail on error (non-zero exit code) you may want to use the following snippet. Pathes need to be modified according to your setup (this script is a user contribution).</p>
<p>This following script may be placed in <code>/etc/cron.daily/mailcow-backup</code> - do not forget to mark it as executable via <code>chmod +x</code>:</p>
<div class="highlight"><pre><span></span>#!/bin/sh
<div class="highlight"><pre><span></span><code>#!/bin/sh
# Backup mailcow data
# https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/
@ -2502,17 +2502,17 @@ if [ $RESULT -ne 0 ]
echo &quot;STDOUT / STDERR:&quot;
cat &quot;$OUT&quot;
fi
</pre></div>
</code></pre></div>
<h1 id="backup-strategy-with-rsync-and-mailcow-backup-script">Backup strategy with rsync and mailcow backup script<a class="headerlink" href="#backup-strategy-with-rsync-and-mailcow-backup-script" title="Permanent link">&para;</a></h1>
<p>Create the destination directory for mailcows helper script:
<div class="highlight"><pre><span></span>mkdir -p /external_share/backups/backup_script
</pre></div></p>
<div class="highlight"><pre><span></span><code>mkdir -p /external_share/backups/backup_script
</code></pre></div></p>
<p>Create cronjobs:
<div class="highlight"><pre><span></span>25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized
<div class="highlight"><pre><span></span><code>25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized
40 2 * * * rsync -aH --delete /var/lib/docker/volumes /external_share/backups/var_lib_docker_volumes
5 4 * * * cd /opt/mailcow-dockerized/; BACKUP_LOCATION=/external_share/backups/backup_script /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3
# If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path
</pre></div></p>
</code></pre></div></p>
<p>On the destination (in this case <code>/external_share/backups</code>) you may want to have snapshot capabilities (ZFS, Btrfs etc.). Snapshot daily and keep for n days for a consistent backup.
Do <strong>not</strong> rsync to a Samba share, you need to keep the correct permissions!</p>
<p>To restore you'd simply need to run rsync the other way round and restart Docker to re-read the volumes. Run <code>docker-compose pull</code> and <code>docker-compose up -d</code>.</p>

Datei anzeigen

@ -2412,15 +2412,15 @@
<h3 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h3>
<p>This line backups the vmail directory to a file backup_vmail.tar.gz in the mailcow root directory:
<div class="highlight"><pre><span></span>cd /path/to/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized
docker run --rm -i -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar cvfz /backup/backup_vmail.tar.gz /vmail
</pre></div></p>
</code></pre></div></p>
<p>You can change the path by adjusting ${PWD} (which equals to the current directory) to any path you have write-access to.
Set the filename <code>backup_vmail.tar.gz</code> to any custom name, but leave the path as it is. Example: <code>[...] tar cvfz /backup/my_own_filename_.tar.gz</code></p>
<h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span>cd /path/to/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized
docker run --rm -it -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar xvfz /backup/backup_vmail.tar.gz
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2411,20 +2411,20 @@
<h1>MySQL (mysqldump)</h1>
<h2 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span>cd /path/to/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized
source mailcow.conf
DATE=$(date +&quot;%Y%m%d_%H%M%S&quot;)
docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} &gt; backup_${DBNAME}_${DATE}.sql
</pre></div>
</code></pre></div>
<h2 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h2>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>You should redirect the SQL dump without <code>docker-compose</code> to prevent parsing errors.</p>
</div>
<div class="highlight"><pre><span></span>cd /path/to/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized
source mailcow.conf
docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} &lt; backup_file.sql
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2459,10 +2459,10 @@
<p>You will need a SSH-enabled destination and a keyfile to connect to said destination. The key should not be protected by a password for the script to work unattended.</p>
<p>In your mailcow base directory, e.g. <code>/opt/mailcow-dockerized</code> you will find a file <code>create_cold_standby.sh</code>.</p>
<p>Edit this file and change the exported variables:</p>
<div class="highlight"><pre><span></span>export REMOTE_SSH_KEY=/path/to/keyfile
<div class="highlight"><pre><span></span><code>export REMOTE_SSH_KEY=/path/to/keyfile
export REMOTE_SSH_PORT=22
export REMOTE_SSH_HOST=mailcow-backup.host.name
</pre></div>
</code></pre></div>
<p>The key must be owned and readable by root only.</p>
<p>Both the source and destination require <code>rsync</code> &gt;= v3.1.0.
The destination must have Docker and docker-compose <strong>v1</strong> available.</p>
@ -2470,28 +2470,28 @@ The destination must have Docker and docker-compose <strong>v1</strong> availabl
<p>You may want to test the connection by running <code>ssh mailcow-backup.host.name -p22 -i /path/to/keyfile</code>.</p>
<h2 id="backup-and-refresh-the-cold-standby">Backup and refresh the cold-standby<a class="headerlink" href="#backup-and-refresh-the-cold-standby" title="Permanent link">&para;</a></h2>
<p>Run the first backup, this may take a while depending on the connection:</p>
<div class="highlight"><pre><span></span>bash /opt/mailcow-dockerized/create_cold_standby.sh
</pre></div>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh
</code></pre></div>
<p>That was easy, wasn't it?</p>
<p>Updating your cold-standby is just as easy:</p>
<div class="highlight"><pre><span></span>bash /opt/mailcow-dockerized/create_cold_standby.sh
</pre></div>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh
</code></pre></div>
<p>It's the same command.</p>
<h2 id="automated-backups-with-cron">Automated backups with cron<a class="headerlink" href="#automated-backups-with-cron" title="Permanent link">&para;</a></h2>
<p>First make sure that the <code>cron</code> service is enabled and running:</p>
<div class="highlight"><pre><span></span>systemctl enable cron.service &amp;&amp; systemctl start cron.service
</pre></div>
<div class="highlight"><pre><span></span><code>systemctl enable cron.service &amp;&amp; systemctl start cron.service
</code></pre></div>
<p>To automate the backups to the cold-standby server you can use a cron job. To edit the cron jobs for the root user run:</p>
<div class="highlight"><pre><span></span>crontab -e
</pre></div>
<div class="highlight"><pre><span></span><code>crontab -e
</code></pre></div>
<p>Add the following lines to synchronize the cold standby server daily at 03:00. In this example errors of the last execution are logged into a file.</p>
<div class="highlight"><pre><span></span>PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
<div class="highlight"><pre><span></span><code>PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2&gt; /var/log/mailcow-coldstandby-sync.log
</pre></div>
</code></pre></div>
<p>If saved correctly, the cron job should be shown by typing:</p>
<div class="highlight"><pre><span></span>crontab -l
</pre></div>
<div class="highlight"><pre><span></span><code>crontab -l
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2399,9 +2399,9 @@
<h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3>
<p>Please do not copy this script to another location.</p>
<p>To run a restore, <strong>start mailcow</strong>, use the script with "restore" as first parameter.</p>
<div class="highlight"><pre><span></span># Syntax:
<div class="highlight"><pre><span></span><code># Syntax:
# ./helper-scripts/backup_and_restore.sh restore
</pre></div>
</code></pre></div>
<p>The script will ask you for a backup location containing the mailcow_DATE folders.</p>
<hr>

Datei anzeigen

@ -2428,9 +2428,9 @@
<p>Um die Mailbox wiederherzustellen, stellen Sie sicher, dass Sie tatsächlich auf die gleiche Mailcow wiederherstellen, von der sie gelöscht wurde, oder Sie verwenden die gleichen Verschlüsselungsschlüssel in <code>crypt-vol-1</code>.</p>
<p><strong>Stellen Sie sicher, dass der Benutzer, den Sie wiederherstellen wollen, in Ihrer Mailcow existiert</strong>. Legen Sie diesen neu an, wenn der Benutzer fehlt.</p>
<p>Kopieren Sie die Ordner von <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/_garbage/[timestamp]_[domain_sanitized][user_sanitized]</code> zurück nach <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/[domain]/[user]</code> und synchronisieren Sie die Ordner neu und berechnen Sie die Quota (Speicherplatz) neu:</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net &#39;*&#39;
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net &#39;*&#39;
docker-compose exec dovecot-mailcow doveadm quota recalc -u restoreme@example.net
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2454,7 +2454,7 @@
<p>Bitte kopieren Sie dieses Skript nicht an einen anderen Ort.</p>
<p>Um ein Backup zu starten, geben Sie "backup" als ersten Parameter an und entweder eine oder mehrere zu sichernde Komponenten als folgende Parameter.
Sie können auch "all" als zweiten Parameter verwenden, um alle Komponenten zu sichern. Fügen Sie <code>--delete-days n</code> an, um Sicherungen zu löschen, die älter als n Tage sind.</p>
<div class="highlight"><pre><span></span># Syntax:
<div class="highlight"><pre><span></span><code># Syntax:
# ./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)
# Alles sichern, Sicherungen älter als 3 Tage löschen
@ -2465,19 +2465,19 @@ Sie können auch "all" als zweiten Parameter verwenden, um alle Komponenten zu s
# vmail sichern
./helper-scripts/backup_and_restore.sh backup vmail
</pre></div>
</code></pre></div>
<p>Das Skript wird Sie nach einem Speicherort für die Sicherung fragen. Innerhalb dieses Speicherortes wird es Ordner im Format "mailcow_DATE" erstellen.
Sie sollten diese Ordner nicht umbenennen, um den Wiederherstellungsprozess nicht zu unterbrechen.</p>
<p>Um ein Backup unbeaufsichtigt durchzuführen, definieren Sie MAILCOW_BACKUP_LOCATION als Umgebungsvariable bevor Sie das Skript starten:</p>
<div class="highlight"><pre><span></span>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all
</pre></div>
<div class="highlight"><pre><span></span><code>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all
</code></pre></div>
<h4 id="cronjob">Cronjob<a class="headerlink" href="#cronjob" title="Permanent link">&para;</a></h4>
<p>Sie können das Backup-Skript regelmäßig über einen Cronjob laufen lassen. Stellen Sie sicher, dass <code>BACKUP_LOCATION</code> existiert:</p>
<div class="highlight"><pre><span></span>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3
</pre></div>
<div class="highlight"><pre><span></span><code>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3
</code></pre></div>
<p>Standardmäßig sendet Cron das komplette Ergebnis jeder Backup-Operation per E-Mail. Wenn Sie möchten, dass cron nur im Fehlerfall (Exit-Code ungleich Null) eine E-Mail sendet, können Sie den folgenden Ausschnitt verwenden. Die Pfade müssen entsprechend Ihrer Einrichtung angepasst werden (dieses Skript ist ein Beitrag des Benutzers).</p>
<p>Das folgende Skript kann in <code>/etc/cron.daily/mailcow-backup</code> platziert werden - vergessen Sie nicht, es mit <code>chmod +x</code> als ausführbar zu markieren:</p>
<div class="highlight"><pre><span></span>#!/bin/sh
<div class="highlight"><pre><span></span><code>#!/bin/sh
# Backup mailcow data
# https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/
@ -2521,17 +2521,17 @@ if [ $RESULT -ne 0 ]
echo &quot;STDOUT / STDERR:&quot;
cat &quot;$OUT&quot;
fi
</pre></div>
</code></pre></div>
<h1 id="backup-strategie-mit-rsync-und-mailcow-backup-skript">Backup-Strategie mit rsync und mailcow Backup-Skript<a class="headerlink" href="#backup-strategie-mit-rsync-und-mailcow-backup-skript" title="Permanent link">&para;</a></h1>
<p>Erstellen Sie das Zielverzeichnis für mailcows Hilfsskript:
<div class="highlight"><pre><span></span>mkdir -p /external_share/backups/backup_script
</pre></div></p>
<div class="highlight"><pre><span></span><code>mkdir -p /external_share/backups/backup_script
</code></pre></div></p>
<p>Cronjobs erstellen:
<div class="highlight"><pre><span></span>25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized
<div class="highlight"><pre><span></span><code>25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized
40 2 * * * rsync -aH --delete /var/lib/docker/volumes /external_share/backups/var_lib_docker_volumes
5 4 * * * cd /opt/mailcow-dockerized/; BACKUP_LOCATION=/external_share/backups/backup_script /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3
# Wenn Sie wollen, benutzen Sie acl util, um die Berechtigungen einiger/aller Ordner/Dateien zu sichern: getfacl -Rn /path
</pre></div></p>
</code></pre></div></p>
<p>Am Zielort (in diesem Fall <code>/external_share/backups</code>) möchten Sie vielleicht Snapshot-Fähigkeiten haben (ZFS, Btrfs usw.). Machen Sie täglich einen Snapshot und bewahren Sie ihn für n Tage auf, um ein konsistentes Backup zu erhalten.
Führen Sie <strong>kein</strong> rsync auf eine Samba-Freigabe durch, Sie müssen die richtigen Berechtigungen einhalten!</p>
<p>Zum Wiederherstellen müssen Sie rsync einfach in umgekehrter Richtung ausführen und Docker neu starten, um die Volumes erneut zu lesen. Führen Sie <code>docker-compose pull</code> und <code>docker-compose up -d</code> aus.</p>

Datei anzeigen

@ -2412,15 +2412,15 @@
<h3 id="sicherung">Sicherung<a class="headerlink" href="#sicherung" title="Permanent link">&para;</a></h3>
<p>Diese Zeile sichert das vmail-Verzeichnis in eine Datei backup_vmail.tar.gz im mailcow-Root-Verzeichnis:
<div class="highlight"><pre><span></span>cd /pfad/zu/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /pfad/zu/mailcow-dockerized
docker run --rm -i -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar cvfz /backup/backup_vmail.tar.gz /vmail
</pre></div></p>
</code></pre></div></p>
<p>Sie können den Pfad ändern, indem Sie ${PWD} (das dem aktuellen Verzeichnis entspricht) an einen beliebigen Pfad anpassen, auf den Sie Schreibzugriff haben.
Setzen Sie den Dateinamen <code>backup_vmail.tar.gz</code> auf einen beliebigen Namen, aber lassen Sie den Pfad so wie er ist. Beispiel: <code>[...] tar cvfz /backup/mein_eigener_filename_.tar.gz</code></p>
<h3 id="wiederherstellen">Wiederherstellen<a class="headerlink" href="#wiederherstellen" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span>cd /pfad/zu/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /pfad/zu/mailcow-dockerized
docker run --rm -it -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar xvfz /backup/backup_vmail.tar.gz
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2411,20 +2411,20 @@
<h1>MySQL (mysqldump)</h1>
<h2 id="sicherung">Sicherung<a class="headerlink" href="#sicherung" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span>cd /pfad/zu/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /pfad/zu/mailcow-dockerized
source mailcow.conf
DATE=$(Datum +&quot;%Y%m%d_%H%M%S&quot;)
docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} &gt; backup_${DBNAME}_${DATE}.sql
</pre></div>
</code></pre></div>
<h2 id="wiederherstellen">Wiederherstellen<a class="headerlink" href="#wiederherstellen" title="Permanent link">&para;</a></h2>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Sie sollten den SQL-Dump ohne <code>docker-compose</code> umleiten, um Parsing-Fehler zu vermeiden.</p>
</div>
<div class="highlight"><pre><span></span>cd /pfad/zu/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /pfad/zu/mailcow-dockerized
source mailcow.conf
docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} &lt; backup_file.sql
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2459,10 +2459,10 @@
<p>Sie benötigen ein SSH-fähiges Ziel und eine Schlüsseldatei, um sich mit diesem Ziel zu verbinden. Der Schlüssel sollte nicht durch ein Passwort geschützt sein, damit das Skript unbeaufsichtigt arbeiten kann.</p>
<p>In Ihrem mailcow-Basisverzeichnis, z.B. <code>/opt/mailcow-dockerized</code>, finden Sie eine Datei <code>create_cold_standby.sh</code>.</p>
<p>Bearbeiten Sie diese Datei und ändern Sie die exportierten Variablen:</p>
<div class="highlight"><pre><span></span>export REMOTE_SSH_KEY=/pfad/zur/keyfile
<div class="highlight"><pre><span></span><code>export REMOTE_SSH_KEY=/pfad/zur/keyfile
export REMOTE_SSH_PORT=22
export REMOTE_SSH_HOST=mailcow-backup.host.name
</pre></div>
</code></pre></div>
<p>Der Schlüssel muss im Besitz von root sein und darf nur von diesem gelesen werden können.</p>
<p>Sowohl die Quelle als auch das Ziel benötigen <code>rsync</code> &gt;= v3.1.0.
Das Ziel muss über Docker und docker-compose <strong>v1</strong> verfügen.</p>
@ -2470,28 +2470,28 @@ Das Ziel muss über Docker und docker-compose <strong>v1</strong> verfügen.</p>
<p>Sie können die Verbindung testen, indem Sie <code>ssh mailcow-backup.host.name -p22 -i /path/to/keyfile</code> ausführen.</p>
<h2 id="backup-und-aktualisierung-des-cold-standby">Backup und Aktualisierung des Cold-Standby<a class="headerlink" href="#backup-und-aktualisierung-des-cold-standby" title="Permanent link">&para;</a></h2>
<p>Starten Sie das erste Backup, dies kann je nach Verbindung eine Weile dauern:</p>
<div class="highlight"><pre><span></span>bash /opt/mailcow-dockerized/create_cold_standby.sh
</pre></div>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh
</code></pre></div>
<p>Das war einfach, nicht wahr?</p>
<p>Das Aktualisieren des Cold-Standby ist genauso einfach:</p>
<div class="highlight"><pre><span></span>bash /opt/mailcow-dockerized/create_cold_standby.sh
</pre></div>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh
</code></pre></div>
<p>Es ist derselbe Befehl.</p>
<h2 id="automatisierte-backups-mit-cron">Automatisierte Backups mit cron<a class="headerlink" href="#automatisierte-backups-mit-cron" title="Permanent link">&para;</a></h2>
<p>Stellen Sie zunächst sicher, dass der <code>cron</code> Dienst aktiviert ist und läuft:</p>
<div class="highlight"><pre><span></span>systemctl enable cron.service &amp;&amp; systemctl start cron.service
</pre></div>
<div class="highlight"><pre><span></span><code>systemctl enable cron.service &amp;&amp; systemctl start cron.service
</code></pre></div>
<p>Um die Backups auf dem Cold-Standby-Server zu automatisieren, können Sie einen Cron-Job verwenden. Um die Cron-Jobs für den Root-Benutzer zu bearbeiten, führen Sie aus:</p>
<div class="highlight"><pre><span></span>crontab -e
</pre></div>
<div class="highlight"><pre><span></span><code>crontab -e
</code></pre></div>
<p>Fügen Sie die folgenden Zeilen hinzu, um den Cold-Standby-Server täglich um 03:00 Uhr zu synchronisieren. In diesem Beispiel werden Fehler der letzten Ausführung in einer Datei protokolliert.</p>
<div class="highlight"><pre><span></span>PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
<div class="highlight"><pre><span></span><code>PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2&gt; /var/log/mailcow-coldstandby-sync.log
</pre></div>
</code></pre></div>
<p>Wenn korrekt gespeichert, sollte der Cron-Job durch Eingabe angezeigt werden:</p>
<div class="highlight"><pre><span></span>crontab -l
</pre></div>
<div class="highlight"><pre><span></span><code>crontab -l
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2399,9 +2399,9 @@
<h3 id="wiederherstellung">Wiederherstellung<a class="headerlink" href="#wiederherstellung" title="Permanent link">&para;</a></h3>
<p>Bitte kopieren Sie dieses Skript nicht an einen anderen Ort.</p>
<p>Um eine Wiederherstellung durchzuführen, <strong>starten Sie mailcow</strong>, verwenden Sie das Skript mit "restore" als ersten Parameter.</p>
<div class="highlight"><pre><span></span># Syntax:
<div class="highlight"><pre><span></span><code># Syntax:
# ./helper-scripts/backup_and_restore.sh restore
</pre></div>
</code></pre></div>
<p>Das Skript wird Sie nach einem Speicherort für die Sicherung der mailcow_DATE-Ordner fragen.</p>
<hr>

Datei anzeigen

@ -2346,8 +2346,8 @@
<h1>Deinstallation</h1>
<p>Um mailcow: dockerized mit all seinen Volumes, Images und Containern zu entfernen, tun Sie dies:</p>
<div class="highlight"><pre><span></span>docker-compose down -v --rmi all --remove-orphans
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose down -v --rmi all --remove-orphans
</code></pre></div>
<div class="admonition info">
<p class="admonition-title">Info</p>
<ul>

Datei anzeigen

@ -2351,10 +2351,10 @@
<ul>
<li>
<p>Docker
<div class="highlight"><pre><span></span>curl -sSL https://get.docker.com/ | CHANNEL=stable sh
<div class="highlight"><pre><span></span><code>curl -sSL https://get.docker.com/ | CHANNEL=stable sh
# Nachdem der Installationsprozess abgeschlossen ist, müssen Sie eventuell den Dienst aktivieren und sicherstellen, dass er gestartet ist (z. B. CentOS 7)
systemctl enable --now docker
</pre></div></p>
</code></pre></div></p>
</li>
<li>
<p>Docker-Compose</p>
@ -2365,44 +2365,44 @@ systemctl enable --now docker
<p><strong>mailcow benötigt die neueste Version von docker-compose v1.</strong> Es wird dringend empfohlen, die untenstehenden Befehle zu verwenden, um <code>docker-compose</code> zu installieren. Paket-Manager (z.B. <code>apt</code>, <code>yum</code>) werden <strong>wahrscheinlich</strong> nicht die richtige Version liefern.
Hinweis: Dieser Befehl lädt docker-compose aus dem offiziellen Docker-Github-Repository herunter und ist eine sichere Methode. Das Snippet ermittelt die neueste unterstützte Version von mailcow. In fast allen Fällen ist dies die letzte verfügbare Version (Ausnahmen sind kaputte Versionen oder größere Änderungen, die noch nicht von mailcow unterstützt werden).</p>
</div>
<div class="highlight"><pre><span></span>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
<div class="highlight"><pre><span></span><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
</pre></div>
</code></pre></div>
<p>Bitte verwenden Sie die neueste verfügbare Docker-Engine und nicht die Engine, die mit Ihrem Distros-Repository ausgeliefert wird.</p>
<p><strong>1.1.1.</strong> Auf SELinux-aktivierten Systemen, z.B. CentOS 7:</p>
<ul>
<li>Prüfen Sie, ob das Paket "container-selinux" auf Ihrem System vorhanden ist:</li>
</ul>
<div class="highlight"><pre><span></span>rpm -qa | grep container-selinux
</pre></div>
<div class="highlight"><pre><span></span><code>rpm -qa | grep container-selinux
</code></pre></div>
<p>Wenn der obige Befehl eine leere oder keine Ausgabe liefert, sollten Sie es über Ihren Paketmanager installieren.</p>
<ul>
<li>Prüfen Sie, ob Docker SELinux-Unterstützung aktiviert hat:</li>
</ul>
<div class="highlight"><pre><span></span>docker info | grep selinux
</pre></div>
<div class="highlight"><pre><span></span><code>docker info | grep selinux
</code></pre></div>
<p>Wenn der obige Befehl eine leere oder keine Ausgabe liefert, erstellen oder bearbeiten Sie <code>/etc/docker/daemon.json</code> und fügen Sie <code>"selinux-enabled": true</code> hinzu. Beispielhafter Inhalt der Datei:</p>
<div class="highlight"><pre><span></span>{
<div class="highlight"><pre><span></span><code>{
&quot;selinux-enabled&quot;: true
}
</pre></div>
</code></pre></div>
<p>Starten Sie den Docker-Daemon neu und überprüfen Sie, ob SELinux nun aktiviert ist.</p>
<p>Dieser Schritt ist erforderlich, um sicherzustellen, dass die mailcows-Volumes richtig gekennzeichnet sind, wie in der Compose-Datei angegeben.
Wenn Sie daran interessiert sind, wie das funktioniert, können Sie sich die Readme-Datei von <a href="https://github.com/containers/container-selinux">https://github.com/containers/container-selinux</a> ansehen, die auf viele nützliche Informationen zu diesem Thema verweist.</p>
<p><strong>2.</strong> Klonen Sie den Master-Zweig des Repositorys und stellen Sie sicher, dass Ihre umask gleich 0022 ist. Bitte klonen Sie das Repository als root-Benutzer und kontrollieren Sie auch den Stack als root. Wir werden die Attribute - wenn nötig - ändern, während wir die Container automatisch bereitstellen und sicherstellen, dass alles gesichert ist. Das update.sh-Skript muss daher ebenfalls als root ausgeführt werden. Es kann notwendig sein, den Besitzer und andere Attribute von Dateien zu ändern, auf die Sie sonst keinen Zugriff haben. <strong>Wir geben die Berechtigungen für jede exponierte Anwendung</strong> auf und führen einen exponierten Dienst nicht als root aus! Wenn Sie den Docker-Daemon als Nicht-Root-Benutzer steuern, erhalten Sie keine zusätzliche Sicherheit. Der unprivilegierte Benutzer wird die Container ebenfalls als root spawnen. Das Verhalten des Stacks ist identisch.</p>
<div class="highlight"><pre><span></span>$ su
<div class="highlight"><pre><span></span><code>$ su
# umask
0022 # &lt;- Überprüfen, dass es 0022 ist
# cd /opt
# git clone https://github.com/mailcow/mailcow-dockerized
# cd mailcow-dockerized
</pre></div>
</code></pre></div>
<p><strong>3.</strong> Erzeugen Sie eine Konfigurationsdatei. Verwenden Sie einen FQDN (<code>host.domain.tld</code>) als Hostname, wenn Sie gefragt werden.
<div class="highlight"><pre><span></span>./generate_config.sh
</pre></div></p>
<div class="highlight"><pre><span></span><code>./generate_config.sh
</code></pre></div></p>
<p><strong>4.</strong> Ändern Sie die Konfiguration, wenn Sie das wollen oder müssen.
<div class="highlight"><pre><span></span>nano mailcow.conf
</pre></div>
<div class="highlight"><pre><span></span><code>nano mailcow.conf
</code></pre></div>
Wenn Sie planen, einen Reverse Proxy zu verwenden, können Sie zum Beispiel HTTPS an 127.0.0.1 auf Port 8443 und HTTP an 127.0.0.1 auf Port 8080 binden.</p>
<p>Möglicherweise müssen Sie einen vorinstallierten MTA stoppen, der Port 25/tcp blockiert. Siehe <a href="../../post_installation/firststeps-local_mta/">dieses Kapitel</a>, um zu erfahren, wie man Postfix rekonfiguriert, um nach einer erfolgreichen Installation neben mailcow laufen zu lassen.</p>
<p>Einige Updates modifizieren mailcow.conf und fügen neue Parameter hinzu. Es ist schwer, in der Dokumentation den Überblick zu behalten. Bitte überprüfen Sie deren Beschreibung und fragen Sie, wenn Sie unsicher sind, in den bekannten Kanälen nach Rat.</p>
@ -2410,20 +2410,20 @@ Wenn Sie planen, einen Reverse Proxy zu verwenden, können Sie zum Beispiel HTTP
<p><strong>Wenn Sie auf Probleme und seltsame Phänomene stoßen, überprüfen Sie bitte Ihre MTU.</strong></p>
<p>Bearbeiten Sie <code>docker-compose.yml</code> und ändern Sie die Netzwerkeinstellungen entsprechend Ihrer MTU.
Fügen Sie den neuen Parameter driver_opts wie folgt hinzu:
<div class="highlight"><pre><span></span>networks:
<div class="highlight"><pre><span></span><code>networks:
mailcow-network:
...
driver_opts:
com.docker.network.driver.mtu: 1450
...
</pre></div></p>
</code></pre></div></p>
<p><strong>4.2.</strong> Benutzer ohne ein IPv6-aktiviertes Netzwerk auf ihrem Hostsystem:</p>
<p><strong>Einschalten von IPv6. Endlich.</strong></p>
<p>Wenn Sie kein IPv6-fähiges Netzwerk auf Ihrem Host haben und Sie sich nicht um ein besseres Internet kümmern (hehe), ist es empfehlenswert, IPv6 für das mailcow-Netzwerk zu <a href="../../post_installation/firststeps-disable_ipv6/">deaktivieren</a>, um unvorhergesehene Probleme zu vermeiden.</p>
<p><strong>5.</strong> LAden Sie die Images herunter und führen Sie die Compose-Datei aus. Der Parameter <code>-d</code> wird mailcow: dockerized starten:
<div class="highlight"><pre><span></span>docker-compose pull
<div class="highlight"><pre><span></span><code>docker-compose pull
docker-compose up -d
</pre></div></p>
</code></pre></div></p>
<p>Geschafft!</p>
<p>Sie können nun auf <strong>https://${MAILCOW_HOSTNAME}</strong> mit den Standard-Zugangsdaten <code>admin</code> + Passwort <code>moohoo</code> zugreifen.</p>
<div class="admonition info">

Datei anzeigen

@ -2359,43 +2359,43 @@ Installieren Sie <a href="https://docs.docker.com/engine/installation/linux/">Do
<ul>
<li>
<p>Docker
<div class="highlight"><pre><span></span>curl -sSL https://get.docker.com/ | CHANNEL=stable sh
<div class="highlight"><pre><span></span><code>curl -sSL https://get.docker.com/ | CHANNEL=stable sh
# Nachdem der Installationsprozess abgeschlossen ist, müssen Sie den Dienst aktivieren und sicherstellen, dass er gestartet ist (z. B. CentOS 7)
systemctl enable docker.service
</pre></div></p>
</code></pre></div></p>
</li>
<li>
<p>docker-compose
<div class="highlight"><pre><span></span>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
<div class="highlight"><pre><span></span><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
</pre></div></p>
</code></pre></div></p>
</li>
</ul>
<p>Bitte verwenden Sie die neueste verfügbare Docker-Engine und nicht die Engine, die mit Ihrem Distros-Repository ausgeliefert wird.</p>
<p><strong>2.</strong> Stoppen Sie Docker und stellen Sie sicher, dass Docker gestoppt wurde:
<div class="highlight"><pre><span></span>systemctl stop docker.service
<div class="highlight"><pre><span></span><code>systemctl stop docker.service
systemctl status docker.service
</pre></div></p>
</code></pre></div></p>
<p><strong>3.</strong> Führen Sie die folgenden Befehle auf dem Quellcomputer aus (achten Sie darauf, die abschließenden Schrägstriche im ersten Pfadparameter wie unten gezeigt hinzuzufügen!) - <strong>WARNUNG: Dieser Befehl löscht alles, was bereits unter <code>/var/lib/docker/volumes</code> auf dem Zielrechner existiert</strong>:
<div class="highlight"><pre><span></span>rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@target-machine.example.com:/opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@target-machine.example.com:/opt/mailcow-dockerized
rsync -aHhP --numeric-ids --delete /var/lib/docker/volumes/ root@target-machine.example.com:/var/lib/docker/volumes
</pre></div></p>
</code></pre></div></p>
<p><strong>4.</strong> Schalten Sie mailcow ab und stoppen Sie Docker auf dem Quellrechner.
<div class="highlight"><pre><span></span>cd /opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized
docker-compose herunterfahren
systemctl stop docker.service
</pre></div></p>
</code></pre></div></p>
<p>**Wiederholen Sie Schritt 3 mit denselben Befehlen. Dies wird viel schneller gehen als beim ersten Mal.</p>
<p><strong>6.</strong> Wechseln Sie auf den Zielrechner und starten Sie Docker.
<div class="highlight"><pre><span></span>systemctl start docker.service
</pre></div></p>
<div class="highlight"><pre><span></span><code>systemctl start docker.service
</code></pre></div></p>
<p><strong>7.</strong> Ziehen Sie nun die mailcow Docker-Images auf den Zielrechner.
<div class="highlight"><pre><span></span>cd /opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized
docker-compose pull
</pre></div></p>
</code></pre></div></p>
<p><strong>8.</strong> Starten Sie den gesamten mailcow-Stack und alles sollte fertig sein!
<div class="highlight"><pre><span></span>docker-compose up -d
</pre></div></p>
<div class="highlight"><pre><span></span><code>docker-compose up -d
</code></pre></div></p>
<p><strong>9.</strong> Zum Schluss ändern Sie Ihre DNS-Einstellungen so, dass sie auf den Zielserver zeigen.</p>
<hr>

Datei anzeigen

@ -2480,13 +2480,13 @@
<p>Ein Update-Skript in Ihrem mailcow-dockerized Verzeichnis kümmert sich um Updates.</p>
<p>Aber benutzen Sie es mit Bedacht! Wenn Sie denken, dass Sie viele Änderungen am mailcow-Code vorgenommen haben, sollten Sie die manuelle Update-Anleitung unten verwenden.</p>
<p>Führen sie das Update-Skript aus:
<div class="highlight"><pre><span></span>./update.sh
</pre></div></p>
<div class="highlight"><pre><span></span><code>./update.sh
</code></pre></div></p>
<p>Wenn es nötig ist, wird es Sie fragen, wie Sie fortfahren möchten.
Merge-Fehler werden gemeldet.
Einige kleinere Konflikte werden automatisch korrigiert (zugunsten des mailcow: dockerized repository code).</p>
<h3 id="optionen">Optionen<a class="headerlink" href="#optionen" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span># Optionen können kombiniert werden
<div class="highlight"><pre><span></span><code># Optionen können kombiniert werden
# - Prüft auf Updates und zeigt Änderungen an
./update.sh --check
@ -2509,22 +2509,22 @@ Einige kleinere Konflikte werden automatisch korrigiert (zugunsten des mailcow:
# - Nicht aktualisieren, nur holen von Docker Images
./update.sh --prefetch
</pre></div>
</code></pre></div>
<h3 id="ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe">Ich habe vergessen, was ich vor dem Ausführen von update.sh geändert habe.<a class="headerlink" href="#ich-habe-vergessen-was-ich-vor-dem-ausfuhren-von-updatesh-geandert-habe" title="Permanent link">&para;</a></h3>
<p>Siehe <code>git log --pretty=oneline | grep -i "before update"</code>, Sie werden eine Ausgabe ähnlich dieser haben:</p>
<div class="highlight"><pre><span></span>22cd00b5e28893ef9ddef3c2b5436453cc5223ab Before update on 2020-09-28_19_25_45
<div class="highlight"><pre><span></span><code>22cd00b5e28893ef9ddef3c2b5436453cc5223ab Before update on 2020-09-28_19_25_45
dacd4fb9b51e9e1c8a37d84485b92ffaf6c59353 Before update on 2020-08-07_13_31_31
</pre></div>
</code></pre></div>
<p>Führen Sie <code>git diff 22cd00b5e28893ef9ddef3c2b5436453cc5223ab</code> aus, um zu sehen, was sich geändert hat.</p>
<h3 id="kann-ich-ein-rollback-durchfuhren">Kann ich ein Rollback durchführen?<a class="headerlink" href="#kann-ich-ein-rollback-durchfuhren" title="Permanent link">&para;</a></h3>
<p>Ja.</p>
<p>Siehe das obige Thema, anstelle eines Diffs führen Sie checkout aus:</p>
<div class="highlight"><pre><span></span>docker-compose down
<div class="highlight"><pre><span></span><code>docker-compose down
# Ersetzen Sie die Commit-ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab durch Ihre ID
git checkout 22cd00b5e28893ef9ddef3c2b5436453cc5223ab
docker-compose pull
docker-compose up -d
</pre></div>
</code></pre></div>
<h3 id="hooks">Hooks<a class="headerlink" href="#hooks" title="Permanent link">&para;</a></h3>
<p>Sie können sich in den Update-Mechanismus einklinken, indem Sie Skripte namens <code>pre_commit_hook.sh</code> und <code>post_commit_hook.sh</code> zu Ihrem mailcows-Root-Verzeichnis hinzufügen. Siehe <a href="../../manual-guides/u_e-update-hooks/">hier</a> für weitere Details.</p>
<h2 id="funoten">Fußnoten<a class="headerlink" href="#funoten" title="Permanent link">&para;</a></h2>

Datei anzeigen

@ -2466,21 +2466,21 @@
<li>Sie brauchen <code>your_id</code> von den Downloadlinks. <strong>Diese sind pro User individuell</strong>.</li>
<li>
<p>Fügen Sie diese wie folgt in die <code>data/conf/clamav/freshclam.conf</code> ein und ersetzen Sie den <code>your_id</code> Teil mit Ihrer ID:
<div class="highlight"><pre><span></span>DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.hdb
<div class="highlight"><pre><span></span><code>DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.ign2
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/javascript.ndb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/spam_marketing.ndb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfohtml.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfoascii.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfopdf.hdb
</pre></div></p>
</code></pre></div></p>
</li>
<li>
<p>Bei den kostenlosen SecuriteInfo Datenbanken ist die Download-Geschwindigkeit auf 300 kB/s begrenzt. Ändern Sie in <code>data/conf/clamav/freshclam.conf</code> den Standardwert <code>ReceiveTimeout 20</code> auf <code>ReceiveTimeout 90</code> (Zeitangabe in Sekunden), da ansonsten einige der Datenbank-Downloads aufgrund ihrer Größe abbrechen können.</p>
</li>
<li>
<p>Passen Sie <code>data/conf/clamav/clamd.conf</code> mit den folgenden Einstellungen an:
<div class="highlight"><pre><span></span>DetectPUA yes
<div class="highlight"><pre><span></span><code>DetectPUA yes
ExcludePUA PUA.Win.Packer
ExcludePUA PUA.Win.Trojan.Packed
ExcludePUA PUA.Win.Trojan.Molebox
@ -2493,11 +2493,11 @@ MaxEmbeddedPE 100M
MaxHTMLNormalize 50M
MaxScriptNormalize 50M
MaxZipTypeRcg 50M
</pre></div></p>
</code></pre></div></p>
</li>
<li>Starten Sie den ClamAV Container neu:
<div class="highlight"><pre><span></span>docker-compose restart clamd-mailcow
</pre></div></li>
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow
</code></pre></div></li>
</ol>
<p><strong>Bitte beachten Sie</strong>:</p>
<ul>
@ -2509,14 +2509,14 @@ MaxZipTypeRcg 50M
<h3 id="interserver-datenbanken-aktivieren">InterServer Datenbanken aktivieren<a class="headerlink" href="#interserver-datenbanken-aktivieren" title="Permanent link">&para;</a></h3>
<ol>
<li>Fügen Sie folgendes in <code>data/conf/clamav/freshclam.conf</code> ein:
<div class="highlight"><pre><span></span>DatabaseCustomURL http://sigs.interserver.net/interserver256.hdb
<div class="highlight"><pre><span></span><code>DatabaseCustomURL http://sigs.interserver.net/interserver256.hdb
DatabaseCustomURL http://sigs.interserver.net/interservertopline.db
DatabaseCustomURL http://sigs.interserver.net/shell.ldb
DatabaseCustomURL http://sigs.interserver.net/whitelist.fp
</pre></div></li>
</code></pre></div></li>
<li>Starten Sie den ClamAV Container neu:
<div class="highlight"><pre><span></span>docker-compose restart clamd-mailcow
</pre></div></li>
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow
</code></pre></div></li>
</ol>
<hr>

Datei anzeigen

@ -2398,22 +2398,22 @@
<h2 id="whitelist-fur-bestimmte-clamav-signaturen">Whitelist für bestimmte ClamAV-Signaturen<a class="headerlink" href="#whitelist-fur-bestimmte-clamav-signaturen" title="Permanent link">&para;</a></h2>
<p>Es kann vorkommen, dass legitime (saubere) Mails von ClamAV blockiert werden (Rspamd markiert die Mail mit <code>VIRUS_FOUND</code>). So werden beispielsweise interaktive PDF-Formularanhänge standardmäßig blockiert, da der eingebettete Javascript-Code für schädliche Zwecke verwendet werden könnte. Überprüfen Sie dies anhand der clamd-Protokolle, z.B.:</p>
<div class="highlight"><pre><span></span>docker-compose logs clamd-mailcow <span class="p">|</span> grep <span class="s2">&quot;FOUND&quot;</span>
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose logs clamd-mailcow <span class="p">|</span> grep <span class="s2">&quot;FOUND&quot;</span>
</code></pre></div>
<p>Diese Zeile bestätigt, dass ein solcher identifiziert wurde:</p>
<div class="highlight"><pre><span></span>clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -&gt; instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND
</pre></div>
<div class="highlight"><pre><span></span><code>clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -&gt; instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND
</code></pre></div>
<p>Um diese spezielle Signatur auf die Whitelist zu setzen (und den Versand dieses Dateityps im Anhang zu ermöglichen), fügen Sie sie der ClamAV-Signatur-Whitelist-Datei hinzu:</p>
<div class="highlight"><pre><span></span><span class="nb">echo</span> <span class="s1">&#39;PUA.Pdf.Trojan.EmbeddedJavaScript-1&#39;</span> &gt;&gt; data/conf/clamav/whitelist.ign2
</pre></div>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span> <span class="s1">&#39;PUA.Pdf.Trojan.EmbeddedJavaScript-1&#39;</span> &gt;&gt; data/conf/clamav/whitelist.ign2
</code></pre></div>
<p>Dann starten Sie den clamd-mailcow Service Container in der mailcow UI oder mit docker-compose neu:</p>
<div class="highlight"><pre><span></span>docker-compose restart clamd-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow
</code></pre></div>
<p>Bereinigen Sie zwischengespeicherte ClamAV-Ergebnisse in Redis:</p>
<div class="highlight"><pre><span></span># docker-compose exec redis-mailcow /bin/sh
<div class="highlight"><pre><span></span><code># docker-compose exec redis-mailcow /bin/sh
/data # redis-cli KEYS rs_cl* | xargs redis-cli DEL
/data # exit
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2348,14 +2348,14 @@
<h1>Dockerfiles anpassen</h1>
<p>Sie müssen die Override-Datei mit den entsprechenden Build-Tags in den mailcow: dockerized Root-Ordner (d.h. <code>/opt/mailcow-dockerized</code>) kopieren:</p>
<div class="highlight"><pre><span></span>cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml
</pre></div>
<div class="highlight"><pre><span></span><code>cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml
</code></pre></div>
<p>Nehmen Sie Ihre Änderungen in <code>data/Dockerfiles/$service</code> vor und erstellen Sie das Image lokal:</p>
<div class="highlight"><pre><span></span>docker build data/Dockerfiles/service -t mailcow/$service
</pre></div>
<div class="highlight"><pre><span></span><code>docker build data/Dockerfiles/service -t mailcow/$service
</code></pre></div>
<p>Nun werden die geänderten Container automatisch neu erstellt:</p>
<div class="highlight"><pre><span></span>docker-compose up -d
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose up -d
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2348,8 +2348,8 @@
<h1>Docker Compose Bash Completion</h1>
<p>Um eine schöne Bash-Vervollständigung in Ihren Containern zu erhalten, führen Sie einfach das Folgende aus:</p>
<div class="highlight"><pre><span></span>curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
</pre></div>
<div class="highlight"><pre><span></span><code>curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2349,8 +2349,8 @@
<p>Am 17. August haben wir die Möglichkeit, mit "jedem" oder "allen authentifizierten Benutzern" zu teilen, standardmäßig deaktiviert.</p>
<p>Diese Funktion kann wieder aktiviert werden, indem <code>ACL_ANYONE</code> auf <code>allow</code> in mailcow.conf gesetzt wird:</p>
<div class="highlight"><pre><span></span>ACL_ANYONE=allow
</pre></div>
<div class="highlight"><pre><span></span><code>ACL_ANYONE=allow
</code></pre></div>
<p>Wenden Sie die Änderungen an, indem Sie <code>docker-compose up -d</code> ausführen.</p>
<hr>

Datei anzeigen

@ -2454,17 +2454,17 @@
<h2 id="der-manuelle-weg">Der manuelle Weg<a class="headerlink" href="#der-manuelle-weg" title="Permanent link">&para;</a></h2>
<p>Dann wollen wir mal loslegen:</p>
<p>Löschen Sie die Mails eines Benutzers im Junk-Ordner, die <strong>gelesen</strong> und <strong>älter</strong> als 4 Stunden sind</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;Junk&#39; SEEN not SINCE 4h
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;Junk&#39; SEEN not SINCE 4h
</code></pre></div>
<p>Lösche <strong>alle</strong> Mails des Benutzers im Junk-Ordner, die <strong>älter</strong> als 7 Tage sind</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 7d
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 7d
</code></pre></div>
<p>Löscht <strong>alle</strong> Mails (aller Benutzer) in <strong>allen</strong> Ordnern, die <strong>älter</strong> als 52 Wochen sind (internes Datum der Mail, nicht das Datum, an dem sie auf dem System gespeichert wurde =&gt; <code>before</code> statt <code>savedbefore</code>). Nützlich zum Löschen sehr alter Mails in allen Benutzern und Ordnern (daher besonders nützlich für GDPR-Compliance).</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w
</code></pre></div>
<p>Löschen von Mails in einem benutzerdefinierten Ordner <strong>innerhalb</strong> des Posteingangs eines Benutzers, die <strong>nicht</strong> gekennzeichnet und <strong>älter</strong> als 2 Wochen sind</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;INBOX/custom-folder&#39; not FLAGGED not SINCE 2w
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;INBOX/custom-folder&#39; not FLAGGED not SINCE 2w
</code></pre></div>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>Für mögliche <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_date_specification">Zeitspannen</a> oder <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_search_keys">SearchQuery</a> schauen Sie bitte in <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery">man doveadm-search-query</a></p>
@ -2472,21 +2472,21 @@
<h2 id="job-scheduler">Job-Scheduler<a class="headerlink" href="#job-scheduler" title="Permanent link">&para;</a></h2>
<h3 id="uber-das-host-system-cron">über das Host-System cron<a class="headerlink" href="#uber-das-host-system-cron" title="Permanent link">&para;</a></h3>
<p>Wenn Sie eine solche Aufgabe automatisieren wollen, können Sie einen Cron-Job auf Ihrem Rechner erstellen, der ein Skript wie das folgende aufruft:</p>
<div class="highlight"><pre><span></span>#!/bin/bash
<div class="highlight"><pre><span></span><code>#!/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 &#39;Junk&#39; savedbefore 2w
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; SEEN not SINCE 12h
[...]
</pre></div>
</code></pre></div>
<p>Um einen Cronjob zu erstellen, können Sie <code>crontab -e</code> ausführen und etwas wie das Folgende einfügen, um ein Skript auszuführen:</p>
<div class="highlight"><pre><span></span># Jeden Tag um 04:00 Uhr morgens ausführen.
<div class="highlight"><pre><span></span><code># Jeden Tag um 04:00 Uhr morgens ausführen.
0 4 * * * /pfad/zu/ihr/expunge_mailboxes.sh
</pre></div>
</code></pre></div>
<h3 id="uber-docker-job-scheduler">über Docker Job Scheduler<a class="headerlink" href="#uber-docker-job-scheduler" title="Permanent link">&para;</a></h3>
<p>Um dies mit einem Docker-Job-Scheduler zu archivieren, verwenden Sie diese docker-compose.override.yml mit Ihrer Mailcow: </p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
@ -2504,12 +2504,12 @@ services:
- &quot;ofelia.job-exec.dovecot-expunge-trash.schedule=0 4 * * *&quot;
- &quot;ofelia.job-exec.dovecot-expunge-trash.command=doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w&quot;
- &quot;ofelia.job-exec.dovecot-expunge-trash.tty=false&quot;
</pre></div>
</code></pre></div>
<p>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 <a href="https://crontab.guru/">crontab guru</a> 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:</p>
<div class="highlight"><pre><span></span>common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Started - doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w,
<div class="highlight"><pre><span></span><code>common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Started - doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w,
common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Finished in &quot;285.032291ms&quot;, failed: false, skipped: false, error: none,
</pre></div>
</code></pre></div>
<p>Wenn der Vorgang fehlgeschlagen ist, wird dies angegeben und die Ausgabe von doveadm im Protokoll aufgeführt, um Ihnen die Fehlersuche zu erleichtern.</p>
<p>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 <a href="https://github.com/mcuadros/ofelia">mcuadros/ofelia</a>.</p>

Datei anzeigen

@ -2349,8 +2349,8 @@
<p>Erstellen Sie eine Datei <code>data/conf/dovecot/extra.conf</code> - falls nicht vorhanden - und fügen Sie Ihren zusätzlichen Inhalt hier ein.</p>
<p>Starten Sie <code>dovecot-mailcow</code> neu, um Ihre Änderungen zu übernehmen:</p>
<div class="highlight"><pre><span></span>docker-compose restart dovecot-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart dovecot-mailcow
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2443,19 +2443,19 @@
<p>Die Standard-Heap-Größe (1024 M) ist in mailcow.conf definiert.</p>
<p>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.</p>
<h3 id="fts-bezogene-dovecot-befehle">FTS-bezogene Dovecot-Befehle<a class="headerlink" href="#fts-bezogene-dovecot-befehle" title="Permanent link">&para;</a></h3>
<p><div class="highlight"><pre><span></span># Einzelbenutzer
<p><div class="highlight"><pre><span></span><code># Einzelbenutzer
docker-compose exec dovecot-mailcow doveadm fts rescan -u user@domain
# alle Benutzer
docker-compose exec dovecot-mailcow doveadm fts rescan -A
</pre></div>
</code></pre></div>
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."</p>
<p>Dies indiziert <strong>nicht</strong> eine Mailbox neu. Es repariert im Grunde einen gegebenen Index.</p>
<p>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:</p>
<div class="highlight"><pre><span></span># einzelner Benutzer
<div class="highlight"><pre><span></span><code># einzelner Benutzer
docker-compose exec dovecot-mailcow doveadm index -u user@domain &#39;*&#39;
# alle Benutzer, aber offensichtlich langsamer und gefährlicher
docker-compose exec dovecot-mailcow doveadm index -A &#39;*&#39;
</pre></div>
</code></pre></div>
<p>Dies <strong>wird</strong> einige Zeit in Anspruch nehmen, abhängig von Ihrer Maschine und Solr kann oom ausführen, überwachen Sie es!</p>
<p>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.</p>
<h3 id="loschen-der-mailbox-daten">Löschen der Mailbox-Daten<a class="headerlink" href="#loschen-der-mailbox-daten" title="Permanent link">&para;</a></h3>

Datei anzeigen

@ -2462,8 +2462,8 @@
<h3 id="konfiguration-andern">Konfiguration ändern<a class="headerlink" href="#konfiguration-andern" title="Permanent link">&para;</a></h3>
<p>Erstellen Sie eine neue Datei <code>data/conf/dovecot/extra.conf</code> (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:</p>
<div class="highlight"><pre><span></span>imap_idle_notify_interval = 5 mins
</pre></div>
<div class="highlight"><pre><span></span><code>imap_idle_notify_interval = 5 mins
</code></pre></div>
<p>29 Minuten ist der maximale Wert, den der <a href="https://tools.ietf.org/html/rfc2177">entsprechende RFC</a> erlaubt.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
@ -2471,13 +2471,13 @@ Fügen Sie die Einstellung ein, gefolgt von dem neuen Wert. Um zum Beispiel das
</div>
<h3 id="dovecot-neu-laden">Dovecot neu laden<a class="headerlink" href="#dovecot-neu-laden" title="Permanent link">&para;</a></h3>
<p>Nun laden Sie Dovecot neu:</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow dovecot reload
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow dovecot reload
</code></pre></div>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>Sie können den Wert dieser Einstellung überprüfen mit
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow dovecot -a | grep &quot;imap_idle_notify_interval&quot;
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow dovecot -a | grep &quot;imap_idle_notify_interval&quot;
</code></pre></div>
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.</p>
</div>

Datei anzeigen

@ -2350,7 +2350,7 @@
<p>Die Mails werden komprimiert (lz4) und verschlüsselt gespeichert. Das Schlüsselpaar ist in crypt-vol-1 zu finden.</p>
<p>Wenn Sie vorhandene maildir-Dateien entschlüsseln/verschlüsseln wollen, können Sie das folgende Skript auf eigene Gefahr verwenden:</p>
<p>Rufen Sie Dovecot auf, indem Sie <code>docker-compose exec dovecot-mailcow /bin/bash</code> im mailcow-dockerisierten Verzeichnis ausführen.</p>
<div class="highlight"><pre><span></span># Entschlüsseln Sie /var/vmail
<div class="highlight"><pre><span></span><code># Entschlüsseln Sie /var/vmail
find /var/vmail/ -type f -regextype egrep -regex &#39;.*S=.*W=.*&#39; | while read -r file; do
if [[ $(head -c7 &quot;$file&quot;) == &quot;CRYPTED&quot; ]]; then
doveadm fs get compress lz4:0:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
@ -2375,7 +2375,7 @@ doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=
chown 5000:5000 &quot;$file&quot;
fi
done
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2414,25 +2414,25 @@
<h2 id="doveadm-quota">doveadm quota<a class="headerlink" href="#doveadm-quota" title="Permanent link">&para;</a></h2>
<p>Die Befehle <code>quota get</code> und <code>quota recalc</code><sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> werden verwendet, um die Quota-Nutzung des aktuellen Benutzers anzuzeigen oder neu zu berechnen. Die angezeigten Werte sind in <em>Kilobytes</em>.</p>
<p>Um den aktuellen Quota-Status für einen Benutzer / eine Mailbox aufzulisten, tun Sie folgendes:</p>
<div class="highlight"><pre><span></span>doveadm quota get -u &#39;mailbox@example.org&#39;
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm quota get -u &#39;mailbox@example.org&#39;
</code></pre></div>
<p>Um den Quota-Speicherwert für <strong>alle</strong> Benutzer aufzulisten, tun Sie folgendes:</p>
<div class="highlight"><pre><span></span>doveadm quota get -A |grep &quot;STORAGE&quot;
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm quota get -A |grep &quot;STORAGE&quot;
</code></pre></div>
<p>Berechnen Sie die Quota-Nutzung eines einzelnen Benutzers neu:</p>
<div class="highlight"><pre><span></span>doveadm quota recalc -u &#39;mailbox@example.org&#39;
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm quota recalc -u &#39;mailbox@example.org&#39;
</code></pre></div>
<h2 id="doveadm-search">doveadm search<a class="headerlink" href="#doveadm-search" title="Permanent link">&para;</a></h2>
<p>Der Befehl <code>doveadm search</code><sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> 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.</p>
<p>Um die Anzahl der Nachrichten im <strong>.Trash</strong> Ordner eines Benutzers zu sehen:</p>
<div class="highlight"><pre><span></span>doveadm search -A mailbox &#39;Trash&#39; | awk &#39;{print $1}&#39; | sort | uniq -c
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm search -A mailbox &#39;Trash&#39; | awk &#39;{print $1}&#39; | sort | uniq -c
</code></pre></div>
<p>Alle Nachrichten im <strong>Postfach</strong> eines Benutzers anzeigen, die älter als 90 Tage sind:</p>
<div class="highlight"><pre><span></span>doveadm search -u &#39;mailbox@example.org&#39; mailbox &#39;INBOX&#39; savedbefore 90d
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm search -u &#39;mailbox@example.org&#39; mailbox &#39;INBOX&#39; savedbefore 90d
</code></pre></div>
<p>Zeige <strong>alle Nachrichten</strong> in <strong>beliebigen Ordnern</strong>, die <strong>älter</strong> sind als 30 Tage für <code>mailbox@example.org</code>:</p>
<div class="highlight"><pre><span></span>doveadm search -u &#39;mailbox@example.org&#39; mailbox &quot;*&quot; savedbefore 30d
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm search -u &#39;mailbox@example.org&#39; mailbox &quot;*&quot; savedbefore 30d
</code></pre></div>
<div class="footnote">
<hr />
<ol>

Datei anzeigen

@ -2398,7 +2398,7 @@
<p>Erstellen Sie einen neuen öffentlichen Namespace "Public" und eine Mailbox "Develcow" innerhalb dieses Namespaces:</p>
<p>Bearbeiten oder erstellen Sie <code>data/conf/dovecot/extra.conf</code>, fügen Sie hinzu:</p>
<div class="highlight"><pre><span></span>namespace {
<div class="highlight"><pre><span></span><code>namespace {
type = public
separator = /
prefix = Public/
@ -2408,18 +2408,18 @@
auto = subscribe
}
}
</pre></div>
</code></pre></div>
<p><code>:INDEXPVT=~/public</code> kann weggelassen werden, wenn die Flags, die pro Benutzer gesehen werden, nicht gewünscht sind.</p>
<p>Die neue Mailbox im öffentlichen Namensraum wird von den Benutzern automatisch abonniert.</p>
<p>Um allen authentifizierten Benutzern vollen Zugriff auf das neue Postfach (nicht auf den gesamten Namespace) zu gewähren, führen Sie aus:</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm acl set -A &quot;Public/Develcow&quot; &quot;authenticated&quot; lookup read write write-seen write-deleted insert post delete expunge create
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm acl set -A &quot;Public/Develcow&quot; &quot;authenticated&quot; lookup read write write-seen write-deleted insert post delete expunge create
</code></pre></div>
<p>Passen Sie den Befehl an Ihre Bedürfnisse an, wenn Sie detailliertere Rechte pro Benutzer vergeben möchten (verwenden Sie z.B. <code>-u user@domain</code> anstelle von <code>-A</code>).</p>
<h2 id="erlaube-authentifizierten-benutzern-den-zugriff-auf-den-gesamten-offentlichen-namespace">Erlaube authentifizierten Benutzern den Zugriff auf den gesamten öffentlichen Namespace<a class="headerlink" href="#erlaube-authentifizierten-benutzern-den-zugriff-auf-den-gesamten-offentlichen-namespace" title="Permanent link">&para;</a></h2>
<p>Um allen authentifizierten Benutzern vollen Zugriff auf den gesamten öffentlichen Namespace und seine Unterordner zu gewähren, erstellen Sie eine neue Datei <code>dovecot-acl</code> im Namespace-Stammverzeichnis:</p>
<p>Öffnen/bearbeiten/erstellen Sie <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl</code> (passen Sie den Pfad entsprechend an), um die globale ACL-Datei mit dem folgenden Inhalt zu erstellen:</p>
<div class="highlight"><pre><span></span>authenticated kxeilprwts
</pre></div>
<div class="highlight"><pre><span></span><code>authenticated kxeilprwts
</code></pre></div>
<p>kxeilprwts" ist gleichbedeutend mit "lookup read write write-seen write-deleted insert post delete expunge create".</p>
<p>Sie können <code>doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read</code> 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.</p>
<p>Siehe <a href="https://doc.dovecot.org/settings/plugin/acl/">Dovecot ACL</a> für weitere Informationen über ACL.</p>

Datei anzeigen

@ -2351,9 +2351,9 @@
<p><strong>Das wird empfohlen und sollte nicht geändert werden.</strong></p>
<p>Wenn der Benutzer trotzdem statisch sein soll, geben Sie bitte zwei Variablen in <code>mailcow.conf</code> an.</p>
<p><strong>Beide</strong> Parameter dürfen nicht leer sein!</p>
<div class="highlight"><pre><span></span>DOVECOT_MASTER_USER=mymasteruser
<div class="highlight"><pre><span></span><code>DOVECOT_MASTER_USER=mymasteruser
DOVECOT_MASTER_PASS=mysecretpass
</pre></div>
</code></pre></div>
<p>Führen Sie <code>docker-compose up -d</code> aus, um Ihre Änderungen zu übernehmen.</p>
<p>Der statische Master-Benutzername wird zu <code>DOVECOT_MASTER_USER@mailcow.local</code> erweitert.</p>
<p>Um sich als <code>test@example.org</code> anzumelden, würde dies <code>test@example.org*mymasteruser@mailcow.local</code> mit dem oben angegebenen Passwort entsprechen.</p>

Datei anzeigen

@ -2442,26 +2442,26 @@
<p>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).</p>
</div>
<p>Ein einfacher, schmutziger, aber stabiler Workaround ist es, mailcow zu stoppen (<code>docker-compose down</code>), <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data</code> zu entfernen und einen neuen Link zu Ihrem entfernten Dateisystem zu erstellen, zum Beispiel:</p>
<div class="highlight"><pre><span></span>mv /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data_backup
<div class="highlight"><pre><span></span><code>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
</pre></div>
</code></pre></div>
<p>Starten Sie anschließend mailcow.</p>
<hr />
<h2 id="der-alte-weg">Der "alte" Weg<a class="headerlink" href="#der-alte-weg" title="Permanent link">&para;</a></h2>
<p>Wenn man einen anderen Ordner für das vmail-Volume verwenden möchte, kann man eine <code>docker-compose.override.yml</code> Datei erstellen und den folgenden Inhalt hinzufügen:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
volumes:
vmail-vol-1:
driver_opts:
type: none
device: /data/mailcow/vmail
o: bind
</pre></div>
</code></pre></div>
<h3 id="verschieben-eines-bestehenden-vmail-ordners">Verschieben eines bestehenden vmail-Ordners:<a class="headerlink" href="#verschieben-eines-bestehenden-vmail-ordners" title="Permanent link">&para;</a></h3>
<ul>
<li>Finden Sie den aktuellen vmail-Ordner anhand seines "Mountpoint"-Attributs: <code>docker volume inspect mailcowdockerized_vmail-vol-1</code></li>
</ul>
<div class="highlight"><pre><span></span>[
<div class="highlight"><pre><span></span><code>[
{
&quot;CreatedAt&quot;: &quot;2019-06-16T22:08:34+02:00&quot;,
&quot;Driver&quot;: &quot;local&quot;,
@ -2476,7 +2476,7 @@ volumes:
&quot;Scope&quot;: &quot;local&quot;
}
]
</pre></div>
</code></pre></div>
<ul>
<li>Kopieren Sie den Inhalt des <code>Mountpoint</code>-Ordners an den neuen Speicherort (z.B. <code>/data/mailcow/vmail</code>) mit <code>cp -a</code>, <code>rsync -a</code> oder einem ähnlichen, nicht strikten Kopierbefehl</li>
<li>Stoppen Sie mailcow durch Ausführen von <code>docker-compose down</code> aus Ihrem mailcow-Stammverzeichnis (z.B. <code>/opt/mailcow-dockerized</code>)</li>

Datei anzeigen

@ -2444,9 +2444,9 @@
<h2 id="neue-website">Neue Website<a class="headerlink" href="#neue-website" title="Permanent link">&para;</a></h2>
<p>Um persistente (über Updates) Sites zu erstellen, die von mailcow: dockerized gehostet werden, muss eine neue Site-Konfiguration in <code>data/conf/nginx/</code> platziert werden:</p>
<p>Eine gute Vorlage, um damit zu beginnen:</p>
<div class="highlight"><pre><span></span>nano data/conf/nginx/my_custom_site.conf
</pre></div>
<div class="highlight"><pre><span></span>server {
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/my_custom_site.conf
</code></pre></div>
<div class="highlight"><pre><span></span><code>server {
ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
@ -2478,12 +2478,12 @@
return 301 https://$server_name$request_uri;
}
}
</pre></div>
</code></pre></div>
<h2 id="neue-website-mit-proxy-zu-einem-entfernten-location">Neue Website mit Proxy zu einem entfernten Location<a class="headerlink" href="#neue-website-mit-proxy-zu-einem-entfernten-location" title="Permanent link">&para;</a></h2>
<p>Ein weiteres Beispiel mit einer Reverse-Proxy-Konfiguration:</p>
<div class="highlight"><pre><span></span>nano data/conf/nginx/my_custom_site.conf
</pre></div>
<div class="highlight"><pre><span></span>server {
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/my_custom_site.conf
</code></pre></div>
<div class="highlight"><pre><span></span><code>server {
ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
@ -2519,18 +2519,18 @@
client_max_body_size 0;
}
}
</pre></div>
</code></pre></div>
<h2 id="konfig-erweiterung-in-mailcows-nginx">Konfig-Erweiterung in mailcows Nginx<a class="headerlink" href="#konfig-erweiterung-in-mailcows-nginx" title="Permanent link">&para;</a></h2>
<p>Der Dateiname, der für eine neue Site verwendet wird, ist nicht wichtig, solange der Dateiname eine .conf-Erweiterung trägt.</p>
<p>Es ist auch möglich, die Konfiguration der Standarddatei <code>site.conf</code> Datei zu erweitern:</p>
<div class="highlight"><pre><span></span>nano data/conf/nginx/site.my_content.custom
</pre></div>
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/site.my_content.custom
</code></pre></div>
<p>Dieser Dateiname muss keine ".conf"-Erweiterung haben, sondern folgt dem Muster <code>site.*.custom</code>, wobei <code>*</code> ein eigener Name ist.</p>
<p>Wenn PHP in eine benutzerdefinierte Site eingebunden werden soll, verwenden Sie bitte den PHP-FPM-Listener auf phpfpm:9002 oder erstellen Sie einen neuen Listener in <code>data/conf/phpfpm/php-fpm.d/pools.conf</code>.</p>
<p>Starten Sie Nginx neu (und PHP-FPM, falls ein neuer Listener erstellt wurde):</p>
<div class="highlight"><pre><span></span>docker-compose restart nginx-mailcow
<div class="highlight"><pre><span></span><code>docker-compose restart nginx-mailcow
docker-compose restart php-fpm-mailcow
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2350,7 +2350,7 @@
<p><strong>WICHTIG</strong>: Diese Anleitung gilt nur für Konfigurationen, bei denen SNI nicht aktiviert ist. Wenn SNI aktiviert ist, muss der Zertifikatspfad angepasst werden. Etwas wie <code>ssl_certificate,key /etc/ssl/mail/webmail.example.org/cert.pem,key.pem;</code> wird genügen. <strong>Aber</strong>: Das Zertifikat sollte <strong>zuerst</strong> bezogen werden und erst wenn das Zertifikat existiert, sollte eine Site Config erstellt werden. Nginx wird nicht starten, wenn es das Zertifikat und den Schlüssel nicht finden kann.</p>
<p>Um eine Subdomain <code>webmail.example.org</code> zu erstellen und sie auf SOGo umzuleiten, müssen Sie eine <strong>neue</strong> Nginx-Site erstellen. Achten Sie dabei auf "CHANGE_TO_MAILCOW_HOSTNAME"!</p>
<p><strong>nano data/conf/nginx/webmail.conf</strong></p>
<div class="highlight"><pre><span></span>server {
<div class="highlight"><pre><span></span><code>server {
ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem;
index index.php index.html;
@ -2369,12 +2369,12 @@
<span class="hll"> return 301 https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo;
</span> }
}
</pre></div>
</code></pre></div>
<p>Speichern Sie und starten Sie Nginx neu: <code>docker-compose restart nginx-mailcow</code>.</p>
<p>Öffnen Sie nun <code>mailcow.conf</code> und suchen Sie <code>ADDITIONAL_SAN</code>.
Fügen Sie <code>webmail.example.org</code> zu diesem Array hinzu, verwenden Sie keine Anführungszeichen!</p>
<div class="highlight"><pre><span></span>ADDITIONAL_SAN=webmail.example.org
</pre></div>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SAN=webmail.example.org
</code></pre></div>
<p>Führen Sie <code>docker-compose up -d</code> aus. Siehe "acme-mailcow" und "nginx-mailcow" Logs, wenn etwas fehlschlägt.</p>
<hr>

Datei anzeigen

@ -2349,8 +2349,8 @@
<p>Öffnen Sie <code>data/conf/postfix/extra.cf</code> und setzen Sie das <code>message_size_limit</code> entsprechend in Bytes. Siehe <code>main.cf</code> für den Standardwert.</p>
<p>Starten Sie Postfix neu:</p>
<div class="highlight"><pre><span></span>docker-compose restart postfix-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart postfix-mailcow
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2416,14 +2416,14 @@
<h2 id="veraltete-anleitung-nicht-fur-neuere-mailcows-verwenden">Veraltete Anleitung (NICHT FÜR NEUERE MAILCOWS VERWENDEN!)<a class="headerlink" href="#veraltete-anleitung-nicht-fur-neuere-mailcows-verwenden" title="Permanent link">&para;</a></h2>
<p>Diese Option ist keine Best-Practice und sollte nur verwendet werden, wenn es keine andere Möglichkeit gibt, das zu erreichen, was Sie erreichen wollen.</p>
<p>Erstellen Sie einfach eine Datei <code>data/conf/postfix/check_sasl_access</code> und tragen Sie den folgenden Inhalt ein. Dieser Benutzer muss in Ihrer Installation existieren und muss sich vor dem Versenden von Mails authentifizieren.
<div class="highlight"><pre><span></span>user-to-allow-everything@example.com OK
</pre></div></p>
<div class="highlight"><pre><span></span><code>user-to-allow-everything@example.com OK
</code></pre></div></p>
<p>Öffnen Sie <code>data/conf/postfix/main.cf</code> und suchen Sie <code>smtpd_sender_restrictions</code>. Fügen Sie <code>check_sasl_access hash:/opt/postfix/conf/check_sasl_access</code> wie folgt ein:
<div class="highlight"><pre><span></span>smtpd_sender_restrictions = check_sasl_access hash:/opt/postfix/conf/check_sasl_access reject_authenticated_sender_login_mismatch [...]
</pre></div></p>
<div class="highlight"><pre><span></span><code>smtpd_sender_restrictions = check_sasl_access hash:/opt/postfix/conf/check_sasl_access reject_authenticated_sender_login_mismatch [...]
</code></pre></div></p>
<p>Postmap auf check_sasl_access ausführen:</p>
<div class="highlight"><pre><span></span>docker-compose exec postfix-mailcow postmap /opt/postfix/conf/check_sasl_access
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec postfix-mailcow postmap /opt/postfix/conf/check_sasl_access
</code></pre></div>
<p>Starten Sie den Postfix-Container neu.</p>
<hr>

Datei anzeigen

@ -2351,8 +2351,8 @@
<p>Postfix wird sich einmal nach dem Start von postfix-mailcow über doppelte Werte beschweren, dies ist beabsichtigt.</p>
<p>Syslog-ng wurde so konfiguriert, dass es diese Warnungen ausblendet, während Postfix läuft, um die Log-Dateien nicht jedes Mal mit unnötigen Informationen zu spammen, wenn ein Dienst benutzt wird.</p>
<p>Starten Sie <code>postfix-mailcow</code> neu, um Ihre Änderungen zu übernehmen:</p>
<div class="highlight"><pre><span></span>docker-compose restart postfix-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart postfix-mailcow
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2348,13 +2348,13 @@
<h1>Statistik mit pflogsumm</h1>
<p>Um pflogsumm mit dem Standard-Logging-Treiber zu verwenden, müssen wir postfix-mailcow über docker logs abfragen und die Ausgabe zu pflogsumm leiten:</p>
<div class="highlight"><pre><span></span>docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | pflogsumm
</pre></div>
<div class="highlight"><pre><span></span><code>docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | pflogsumm
</code></pre></div>
<p>Die obige Log-Ausgabe ist auf die letzten 24 Stunden beschränkt.</p>
<p>Es ist auch möglich, einen täglichen pflogsumm-Bericht über cron zu erstellen. Erstellen Sie die Datei /etc/cron.d/pflogsumm mit dem folgenden Inhalt:</p>
<div class="highlight"><pre><span></span>SHELL=/bin/bash
<div class="highlight"><pre><span></span><code>SHELL=/bin/bash
59 23 * * * root docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | /usr/sbin/pflogsumm -d today | mail -s &quot;Postfix Report of $(date)&quot; postmaster@example.net
</pre></div>
</code></pre></div>
<p>Um zu funktionieren muss ein lokaler Postfix auf dem Server installiert werden, welcher an den Postfix der mailcow relayed.</p>
<p>Genauere Informationen lassen sich unter Sektion <a href="https://mailcow.github.io/mailcow-dockerized-docs/de/post_installation/firststeps-local_mta/">Post-Installationsaufgaben -&gt; Lokaler MTA auf Dockerhost</a> finden.</p>
<p>Basierend auf den Postfix-Logs der letzten 24 Stunden sendet dieses Beispiel dann jeden Tag um 23:59:00 Uhr einen pflogsumm-Bericht an <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#111;&#115;&#116;&#109;&#97;&#115;&#116;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#110;&#101;&#116;">&#112;&#111;&#115;&#116;&#109;&#97;&#115;&#116;&#101;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#110;&#101;&#116;</a>.</p>

Datei anzeigen

@ -2353,11 +2353,11 @@
<p><code>CIDR ACTION</code></p>
<p>Dabei steht CIDR für eine einzelne IP-Adresse oder einen IP-Bereich in CIDR-Notation und action entweder für "permit" oder "reject".</p>
<p>Beispiel:</p>
<div class="highlight"><pre><span></span># Regeln werden in der angegebenen Reihenfolge ausgewertet.
<div class="highlight"><pre><span></span><code># Regeln werden in der angegebenen Reihenfolge ausgewertet.
# Schwarze Liste 192.168.* außer 192.168.0.1.
192.168.0.1 permit
192.168.0.0/16 reject
</pre></div>
</code></pre></div>
<p>Die Datei wird spontan neu geladen, ein Neustart von Postfix ist nicht erforderlich.</p>
<hr>

Datei anzeigen

@ -2447,15 +2447,15 @@
<h3 id="ipv4-hostssubnetze">IPv4-Hosts/Subnetze<a class="headerlink" href="#ipv4-hostssubnetze" title="Permanent link">&para;</a></h3>
<p>Um das Subnetz <code>192.168.2.0/24</code> zu den vertrauenswürdigen Netzwerken hinzuzufügen, können Sie die folgende Konfiguration verwenden, abhängig von Ihren IPV4_NETWORK und IPV6_NETWORK Bereichen:</p>
<p>Bearbeiten Sie <code>data/conf/postfix/extra.cf</code>:</p>
<div class="highlight"><pre><span></span>mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [fe80::]/10 172.22.1.0/24 [fd4d:6169:6c63:6f77::]/64 192.168.2.0/24
</pre></div>
<div class="highlight"><pre><span></span><code>mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [fe80::]/10 172.22.1.0/24 [fd4d:6169:6c63:6f77::]/64 192.168.2.0/24
</code></pre></div>
<p>Führen Sie <code>docker-compose restart postfix-mailcow</code> aus, um Ihre neuen Einstellungen zu übernehmen.</p>
<h3 id="ipv6-hostssubnets">IPv6-Hosts/Subnets<a class="headerlink" href="#ipv6-hostssubnets" title="Permanent link">&para;</a></h3>
<p>Das Hinzufügen von IPv6-Hosts erfolgt auf die gleiche Weise wie bei IPv4, allerdings muss das Subnetz in eckige Klammern <code>[]</code> gesetzt und die Netzmaske angehängt werden.</p>
<p>Um das Subnetz 2001:db8::/32 zu den vertrauenswürdigen Netzwerken hinzuzufügen, können Sie die folgende Konfiguration verwenden, abhängig von Ihren IPV4_NETWORK- und IPV6_NETWORK-Bereichen:</p>
<p>Bearbeiten Sie <code>data/conf/postfix/extra.cf</code>:</p>
<div class="highlight"><pre><span></span>mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [fe80::]/10 172.22.1.0/24 [fd4d:6169:6c63:6f77::]/64 [2001:db8::]/32
</pre></div>
<div class="highlight"><pre><span></span><code>mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [fe80::]/10 172.22.1.0/24 [fd4d:6169:6c63:6f77::]/64 [2001:db8::]/32
</code></pre></div>
<p>Führen Sie <code>docker-compose restart postfix-mailcow</code> aus, um Ihre neuen Einstellungen zu übernehmen.</p>
<div class="admonition info">
<p class="admonition-title">Info</p>

Datei anzeigen

@ -2477,28 +2477,28 @@
<p>Redis wird als Key-Value-Speicher für die Einstellungen und Daten von rspamd und (einige von) mailcow verwendet. Wenn Sie mit Redis nicht vertraut sind, lesen Sie bitte die <a href="https://redis.io/topics/introduction">Einführung in Redis</a> und besuchen Sie gegebenenfalls diese <a href="http://try.redis.io/">wunderbare Anleitung</a>, um zu erfahren, wie man Redis benutzt.</p>
<h2 id="client">Client<a class="headerlink" href="#client" title="Permanent link">&para;</a></h2>
<p>Um sich mit dem redis cli zu verbinden, führen Sie aus:</p>
<div class="highlight"><pre><span></span>docker-compose exec redis-mailcow redis-cli
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec redis-mailcow redis-cli
</code></pre></div>
<h3 id="fehlersuche">Fehlersuche<a class="headerlink" href="#fehlersuche" title="Permanent link">&para;</a></h3>
<p>Hier sind einige nützliche Befehle für den redis-cli zur Fehlersuche:</p>
<h5 id="monitor">MONITOR<a class="headerlink" href="#monitor" title="Permanent link">&para;</a></h5>
<p>Überwacht alle vom Server empfangenen Anfragen in Echtzeit:</p>
<div class="highlight"><pre><span></span># docker-compose exec redis-mailcow redis-cli
<div class="highlight"><pre><span></span><code># docker-compose exec redis-mailcow redis-cli
127.0.0.1:6379&gt; überwachen
OK
1494077286.401963 [0 172.22.1.253:41228] &quot;SMEMBERS&quot; &quot;BAYES_SPAM_keys&quot;
1494077288.292970 [0 172.22.1.253:41229] &quot;SMEMBERS&quot; &quot;BAYES_SPAM_keys&quot;
[...]
</pre></div>
</code></pre></div>
<h5 id="schlussel-keys">SCHLÜSSEL (Keys)<a class="headerlink" href="#schlussel-keys" title="Permanent link">&para;</a></h5>
<p>Ermittelt alle Schlüssel, die dem Muster entsprechen:</p>
<div class="highlight"><pre><span></span>KEYS *
</pre></div>
<div class="highlight"><pre><span></span><code>KEYS *
</code></pre></div>
<h5 id="ping">PING<a class="headerlink" href="#ping" title="Permanent link">&para;</a></h5>
<p>Testen Sie eine Verbindung:</p>
<div class="highlight"><pre><span></span>127.0.0.1:6379&gt; PING
<div class="highlight"><pre><span></span><code>127.0.0.1:6379&gt; PING
PONG
</pre></div>
</code></pre></div>
<p>Wenn Sie mehr wissen wollen, hier ist ein <a href="https://www.cheatography.com/tasjaevan/cheat-sheets/redis/">Cheat-Sheet</a>.</p>
<hr>

Datei anzeigen

@ -2528,15 +2528,15 @@ Dies wird durch die Verwendung des Sieve-Plugins "sieve_imapsieve" und Parser-Sk
<p>Sie können auch die Web-UI von Rspamd verwenden, um Ham und/oder Spam zu lernen oder bestimmte Einstellungen von Rspamd anzupassen.</p>
<h3 id="spam-oder-ham-aus-bestehendem-verzeichnis-lernen">Spam oder Ham aus bestehendem Verzeichnis lernen<a class="headerlink" href="#spam-oder-ham-aus-bestehendem-verzeichnis-lernen" title="Permanent link">&para;</a></h3>
<p>Sie können einen Einzeiler verwenden, um Mails im Klartextformat (unkomprimiert) zu lernen:</p>
<div class="highlight"><pre><span></span><span class="c1"># Ham</span>
<span class="k">for</span> file in /my/folder/cur/*<span class="p">;</span> <span class="k">do</span> docker <span class="nb">exec</span> -i <span class="k">$(</span>docker-compose ps -q rspamd-mailcow<span class="k">)</span> rspamc learn_ham &lt; <span class="nv">$file</span><span class="p">;</span> <span class="k">done</span>
<div class="highlight"><pre><span></span><code><span class="c1"># Ham</span>
<span class="k">for</span> file <span class="k">in</span> /my/folder/cur/*<span class="p">;</span> <span class="k">do</span> docker <span class="nb">exec</span> -i <span class="k">$(</span>docker-compose ps -q rspamd-mailcow<span class="k">)</span> rspamc learn_ham &lt; <span class="nv">$file</span><span class="p">;</span> <span class="k">done</span>
<span class="c1"># Spam</span>
<span class="k">for</span> file in /my/folder/.Junk/cur/*<span class="p">;</span> <span class="k">do</span> docker <span class="nb">exec</span> -i <span class="k">$(</span>docker-compose ps -q rspamd-mailcow<span class="k">)</span> rspamc learn_spam &lt; <span class="nv">$file</span><span class="p">;</span> <span class="k">done</span>
</pre></div>
<span class="k">for</span> file <span class="k">in</span> /my/folder/.Junk/cur/*<span class="p">;</span> <span class="k">do</span> docker <span class="nb">exec</span> -i <span class="k">$(</span>docker-compose ps -q rspamd-mailcow<span class="k">)</span> rspamc learn_spam &lt; <span class="nv">$file</span><span class="p">;</span> <span class="k">done</span>
</code></pre></div>
<p>Erwägen Sie, einen lokalen Ordner als neues Volume an <code>rspamd-mailcow</code> in <code>docker-compose.yml</code> anzuhängen und die gegebenen Dateien innerhalb des Containers zu lernen. Dies kann als Workaround verwendet werden, um komprimierte Daten mit zcat zu parsen. Beispiel:</p>
<p>``bash
for file in /data/old_mail/.Junk/cur/*; do rspamc learn_spam &lt; zcat $file; done
<div class="highlight"><pre><span></span>### Gelernte Daten zurücksetzen (Bayes, Neural)
<div class="highlight"><pre><span></span><code>### Gelernte Daten zurücksetzen (Bayes, Neural)
Sie müssen die Schlüssel in Redis löschen, um die gelernten Daten zurückzusetzen, also erstellen Sie jetzt eine Kopie Ihrer Redis-Datenbank:
@ -2545,30 +2545,30 @@ Sie müssen die Schlüssel in Redis löschen, um die gelernten Daten zurückzuse
```bash
# Es ist besser, Redis zu stoppen, bevor Sie die Datei kopieren.
cp /var/lib/docker/volumes/mailcowdockerized_redis-vol-1/_data/dump.rdb /root/
</pre></div></p>
</code></pre></div></p>
<p><strong>Bayes-Daten zurücksetzen</strong></p>
<div class="highlight"><pre><span></span>docker-compose <span class="nb">exec</span> redis-mailcow sh -c <span class="s1">&#39;redis-cli --scan --pattern BAYES_* | xargs redis-cli del&#39;</span>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> redis-mailcow sh -c <span class="s1">&#39;redis-cli --scan --pattern BAYES_* | xargs redis-cli del&#39;</span>
docker-compose <span class="nb">exec</span> redis-mailcow sh -c <span class="s1">&#39;redis-cli --scan --pattern RS* | xargs redis-cli del&#39;</span>
</pre></div>
</code></pre></div>
<p><strong>Neurale Daten zurücksetzen</strong></p>
<div class="highlight"><pre><span></span>docker-compose <span class="nb">exec</span> redis-mailcow sh -c <span class="s1">&#39;redis-cli --scan --pattern rn_* | xargs redis-cli del&#39;</span>
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> redis-mailcow sh -c <span class="s1">&#39;redis-cli --scan --pattern rn_* | xargs redis-cli del&#39;</span>
</code></pre></div>
<p><strong>Fuzzy-Daten zurücksetzen</strong></p>
<div class="highlight"><pre><span></span><span class="c1"># Wir müssen zuerst das redis-cli eingeben:</span>
<div class="highlight"><pre><span></span><code><span class="c1"># Wir müssen zuerst das redis-cli eingeben:</span>
docker-compose <span class="nb">exec</span> redis-mailcow redis-cli
<span class="c1"># In redis-cli:</span>
<span class="m">127</span>.0.0.1:6379&gt; EVAL <span class="s2">&quot;for i, name in ipairs(redis.call(&#39;KEYS&#39;, ARGV[1])) do redis.call(&#39;DEL&#39;, name); end&quot;</span> <span class="m">0</span> fuzzy*
</pre></div>
</code></pre></div>
<p><strong>Info</strong></p>
<p>Wenn redis-cli sich beschwert über...</p>
<div class="highlight"><pre><span></span>(error) ERR wrong number of arguments for &#39;del&#39; command
</pre></div>
<div class="highlight"><pre><span></span><code>(error) ERR wrong number of arguments for &#39;del&#39; command
</code></pre></div>
<p>...das Schlüsselmuster nicht gefunden wurde und somit keine Daten zum Löschen vorhanden sind - ist es in Ordnung.</p>
<h2 id="cli-werkzeuge">CLI-Werkzeuge<a class="headerlink" href="#cli-werkzeuge" title="Permanent link">&para;</a></h2>
<p>``bash
docker-compose exec rspamd-mailcow rspamc --help
docker-compose exec rspamd-mailcow rspamadm --help
<div class="highlight"><pre><span></span>## Greylisting deaktivieren
<div class="highlight"><pre><span></span><code>## Greylisting deaktivieren
Nur Nachrichten mit einer höheren Punktzahl werden als Greylisting betrachtet (soft rejected). Es ist schlechte Praxis, Greylisting zu deaktivieren.
@ -2580,26 +2580,26 @@ Fügen Sie die Zeile hinzu:
```cpp
enabled = false;
</pre></div></p>
</code></pre></div></p>
<p>Speichern Sie die Datei und starten Sie "rspamd-mailcow" neu: <code>docker-compose restart rspamd-mailcow</code></p>
<h2 id="spamfilter-schwellenwerte-global">Spamfilter-Schwellenwerte (global)<a class="headerlink" href="#spamfilter-schwellenwerte-global" title="Permanent link">&para;</a></h2>
<p>Jeder Benutzer kann <a href="../../mailcow-UI/u_e-mailcow_ui-spamfilter/">seine Spam-Bewertung</a> individuell ändern. Um eine neue <strong>serverweite</strong> Grenze zu definieren, editieren Sie <code>data/conf/rspamd/local.d/actions.conf</code>:</p>
<div class="highlight"><pre><span></span><span class="n">reject</span> <span class="o">=</span> <span class="mi">15</span><span class="p">;</span>
<span class="n">add_header</span> <span class="o">=</span> <span class="mi">8</span><span class="p">;</span>
<span class="n">greylist</span> <span class="o">=</span> <span class="mi">7</span><span class="p">;</span>
</pre></div>
<div class="highlight"><pre><span></span><code><span class="n">reject</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">15</span><span class="p">;</span><span class="w"></span>
<span class="n">add_header</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span><span class="w"></span>
<span class="n">greylist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span><span class="w"></span>
</code></pre></div>
<p>Speichern Sie die Datei und starten Sie "rspamd-mailcow" neu: <code>docker-compose restart rspamd-mailcow</code></p>
<p>Bestehende Einstellungen der Benutzer werden nicht überschrieben!</p>
<p>Um benutzerdefinierte Schwellenwerte zurückzusetzen, führen Sie aus:</p>
<div class="highlight"><pre><span></span>source mailcow.conf
<div class="highlight"><pre><span></span><code>source mailcow.conf
docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e &quot;delete from filterconf where option = &#39;highspamlevel&#39; or option = &#39;lowspamlevel&#39;;&quot;
# oder:
# docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e &quot;delete from filterconf where option = &#39;highspamlevel&#39; or option = &#39;lowspamlevel&#39; and object = &#39;only-this-mailbox@example.org&#39;;&quot;
</pre></div>
</code></pre></div>
<h2 id="benutzerdefinierte-ablehnungsnachrichten">Benutzerdefinierte Ablehnungsnachrichten<a class="headerlink" href="#benutzerdefinierte-ablehnungsnachrichten" title="Permanent link">&para;</a></h2>
<p>Die Standard-Spam-Reject-Meldung kann durch Hinzufügen einer neuen Datei <code>data/conf/rspamd/override.d/worker-proxy.custom.inc</code> mit dem folgenden Inhalt geändert werden:</p>
<div class="highlight"><pre><span></span>reject_message = &quot;Meine eigene Ablehnungsnachricht&quot;;
</pre></div>
<div class="highlight"><pre><span></span><code>reject_message = &quot;Meine eigene Ablehnungsnachricht&quot;;
</code></pre></div>
<p>Speichern Sie die Datei und starten Sie Rspamd neu: <code>docker-compose restart rspamd-mailcow</code>.</p>
<p>Waehrend das oben genannte fuer abgelehnte Mails mit einem hohen Spam-Score funktioniert, ignorieren Prefilter-Aktionen diese Einstellung. Für diese Karten muss das Multimap-Modul in Rspamd angepasst werden:</p>
<ol>
@ -2610,7 +2610,7 @@ docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e &quot;del
<p>Fügen Sie Ihre eigene Nachricht als neue Zeile hinzu:</p>
</li>
</ol>
<div class="highlight"><pre><span></span>GLOBAL_RCPT_BL {
<div class="highlight"><pre><span></span><code>GLOBAL_RCPT_BL {
Typ = &quot;rcpt&quot;;
map = &quot;${LOCAL_CONFDIR}/custom/global_rcpt_blacklist.map&quot;;
regexp = true;
@ -2618,40 +2618,40 @@ docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e &quot;del
action = &quot;reject&quot;;
message = &quot;Der Versand von E-Mails an diesen Empfänger ist durch postmaster@your.domain verboten&quot;;
}
</pre></div>
</code></pre></div>
<ol>
<li>Speichern Sie die Datei und starten Sie Rspamd neu: <code>docker-compose restart rspamd-mailcow</code>.</li>
</ol>
<h2 id="verwerfen-statt-zuruckweisen">Verwerfen statt zurückweisen<a class="headerlink" href="#verwerfen-statt-zuruckweisen" title="Permanent link">&para;</a></h2>
<p>Wenn Sie eine Nachricht stillschweigend verwerfen wollen, erstellen oder bearbeiten Sie die Datei <code>data/conf/rspamd/override.d/worker-proxy.custom.inc</code> und fügen Sie den folgenden Inhalt hinzu:</p>
<div class="highlight"><pre><span></span>discard_on_reject = true;
</pre></div>
<div class="highlight"><pre><span></span><code>discard_on_reject = true;
</code></pre></div>
<p>Starten Sie Rspamd neu:</p>
<div class="highlight"><pre><span></span>docker-compose restart rspamd-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart rspamd-mailcow
</code></pre></div>
<h2 id="losche-alle-ratelimit-schlussel">Lösche alle Ratelimit-Schlüssel<a class="headerlink" href="#losche-alle-ratelimit-schlussel" title="Permanent link">&para;</a></h2>
<p>Wenn Sie das UI nicht verwenden wollen und stattdessen alle Schlüssel in der Redis-Datenbank löschen wollen, können Sie redis-cli für diese Aufgabe verwenden:</p>
<div class="highlight"><pre><span></span>docker-compose exec redis-mailcow sh
<div class="highlight"><pre><span></span><code>docker-compose exec redis-mailcow sh
# Unlink (verfügbar in Redis &gt;=4.) löscht im Hintergrund
redis-cli --scan --pattern RL* | xargs redis-cli unlink
</pre></div>
</code></pre></div>
<p>Starten Sie Rspamd neu:</p>
<div class="highlight"><pre><span></span>docker-compose <span class="nb">exec</span> redis-mailcow sh
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> redis-mailcow sh
</code></pre></div>
<h2 id="erneutes-senden-von-quarantane-benachrichtigungen-auslosen">Erneutes Senden von Quarantäne-Benachrichtigungen auslösen<a class="headerlink" href="#erneutes-senden-von-quarantane-benachrichtigungen-auslosen" title="Permanent link">&para;</a></h2>
<p>Sollte nur zur Fehlersuche verwendet werden!</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow bash
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow bash
mysql -umailcow -p$DBPASS mailcow -e &quot;update quarantine set notified = 0;&quot;
redis-cli -h redis DEL Q_LAST_NOTIFIED
quarantine_notify.py
</pre></div>
</code></pre></div>
<h2 id="speicherung-der-historie-erhohen">Speicherung der Historie erhöhen<a class="headerlink" href="#speicherung-der-historie-erhohen" title="Permanent link">&para;</a></h2>
<p>Standardmäßig speichert Rspamd 1000 Elemente in der Historie.</p>
<p>Die Historie wird komprimiert gespeichert.</p>
<p>Es wird empfohlen, hier keinen unverhältnismäßig hohen Wert zu verwenden, probieren Sie etwas in der Größenordnung von 5000 oder 10000 und sehen Sie, wie Ihr Server damit umgeht:</p>
<p>Bearbeiten Sie <code>data/conf/rspamd/local.d/history_redis.conf</code>:</p>
<div class="highlight"><pre><span></span>nrows = 1000; # Ändern Sie diesen Wert
</pre></div>
<div class="highlight"><pre><span></span><code>nrows = 1000; # Ändern Sie diesen Wert
</code></pre></div>
<p>Starten Sie anschließend Rspamd neu: <code>docker-compose restart rspamd-mailcow</code></p>
<hr>

Datei anzeigen

@ -2491,24 +2491,24 @@ Nachdem Sie <code>data/conf/sogo/custom-theme.js</code> modifiziert und Änderun
<li>öffnen Sie die Entwicklerkonsole des Browsers, normalerweise ist die Tastenkombination F12</li>
<li>nur wenn Sie Firefox benutzen: schreiben Sie mit der Hand in die Entwicklerkonsole <code>allow pasting</code> und drücken Sie Enter</li>
<li>fügen Sie den Java-Script-Schnipsel in die Entwicklungskonsole ein:
<div class="highlight"><pre><span></span>copy([].slice.call(document.styleSheets)
<div class="highlight"><pre><span></span><code>copy([].slice.call(document.styleSheets)
.map(e =&gt; e.ownerNode)
.filter(e =&gt; e.hasAttribute(&#39;md-theme-style&#39;))
.map(e =&gt; e.textInhalt)
.join(&#39;\n&#39;)
)
</pre></div></li>
</code></pre></div></li>
<li>Öffnen Sie den Texteditor und fügen Sie die Daten aus der Zwischenablage ein (Strg+V), Sie sollten ein minimiertes CSS erhalten, speichern Sie es</li>
<li>kopieren Sie die CSS-Datei auf den Mailcow-Server <code>data/conf/sogo/custom-theme.css</code></li>
<li>editiere <code>data/conf/sogo/sogo.conf</code> und setze <code>SOGoUIxDebugEnabled = NO;</code></li>
<li>Anhängen/Erstellen von <code>docker-compose.override.yml</code> mit:
<div class="highlight"><pre><span></span>Version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>Version: &#39;2.1&#39;
Dienste:
sogo-mailcow:
volumes:
- ./data/conf/sogo/custom-theme.css:/usr/lib/GNUstep/SOGo/WebServerResources/css/theme-default.css:z
</pre></div></li>
</code></pre></div></li>
<li>führen Sie <code>docker-compose up -d</code> aus</li>
<li>Ausführen von <code>docker-compose restart memcached-mailcow</code></li>
</ol>
@ -2516,7 +2516,7 @@ Dienste:
<ol>
<li>checken Sie <code>data/conf/sogo/custom-theme.js</code> aus, indem Sie <code>git fetch ; git checkout origin/master data/conf/sogo/custom-theme.js data/conf/sogo/custom-theme.js</code> ausführen</li>
<li>Suchen Sie in <code>data/conf/sogo/custom-theme.js</code>:
<div class="highlight"><pre><span></span>// Neue Paletten auf das Standardthema anwenden, einige Farbtöne neu zuordnen
<div class="highlight"><pre><span></span><code>// Neue Paletten auf das Standardthema anwenden, einige Farbtöne neu zuordnen
$mdThemingProvider.theme(&#39;default&#39;)
.primaryPalette(&#39;green-cow&#39;, {
&#39;default&#39;: &#39;400&#39;, // Hintergrundfarbe der oberen Symbolleisten
@ -2531,13 +2531,13 @@ Dienste:
hue-3&#39;: &#39;A700&#39;
})
.backgroundPalette(&#39;frost-grey&#39;);
</pre></div>
</code></pre></div>
und ersetzen Sie es durch:
<div class="highlight"><pre><span></span> $mdThemingProvider.theme(&#39;default&#39;);
</pre></div></li>
<div class="highlight"><pre><span></span><code> $mdThemingProvider.theme(&#39;default&#39;);
</code></pre></div></li>
<li>Entfernen Sie aus <code>docker-compose.override.yml</code> Volume Mount in <code>sogo-mailcow</code>:
<div class="highlight"><pre><span></span>- ./data/conf/sogo/custom-theme.css:/usr/lib/GNUstep/SOGo/WebServerResources/css/theme-default.css:z
</pre></div></li>
<div class="highlight"><pre><span></span><code>- ./data/conf/sogo/custom-theme.css:/usr/lib/GNUstep/SOGo/WebServerResources/css/theme-default.css:z
</code></pre></div></li>
<li>führen Sie <code>docker-compose up -d</code> aus</li>
<li>Starten Sie <code>docker-compose restart memcached-mailcow</code>.</li>
</ol>
@ -2553,16 +2553,16 @@ Nachdem Sie diese Datei ersetzt haben, müssen Sie SOGo und Memcached Container
<p>Domains sind normalerweise voneinander isoliert.</p>
<p>Sie können das ändern, indem Sie <code>data/conf/sogo/sogo.conf</code> modifizieren:</p>
<p>Suche...
<div class="highlight"><pre><span></span> // SOGoDomainsVisibility = (
<div class="highlight"><pre><span></span><code> // SOGoDomainsVisibility = (
// (domain1.tld, domain5.tld),
// (domain3.tld, domain2.tld)
// );
</pre></div>
</code></pre></div>
...und ersetzen Sie diese durch - zum Beispiel:</p>
<div class="highlight"><pre><span></span> SOGoDomainsVisibility = (
<div class="highlight"><pre><span></span><code> SOGoDomainsVisibility = (
(beispiel.org, beispiel.com, beispiel.net)
);
</pre></div>
</code></pre></div>
<p>SOGo neu starten: <code>docker-compose restart sogo-mailcow</code></p>
<h2 id="deaktivieren-sie-die-passwortanderung">Deaktivieren Sie die Passwortänderung<a class="headerlink" href="#deaktivieren-sie-die-passwortanderung" title="Permanent link">&para;</a></h2>
<p>Bearbeiten Sie <code>data/conf/sogo/sogo.conf</code> und <strong>ändern</strong> Sie <code>SOGoPasswordChangeEnabled</code> auf <code>NO</code>. Bitte fügen Sie keinen neuen Parameter hinzu.</p>

Datei anzeigen

@ -2416,18 +2416,18 @@
<strong>Wichtig</strong>: Nur DNSSEC-validierende DNS-Dienste werden funktionieren.</p>
<h2 id="methode-a-unbound">Methode A, Unbound<a class="headerlink" href="#methode-a-unbound" title="Permanent link">&para;</a></h2>
<p>Bearbeiten Sie <code>data/conf/unbound/unbound.conf</code> und fügen Sie die folgenden Parameter hinzu:</p>
<div class="highlight"><pre><span></span>forward-zone:
<div class="highlight"><pre><span></span><code>forward-zone:
name: &quot;.&quot;
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
</pre></div>
</code></pre></div>
<p>Unbound neu starten:</p>
<div class="highlight"><pre><span></span>docker-compose restart unbound-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart unbound-mailcow
</code></pre></div>
<h2 id="methode-b-uberschreiben-der-datei">Methode B, Überschreiben der Datei<a class="headerlink" href="#methode-b-uberschreiben-der-datei" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span>cd /opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized
cp helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml .
</pre></div>
</code></pre></div>
<p>Bearbeiten Sie <code>docker-compose.override.yml</code> und passen Sie die IP an.</p>
<p>Führen Sie <code>docker-compose down ; docker-compose up -d</code> aus.</p>

Datei anzeigen

@ -2649,7 +2649,7 @@
<p>Watchdog verwendet Standardwerte für alle in <code>docker-compose.yml</code> definierten Thresholde.</p>
<p>Die Standardwerte sind für die meisten Konfigurationen geeignet.
Beispiel:
<div class="highlight"><pre><span></span>- NGINX_THRESHOLD=${NGINX_THRESHOLD:-5}
<div class="highlight"><pre><span></span><code>- NGINX_THRESHOLD=${NGINX_THRESHOLD:-5}
- UNBOUND_THRESHOLD=${UNBOUND_THRESHOLD:-5}
- REDIS_THRESHOLD=${REDIS_THRESHOLD:-5}
- MYSQL_THRESHOLD=${MYSQL_THRESHOLD:-5}
@ -2667,7 +2667,7 @@ Beispiel:
- OLEFY_THRESHOLD=${OLEFY_THRESHOLD:-5}
- MAILQ_THRESHOLD=${MAILQ_THRESHOLD:-20}
- MAILQ_CRIT=${MAILQ_CRIT:-30}
</pre></div></p>
</code></pre></div></p>
<p>Um sie anzupassen, fügen Sie einfach die notwendigen Threshold Variablen (z.B. <code>MAILQ_THRESHOLD=10</code>) zu <code>mailcow.conf</code> hinzu und führen <code>docker-compose up -d</code> aus.</p>
<h3 id="threshold-beschreibungen">Threshold Beschreibungen<a class="headerlink" href="#threshold-beschreibungen" title="Permanent link">&para;</a></h3>
<h4 id="nginx_threshold">NGINX_THRESHOLD<a class="headerlink" href="#nginx_threshold" title="Permanent link">&para;</a></h4>

Datei anzeigen

@ -2403,7 +2403,7 @@
<p>1. Diese Nachricht in einen Unterordner "facebook" verschieben (wird in Kleinbuchstaben erstellt, falls nicht vorhanden)</p>
<p>2. Den Tag dem Betreff voranstellen: "[facebook] Betreff"</p>
<p>Bitte beachten Sie: Großgeschriebene Tags werden in Kleinbuchstaben umgewandelt, mit Ausnahme des ersten Buchstabens. Wenn Sie den Tag so lassen wollen, wie er ist, wenden Sie bitte den folgenden Diff an und starten Sie mailcow neu:
<div class="highlight"><pre><span></span>diff --git a/data/conf/dovecot/global_sieve_after b/data/conf/dovecot/global_sieve_after
<div class="highlight"><pre><span></span><code>diff --git a/data/conf/dovecot/global_sieve_after b/data/conf/dovecot/global_sieve_after
index e047136e..933c4137 100644
--- a/data/conf/dovecot/global_sieve_after
+++ b/data/conf/dovecot/global_sieve_after
@ -2416,7 +2416,7 @@ index e047136e..933c4137 100644
if mailboxexists &quot;INBOX/${1}&quot; {
fileinto &quot;INBOX/${1}&quot;;
} else {
</pre></div></p>
</code></pre></div></p>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2349,7 +2349,7 @@
<p><strong>Verwenden Sie die untenstehende Konfiguration nicht für Reverse-Proxy-Setups</strong>, bitte lesen Sie dazu unsere <a href="../../post_installation/firststeps-rp/">Reverse-Proxy-Anleitung</a>, die einen Redirect von HTTP zu HTTPS beinhaltet.</p>
<p>Öffne <code>mailcow.conf</code> und setze <code>HTTP_BIND=</code> - falls nicht bereits gesetzt.</p>
<p>Erstellen Sie eine neue Datei <code>data/conf/nginx/redirect.conf</code> und fügen Sie die folgende Serverkonfiguration in die Datei ein:</p>
<div class="highlight"><pre><span></span>server {
<div class="highlight"><pre><span></span><code>server {
root /web;
listen 80 default_server;
listen [::]:80 default_server;
@ -2363,13 +2363,13 @@
return 301 https://$host$uri$is_args$args;
}
}
</pre></div>
</code></pre></div>
<p>Falls Sie den Parameter HTTP_BIND geändert haben, erstellen Sie den Container neu:</p>
<div class="highlight"><pre><span></span>docker-compose up -d
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose up -d
</code></pre></div>
<p>Andernfalls starten Sie Nginx neu:</p>
<div class="highlight"><pre><span></span>docker-compose restart nginx-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart nginx-mailcow
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2350,7 +2350,7 @@
Denken Sie daran, dass <strong>ActiveSync NICHT mit einem Desktop-Client</strong> verwendet werden sollte.</p>
<p>Öffnen/erstellen Sie <code>data/web/inc/vars.local.inc.php</code> und fügen Sie Ihre Änderungen in das Konfigurationsfeld ein.</p>
<p>Die Änderungen werden mit "$autodiscover_config" in <code>data/web/inc/vars.inc.php</code> zusammengeführt):</p>
<div class="highlight"><pre><span></span>&lt;?php
<div class="highlight"><pre><span></span><code>&lt;?php
$autodiscover_config = array(
// General autodiscover service type: &quot;activesync&quot; or &quot;imap&quot;
// emClient uses autodiscover, but does not support ActiveSync. mailcow excludes emClient from ActiveSync.
@ -2388,7 +2388,7 @@ $autodiscover_config = array(
&#39;port&#39; =&gt; $https_port,
),
);
</pre></div>
</code></pre></div>
<p>Um immer IMAP und SMTP anstelle von EAS zu verwenden, setzen Sie <code>'autodiscoverType' =&gt; 'imap'</code>.</p>
<p>Deaktivieren Sie ActiveSync für Outlook-Desktop-Clients, indem Sie "useEASforOutlook" auf "no" setzen.</p>

Datei anzeigen

@ -2349,15 +2349,15 @@
<p>Unauthentifizierte Mails über SMTP an Port 25/tcp akzeptieren weiterhin &gt;= TLS 1.0 . Es ist besser, eine schwache Verschlüsselung zu akzeptieren als gar keine.</p>
<p><strong>Wie kann man schwache Protokolle wieder aktivieren?</strong></p>
<p>Bearbeiten Sie <code>data/conf/postfix/extra.cf</code>:</p>
<div class="highlight"><pre><span></span>submission_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
<div class="highlight"><pre><span></span><code>submission_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtps_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
</pre></div>
</code></pre></div>
<p>Bearbeiten Sie <code>data/conf/dovecot/extra.conf</code>:</p>
<div class="highlight"><pre><span></span>ssl_min_protocol = TLSv1
</pre></div>
<div class="highlight"><pre><span></span><code>ssl_min_protocol = TLSv1
</code></pre></div>
<p>Starten Sie die betroffenen Dienste neu:</p>
<div class="highlight"><pre><span></span>docker-compose restart postfix-mailcow dovecot-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart postfix-mailcow dovecot-mailcow
</code></pre></div>
<p>Tipp: Sie können TLS 1.2 in Windows 7 aktivieren.</p>
<hr>

Datei anzeigen

@ -2353,49 +2353,49 @@ zu erstellen und Ihre Änderungen am Dienst dort zu implementieren. Leider schei
<p>Um IPv6 im mailcow-Netzwerk zu deaktivieren, öffnen Sie docker-compose.yml mit Ihrem bevorzugten Texteditor und suchen Sie nach dem Netzwerk-Abschnitt (er befindet sich am Ende der Datei). </p>
<p><strong>1.</strong> Ändern Sie docker-compose.yml</p>
<p>Ändern Sie <code>enable_ipv6: true</code> in <code>enable_ipv6: false</code>:</p>
<div class="highlight"><pre><span></span>networks:
<div class="highlight"><pre><span></span><code>networks:
mailcow-network:
[...]
enable_ipv6: true # &lt;&lt;&lt; auf false setzen
[...]
</pre></div>
</code></pre></div>
<p><strong>2.</strong> ipv6nat-mailcow deaktivieren</p>
<p>Um den ipv6nat-mailcow Container ebenfalls zu deaktivieren, gehen Sie in Ihr mailcow Verzeichnis und erstellen Sie eine neue Datei namens "docker-compose.override.yml": </p>
<p><strong>HINWEIS:</strong> Wenn Sie bereits eine Override-Datei haben, erstellen Sie diese natürlich nicht neu, sondern fügen Sie die untenstehenden Zeilen entsprechend in Ihre bestehende Datei ein!</p>
<div class="highlight"><pre><span></span># cd /opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code># cd /opt/mailcow-dockerized
# touch docker-compose.override.yml
</pre></div>
</code></pre></div>
<p>Öffnen Sie die Datei in Ihrem bevorzugten Texteditor und tragen Sie folgendes ein:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
ipv6nat-mailcow:
image: bash:latest
restart: &quot;no&quot;
entrypoint: [&quot;echo&quot;, &quot;ipv6nat disabled in compose.override.yml&quot;]
</pre></div>
</code></pre></div>
<p>Damit diese Änderungen wirksam werden, müssen Sie den Stack vollständig stoppen und dann neu starten, damit Container und Netzwerke neu erstellt werden:</p>
<div class="highlight"><pre><span></span>docker-compose down
<div class="highlight"><pre><span></span><code>docker-compose down
docker-compose up -d
</pre></div>
</code></pre></div>
<p><strong>3.</strong> Deaktivieren Sie IPv6 in unbound-mailcow</p>
<p>Bearbeiten Sie <code>data/conf/unbound/unbound.conf</code> und setzen Sie <code>do-ip6</code> auf "no":</p>
<div class="highlight"><pre><span></span>Server:
<div class="highlight"><pre><span></span><code>Server:
[...]
do-ip6: no
[...]
</pre></div>
</code></pre></div>
<p>unbound neu starten:</p>
<div class="highlight"><pre><span></span>docker-compose restart unbound-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart unbound-mailcow
</code></pre></div>
<p><strong>4.</strong> Deaktivieren Sie IPv6 in postfix-mailcow</p>
<p>Erstellen Sie <code>data/conf/postfix/extra.cf</code> und setzen Sie <code>smtp_address_preference</code> auf <code>ipv4</code>:</p>
<div class="highlight"><pre><span></span>smtp_address_preference = ipv4
<div class="highlight"><pre><span></span><code>smtp_address_preference = ipv4
inet_protocols = ipv4
</pre></div>
</code></pre></div>
<p>Starten Sie Postfix neu:</p>
<div class="highlight"><pre><span></span>docker-compose restart postfix-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart postfix-mailcow
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2473,7 +2473,7 @@
</ol>
<h2 id="aktivieren-sie-dmarc-berichterstattung">Aktivieren Sie DMARC-Berichterstattung<a class="headerlink" href="#aktivieren-sie-dmarc-berichterstattung" title="Permanent link">&para;</a></h2>
<p>Erstellen Sie die Datei <code>data/conf/rspamd/local.d/dmarc.conf</code> und setzen Sie den folgenden Inhalt:</p>
<div class="highlight"><pre><span></span>reporting {
<div class="highlight"><pre><span></span><code>reporting {
enabled = true;
email = &#39;noreply-dmarc@example.com&#39;;
domain = &#39;example.com&#39;;
@ -2486,9 +2486,9 @@
max_entries = 2k;
keys_expire = 2d;
}
</pre></div>
</code></pre></div>
<p>Erstellen oder ändern Sie <code>docker-compose.override.yml</code> im mailcow-dockerized Basisverzeichnis:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
rspamd-mailcow:
@ -2501,16 +2501,16 @@ services:
ofelia-mailcow:
depends_on:
- rspamd-mailcow
</pre></div>
</code></pre></div>
<p>Starte <code>docker-compose up -d</code></p>
<h2 id="senden-sie-eine-kopie-der-berichte-an-sich-selbst">Senden Sie eine Kopie der Berichte an sich selbst<a class="headerlink" href="#senden-sie-eine-kopie-der-berichte-an-sich-selbst" title="Permanent link">&para;</a></h2>
<p>Um eine versteckte Kopie der von Rspamd erzeugten Berichte zu erhalten, können Sie eine <code>bcc_addrs</code> Liste im <code>reporting</code> Konfigurationsabschnitt von <code>data/conf/rspamd/local.d/dmarc.conf</code> setzen:</p>
<div class="highlight"><pre><span></span>reporting {
<div class="highlight"><pre><span></span><code>reporting {
enabled = true;
email = &#39;noreply-dmarc@example.com&#39;;
bcc_addrs = [&quot;noreply-dmarc@example.com&quot;, &quot;parsedmarc@example.com&quot;];
[...]
</pre></div>
</code></pre></div>
<p>Rspamd lädt Änderungen in Echtzeit, so dass Sie den Container zu diesem Zeitpunkt nicht neu starten müssen.</p>
<p>Dies kann nützlich sein, wenn Sie...</p>
<ul>
@ -2519,21 +2519,21 @@ services:
</ul>
<h2 id="fehlersuche">Fehlersuche<a class="headerlink" href="#fehlersuche" title="Permanent link">&para;</a></h2>
<p>Prüfen Sie, wann der Berichtsplan zuletzt ausgeführt wurde:</p>
<div class="highlight"><pre><span></span>docker-compose exec rspamd-mailcow date -r /var/lib/rspamd/dmarc_reports_last_log
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec rspamd-mailcow date -r /var/lib/rspamd/dmarc_reports_last_log
</code></pre></div>
<p>Sehen Sie sich die letzte Berichtsausgabe an:</p>
<div class="highlight"><pre><span></span>docker-compose exec rspamd-mailcow cat /var/lib/rspamd/dmarc_reports_last_log
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec rspamd-mailcow cat /var/lib/rspamd/dmarc_reports_last_log
</code></pre></div>
<p>Manuelles Auslösen eines DMARC-Berichts:</p>
<div class="highlight"><pre><span></span>docker-compose exec rspamd-mailcow rspamadm dmarc_report
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec rspamd-mailcow rspamadm dmarc_report
</code></pre></div>
<p>Bestätigen Sie, dass Rspamd Daten in Redis aufgezeichnet hat:
Ändern Sie <code>20220428</code> in ein anderes interessantes Datum zum schauen.</p>
<div class="highlight"><pre><span></span>docker-compose exec redis-mailcow redis-cli SMEMBERS &quot;dmarc_idx;20220428&quot;
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec redis-mailcow redis-cli SMEMBERS &quot;dmarc_idx;20220428&quot;
</code></pre></div>
<p>Nehmen Sie eine der Zeilen aus der Ausgabe, die Sie interessiert, und fordern Sie sie an, z. B.:</p>
<div class="highlight"><pre><span></span>docker-compose exec redis-mailcow redis-cli ZRANGE &quot;dmarc_rpt;microsoft.com;mailto:d@rua.agari.com;20220428&quot; 0 49
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec redis-mailcow redis-cli ZRANGE &quot;dmarc_rpt;microsoft.com;mailto:d@rua.agari.com;20220428&quot; 0 49
</code></pre></div>
<h2 id="andern-sie-die-haufigkeit-der-dmarc-berichte">Ändern Sie die Häufigkeit der DMARC-Berichte<a class="headerlink" href="#andern-sie-die-haufigkeit-der-dmarc-berichte" title="Permanent link">&para;</a></h2>
<p>Im obigen Beispiel werden die Berichte einmal alle 24 Stunden gesendet.</p>
<p>Der Olefia-Zeitplan hat die gleiche Implementierung wie <code>cron</code> in Go, die unterstützte Syntax ist beschrieben in <a href="https://pkg.go.dev/github.com/robfig/cron">cron Documentation</a></p>

Datei anzeigen

@ -2414,7 +2414,7 @@
</div>
<h2 id="ipv4-binding">IPv4-Binding<a class="headerlink" href="#ipv4-binding" title="Permanent link">&para;</a></h2>
<p>Um eine oder mehrere IPv4-Bind(ings) anzupassen, öffne <code>mailcow.conf</code> und editiere eine, mehrere oder alle Variablen nach deinen Bedürfnissen:</p>
<div class="highlight"><pre><span></span># Aus technischen Gründen unterscheiden sich die http-Bindungen ein wenig von anderen Service-Bindungen.
<div class="highlight"><pre><span></span><code># Aus technischen Gründen unterscheiden sich die http-Bindungen ein wenig von anderen Service-Bindungen.
# Sie werden die folgenden Variablen finden, getrennt durch eine Bindungsadresse und deren Port:
# Beispiel: HTTP_BIND=1.2.3.4
@ -2439,14 +2439,14 @@ SIEVE_PORT=4190
DOVEADM_PORT=127.0.0.1:19991
SQL_PORT=127.0.0.1:13306
SOLR_PORT=127.0.0.1:18983
</pre></div>
</code></pre></div>
<p>Um Ihre Änderungen zu übernehmen, führen Sie <code>docker-compose down</code> gefolgt von <code>docker-compose up -d</code> aus.</p>
<h2 id="ipv6-binding">IPv6-Binding<a class="headerlink" href="#ipv6-binding" title="Permanent link">&para;</a></h2>
<p>Das Ändern von IPv6-Bindings ist anders als bei IPv4. Auch dies hat einen technischen Hintergrund.</p>
<p>Eine <code>docker-compose.override.yml</code> Datei wird verwendet, anstatt die <code>docker-compose.yml</code> Datei direkt zu bearbeiten. Dies geschieht, um die Aktualisierbarkeit zu erhalten, da die Datei <code>docker-compose.yml</code> regelmäßig aktualisiert wird und Ihre Änderungen höchstwahrscheinlich überschrieben werden.</p>
<p>Bearbeiten Sie die Datei "docker-compose.override.yml" und erstellen Sie sie mit dem folgenden Inhalt. Ihr Inhalt wird mit der produktiven Datei "docker-compose.yml" zusammengeführt.</p>
<p>Es wird eine imaginäre IPv6 <strong>2a00:dead:beef::abc</strong> angegeben. Das erste Suffix <code>:PORT1</code> definiert den externen Port, während das zweite Suffix <code>:PORT2</code> zu dem entsprechenden Port innerhalb des Containers führt und nicht verändert werden darf.</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
dovecot-mailcow:
@ -2467,7 +2467,7 @@ services:
ports:
- &#39;2a00:dead:beef::abc:80:80&#39;
- &#39;2a00:dead:beef::abc:443:443&#39;
</pre></div>
</code></pre></div>
<p>Um Ihre Änderungen zu übernehmen, führen Sie <code>docker-compose down</code> gefolgt von <code>docker-compose up -d</code> aus.</p>
<hr>

Datei anzeigen

@ -2347,15 +2347,15 @@
<p>Die einfachste Möglichkeit wäre, den Listener an Port 25/tcp zu deaktivieren.</p>
<p><strong>Postfix</strong>-Benutzer deaktivieren den Listener, indem sie die folgende Zeile (beginnend mit <code>smtp</code> oder <code>25</code>) in <code>/etc/postfix/master.cf</code> auskommentieren:
<div class="highlight"><pre><span></span>#smtp inet n - - - - smtpd
</pre></div></p>
<div class="highlight"><pre><span></span><code>#smtp inet n - - - - smtpd
</code></pre></div></p>
<p>Außerdem, um über eine Dockerized mailcow weiterzuleiten, sollten Sie <code>172.22.1.1</code> als Relayhost hinzufügen und das Docker-Interface aus "inet_interfaces" entfernen:</p>
<div class="highlight"><pre><span></span>postconf -e &#39;relayhost = 172.22.1.1&#39;
<div class="highlight"><pre><span></span><code>postconf -e &#39;relayhost = 172.22.1.1&#39;
postconf -e &quot;mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128&quot;
postconf -e &quot;inet_interfaces = loopback-only&quot;
postconf -e &quot;relay_transport = relay&quot;
postconf -e &quot;default_transport = smtp&quot;
</pre></div>
</code></pre></div>
<p><strong>Jetzt ist es wichtig</strong>, dass Sie nicht denselben FQDN in <code>myhostname</code> haben, den Sie für Ihre mailcow verwenden. Prüfen Sie Ihre lokale (nicht-Docker) Postfix' main.cf auf <code>myhostname</code> und setzen Sie ihn auf etwas anderes, zum Beispiel <code>local.my.fqdn.tld</code>.</p>
<p>"172.22.1.1" ist das von mailcow erstellte Netzwerk-Gateway in Docker.
Das Relaying über diese Schnittstelle ist notwendig (anstatt - zum Beispiel - direkt über ${MAILCOW_HOSTNAME}), um über ein bekanntes internes Netzwerk weiterzuleiten.</p>

Datei anzeigen

@ -2466,16 +2466,16 @@ ohne die Fähigkeit zu verlieren, Logs von der UI zu lesen oder verdächtige Cli
<h4 id="uber-docker-composeoverrideyml">Über docker-compose.override.yml<a class="headerlink" href="#uber-docker-composeoverrideyml" title="Permanent link">&para;</a></h4>
<p>Hier ist die gute Nachricht: Da Docker einige großartige Logging-Treiber hat, können Sie mailcow: dockerized mit Leichtigkeit in Ihre bestehende Logging-Umgebung integrieren.</p>
<p>Erstellen Sie eine <code>docker-compose.override.yml</code> und fügen Sie zum Beispiel diesen Block hinzu, um das "gelf" Logging-Plugin für <code>postfix-mailcow</code> zu verwenden:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
postfix-mailcow: # oder ein anderer
logging:
driver: &quot;gelf&quot;
options:
gelf-address: &quot;udp://graylog:12201&quot;
</pre></div>
</code></pre></div>
<p>Ein weiteres Beispiel für <strong>Syslog</strong>:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
postfix-mailcow: # oder ein anderer
@ -2506,10 +2506,10 @@ local3.* /var/log/mailcow.logs
&amp; ~
# Danach rsyslog neu starten.
</pre></div>
</code></pre></div>
<h4 id="uber-daemonjson-global">Über daemon.json (global)<a class="headerlink" href="#uber-daemonjson-global" title="Permanent link">&para;</a></h4>
<p>Wenn Sie den Logging-Treiber <strong>global</strong> ändern wollen, editieren Sie die Konfigurationsdatei des Docker-Daemons <code>/etc/docker/daemon.json</code> und starten Sie den Docker-Dienst neu:</p>
<div class="highlight"><pre><span></span>{
<div class="highlight"><pre><span></span><code>{
...
&quot;log-driver&quot;: &quot;gelf&quot;,
&quot;log-opts&quot;: {
@ -2517,9 +2517,9 @@ local3.* /var/log/mailcow.logs
}
...
}
</pre></div>
</code></pre></div>
<p>Für Syslog:</p>
<div class="highlight"><pre><span></span>{
<div class="highlight"><pre><span></span><code>{
...
&quot;log-driver&quot;: &quot;syslog&quot;,
&quot;log-opts&quot;: {
@ -2527,7 +2527,7 @@ local3.* /var/log/mailcow.logs
}
...
}
</pre></div>
</code></pre></div>
<p>Starten Sie den Docker-Daemon neu und führen Sie <code>docker-compose down &amp;&amp; docker-compose up -d</code> aus, um die Container mit dem neuen Protokollierungstreiber neu zu erstellen.</p>
<hr>

Datei anzeigen

@ -2467,11 +2467,11 @@
<p>Sie müssen die Nginx-Seite, die mit mailcow: dockerized geliefert wird, nicht ändern.
mailcow: dockerized vertraut auf das Standard-Gateway IP 172.22.1.1 als Proxy.</p>
<p>1. Stellen Sie sicher, dass Sie HTTP_BIND und HTTPS_BIND in <code>mailcow.conf</code> auf eine lokale Adresse ändern und die Ports entsprechend einstellen, zum Beispiel:
<div class="highlight"><pre><span></span><span class="nv">HTTP_BIND</span><span class="o">=</span><span class="m">127</span>.0.0.1
<div class="highlight"><pre><span></span><code><span class="nv">HTTP_BIND</span><span class="o">=</span><span class="m">127</span>.0.0.1
<span class="nv">HTTP_PORT</span><span class="o">=</span><span class="m">8080</span>
<span class="nv">HTTPS_BIND</span><span class="o">=</span><span class="m">127</span>.0.0.1
<span class="nv">HTTPS_PORT</span><span class="o">=</span><span class="m">8443</span>
</pre></div></p>
</code></pre></div></p>
<p>Dadurch werden auch die Bindungen innerhalb des Nginx-Containers geändert! Dies ist wichtig, wenn Sie sich entscheiden, einen Proxy innerhalb von Docker zu verwenden.</p>
<p><strong>WICHTIG:</strong> Verwenden Sie nicht Port 8081, 9081 oder 65510!</p>
<p>Erzeugen Sie die betroffenen Container neu, indem Sie <code>docker-compose up -d</code> ausführen.</p>
@ -2500,56 +2500,56 @@ Auf vielen Servern wird logrotate den Webserver sowieso täglich neu laden.</p>
<p>2. Konfigurieren Sie Ihren lokalen Webserver als Reverse Proxy:</p>
<h3 id="apache-24">Apache 2.4<a class="headerlink" href="#apache-24" title="Permanent link">&para;</a></h3>
<p>Erforderliche Module:
<div class="highlight"><pre><span></span>a2enmod rewrite proxy proxy_http headers ssl
</pre></div></p>
<div class="highlight"><pre><span></span><code>a2enmod rewrite proxy proxy_http headers ssl
</code></pre></div></p>
<p>Let's Encrypt wird unserem Rewrite folgen, Zertifikatsanfragen in mailcow werden problemlos funktionieren.</p>
<p><strong>Die hervorgehobenen Zeilen müssen beachtet werden</strong>.</p>
<div class="highlight"><pre><span></span><span class="nt">&lt;VirtualHost</span> <span class="s">*:80</span><span class="nt">&gt;</span>
<span class="hll"> <span class="nb">ServerName</span> ZU MAILCOW HOSTNAMEN ÄNDERN
</span> <span class="nb">ServerAlias</span> autodiscover.*
<span class="nb">ServerAlias</span> autoconfig.*
<span class="nb">RewriteEngine</span> <span class="k">on</span>
<div class="highlight"><pre><span></span><code><span class="nt">&lt;VirtualHost</span><span class="w"> </span><span class="s">*:80</span><span class="nt">&gt;</span><span class="w"></span>
<span class="hll"><span class="w"> </span><span class="nb">ServerName</span><span class="w"> </span>ZU<span class="w"> </span>MAILCOW<span class="w"> </span>HOSTNAMEN<span class="w"> </span>ÄNDERN<span class="w"></span>
</span><span class="w"> </span><span class="nb">ServerAlias</span><span class="w"> </span>autodiscover.*<span class="w"></span>
<span class="w"> </span><span class="nb">ServerAlias</span><span class="w"> </span>autoconfig.*<span class="w"></span>
<span class="w"> </span><span class="nb">RewriteEngine</span><span class="w"> </span><span class="k">on</span><span class="w"></span>
<span class="nb">RewriteCond</span> %{HTTPS} <span class="k">off</span>
<span class="nb">RewriteRule</span> ^/?(.*) https://%{HTTP_HOST}/$1 [R=301,L]
<span class="w"> </span><span class="nb">RewriteCond</span><span class="w"> </span>%{HTTPS}<span class="w"> </span><span class="k">off</span><span class="w"></span>
<span class="w"> </span><span class="nb">RewriteRule</span><span class="w"> </span>^/?(.*)<span class="w"> </span>https://%{HTTP_HOST}/$1<span class="w"> </span>[R=301,L]<span class="w"></span>
<span class="hll"> <span class="nb">ProxyPass</span> / http://127.0.0.1:8080/
</span><span class="hll"> <span class="nb">ProxyPassReverse</span> / http://127.0.0.1:8080/
</span> <span class="nb">ProxyPreserveHost</span> <span class="k">On</span>
<span class="nb">ProxyAddHeaders</span> <span class="k">On</span>
<span class="nb">RequestHeader</span> set X-Forwarded-Proto <span class="s2">&quot;http&quot;</span>
<span class="nt">&lt;/VirtualHost&gt;</span>
<span class="nt">&lt;VirtualHost</span> <span class="s">*:443</span><span class="nt">&gt;</span>
<span class="hll"> <span class="nb">ServerName</span> ZU MAILCOW HOSTNAMEN ÄNDERN
</span> <span class="nb">ServerAlias</span> autodiscover.*
<span class="nb">ServerAlias</span> autoconfig.*
<span class="hll"><span class="w"> </span><span class="nb">ProxyPass</span><span class="w"> </span>/<span class="w"> </span>http://127.0.0.1:8080/<span class="w"></span>
</span><span class="hll"><span class="w"> </span><span class="nb">ProxyPassReverse</span><span class="w"> </span>/<span class="w"> </span>http://127.0.0.1:8080/<span class="w"></span>
</span><span class="w"> </span><span class="nb">ProxyPreserveHost</span><span class="w"> </span><span class="k">On</span><span class="w"></span>
<span class="w"> </span><span class="nb">ProxyAddHeaders</span><span class="w"> </span><span class="k">On</span><span class="w"></span>
<span class="w"> </span><span class="nb">RequestHeader</span><span class="w"> </span>set<span class="w"> </span>X-Forwarded-Proto<span class="w"> </span><span class="s2">&quot;http&quot;</span><span class="w"></span>
<span class="nt">&lt;/VirtualHost&gt;</span><span class="w"></span>
<span class="nt">&lt;VirtualHost</span><span class="w"> </span><span class="s">*:443</span><span class="nt">&gt;</span><span class="w"></span>
<span class="hll"><span class="w"> </span><span class="nb">ServerName</span><span class="w"> </span>ZU<span class="w"> </span>MAILCOW<span class="w"> </span>HOSTNAMEN<span class="w"> </span>ÄNDERN<span class="w"></span>
</span><span class="w"> </span><span class="nb">ServerAlias</span><span class="w"> </span>autodiscover.*<span class="w"></span>
<span class="w"> </span><span class="nb">ServerAlias</span><span class="w"> </span>autoconfig.*<span class="w"></span>
<span class="c"># You should proxy to a plain HTTP session to offload SSL processing</span>
<span class="hll"> <span class="nb">ProxyPass</span> <span class="sx">/Microsoft-Server-ActiveSync</span> http://127.0.0.1:8080/Microsoft-Server-ActiveSync connectiontimeout=4000
</span><span class="hll"> <span class="nb">ProxyPassReverse</span> <span class="sx">/Microsoft-Server-ActiveSync</span> http://127.0.0.1:8080/Microsoft-Server-ActiveSync
</span><span class="hll"> <span class="nb">ProxyPass</span> / http://127.0.0.1:8080/
</span><span class="hll"> <span class="nb">ProxyPassReverse</span> / http://127.0.0.1:8080/
</span> <span class="nb">ProxyPreserveHost</span> <span class="k">On</span>
<span class="nb">ProxyAddHeaders</span> <span class="k">On</span>
<span class="nb">RequestHeader</span> set X-Forwarded-Proto <span class="s2">&quot;https&quot;</span>
<span class="w"> </span><span class="c"># You should proxy to a plain HTTP session to offload SSL processing</span><span class="w"></span>
<span class="hll"><span class="w"> </span><span class="nb">ProxyPass</span><span class="w"> </span><span class="sx">/Microsoft-Server-ActiveSync</span><span class="w"> </span>http://127.0.0.1:8080/Microsoft-Server-ActiveSync<span class="w"> </span>connectiontimeout=4000<span class="w"></span>
</span><span class="hll"><span class="w"> </span><span class="nb">ProxyPassReverse</span><span class="w"> </span><span class="sx">/Microsoft-Server-ActiveSync</span><span class="w"> </span>http://127.0.0.1:8080/Microsoft-Server-ActiveSync<span class="w"></span>
</span><span class="hll"><span class="w"> </span><span class="nb">ProxyPass</span><span class="w"> </span>/<span class="w"> </span>http://127.0.0.1:8080/<span class="w"></span>
</span><span class="hll"><span class="w"> </span><span class="nb">ProxyPassReverse</span><span class="w"> </span>/<span class="w"> </span>http://127.0.0.1:8080/<span class="w"></span>
</span><span class="w"> </span><span class="nb">ProxyPreserveHost</span><span class="w"> </span><span class="k">On</span><span class="w"></span>
<span class="w"> </span><span class="nb">ProxyAddHeaders</span><span class="w"> </span><span class="k">On</span><span class="w"></span>
<span class="w"> </span><span class="nb">RequestHeader</span><span class="w"> </span>set<span class="w"> </span>X-Forwarded-Proto<span class="w"> </span><span class="s2">&quot;https&quot;</span><span class="w"></span>
<span class="hll"> <span class="nb">SSLCertificateFile</span> MAILCOW_ORDNER/data/assets/ssl/cert.pem
</span><span class="hll"> <span class="nb">SSLCertificateKeyFile</span> MAILCOW_ORDNER/data/assets/ssl/key.pem
<span class="hll"><span class="w"> </span><span class="nb">SSLCertificateFile</span><span class="w"> </span>MAILCOW_ORDNER/data/assets/ssl/cert.pem<span class="w"></span>
</span><span class="hll"><span class="w"> </span><span class="nb">SSLCertificateKeyFile</span><span class="w"> </span>MAILCOW_ORDNER/data/assets/ssl/key.pem<span class="w"></span>
</span>
<span class="c"># Wenn Sie einen HTTPS-Host als Proxy verwenden möchten:</span>
<span class="c">#SSLProxyEngine On</span>
<span class="w"> </span><span class="c"># Wenn Sie einen HTTPS-Host als Proxy verwenden möchten:</span><span class="w"></span>
<span class="w"> </span><span class="c">#SSLProxyEngine On</span><span class="w"></span>
<span class="c"># Wenn Sie einen Proxy für einen nicht vertrauenswürdigen HTTPS-Host einrichten wollen:</span>
<span class="c">#SSLProxyVerify none</span>
<span class="c">#SSLProxyCheckPeerCN off</span>
<span class="c">#SSLProxyCheckPeerName off</span>
<span class="c">#SSLProxyCheckPeerExpire off</span>
<span class="nt">&lt;/VirtualHost&gt;</span>
</pre></div>
<span class="w"> </span><span class="c"># Wenn Sie einen Proxy für einen nicht vertrauenswürdigen HTTPS-Host einrichten wollen:</span><span class="w"></span>
<span class="w"> </span><span class="c">#SSLProxyVerify none</span><span class="w"></span>
<span class="w"> </span><span class="c">#SSLProxyCheckPeerCN off</span><span class="w"></span>
<span class="w"> </span><span class="c">#SSLProxyCheckPeerName off</span><span class="w"></span>
<span class="w"> </span><span class="c">#SSLProxyCheckPeerExpire off</span><span class="w"></span>
<span class="nt">&lt;/VirtualHost&gt;</span><span class="w"></span>
</code></pre></div>
<h3 id="nginx">Nginx<a class="headerlink" href="#nginx" title="Permanent link">&para;</a></h3>
<p>Let's Encrypt folgt unserem Rewrite, Zertifikatsanfragen funktionieren problemlos.</p>
<p><strong>Achten Sie auf die hervorgehobenen Zeilen</strong>.</p>
<div class="highlight"><pre><span></span>server {
<div class="highlight"><pre><span></span><code>server {
listen 80 default_server;
listen [::]:80 default_server;
<span class="hll"> server_name ZU MAILCOW HOSTNAMEN ÄNDERN autodiscover.* autoconfig.*;
@ -2600,14 +2600,14 @@ server {
proxy_busy_buffers_size 512k;
}
}
</pre></div>
</code></pre></div>
<h3 id="haproxy-von-der-community-unterstutzt">HAProxy (von der Community unterstützt)<a class="headerlink" href="#haproxy-von-der-community-unterstutzt" title="Permanent link">&para;</a></h3>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Dies ist ein nicht unterstützter Community Beitrag. Sie können gerne Korrekturen bereitstellen.</p>
</div>
<p><strong>Wichtig/Fix erwünscht</strong>: Dieses Beispiel leitet nur HTTPS-Verkehr weiter und benutzt nicht den in mailcow eingebauten ACME-Client.</p>
<div class="highlight"><pre><span></span>frontend https-in
<div class="highlight"><pre><span></span><code>frontend https-in
bind :::443 v4v6 ssl crt mailcow.pem
default_backend mailcow
@ -2616,7 +2616,7 @@ backend mailcow
http-request set-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
server mailcow 127.0.0.1:8080 check
</pre></div>
</code></pre></div>
<h3 id="traefik-v2-von-der-community-unterstutzt">Traefik v2 (von der Community unterstützt)<a class="headerlink" href="#traefik-v2-von-der-community-unterstutzt" title="Permanent link">&para;</a></h3>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
@ -2627,50 +2627,50 @@ backend mailcow
<p>Zuallererst werden wir den acme-mailcow-Container deaktivieren, da wir die von traefik bereitgestellten Zertifikate verwenden werden.
Dazu müssen wir <code>SKIP_LETS_ENCRYPT=y</code> in unserer <code>mailcow.conf</code> setzen und <code>docker-compose up -d</code> ausführen, um die Änderungen zu übernehmen.</p>
<p>Dann erstellen wir eine <code>docker-compose.override.yml</code> Datei, um die Hauptdatei <code>docker-compose.yml</code> zu überschreiben, die sich im Mailcow-Stammverzeichnis befindet. </p>
<div class="highlight"><pre><span></span><span class="nt">version</span><span class="p">:</span> <span class="s">&#39;2.1&#39;</span>
<div class="highlight"><pre><span></span><code><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;2.1&#39;</span><span class="w"></span>
<span class="nt">services</span><span class="p">:</span>
<span class="nt">nginx-mailcow</span><span class="p">:</span>
<span class="nt">networks</span><span class="p">:</span>
<span class="c1"># Traefiks Netzwerk hinzufügen</span>
<span class="nt">web</span><span class="p">:</span>
<span class="nt">labels</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">traefik.enable=true</span>
<span class="c1"># Erstellt einen Router namens &quot;moo&quot; für den Container und richtet eine Regel ein, um den Container mit einer bestimmten Regel zu verknüpfen,</span>
<span class="c1"># in diesem Fall eine Host-Regel mit unserer MAILCOW_HOSTNAME-Variable.</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.rule=Host(`${MAILCOW_HOSTNAME}`)</span>
<span class="c1"># Aktiviert tls über den zuvor erstellten Router.</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.tls=true</span>
<span class="c1"># Gibt an, welche Art von Cert-Resolver wir verwenden werden, in diesem Fall le (Lets Encrypt).</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.tls.certresolver=le</span>
<span class="c1"># Erzeugt einen Dienst namens &quot;moo&quot; für den Container und gibt an, welchen internen Port des Containers</span>
<span class="c1"># Traefik die eingehenden Daten weiterleiten soll.</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">traefik.http.services.moo.loadbalancer.server.port=${HTTP_PORT}</span>
<span class="c1"># Gibt an, welchen Eingangspunkt (externer Port) traefik für diesen Container abhören soll.</span>
<span class="c1"># Websecure ist Port 443, siehe die Datei traefik.toml wie oben.</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.entrypoints=websecure</span>
<span class="c1"># Stellen Sie sicher, dass traefik das Web-Netzwerk verwendet, nicht das mailcowdockerized_mailcow-network</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">traefik.docker.network=web</span>
<span class="nt">services</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">nginx-mailcow</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Traefiks Netzwerk hinzufügen</span><span class="w"></span>
<span class="w"> </span><span class="nt">web</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.enable=true</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Erstellt einen Router namens &quot;moo&quot; für den Container und richtet eine Regel ein, um den Container mit einer bestimmten Regel zu verknüpfen,</span><span class="w"></span>
<span class="w"> </span><span class="c1"># in diesem Fall eine Host-Regel mit unserer MAILCOW_HOSTNAME-Variable.</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.rule=Host(`${MAILCOW_HOSTNAME}`)</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Aktiviert tls über den zuvor erstellten Router.</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.tls=true</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Gibt an, welche Art von Cert-Resolver wir verwenden werden, in diesem Fall le (Lets Encrypt).</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.tls.certresolver=le</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Erzeugt einen Dienst namens &quot;moo&quot; für den Container und gibt an, welchen internen Port des Containers</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Traefik die eingehenden Daten weiterleiten soll.</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.services.moo.loadbalancer.server.port=${HTTP_PORT}</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Gibt an, welchen Eingangspunkt (externer Port) traefik für diesen Container abhören soll.</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Websecure ist Port 443, siehe die Datei traefik.toml wie oben.</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.http.routers.moo.entrypoints=websecure</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Stellen Sie sicher, dass traefik das Web-Netzwerk verwendet, nicht das mailcowdockerized_mailcow-network</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik.docker.network=web</span><span class="w"></span>
<span class="nt">certdumper</span><span class="p">:</span>
<span class="nt">image</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">humenius/traefik-certs-dumper</span>
<span class="nt">container_name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">traefik_certdumper</span>
<span class="nt">network_mode</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">none</span>
<span class="nt">volumes</span><span class="p">:</span>
<span class="c1"># mounten Sie den Ordner, der Traefiks `acme.json&#39; Datei enthält</span>
<span class="c1"># in diesem Fall wird Traefik von seinem eigenen docker-compose in ../traefik gestartet</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">../traefik/data:/traefik:ro</span>
<span class="c1"># SSL-Ordner von mailcow einhängen</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">./data/assets/ssl/:/output:rw</span>
<span class="nt">restart</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">always</span>
<span class="nt">environment</span><span class="p">:</span>
<span class="c1"># Ändern Sie dies nur, wenn Sie eine andere Domain für Mailcows Web-Frontend verwenden als in der Standard-Konfiguration</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">DOMAIN=${MAILCOW_HOSTNAME}</span>
<span class="w"> </span><span class="nt">certdumper</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">humenius/traefik-certs-dumper</span><span class="w"></span>
<span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">traefik_certdumper</span><span class="w"></span>
<span class="w"> </span><span class="nt">network_mode</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">none</span><span class="w"></span>
<span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="c1"># mounten Sie den Ordner, der Traefiks `acme.json&#39; Datei enthält</span><span class="w"></span>
<span class="w"> </span><span class="c1"># in diesem Fall wird Traefik von seinem eigenen docker-compose in ../traefik gestartet</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">../traefik/data:/traefik:ro</span><span class="w"></span>
<span class="w"> </span><span class="c1"># SSL-Ordner von mailcow einhängen</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./data/assets/ssl/:/output:rw</span><span class="w"></span>
<span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">always</span><span class="w"></span>
<span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="c1"># Ändern Sie dies nur, wenn Sie eine andere Domain für Mailcows Web-Frontend verwenden als in der Standard-Konfiguration</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">DOMAIN=${MAILCOW_HOSTNAME}</span><span class="w"></span>
<span class="nt">networks</span><span class="p">:</span>
<span class="nt">web</span><span class="p">:</span>
<span class="nt">external</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">true</span>
</pre></div>
<span class="nt">networks</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">web</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"></span>
</code></pre></div>
<p>Starten Sie die neuen Container mit <code>docker-compose up -d</code>.</p>
<p>Da Traefik 2 ein acme v2 Format verwendet, um ALLE Lizenzen von allen Domains zu speichern, müssen wir einen Weg finden, die Zertifikate auszulagern. Zum Glück haben wir [diesen kleinen Container] (<a href="https://hub.docker.com/r/humenius/traefik-certs-dumper">https://hub.docker.com/r/humenius/traefik-certs-dumper</a>), der die Datei <code>acme.json</code> über ein Volume und eine Variable <code>DOMAIN=example. org</code>, und damit wird der Container die <code>cert.pem</code> und <code>key.pem</code> Dateien ausgeben, dafür lassen wir einfach den <code>traefik-certs-dumper</code> Container laufen, binden das <code>/traefik</code> Volume an den Ordner, in dem unsere <code>acme.json</code> gespeichert ist, binden das <code>/output</code> Volume an unseren mailcow <code>data/assets/ssl/</code> Ordner, und setzen die <code>DOMAIN=example.org</code> Variable auf die Domain, von der wir die Zertifikate ausgeben wollen. </p>
<p>Dieser Container überwacht die Datei <code>acme.json</code> auf Änderungen und generiert die Dateien <code>cert.pem</code> und <code>key.pem</code> direkt in <code>data/assets/ssl/</code>, wobei der Pfad mit dem <code>/output</code>-Pfad des Containers verbunden ist.</p>
@ -2680,18 +2680,18 @@ Dazu müssen wir <code>SKIP_LETS_ENCRYPT=y</code> in unserer <code>mailcow.conf<
<h3 id="optional-post-hook-skript-fur-nicht-mailcow-acme-clients">Optional: Post-Hook-Skript für nicht-mailcow ACME-Clients<a class="headerlink" href="#optional-post-hook-skript-fur-nicht-mailcow-acme-clients" title="Permanent link">&para;</a></h3>
<p>Die Verwendung eines lokalen Certbots (oder eines anderen ACME-Clients) erfordert den Neustart einiger Container, was Sie mit einem Post-Hook-Skript erledigen können.
Stellen Sie sicher, dass Sie die Pfade entsprechend ändern:
<div class="highlight"><pre><span></span>#!/bin/bash
<div class="highlight"><pre><span></span><code>#!/bin/bash
cp /etc/letsencrypt/live/my.domain.tld/fullchain.pem /opt/mailcow-dockerized/data/assets/ssl/cert.pem
cp /etc/letsencrypt/live/my.domain.tld/privkey.pem /opt/mailcow-dockerized/data/assets/ssl/key.pem
postfix_c=$(docker ps -qaf name=postfix-mailcow)
dovecot_c=$(docker ps -qaf name=dovecot-mailcow)
nginx_c=$(docker ps -qaf name=nginx-mailcow)
docker restart ${postfix_c} ${dovecot_c} ${nginx_c}
</pre></div></p>
</code></pre></div></p>
<h3 id="hinzufugen-weiterer-servernamen-fur-mailcow-ui">Hinzufügen weiterer Servernamen für mailcow UI<a class="headerlink" href="#hinzufugen-weiterer-servernamen-fur-mailcow-ui" title="Permanent link">&para;</a></h3>
<p>Wenn Sie vorhaben, einen Servernamen zu verwenden, der nicht <code>MAILCOW_HOSTNAME</code> in Ihrem Reverse-Proxy ist, stellen Sie sicher, dass Sie diesen Namen zuerst in mailcow.conf über <code>ADDITIONAL_SERVER_NAMES</code> einpflegen. Die Namen müssen durch Kommas getrennt werden und <strong>dürfen</strong> keine Leerzeichen enthalten. Wenn Sie diesen Schritt überspringen, kann es sein, dass mailcow auf Ihren Reverse-Proxy mit einer falschen Seite antwortet.</p>
<div class="highlight"><pre><span></span>ADDITIONAL_SERVER_NAMES=webmail.domain.tld,other.example.tld
</pre></div>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SERVER_NAMES=webmail.domain.tld,other.example.tld
</code></pre></div>
<p>Führen Sie <code>docker-compose up -d</code> zum Anwenden aus.</p>
<hr>

Datei anzeigen

@ -2348,12 +2348,12 @@
<p>SNAT wird verwendet, um die Quelladresse der von mailcow gesendeten Pakete zu ändern.
Es kann verwendet werden, um die ausgehende IP-Adresse auf Systemen mit mehreren IP-Adressen zu ändern.</p>
<p>Öffnen Sie <code>mailcow.conf</code>, setzen Sie einen oder beide der folgenden Parameter:</p>
<div class="highlight"><pre><span></span># Benutze diese IPv4 für ausgehende Verbindungen (SNAT)
<div class="highlight"><pre><span></span><code># Benutze diese IPv4 für ausgehende Verbindungen (SNAT)
SNAT_TO_SOURCE=1.2.3.4
# Benutze dieses IPv6 für ausgehende Verbindungen (SNAT)
SNAT6_TO_SOURCE=dead:beef
</pre></div>
</code></pre></div>
<p>Führen Sie <code>docker-compose up -d</code> aus.</p>
<p>Die Werte werden von netfilter-mailcow gelesen. netfilter-mailcow stellt sicher, dass die Post-Routing-Regeln auf Position 1 in der Netfilter-Tabelle stehen. Es löscht sie automatisch und legt sie neu an, wenn sie an einer anderen Position als 1 gefunden werden.</p>
<p>Überprüfen Sie die Ausgabe von <code>docker-compose logs --tail=200 netfilter-mailcow</code>, um sicherzustellen, dass die SNAT-Einstellungen angewendet wurden.</p>

Datei anzeigen

@ -2586,8 +2586,8 @@
<h3 id="zusatzliche-domain-namen">Zusätzliche Domain-Namen<a class="headerlink" href="#zusatzliche-domain-namen" title="Permanent link">&para;</a></h3>
<p>Bearbeiten Sie "mailcow.conf" und fügen Sie einen Parameter <code>ADDITIONAL_SAN</code> wie folgt hinzu:</p>
<p>Verwenden Sie keine Anführungszeichen (<code>"</code>) und keine Leerzeichen zwischen den Namen!</p>
<div class="highlight"><pre><span></span>ADDITIONAL_SAN=smtp.*,cert1.example.com,cert2.example.org,whatever.*
</pre></div>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SAN=smtp.*,cert1.example.com,cert2.example.org,whatever.*
</code></pre></div>
<p>Jeder Name wird anhand seiner IPv6-Adresse oder - wenn IPv6 in Ihrer Domäne nicht konfiguriert ist - anhand seiner IPv4-Adresse überprüft.</p>
<p>Ein Wildcard-Name wie <code>smtp.*</code> wird versuchen, ein smtp.DOMAIN_NAME SAN für jede zu mailcow hinzugefügte Domain zu erhalten.</p>
<p>Führen Sie <code>docker-compose up -d</code> aus, um betroffene Container automatisch neu zu erstellen.</p>
@ -2596,17 +2596,17 @@
<p>Die Verwendung anderer Namen als <code>MAILCOW_HOSTNAME</code> für den Zugriff auf das mailcow UI kann weitere Konfiguration erfordern.</p>
</div>
<p>Wenn Sie planen, einen anderen Servernamen als <code>MAILCOW_HOSTNAME</code> für den Zugriff auf die mailcow UI zu verwenden (z.B. durch Hinzufügen von <code>mail.*</code> zu <code>ADDITIONAL_SAN</code>), stellen Sie sicher, dass Sie diesen Namen in mailcow.conf über <code>ADDITIONAL_SERVER_NAMES</code> eintragen. Die Namen müssen durch Kommas getrennt sein und <strong>dürfen</strong> keine Leerzeichen enthalten. Wenn Sie diesen Schritt auslassen, kann mailcow mit einer falschen Seite antworten.</p>
<div class="highlight"><pre><span></span>ADDITIONAL_SERVER_NAMES=webmail.domain.tld,other.example.tld
</pre></div>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SERVER_NAMES=webmail.domain.tld,other.example.tld
</code></pre></div>
<p>Führen Sie <code>docker-compose up -d</code> aus, um es anzuwenden.</p>
<h3 id="erneuerung-erzwingen">Erneuerung erzwingen<a class="headerlink" href="#erneuerung-erzwingen" title="Permanent link">&para;</a></h3>
<p>Um eine Erneuerung zu erzwingen, müssen Sie eine Datei namens <code>force_renew</code> erstellen und den <code>acme-mailcow</code> Container neu starten:</p>
<div class="highlight"><pre><span></span>cd /opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized
touch data/assets/ssl/force_renew
docker-compose restart acme-mailcow
# Prüfen Sie nun die Logs auf eine Erneuerung
docker-compose logs --tail=200 -f acme-mailcow
</pre></div>
</code></pre></div>
<p>Die Datei wird automatisch gelöscht.</p>
<h3 id="validierungsfehler-und-wie-man-die-validierung-uberspringt">Validierungsfehler und wie man die Validierung überspringt<a class="headerlink" href="#validierungsfehler-und-wie-man-die-validierung-uberspringt" title="Permanent link">&para;</a></h3>
<p>Sie können die <strong>IP-Überprüfung</strong> überspringen, indem Sie <code>SKIP_IP_CHECK=y</code> in mailcow.conf setzen (keine Anführungszeichen). Seien Sie gewarnt, dass eine Fehlkonfiguration dazu führt, dass Sie von Let's Encrypt eingeschränkt werden! Dies ist vor allem für Multi-IP-Setups nützlich, bei denen der IP-Check die falsche Quell-IP-Adresse zurückgeben würde. Aufgrund der Verwendung von dynamischen IPs für acme-mailcow ist Source-NAT bei Neustarts nicht konsistent.</p>
@ -2653,35 +2653,35 @@ Sie sollten sicherstellen, dass diese Clients den <code>MAILCOW_HOSTNAME</code>
<p>Um Ihre eigenen Zertifikate zu verwenden, speichern Sie einfach das kombinierte Zertifikat (mit dem Zertifikat und der zwischengeschalteten CA/CA, falls vorhanden) unter <code>data/assets/ssl/cert.pem</code> und den entsprechenden Schlüssel unter <code>data/assets/ssl/key.pem</code>.</p>
<p><strong>WICHTIG:</strong> Verwenden Sie keine symbolischen Links! Stellen Sie sicher, dass Sie die Zertifikate kopieren und sie nicht mit <code>data/assets/ssl</code> verknüpfen.</p>
<p>Starten Sie die betroffenen Dienste anschließend neu:</p>
<div class="highlight"><pre><span></span>docker restart $(docker ps -qaf name=postfix-mailcow)
<div class="highlight"><pre><span></span><code>docker restart $(docker ps -qaf name=postfix-mailcow)
docker neu starten $(docker ps -qaf name=nginx-mailcow)
docker restart $(docker ps -qaf name=dovecot-mailcow)
</pre></div>
</code></pre></div>
<p>Siehe <a href="../firststeps-rp#optional-post-hook-skript-fur-nicht-mailcow-acme-clients">Post-Hook-Skript für Nicht-Mailcow-ACME-Clients</a> für ein vollständiges Beispielskript.</p>
<h3 id="test-gegen-das-acme-verzeichnis">Test gegen das ACME-Verzeichnis<a class="headerlink" href="#test-gegen-das-acme-verzeichnis" title="Permanent link">&para;</a></h3>
<p>Bearbeiten Sie <code>mailcow.conf</code> und fügen Sie <code>LE_STAGING=y</code> hinzu.</p>
<p>Führen Sie <code>docker-compose up -d</code> aus, um Ihre Änderungen zu aktivieren.</p>
<h3 id="benutzerdefinierte-verzeichnis-url">Benutzerdefinierte Verzeichnis-URL<a class="headerlink" href="#benutzerdefinierte-verzeichnis-url" title="Permanent link">&para;</a></h3>
<p>Editieren Sie <code>mailcow.conf</code> und fügen Sie die entsprechende Verzeichnis-URL in die neue Variable <code>DIRECTORY_URL</code> ein:</p>
<div class="highlight"><pre><span></span>DIRECTORY_URL=https://acme-custom-v9000.api.letsencrypt.org/directory
</pre></div>
<div class="highlight"><pre><span></span><code>DIRECTORY_URL=https://acme-custom-v9000.api.letsencrypt.org/directory
</code></pre></div>
<p>Sie können <code>LE_STAGING</code> nicht mit <code>DIRECTORY_URL</code> verwenden. Wenn beide gesetzt sind, wird nur <code>LE_STAGING</code> verwendet.</p>
<p>Führen Sie <code>docker-compose up -d</code> aus, um Ihre Änderungen zu aktivieren.</p>
<h3 id="uberprufen-sie-ihre-konfiguration">Überprüfen Sie Ihre Konfiguration<a class="headerlink" href="#uberprufen-sie-ihre-konfiguration" title="Permanent link">&para;</a></h3>
<p>Führen Sie <code>docker-compose logs acme-mailcow</code> aus, um herauszufinden, warum eine Validierung fehlschlägt.</p>
<p>Um zu überprüfen, ob nginx das richtige Zertifikat verwendet, benutzen Sie einfach einen Browser Ihrer Wahl und überprüfen Sie das angezeigte Zertifikat.</p>
<p>Um das von Postfix, Dovecot und Nginx verwendete Zertifikat zu überprüfen, verwenden wir <code>openssl</code>:</p>
<div class="highlight"><pre><span></span># Verbindung über SMTP (587)
<div class="highlight"><pre><span></span><code># Verbindung über SMTP (587)
echo &quot;Q&quot; | openssl s_client -starttls smtp -crlf -connect mx.mailcow.email:587
# Verbindung über IMAP (143)
echo &quot;Q&quot; | openssl s_client -starttls imap -showcerts -connect mx.mailcow.email:143
# Verbindung über HTTPS (443)
echo &quot;Q&quot; | openssl s_client -connect mx.mailcow.email:443
</pre></div>
</code></pre></div>
<p>Um die von openssl zurückgegebenen Verfallsdaten gegen MAILCOW_HOSTNAME zu validieren, können Sie unser Hilfsskript verwenden:</p>
<div class="highlight"><pre><span></span>cd /opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized
bash helper-scripts/expiry-dates.sh
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2548,28 +2548,28 @@
<p>Stellen Sie sicher, dass der PTR-Eintrag Ihrer IP-Adresse mit dem FQDN Ihres mailcow-Hosts übereinstimmt: <code>${MAILCOW_HOSTNAME}</code> <sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>. Dieser Eintrag wird normalerweise bei dem Provider gesetzt, von dem Sie die IP-Adresse (Server) gemietet haben.</p>
<h2 id="die-minimale-dns-konfiguration">Die minimale DNS-Konfiguration<a class="headerlink" href="#die-minimale-dns-konfiguration" title="Permanent link">&para;</a></h2>
<p>Dieses Beispiel zeigt Ihnen eine Reihe von Einträgen für eine von mailcow verwaltete Domain. Jede Domain, die zu mailcow hinzugefügt wird, benötigt mindestens diesen Satz an Einträgen, um korrekt zu funktionieren.</p>
<div class="highlight"><pre><span></span># Name Typ Wert
<div class="highlight"><pre><span></span><code># Name Typ Wert
mail IN A 1.2.3.4
autodiscover IN CNAME mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
autoconfig IN CNAME mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
@ IN MX 10 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
</pre></div>
</code></pre></div>
<h2 id="dkim-spf-und-dmarc">DKIM, SPF und DMARC<a class="headerlink" href="#dkim-spf-und-dmarc" title="Permanent link">&para;</a></h2>
<p>Im folgenden Beispiel für eine DNS-Zonendatei wird ein einfacher <strong>SPF</strong> TXT-Eintrag verwendet, um nur DIESEM Server (dem MX) zu erlauben, E-Mails für Ihre Domäne zu senden. Jeder andere Server ist nicht zugelassen, kann es aber tun ("<code>~all</code>"). Weitere Informationen finden Sie im <a href="http://www.open-spf.org/">SPF-Projekt</a>.</p>
<div class="highlight"><pre><span></span># Name Typ Wert
<div class="highlight"><pre><span></span><code># Name Typ Wert
@ IN TXT &quot;v=spf1 mx a -all&quot;
</pre></div>
</code></pre></div>
<p>Es wird dringend empfohlen, einen <strong>DKIM</strong> TXT-Eintrag in Ihrer mailcow UI zu erstellen und den entsprechenden TXT-Eintrag in Ihren DNS-Einträgen zu setzen. Bitte lesen Sie <a href="http://www.opendkim.org">OpenDKIM</a> für weitere Informationen.</p>
<div class="highlight"><pre><span></span># Name Typ Wert
<div class="highlight"><pre><span></span><code># Name Typ Wert
dkim._domainkey IN TXT &quot;v=DKIM1; k=rsa; t=s; s=email; p=...&quot;
</pre></div>
</code></pre></div>
<p>Der letzte Schritt, um sich selbst und andere zu schützen, ist die Implementierung eines <strong>DMARC</strong> TXT-Datensatzes, zum Beispiel mit Hilfe des <a href="http://www.kitterman.com/dmarc/assistant.html">DMARC-Assistenten</a> (<a href="https://dmarcian.com/dmarc-inspector/google.com">check</a>).</p>
<div class="highlight"><pre><span></span># Name Typ Wert
<div class="highlight"><pre><span></span><code># Name Typ Wert
_dmarc IN TXT &quot;v=DMARC1; p=reject; rua=mailto:mailauth-reports@example.org&quot;
</pre></div>
</code></pre></div>
<h2 id="die-erweiterte-dns-konfiguration">Die erweiterte DNS-Konfiguration<a class="headerlink" href="#die-erweiterte-dns-konfiguration" title="Permanent link">&para;</a></h2>
<p><strong>SRV</strong>-Einträge geben den/die Server für ein bestimmtes Protokoll in Ihrer Domäne an. Wenn Sie einen Dienst explizit als nicht bereitgestellt ankündigen wollen, geben Sie "." als Zieladresse an (statt "mail.example.org."). Bitte beachten Sie <a href="https://tools.ietf.org/html/rfc2782">RFC 2782</a>.</p>
<div class="highlight"><pre><span></span># Name Typ Priorität Gewicht Port Wert
<div class="highlight"><pre><span></span><code># Name Typ Priorität Gewicht Port Wert
_autodiscover._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_caldavs._tcp IN SRV 0 1 443 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_caldavs._tcp IN TXT &quot;path=/SOGo/dav/&quot;
@ -2582,7 +2582,7 @@ _pop3s._tcp IN SRV 0 1 995 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_sieve._tcp IN SRV 0 1 4190 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_smtps._tcp IN SRV 0 1 465 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
_submission._tcp IN SRV 0 1 587 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
</pre></div>
</code></pre></div>
<h2 id="testen">Testen<a class="headerlink" href="#testen" title="Permanent link">&para;</a></h2>
<p>Hier finden Sie einige Tools, mit denen Sie Ihre DNS-Konfiguration überprüfen können:</p>
<ul>
@ -2613,7 +2613,7 @@ _submission._tcp IN SRV 0 1 587 mail.example.org. (Ihr ${MAILCOW_HOSTNAME})
<p>Diese Dienste stellen Ihnen möglicherweise einen TXT-Eintrag zur Verfügung, den Sie in Ihre DNS-Einträge einfügen müssen, so wie es der Anbieter vorschreibt. Bitte stellen Sie sicher, dass Sie die Dokumentation des Anbieters des von Ihnen gewählten Dienstes lesen, da dieser Prozess variieren kann.</p>
<h3 id="e-mail-test-fur-spf-dkim-und-dmarc">E-Mail-Test für SPF, DKIM und DMARC:<a class="headerlink" href="#e-mail-test-fur-spf-dkim-und-dmarc" title="Permanent link">&para;</a></h3>
<p>Um eine rudimentäre E-Mail-Authentifizierungsprüfung durchzuführen, senden Sie eine E-Mail an <code>check-auth at verifier.port25.com</code> und warten Sie auf eine Antwort. Sie werden einen Bericht ähnlich dem folgenden finden:</p>
<div class="highlight"><pre><span></span>==========================================================
<div class="highlight"><pre><span></span><code>==========================================================
Zusammenfassung der Ergebnisse
==========================================================
SPF-Prüfung: bestanden
@ -2626,7 +2626,7 @@ SpamAssassin-Prüfung: ham
Einzelheiten:
==========================================================
....
</pre></div>
</code></pre></div>
<p>Der vollständige Bericht enthält weitere technische Details.</p>
<h3 id="fully-qualified-domain-name-fqdn">Fully Qualified Domain Name (FQDN)<a class="headerlink" href="#fully-qualified-domain-name-fqdn" title="Permanent link">&para;</a></h3>
<div class="footnote">

Datei anzeigen

@ -2616,10 +2616,10 @@ Diese kommt mit einem Webserver, Webmailer, ActiveSync (MS), Antivirus, Antispam
<p><strong>Andere (nicht genannte Betriebssysteme) können auch funktionieren, sind jedoch nicht offiziell getestet worden.</strong></p>
<h2 id="firewall-ports">Firewall &amp; Ports<a class="headerlink" href="#firewall-ports" title="Permanent link">&para;</a></h2>
<p>Bitte überprüfen Sie, ob alle Standard-Ports von mailcow offen sind und nicht von anderen Anwendungen genutzt werden:</p>
<div class="highlight"><pre><span></span>ss -tlpn | grep -E -w &#39;25|80|110|143|443|465|587|993|995|4190&#39;
<div class="highlight"><pre><span></span><code>ss -tlpn | grep -E -w &#39;25|80|110|143|443|465|587|993|995|4190&#39;
# oder:
netstat -tulpn | grep -E -w &#39;25|80|110|143|443|465|587|993|995|4190&#39;
</pre></div>
</code></pre></div>
<div class="admonition danger">
<p class="admonition-title">Vorsicht</p>
<p>Es gibt einige Probleme mit dem Betrieb von mailcow auf einem Firewalld/ufw aktivierten System. <br>
@ -2715,34 +2715,34 @@ Verwenden Sie stattdessen die FORWARD-Kette.</p>
<p>Port 53 ist in diesem Fall für die Firewall-Konfiguration unwichtig. Laut Dokumentation verwendet unbound den Portbereich 1024-65535 für ausgehende Anfragen.
Da es sich bei der Hetzner Robot Firewall um eine statische Firewall handelt (jedes eingehende Paket wird isoliert geprüft) - müssen die folgenden Regeln angewendet werden:</p>
<p><strong>Für TCP</strong>
<div class="highlight"><pre><span></span>SRC-IP: ---
<div class="highlight"><pre><span></span><code>SRC-IP: ---
DST-IP: ---
SRC-Port: ---
DST-Port: 1024-65535
Protokoll: tcp
TCP-Flags: ack
Aktion: Akzeptieren
</pre></div></p>
</code></pre></div></p>
<p><strong>Für UDP</strong>
<div class="highlight"><pre><span></span>SRC-IP: ---
<div class="highlight"><pre><span></span><code>SRC-IP: ---
DST-IP: ---
SRC-Port: ---
DST-Port: 1024-65535
Protokoll: udp
Aktion: Akzeptieren
</pre></div></p>
</code></pre></div></p>
<p>Wenn man einen restriktiveren Portbereich anwenden will, muss man zuerst die Konfiguration von unbound ändern (nach der Installation):</p>
<p>{mailcow-dockerized}/data/conf/unbound/unbound.conf:
<div class="highlight"><pre><span></span>ausgehender-Port-vermeiden: 0-32767
</pre></div></p>
<div class="highlight"><pre><span></span><code>ausgehender-Port-vermeiden: 0-32767
</code></pre></div></p>
<p>Nun können die Firewall-Regeln wie folgt angepasst werden:</p>
<div class="highlight"><pre><span></span>[...]
<div class="highlight"><pre><span></span><code>[...]
DST Port: 32768-65535
[...]
</pre></div>
</code></pre></div>
<h2 id="datum-und-uhrzeit">Datum und Uhrzeit<a class="headerlink" href="#datum-und-uhrzeit" title="Permanent link">&para;</a></h2>
<p>Um sicherzustellen, dass Sie das richtige Datum und die richtige Zeit auf Ihrem System eingestellt haben, überprüfen Sie bitte die Ausgabe von <code>timedatectl status</code>:</p>
<div class="highlight"><pre><span></span>$ timedatectl status
<div class="highlight"><pre><span></span><code>$ timedatectl status
Lokale Zeit: Sat 2017-05-06 02:12:33 CEST
Weltzeit: Sa 2017-05-06 00:12:33 UTC
RTC-Zeit: Sa 2017-05-06 00:12:32
@ -2757,22 +2757,22 @@ NTP synchronisiert: ja
Nächste Sommerzeitänderung: Die Sommerzeit endet (die Uhr springt eine Stunde rückwärts) am
Sun 2017-10-29 02:59:59 MESZ
Sun 2017-10-29 02:00:00 MEZ
</pre></div>
</code></pre></div>
<p>Die Zeilen <code>NTP aktiviert: ja</code> und <code>NTP synchronisiert: ja</code> zeigen an, ob Sie NTP aktiviert haben und ob es synchronisiert ist.</p>
<p>Um NTP zu aktivieren, müssen Sie den Befehl <code>timedatectl set-ntp true</code> ausführen. Sie müssen auch Ihre <code>/etc/systemd/timesyncd.conf</code> bearbeiten:</p>
<div class="highlight"><pre><span></span># vim /etc/systemd/timesyncd.conf
<div class="highlight"><pre><span></span><code># vim /etc/systemd/timesyncd.conf
[Zeit]
NTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
</pre></div>
</code></pre></div>
<h2 id="hetzner-cloud-und-wahrscheinlich-andere">Hetzner Cloud (und wahrscheinlich andere)<a class="headerlink" href="#hetzner-cloud-und-wahrscheinlich-andere" title="Permanent link">&para;</a></h2>
<p>Prüfen Sie <code>/etc/network/interfaces.d/50-cloud-init.cfg</code> und ändern Sie die IPv6-Schnittstelle von eth0:0 auf eth0:</p>
<div class="highlight"><pre><span></span># Falsch:
<div class="highlight"><pre><span></span><code># Falsch:
auto eth0:0
iface eth0:0 inet6 static
# Richtig:
auto eth0
iface eth0 inet6 static
</pre></div>
</code></pre></div>
<p>Starten Sie die Schnittstelle neu, um die Einstellungen zu übernehmen.
Sie können außerdem die <a href="https://wiki.hetzner.de/index.php/Cloud_IP_static/en#disable_cloud-init_network_changes">cloud-init Netzwerkänderungen deaktivieren.</a></p>
<h2 id="mtu">MTU<a class="headerlink" href="#mtu" title="Permanent link">&para;</a></h2>

Datei anzeigen

@ -2659,43 +2659,43 @@ Diese Anleitung behandelt nur die Grundlagen.</p>
<h3 id="erstellen-oder-andern-sie-docker-composeoverrideyml">Erstellen oder ändern Sie <code>docker-compose.override.yml</code><a class="headerlink" href="#erstellen-oder-andern-sie-docker-composeoverrideyml" title="Permanent link">&para;</a></h3>
<p>Im mailcow-dockerized Stammverzeichnis erstellen oder bearbeiten Sie <code>docker-compose.override.yml</code> und fügen Sie die folgende
Konfiguration ein:
<div class="highlight"><pre><span></span><span class="nt">version</span><span class="p">:</span> <span class="s">&#39;2.1&#39;</span>
<div class="highlight"><pre><span></span><code><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;2.1&#39;</span><span class="w"></span>
<span class="nt">services</span><span class="p">:</span>
<span class="nt">borgmatic-mailcow</span><span class="p">:</span>
<span class="nt">image</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">b3vis/borgmatic</span>
<span class="nt">hostname</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">mailcow</span>
<span class="nt">restart</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">always</span>
<span class="nt">dns</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">${IPV4_NETWORK:-172.22.1}.254</span>
<span class="nt">volumes</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">vmail-vol-1:/mnt/source/vmail:ro</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">crypt-vol-1:/mnt/source/crypt:ro</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">redis-vol-1:/mnt/source/redis:ro,z</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">rspamd-vol-1:/mnt/source/rspamd:ro,z</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">postfix-vol-1:/mnt/source/postfix:ro,z</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">mysql-socket-vol-1:/var/run/mysqld/:z</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">borg-config-vol-1:/root/.config/borg:Z</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">borg-cache-vol-1:/root/.cache/borg:Z</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">./data/conf/borgmatic/etc:/etc/borgmatic.d:Z</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">./data/conf/borgmatic/ssh:/root/.ssh:Z</span>
<span class="nt">environment</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">TZ=${TZ}</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">BORG_PASSPHRASE=YouBetterPutSomethingRealGoodHere</span>
<span class="nt">networks</span><span class="p">:</span>
<span class="nt">mailcow-network</span><span class="p">:</span>
<span class="nt">aliases</span><span class="p">:</span>
<span class="p p-Indicator">-</span> <span class="l l-Scalar l-Scalar-Plain">borgmatic</span>
<span class="nt">services</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">borgmatic-mailcow</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">b3vis/borgmatic</span><span class="w"></span>
<span class="w"> </span><span class="nt">hostname</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mailcow</span><span class="w"></span>
<span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">always</span><span class="w"></span>
<span class="w"> </span><span class="nt">dns</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${IPV4_NETWORK:-172.22.1}.254</span><span class="w"></span>
<span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">vmail-vol-1:/mnt/source/vmail:ro</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">crypt-vol-1:/mnt/source/crypt:ro</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">redis-vol-1:/mnt/source/redis:ro,z</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rspamd-vol-1:/mnt/source/rspamd:ro,z</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">postfix-vol-1:/mnt/source/postfix:ro,z</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mysql-socket-vol-1:/var/run/mysqld/:z</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">borg-config-vol-1:/root/.config/borg:Z</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">borg-cache-vol-1:/root/.cache/borg:Z</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./data/conf/borgmatic/etc:/etc/borgmatic.d:Z</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">./data/conf/borgmatic/ssh:/root/.ssh:Z</span><span class="w"></span>
<span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">TZ=${TZ}</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">BORG_PASSPHRASE=YouBetterPutSomethingRealGoodHere</span><span class="w"></span>
<span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">mailcow-network</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">aliases</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">borgmatic</span><span class="w"></span>
<span class="nt">volumes</span><span class="p">:</span>
<span class="nt">borg-cache-vol-1</span><span class="p">:</span>
<span class="nt">borg-config-vol-1</span><span class="p">:</span>
</pre></div></p>
<span class="nt">volumes</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">borg-cache-vol-1</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">borg-config-vol-1</span><span class="p">:</span><span class="w"></span>
</code></pre></div></p>
<p>Stellen Sie sicher, dass Sie die <code>BORG_PASSPHRASE</code> in eine sichere Passphrase Ihrer Wahl ändern.</p>
<p>Aus Sicherheitsgründen mounten wir das maildir als schreibgeschützt. Wenn Sie später Daten wiederherstellen wollen, müssen Sie das
müssen Sie das <code>ro</code>-Flag entfernen, bevor Sie die Daten wiederherstellen. Dies wird im Abschnitt über die Wiederherstellung von Backups beschrieben.</p>
<h3 id="erstellen-sie-dataconfborgmaticetcconfigyaml">Erstellen Sie <code>data/conf/borgmatic/etc/config.yaml</code><a class="headerlink" href="#erstellen-sie-dataconfborgmaticetcconfigyaml" title="Permanent link">&para;</a></h3>
<p>Als nächstes müssen wir die borgmatic-Konfiguration erstellen.</p>
<div class="highlight"><pre><span></span><span class="nb">source</span> mailcow.conf
<div class="highlight"><pre><span></span><code><span class="nb">source</span> mailcow.conf
cat <span class="s">&lt;&lt;EOF &gt; data/conf/borgmatic/etc/config.yaml</span>
<span class="s">location:</span>
<span class="s"> source_directories:</span>
@ -2721,7 +2721,7 @@ cat <span class="s">&lt;&lt;EOF &gt; data/conf/borgmatic/etc/config.yaml</span>
<span class="s"> password: ${DBPASS}</span>
<span class="s"> options: --default-character-set=utf8mb4</span>
<span class="s">EOF</span>
</pre></div>
</code></pre></div>
<p>Das Erstellen der Datei auf diese Weise stellt sicher, dass die korrekten MySQL-Zugangsdaten aus <code>mailcow.conf</code> übernommen werden.</p>
<p>Diese Datei ist ein minimales Beispiel für die Verwendung von borgmatic mit einem Konto <code>user</code> beim Cloud-Speicheranbieter <code>rsync.net</code> für
ein Repository namens <code>mailcow</code> (siehe <code>repositories</code> Einstellung). Es wird sowohl das maildir als auch die MySQL-Datenbank sichern, was alles ist
@ -2737,8 +2737,8 @@ Container einbinden. Der Container definiert zu diesem Zweck ein Volume namens <
</div>
<h3 id="erstellen-sie-einen-crontab">Erstellen Sie einen crontab<a class="headerlink" href="#erstellen-sie-einen-crontab" title="Permanent link">&para;</a></h3>
<p>Erstellen Sie eine neue Textdatei in <code>data/conf/borgmatic/etc/crontab.txt</code> mit folgendem Inhalt:</p>
<div class="highlight"><pre><span></span>14 * * * * PATH=$PATH:/usr/bin /usr/bin/borgmatic --stats -v 0 2&gt;&amp;1
</pre></div>
<div class="highlight"><pre><span></span><code>14 * * * * PATH=$PATH:/usr/bin /usr/bin/borgmatic --stats -v 0 2&gt;&amp;1
</code></pre></div>
<p>Diese Datei erwartet eine crontab-Syntax. Das hier gezeigte Beispiel veranlasst das Backup, jede Stunde um 14 Minuten nach
nach der vollen Stunde auszuführen und am Ende einige nette Statistiken zu protokollieren.</p>
<h3 id="ssh-schlussel-in-ordner-ablegen">SSH-Schlüssel in Ordner ablegen<a class="headerlink" href="#ssh-schlussel-in-ordner-ablegen" title="Permanent link">&para;</a></h3>
@ -2747,8 +2747,8 @@ nach der vollen Stunde auszuführen und am Ende einige nette Statistiken zu prot
oder OpenSSH wird sich weigern, den SSH-Schlüssel zu benutzen.</p>
<h3 id="den-container-hochfahren">Den Container hochfahren<a class="headerlink" href="#den-container-hochfahren" title="Permanent link">&para;</a></h3>
<p>Für den nächsten Schritt müssen wir den Container in einem konfigurierten Zustand hochfahren und laufen lassen. Um das zu tun, führen Sie aus:</p>
<div class="highlight"><pre><span></span>docker-compose up -d
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose up -d
</code></pre></div>
<h2 id="wiederherstellung-von-einem-backup">Wiederherstellung von einem Backup<a class="headerlink" href="#wiederherstellung-von-einem-backup" title="Permanent link">&para;</a></h2>
<p>Das Wiederherstellen eines Backups setzt voraus, dass Sie mit einer neuen Installation von mailcow beginnen, und dass Sie derzeit keine
keine benutzerdefinierten Daten in ihrem maildir oder ihrer mailcow Datenbank.</p>
@ -2768,8 +2768,8 @@ dieses Volume zu schreiben.</p>
<p>Bevor Sie eine Wiederherstellung durchführen, müssen Sie das vmail-Volume in <code>docker-compose.override.yml</code> beschreibbar machen, indem Sie das
das <code>ro</code>-Flag aus dem Volume entfernen.
Dann können Sie den folgenden Befehl verwenden, um das Maildir aus einem Backup wiederherzustellen:</p>
<div class="highlight"><pre><span></span>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic extract --path mnt/source --archive latest
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic extract --path mnt/source --archive latest
</code></pre></div>
<p>Alternativ können Sie auch einen beliebigen Archivnamen aus der Liste der Archive angeben (siehe
<a href="#auflistung-aller-verfugbaren-archive">Auflistung aller verfügbaren Archive</a>)</p>
<h3 id="mysql-wiederherstellen">MySQL wiederherstellen<a class="headerlink" href="#mysql-wiederherstellen" title="Permanent link">&para;</a></h3>
@ -2778,30 +2778,30 @@ Dann können Sie den folgenden Befehl verwenden, um das Maildir aus einem Backup
<p>Die Ausführung dieses Befehls löscht und erstellt die mailcow-Datenbank neu! Führen sie diesen Befehl nicht aus, es sei denn sie beabsichtigen, die mailcow-Datenbank von einem Backup wiederherzustellen.</p>
</div>
<p>Um die MySQL-Datenbank aus dem letzten Archiv wiederherzustellen, verwenden Sie diesen Befehl:</p>
<div class="highlight"><pre><span></span>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic restore --archive latest
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic restore --archive latest
</code></pre></div>
<p>Alternativ können Sie auch einen beliebigen Archivnamen aus der Liste der Archive angeben (siehe
<a href="#auflistung-aller-verfugbaren-archive">Auflistung aller verfügbaren Archive</a>)</p>
<h3 id="nach-der-wiederherstellung">Nach der Wiederherstellung<a class="headerlink" href="#nach-der-wiederherstellung" title="Permanent link">&para;</a></h3>
<p>Nach der Wiederherstellung müssen Sie mailcow neu starten. Wenn Sie den SELinux-Erzwingungsmodus deaktiviert haben, wäre jetzt ein guter Zeitpunkt, um
ihn wieder zu aktivieren.</p>
<p>Um mailcow neu zu starten, verwenden Sie den folgenden Befehl:</p>
<div class="highlight"><pre><span></span>docker-compose down <span class="o">&amp;&amp;</span> docker-compose up -d
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose down <span class="o">&amp;&amp;</span> docker-compose up -d
</code></pre></div>
<p>Wenn Sie SELinux verwenden, werden dadurch auch alle Dateien in Ihrem vmail-Volume neu benannt. Seien Sie geduldig, denn dies kann
eine Weile dauern kann, wenn Sie viele Dateien haben.</p>
<h2 id="nutzliche-befehle">Nützliche Befehle<a class="headerlink" href="#nutzliche-befehle" title="Permanent link">&para;</a></h2>
<h3 id="manueller-archivierungslauf-mit-debugging-ausgabe">Manueller Archivierungslauf (mit Debugging-Ausgabe)<a class="headerlink" href="#manueller-archivierungslauf-mit-debugging-ausgabe" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic -v <span class="m">2</span>
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic -v <span class="m">2</span>
</code></pre></div>
<h3 id="auflistung-aller-verfugbaren-archive">Auflistung aller verfügbaren Archive<a class="headerlink" href="#auflistung-aller-verfugbaren-archive" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic list
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borgmatic list
</code></pre></div>
<h3 id="sperre-aufheben">Sperre aufheben<a class="headerlink" href="#sperre-aufheben" title="Permanent link">&para;</a></h3>
<p>Wenn borg während eines Archivierungslaufs unterbrochen wird, hinterlässt es eine veraltete Sperre, die gelöscht werden muss, bevor
neue Operationen durchgeführt werden können:</p>
<div class="highlight"><pre><span></span>docker-compose <span class="nb">exec</span> borgmatic-mailcow borg break-lock user@rsync.net:mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borg break-lock user@rsync.net:mailcow
</code></pre></div>
<p>Wobei <code>user@rsync.net:mailcow</code> die URI zu Ihrem Repository ist.</p>
<p>Jetzt wäre ein guter Zeitpunkt, einen manuellen Archivierungslauf durchzuführen, um sicherzustellen, dass er erfolgreich durchgeführt werden kann.</p>
<h3 id="exportieren-von-schlusseln">Exportieren von Schlüsseln<a class="headerlink" href="#exportieren-von-schlusseln" title="Permanent link">&para;</a></h3>
@ -2810,8 +2810,8 @@ Schlüsseldateien werden erzeugt, wenn Sie das Repository initialisieren. Die <c
Repository, so dass eine manuelle Sicherung nicht so wichtig ist.</p>
<p>Beachten Sie, dass Sie in beiden Fällen auch die Passphrase haben müssen, um die Archive zu entschlüsseln.</p>
<p>Um die <code>keyfile</code> zu holen, führen Sie aus:</p>
<div class="highlight"><pre><span></span>docker-compose <span class="nb">exec</span> borgmatic-mailcow borg key <span class="nb">export</span> --paper user@rsync.net:mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose <span class="nb">exec</span> borgmatic-mailcow borg key <span class="nb">export</span> --paper user@rsync.net:mailcow
</code></pre></div>
<p>Wobei <code>user@rsync.net:mailcow</code> die URI zu Ihrem Repository ist.</p>
<hr>

Datei anzeigen

@ -2347,7 +2347,7 @@
<p>Mit der Fähigkeit von Gitea, sich über SMTP zu authentifizieren, ist es trivial, es mit mailcow zu integrieren. Es sind nur wenige Änderungen erforderlich:</p>
<p>1. Öffnen Sie <code>docker-compose.override.yml</code> und fügen Sie Gitea hinzu:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
gitea-mailcow:
@ -2360,28 +2360,28 @@ services:
- gitea
ports:
- &quot;${GITEA_SSH_PORT:-127.0.0.1:4000}:22&quot;
</pre></div>
</code></pre></div>
<p>2. Erstellen Sie <code>data/conf/nginx/site.gitea.custom</code>, fügen Sie folgendes hinzu:
<div class="highlight"><pre><span></span>location /gitea/ {
<div class="highlight"><pre><span></span><code>location /gitea/ {
proxy_pass http://gitea:3000/;
}
</pre></div></p>
</code></pre></div></p>
<p>3. Öffne <code>mailcow.conf</code> und definiere den Port Bind, den Gitea für SSH verwenden soll. Beispiel:</p>
<div class="highlight"><pre><span></span>GITEA_SSH_PORT=127.0.0.1:4000
</pre></div>
<div class="highlight"><pre><span></span><code>GITEA_SSH_PORT=127.0.0.1:4000
</code></pre></div>
<p>5. Führen Sie <code>docker-compose up -d</code> aus, um den Gitea-Container hochzufahren und führen Sie anschließend <code>docker-compose restart nginx-mailcow</code> aus.</p>
<p>6. Wenn Sie mailcow zu https gezwungen haben, führen Sie Schritt 9 aus und starten Sie gitea mit <code>docker-compose restart gitea-mailcow</code> neu. Fahren Sie mit Schritt 7 fort (Denken Sie daran, https anstelle von http zu verwenden, <code>https://mx.example.org/gitea/</code> </p>
<p>7. Öffnen Sie <code>http://${MAILCOW_HOSTNAME}/gitea/</code>, zum Beispiel <code>http://mx.example.org/gitea/</code>. Für die Datenbankdetails stellen Sie <code>mysql</code> als Datenbankhost ein. Verwenden Sie den in mailcow.conf gefundenen Wert von DBNAME als Datenbankname, DBUSER als Datenbankbenutzer und DBPASS als Datenbankpasswort.</p>
<p>8. Sobald die Installation abgeschlossen ist, loggen Sie sich als Administrator ein und setzen Sie "Einstellungen" -&gt; "Autorisierung" -&gt; "SMTP aktivieren". SMTP-Host sollte <code>postfix</code> mit Port <code>587</code> sein, setzen Sie <code>Skip TLS Verify</code>, da wir ein nicht gelistetes SAN verwenden ("postfix" ist höchstwahrscheinlich nicht Teil Ihres Zertifikats).</p>
<p>9. Erstellen Sie <code>data/gitea/gitea/conf/app.ini</code> und setzen Sie die folgenden Werte. Sie können <a href="https://docs.gitea.io/en-us/config-cheat-sheet/">gitea cheat sheet, leider bisher nur in Englisch verfügbar</a> für deren Bedeutung und andere mögliche Werte konsultieren.</p>
<div class="highlight"><pre><span></span>[server]
<div class="highlight"><pre><span></span><code>[server]
SSH_LISTEN_PORT = 22
# Für GITEA_SSH_PORT=127.0.0.1:4000 in mailcow.conf, setzen:
SSH_DOMAIN = 127.0.0.1
SSH_PORT = 4000
# Für MAILCOW_HOSTNAME=mx.example.org in mailcow.conf (und Standard-Ports für HTTPS), setzen:
ROOT_URL = https://mx.example.org/gitea/
</pre></div>
</code></pre></div>
<p>10. Starten Sie gitea neu mit <code>docker-compose restart gitea-mailcow</code>. Ihre Nutzer sollten in der Lage sein, sich mit von mailcow verwalteten Konten anzumelden.</p>
<hr>

Datei anzeigen

@ -2347,7 +2347,7 @@
<p>Mit Gogs' Fähigkeit, sich über SMTP zu authentifizieren, ist es einfach, es mit mailcow zu verbinden. Es sind nur wenige Änderungen erforderlich:</p>
<p>1. Öffne <code>docker-compose.override.yml</code> und füge Gogs hinzu:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
gogs-mailcow:
@ -2360,27 +2360,27 @@ services:
- gogs
ports:
- &quot;${GOGS_SSH_PORT:-127.0.0.1:4000}:22&quot;
</pre></div>
</code></pre></div>
<p>2. Erstelle <code>data/conf/nginx/site.gogs.custom</code>, füge hinzu:
<div class="highlight"><pre><span></span>location /gogs/ {
<div class="highlight"><pre><span></span><code>location /gogs/ {
proxy_pass http://gogs:3000/;
}
</pre></div></p>
</code></pre></div></p>
<p>3. Öffne <code>mailcow.conf</code> und definiere die Bindung, die Gogs für SSH verwenden soll. Beispiel:</p>
<div class="highlight"><pre><span></span>GOGS_SSH_PORT=127.0.0.1:4000
</pre></div>
<div class="highlight"><pre><span></span><code>GOGS_SSH_PORT=127.0.0.1:4000
</code></pre></div>
<p>5. Führen Sie <code>docker-compose up -d</code> aus, um den Gogs-Container hochzufahren und führen Sie anschließend <code>docker-compose restart nginx-mailcow</code> aus.</p>
<p>6. Öffnen Sie <code>http://${MAILCOW_HOSTNAME}/gogs/</code>, zum Beispiel <code>http://mx.example.org/gogs/</code>. Für Datenbank-Details setzen Sie <code>mysql</code> als Datenbank-Host. Verwenden Sie den in mailcow.conf gefundenen Wert von DBNAME als Datenbankname, DBUSER als Datenbankbenutzer und DBPASS als Datenbankpasswort.</p>
<p>7. Sobald die Installation abgeschlossen ist, loggen Sie sich als Administrator ein und setzen Sie "Einstellungen" -&gt; "Autorisierung" -&gt; "SMTP aktivieren". SMTP-Host sollte <code>postfix</code> mit Port <code>587</code> sein, setzen Sie <code>Skip TLS Verify</code>, da wir ein nicht gelistetes SAN verwenden ("postfix" ist höchstwahrscheinlich nicht Teil Ihres Zertifikats).</p>
<p>8. Erstellen Sie <code>data/gogs/gogs/conf/app.ini</code> und setzen Sie die folgenden Werte. Sie können <a href="https://gogs.io/docs/advanced/configuration_cheat_sheet">Gogs cheat sheet</a> für ihre Bedeutung und andere mögliche Werte konsultieren.</p>
<div class="highlight"><pre><span></span>[server]
<div class="highlight"><pre><span></span><code>[server]
SSH_LISTEN_PORT = 22
# Für GOGS_SSH_PORT=127.0.0.1:4000 in mailcow.conf, setzen:
SSH_DOMAIN = 127.0.0.1
SSH_PORT = 4000
# Für MAILCOW_HOSTNAME=mx.example.org in mailcow.conf (und Standard-Ports für HTTPS), setzen:
ROOT_URL = https://mx.example.org/gogs/
</pre></div>
</code></pre></div>
<p>9. Starten Sie Gogs neu mit <code>docker-compose restart gogs-mailcow</code>. Ihre Benutzer sollten in der Lage sein, sich mit von mailcow verwalteten Konten einzuloggen.</p>
<hr>

Datei anzeigen

@ -2780,15 +2780,15 @@
</ol>
<h3 id="dns-einrichtung">DNS-Einrichtung<a class="headerlink" href="#dns-einrichtung" title="Permanent link">&para;</a></h3>
<p>Der größte Teil der Konfiguration ist in <em>mailcow</em>s <a href="../../prerequisite/prerequisite-dns/">DNS Konfiguration</a> enthalten. Nachdem diese Einrichtung abgeschlossen ist, fügen Sie eine weitere Subdomain für <em>Mailman</em> hinzu, z.B. <code>lists.example.org</code>, die auf denselben Server zeigt:</p>
<div class="highlight"><pre><span></span># Name Typ Wert
<div class="highlight"><pre><span></span><code># Name Typ Wert
lists IN A 1.2.3.4
lists IN AAAA dead:beef
</pre></div>
</code></pre></div>
<h3 id="installieren-sie-apache-als-reverse-proxy">Installieren Sie <em>Apache</em> als Reverse Proxy<a class="headerlink" href="#installieren-sie-apache-als-reverse-proxy" title="Permanent link">&para;</a></h3>
<p>Installieren Sie <em>Apache</em>, z.B. mit dieser Anleitung von <em>Digital Ocean</em>: <a href="https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04">How To Install the Apache Web Server on Ubuntu 20.04 (Englisch)</a>.</p>
<p>Aktivieren Sie bestimmte <em>Apache</em> Module (als <em>root</em> oder <em>sudo</em>):</p>
<div class="highlight"><pre><span></span>a2enmod rewrite proxy proxy_http headers ssl wsgi proxy_uwsgi http2
</pre></div>
<div class="highlight"><pre><span></span><code>a2enmod rewrite proxy proxy_http headers ssl wsgi proxy_uwsgi http2
</code></pre></div>
<p>Möglicherweise müssen Sie weitere Pakete installieren, um diese Module zu erhalten. Dieses <a href="https://launchpad.net/~ondrej/+archive/ubuntu/apache2">PPA</a> von <em>Ondřej Surý</em> könnte Ihnen helfen.</p>
<h4 id="vhost-konfiguration">vHost-Konfiguration<a class="headerlink" href="#vhost-konfiguration" title="Permanent link">&para;</a></h4>
<p>Kopieren Sie die <a href="https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/apache/mailcow.conf">mailcow.conf</a> und die <a href="https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/apache/mailman.conf">mailman.conf</a> in den <em>Apache</em> conf Ordner <code>sites-available</code> (z.B. unter <code>/etc/apache2/sites-available</code>).</p>
@ -2806,18 +2806,18 @@ lists IN AAAA dead:beef
<li><a href="https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILMAN_DOMAIN">https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILMAN_DOMAIN</a></li>
</ul>
<p>Installieren Sie <a href="https://certbot.eff.org/">certbot</a> (als <em>root</em> oder <em>sudo</em>):</p>
<div class="highlight"><pre><span></span>apt install certbot
</pre></div>
<div class="highlight"><pre><span></span><code>apt install certbot
</code></pre></div>
<p>Holen Sie sich die gewünschten Zertifikate (als <em>root</em> oder <em>sudo</em>):</p>
<div class="highlight"><pre><span></span>certbot certonly -d mailcow_HOSTNAME
<div class="highlight"><pre><span></span><code>certbot certonly -d mailcow_HOSTNAME
certbot certonly -d MAILMAN_DOMAIN
</pre></div>
</code></pre></div>
<h3 id="installieren-sie-mailcow-mit-mailman-integration">Installieren Sie <em>mailcow</em> mit <em>Mailman</em> Integration<a class="headerlink" href="#installieren-sie-mailcow-mit-mailman-integration" title="Permanent link">&para;</a></h3>
<h4 id="installieren-sie-mailcow">Installieren Sie mailcow<a class="headerlink" href="#installieren-sie-mailcow" title="Permanent link">&para;</a></h4>
<p>Folgen Sie der <a href="../../i_u_m/i_u_m_install/">mailcow installation</a>. <strong>Schritt 5 auslassen und nicht mit <code>docker-compose</code> starten!</strong></p>
<h4 id="mailcow-konfigurieren">Mailcow konfigurieren<a class="headerlink" href="#mailcow-konfigurieren" title="Permanent link">&para;</a></h4>
<p>Dies ist auch <strong>Schritt 4</strong> in der offiziellen <em>mailcow-Installation</em> (<code>nano mailcow.conf</code>). Passen Sie also Ihre Bedürfnisse an und ändern Sie die folgenden Variablen:</p>
<div class="highlight"><pre><span></span>HTTP_PORT=18080 # verwenden Sie nicht 8080, da mailman es braucht
<div class="highlight"><pre><span></span><code>HTTP_PORT=18080 # verwenden Sie nicht 8080, da mailman es braucht
HTTP_BIND=127.0.0.1 #
HTTPS_PORT=18443 # Sie können 8443 verwenden
HTTPS_BIND=127.0.0.1 # # HTTPS_BIND=127.0.0.1
@ -2826,10 +2826,10 @@ SKIP_LETS_ENCRYPT=y # Der Reverse Proxy wird die SSL-Verifizierung durchführen
SNAT_TO_SOURCE=1.2.3.4 # ändern Sie dies in Ihre IPv4
SNAT6_TO_SOURCE=dead:beef # Ändern Sie dies in Ihre globale IPv6
</pre></div>
</code></pre></div>
<h4 id="mailman-integration-hinzufugen">Mailman-Integration hinzufügen<a class="headerlink" href="#mailman-integration-hinzufugen" title="Permanent link">&para;</a></h4>
<p>Erstelle die Datei <code>/opt/mailcow-dockerized/docker-compose.override.yml</code> (z.B. mit <code>nano</code>) und füge die folgenden Zeilen hinzu:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
postfix-mailcow:
@ -2841,10 +2841,10 @@ services:
networks:
docker-mailman_mailman:
external: true
</pre></div>
</code></pre></div>
<p>Das zusätzliche Volume wird von <em>Mailman</em> verwendet, um zusätzliche Konfigurationsdateien für <em>mailcow postfix</em> zu generieren. Das externe Netzwerk wird von <em>Mailman</em> erstellt und verwendet. <em>mailcow</em> benötigt es, um eingehende Listenmails an <em>Mailman</em> zu liefern.</p>
<p>Erstellen Sie die Datei <code>/opt/mailcow-dockerized/data/conf/postfix/extra.cf</code> (z.B. mit <code>nano</code>) und fügen Sie die folgenden Zeilen hinzu:</p>
<div class="highlight"><pre><span></span># mailman
<div class="highlight"><pre><span></span><code># mailman
recipient_delimiter = +
unknown_local_recipient_reject_code = 550
@ -2869,7 +2869,7 @@ relay_domains =
relay_recipient_maps =
proxy:mysql:/opt/postfix/conf/sql/mysql_relay_recipient_maps.cf,
regexp:/opt/mailman/core/var/data/postfix_lmtp
</pre></div>
</code></pre></div>
<p>Da wir hier die <em>mailcow postfix</em> Konfiguration überschreiben, kann dieser Schritt Ihre normalen Mailtransporte unterbrechen. Überprüfen Sie die <a href="https://github.com/mailcow/mailcow-dockerized/tree/master/data/conf/postfix">originalen Konfigurationsdateien</a>, wenn sich etwas geändert hat.</p>
<h4 id="ssl-zertifikate">SSL-Zertifikate<a class="headerlink" href="#ssl-zertifikate" title="Permanent link">&para;</a></h4>
<p>Da wir <em>mailcow</em> als Proxy verwenden, müssen wir die SSL-Zertifikate in die <em>mailcow</em>-Dateistruktur kopieren. Diese Aufgabe wird das Skript <a href="https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/scripts/renew-ssl.sh">renew-ssl.sh</a> für uns erledigen:</p>
@ -2880,26 +2880,26 @@ relay_recipient_maps =
<li><strong>Noch nicht ausführen, da wir zuerst Mailman benötigen</strong></li>
</ul>
<p>Sie müssen einen <em>cronjob</em> erstellen, so dass neue Zertifikate kopiert werden. Führen Sie ihn als <em>root</em> oder <em>sudo</em> aus:</p>
<div class="highlight"><pre><span></span>crontab -e
</pre></div>
<div class="highlight"><pre><span></span><code>crontab -e
</code></pre></div>
<p>Um das Skript jeden Tag um 5 Uhr morgens laufen zu lassen, fügen Sie hinzu:</p>
<div class="highlight"><pre><span></span>0 5 * * * /opt/mailcow-dockerized/renew-ssl.sh
</pre></div>
<div class="highlight"><pre><span></span><code>0 5 * * * /opt/mailcow-dockerized/renew-ssl.sh
</code></pre></div>
<h3 id="installieren-sie-mailman">Installieren Sie <em>Mailman</em>.<a class="headerlink" href="#installieren-sie-mailman" title="Permanent link">&para;</a></h3>
<p>Befolgen Sie im Wesentlichen die Anweisungen unter <a href="https://github.com/maxking/docker-mailman">docker-mailman</a>. Da sie sehr umfangreich sind, ist hier in aller Kürze beschrieben, was zu tun ist:</p>
<p>Als <em>root</em> oder <em>sudo</em>:</p>
<div class="highlight"><pre><span></span>cd /opt
<div class="highlight"><pre><span></span><code>cd /opt
mkdir -p mailman/core
mkdir -p mailman/web
git clone https://github.com/maxking/docker-mailman
cd docker-mailman
</pre></div>
</code></pre></div>
<h4 id="mailman-konfigurieren">Mailman konfigurieren<a class="headerlink" href="#mailman-konfigurieren" title="Permanent link">&para;</a></h4>
<p>Erstellen Sie einen langen Schlüssel für <em>Hyperkitty</em>, z.B. mit dem Linux-Befehl <code>cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo</code>. Speichern Sie diesen Schlüssel vorerst als HYPERKITTY_KEY.</p>
<p>Erstellen Sie ein langes Passwort für die Datenbank, z. B. mit dem Linux-Befehl <code>cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo</code>. Speichern Sie dieses Passwort zunächst als DBPASS.</p>
<p>Erstellen Sie einen langen Schlüssel für <em>Django</em>, z. B. mit dem Linux-Befehl <code>cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo</code>. Speichern Sie diesen Schlüssel für einen Moment als DJANGO_KEY.</p>
<p>Erstellen Sie die Datei <code>/opt/docker-mailman/docker-compose.override.yaml</code> und ersetzen Sie <code>HYPERKITTY_KEY</code>, <code>DBPASS</code> und <code>DJANGO_KEY</code> durch die generierten Werte:</p>
<div class="highlight"><pre><span></span>version: &#39;2&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2&#39;
services:
mailman-core:
@ -2928,17 +2928,17 @@ services:
environment:
- POSTGRES_PASSWORD=DBPASS
restart: always
</pre></div>
</code></pre></div>
<p>Bei <code>mailman-web</code> geben Sie die korrekten Werte für <code>SERVE_FROM_DOMAIN</code> (z.B. <code>lists.example.org</code>), <code>MAILMAN_ADMIN_USER</code> und <code>MAILMAN_ADMIN_EMAIL</code> ein. Sie benötigen die Admin-Zugangsdaten, um sich in der Web-Oberfläche (<em>Pistorius</em>) anzumelden. Um <strong>das Passwort zum ersten Mal</strong> zu setzen, verwenden Sie die Funktion <em>Passwort vergessen</em> im Webinterface.</p>
<p>Über andere Konfigurationsoptionen lesen Sie die Dokumentationen <a href="https://github.com/maxking/docker-mailman#mailman-web-1">Mailman-web</a> und <a href="https://github.com/maxking/docker-mailman#mailman-core-1">Mailman-core</a>.</p>
<h4 id="konfigurieren-sie-mailman-core-und-mailman-web">Konfigurieren Sie Mailman core und Mailman web<a class="headerlink" href="#konfigurieren-sie-mailman-core-und-mailman-web" title="Permanent link">&para;</a></h4>
<p>Erstellen Sie die Datei <code>/opt/mailman/core/mailman-extra.cfg</code> mit dem folgenden Inhalt. <code>mailman@example.org</code> sollte auf ein gültiges Postfach oder eine Umleitung verweisen.</p>
<div class="highlight"><pre><span></span>[mailman]
<div class="highlight"><pre><span></span><code>[mailman]
default_language: de
site_owner: mailman@example.org
</pre></div>
</code></pre></div>
<p>Erstellen Sie die Datei <code>/opt/mailman/web/settings_local.py</code> mit dem folgenden Inhalt. <code>mailman@example.org</code> sollte auf ein gültiges Postfach oder eine Umleitung verweisen.</p>
<p><div class="highlight"><pre><span></span># Gebietsschema
<p><div class="highlight"><pre><span></span><code># Gebietsschema
LANGUAGE_CODE = &#39;de-de&#39;
# soziale Authentifizierung deaktivieren
@ -2948,11 +2948,11 @@ SOCIALACCOUNT_PROVIDERS = {}
DEFAULT_FROM_EMAIL = &#39;mailman@example.org&#39;
DEBUG = False
</pre></div>
</code></pre></div>
Sie können <code>LANGUAGE_CODE</code> und <code>SOCIALACCOUNT_PROVIDERS</code> an Ihre Bedürfnisse anpassen. Im Moment hat <code>SOCIALACCOUNT_PROVIDERS</code> keinen Effekt, siehe <a href="https://github.com/g4rf/dockerized-mailcow-mailman/issues/2">issue #2</a>.</p>
<h3 id="ausfuhren">🏃 Ausführen<a class="headerlink" href="#ausfuhren" title="Permanent link">&para;</a></h3>
<p>Ausführen (als <em>root</em> oder <em>sudo</em>)</p>
<div class="highlight"><pre><span></span>a2ensite mailcow.conf
<div class="highlight"><pre><span></span><code>a2ensite mailcow.conf
a2ensite mailman.conf
systemctl restart apache2
@ -2963,14 +2963,14 @@ docker-compose up -d
cd /opt/mailcow-dockerized/
docker-compose pull
./renew-ssl.sh
</pre></div>
</code></pre></div>
<p><strong>Warten Sie ein paar Minuten!</strong> Die Container müssen ihre Datenbanken und Konfigurationsdateien erstellen. Dies kann bis zu 1 Minute und mehr dauern.</p>
<h2 id="bemerkungen">Bemerkungen<a class="headerlink" href="#bemerkungen" title="Permanent link">&para;</a></h2>
<h3 id="neue-listen-werden-von-postfix-nicht-sofort-erkannt">Neue Listen werden von Postfix nicht sofort erkannt<a class="headerlink" href="#neue-listen-werden-von-postfix-nicht-sofort-erkannt" title="Permanent link">&para;</a></h3>
<p>Wenn man eine neue Liste anlegt und versucht, sofort eine E-Mail zu versenden, antwortet <em>postfix</em> mit <code>Benutzer existiert nicht</code>, weil <em>postfix</em> die Liste noch nicht an <em>Mailman</em> übergeben hat. Die Konfiguration unter <code>/opt/mailman/core/var/data/postfix_lmtp</code> wird nicht sofort aktualisiert. Wenn Sie die Liste sofort benötigen, starten Sie <em>postifx</em> manuell neu:</p>
<div class="highlight"><pre><span></span>cd /opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized
docker-compose restart postfix-mailcow
</pre></div>
</code></pre></div>
<h2 id="update">Update<a class="headerlink" href="#update" title="Permanent link">&para;</a></h2>
<p><strong>mailcow</strong> hat sein eigenes Update-Skript in <code>/opt/mailcow-dockerized/update.sh</code>, <a href="../../i_u_m/i_u_m_update/">siehe die Dokumentation</a>.</p>
<p>Für <strong>Mailman</strong> holen Sie sich einfach die neueste Version aus dem <a href="https://github.com/maxking/docker-mailman">github repository</a>.</p>

Datei anzeigen

@ -2456,11 +2456,11 @@
</div>
<h2 id="das-zu-losende-problem">Das zu lösende Problem<a class="headerlink" href="#das-zu-losende-problem" title="Permanent link">&para;</a></h2>
<p>mailpiler bietet die Authentifizierung auf Basis von IMAP an, zum Beispiel:</p>
<div class="highlight"><pre><span></span><span class="x">$config[&#39;ENABLE_IMAP_AUTH&#39;] = 1;</span>
<div class="highlight"><pre><span></span><code><span class="x">$config[&#39;ENABLE_IMAP_AUTH&#39;] = 1;</span>
<span class="x">$config[&#39;IMAP_HOST&#39;] = &#39;mail.example.com&#39;;</span>
<span class="x">$config[&#39;IMAP_PORT&#39;] = 993;</span>
<span class="x">$config[&#39;IMAP_SSL&#39;] = true;</span>
</pre></div>
</code></pre></div>
<ul>
<li>Wenn Sie sich also mit <code>patrik@example.com</code> anmelden, sehen Sie nur zugestellte E-Mails, die von oder an diese spezielle E-Mail-Adresse gesendet wurden.</li>
<li>Wenn zusätzliche Aliase in mailcow definiert werden, wie z.B. <code>team@example.com</code>, werden Sie keine Emails sehen, die an oder von dieser Email-Adresse gesendet wurden, auch wenn Sie ein Empfänger von Emails sind, die an diese Alias-Adresse gesendet wurden.</li>
@ -2487,19 +2487,19 @@
<ol>
<li>
<p>Setzen Sie die benutzerdefinierte Abfragefunktion von mailpiler und fügen Sie diese an <code>/usr/local/etc/piler/config-site.php</code> an:</p>
<div class="highlight"><pre><span></span><span class="x">$config[&#39;MAILCOW_API_KEY&#39;] = &#39;YOUR_READONLY_API_KEY&#39;;</span>
<div class="highlight"><pre><span></span><code><span class="x">$config[&#39;MAILCOW_API_KEY&#39;] = &#39;YOUR_READONLY_API_KEY&#39;;</span>
<span class="x">$config[&#39;MAILCOW_SET_REALNAME&#39;] = true; // wenn nicht angegeben, dann ist der Standardwert false</span>
<span class="x">$config[&#39;CUSTOM_EMAIL_QUERY_FUNCTION&#39;] = &#39;query_mailcow_for_email_access&#39;;</span>
<span class="x">include(&#39;auth-mailcow.php&#39;);</span>
</pre></div>
</code></pre></div>
<p>Sie können auch den mailcow-Hostnamen ändern, falls erforderlich:
<div class="highlight"><pre><span></span><span class="x">$config[&#39;MAILCOW_HOST&#39;] = &#39;mail.domain.tld&#39;; // standardmäßig $config[&#39;IMAP_HOST&#39;]</span>
</pre></div></p>
<div class="highlight"><pre><span></span><code><span class="x">$config[&#39;MAILCOW_HOST&#39;] = &#39;mail.domain.tld&#39;; // standardmäßig $config[&#39;IMAP_HOST&#39;]</span>
</code></pre></div></p>
</li>
<li>
<p>Laden Sie die PHP-Datei mit den Funktionen aus dem <a href="https://github.com/patschi/mailpiler-mailcow-integration">GitHub Repo</a> herunter:</p>
<div class="highlight"><pre><span></span>curl -o /usr/local/etc/piler/auth-mailcow.php https://raw.githubusercontent.com/patschi/mailpiler-mailcow-integration/master/auth-mailcow.php
</pre></div>
<div class="highlight"><pre><span></span><code>curl -o /usr/local/etc/piler/auth-mailcow.php https://raw.githubusercontent.com/patschi/mailpiler-mailcow-integration/master/auth-mailcow.php
</code></pre></div>
</li>
<li>
<p>Erledigt!</p>

Datei anzeigen

@ -2458,14 +2458,14 @@
<h2 id="hintergrund-aufgaben">Hintergrund-Aufgaben<a class="headerlink" href="#hintergrund-aufgaben" title="Permanent link">&para;</a></h2>
<p>Zur Verwendung der empfohlenen Einstellung (Cron) zur Verarbeitung der Hintergrund-Aufgaben müssen in der <code>docker-compose.override.yml</code> folgende Zeilen
hinzugefügt werden:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
php-fpm-mailcow:
labels:
ofelia.enabled: &quot;true&quot;
ofelia.job-exec.nextcloud-cron.schedule: &quot;@every 5m&quot;
ofelia.job-exec.nextcloud-cron.command: &quot;su www-data -s /bin/bash -c \&quot;/usr/local/bin/php -f /web/nextcloud/cron.php\&quot;&quot;
</pre></div>
</code></pre></div>
<p>Nachdem diese Zeilen hinzugefügt wurden muss <code>docker-compose up -d</code> ausgeführt werden, um das Docker Image mit den entsprechenden Labels zu versehen. Danach muss
zudem der docker scheduler neu gestartet werden, um den neuen Job zu registrieren. Dazu wird <code>docker-compose restart ofelia-mailcow</code> ausgeführt. Zur
Überprüfung, ob die <code>ofelia</code> Konfiguration korrekt ist geladen wurde, kann mittels <code>docker-compose logs ofelia-mailcow</code> nach einer Zeile mit dem Inhalt
@ -2518,14 +2518,14 @@ services:
<p>Wenn Sie bisher Nextcloud mit mailcow-Authentifizierung über user_external/IMAP verwendet haben, müssen Sie einige zusätzliche Schritte durchführen, um Ihre bestehenden Benutzerkonten mit OAuth2 zu verknüpfen.</p>
<p>1. Klicken Sie auf die Schaltfläche in der oberen rechten Ecke und wählen Sie <em>Apps</em>. Scrollen Sie nach unten zur App <em>Externe Benutzerauthentifizierung</em> und klicken Sie daneben auf <em>Entfernen</em>.
2. Führen Sie die folgenden Abfragen in Ihrer Nextcloud-Datenbank aus (wenn Sie Nextcloud mit dem Skript von mailcow einrichten, können Sie <code>source mailcow.conf &amp;&amp; docker-compose exec mysql-mailcow mysql -u$DBUSER -p$DBPASS $DBNAME</code> ausführen):
<div class="highlight"><pre><span></span>INSERT INTO nc_users (uid, uid_lower) SELECT DISTINCT uid, LOWER(uid) FROM nc_users_external;
<div class="highlight"><pre><span></span><code>INSERT INTO nc_users (uid, uid_lower) SELECT DISTINCT uid, LOWER(uid) FROM nc_users_external;
INSERT INTO nc_sociallogin_connect (uid, identifier) SELECT DISTINCT uid, CONCAT(&quot;Mailcow-&quot;, uid) FROM nc_users_external;
</pre></div></p>
</code></pre></div></p>
<hr />
<p>Wenn Sie Nextcloud bisher ohne mailcow-Authentifizierung, aber mit den gleichen Benutzernamen wie mailcow genutzt haben, können Sie Ihre bestehenden Benutzerkonten auch mit OAuth2 verknüpfen.</p>
<p>1. Führen Sie die folgenden Abfragen in Ihrer Nextcloud-Datenbank aus (wenn Sie Nextcloud mit dem Skript von mailcow einrichten, können Sie <code>source mailcow.conf &amp;&amp; docker-compose exec mysql-mailcow mysql -u$DBUSER -p$DBPASS $DBNAME</code> ausführen):
<div class="highlight"><pre><span></span>INSERT INTO nc_sociallogin_connect (uid, identifier) SELECT DISTINCT uid, CONCAT(&quot;Mailcow-&quot;, uid) FROM nc_users;
</pre></div></p>
<div class="highlight"><pre><span></span><code>INSERT INTO nc_sociallogin_connect (uid, identifier) SELECT DISTINCT uid, CONCAT(&quot;Mailcow-&quot;, uid) FROM nc_users;
</code></pre></div></p>
<hr />
<h2 id="aktualisieren">Aktualisieren<a class="headerlink" href="#aktualisieren" title="Permanent link">&para;</a></h2>
<p>Die Nextcloud-Instanz kann einfach mit dem Web-Update-Mechanismus aktualisiert werden. Bei größeren Updates können nach dem Update weitere Änderungen vorgenommen werden. Nachdem die Nextcloud-Instanz geprüft wurde, werden Probleme angezeigt. Dies können z.B. fehlende Indizes in der DB oder ähnliches sein.
@ -2535,13 +2535,13 @@ Es wird angezeigt, welche Befehle ausgeführt werden müssen, diese müssen im p
<hr />
<h2 id="fehlersuche-und-fehlerbehebung">Fehlersuche und Fehlerbehebung<a class="headerlink" href="#fehlersuche-und-fehlerbehebung" title="Permanent link">&para;</a></h2>
<p>Es kann vorkommen, dass Sie die Nextcloud-Instanz von Ihrem Netzwerk aus nicht erreichen können. Dies kann daran liegen, dass der Eintrag Ihres Subnetzes im Array 'trusted_proxies' fehlt. Sie können Änderungen in der Nextcloud config.php in <code>data/web/nextcloud/config/*</code> vornehmen.</p>
<div class="highlight"><pre><span></span>&#39;trusted_proxies&#39; =&gt;
<div class="highlight"><pre><span></span><code>&#39;trusted_proxies&#39; =&gt;
array (
0 =&gt; &#39;fd4d:6169:6c63:6f77::/64&#39;,
1 =&gt; &#39;172.22.1.0/24&#39;,
2 =&gt; &#39;NewSubnet/24&#39;,
),
</pre></div>
</code></pre></div>
<p>Nachdem die Änderungen vorgenommen wurden, muss der nginx-Container neu gestartet werden.
<code>docker-compose restart nginx-mailcow</code></p>

Datei anzeigen

@ -2347,7 +2347,7 @@
<p>Um Portainer zu aktivieren, müssen die docker-compose.yml und site.conf für Nginx geändert werden.</p>
<p>1. Erstellen Sie eine neue Datei <code>docker-compose.override.yml</code> im mailcow-dockerized Stammverzeichnis und fügen Sie die folgende Konfiguration ein
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
portainer-mailcow:
image: portainer/portainer-ce
@ -2362,9 +2362,9 @@ services:
mailcow-network:
aliases:
- portainer
</pre></div>
</code></pre></div>
2a. Erstelle <code>data/conf/nginx/portainer.conf</code>:
<div class="highlight"><pre><span></span>upstream portainer {
<div class="highlight"><pre><span></span><code>upstream portainer {
server portainer-mailcow:9000;
}
@ -2372,9 +2372,9 @@ map $http_upgrade $connection_upgrade {
default upgrade;
&#39;&#39; close;
}
</pre></div></p>
</code></pre></div></p>
<p>2b. Fügen Sie einen neuen Standort für die Standard-Mailcow-Site ein, indem Sie die Datei <code>data/conf/nginx/site.portainer.custom</code> erstellen:
<div class="highlight"><pre><span></span> location /portainer/ {
<div class="highlight"><pre><span></span><code> location /portainer/ {
proxy_http_version 1.1;
proxy_set_header Host $http_host; # required for docker client&#39;s sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client&#39;s IP
@ -2393,10 +2393,10 @@ map $http_upgrade $connection_upgrade {
proxy_set_header Connection $connection_upgrade;
proxy_pass http://portainer/api/websocket/;
}
</pre></div></p>
</code></pre></div></p>
<p>3. Übernehmen Sie Ihre Änderungen:
<div class="highlight"><pre><span></span>docker-compose up -d &amp;&amp; docker-compose restart nginx-mailcow
</pre></div></p>
<div class="highlight"><pre><span></span><code>docker-compose up -d &amp;&amp; docker-compose restart nginx-mailcow
</code></pre></div></p>
<p>Nun können Sie einfach zu https://${MAILCOW_HOSTNAME}/portainer/ navigieren, um Ihre Portainer-Container-Überwachungsseite anzuzeigen. Sie werden dann aufgefordert, ein neues Passwort für den <strong>admin</strong> Account anzugeben. Nachdem Sie Ihr Passwort eingegeben haben, können Sie sich mit der Portainer UI verbinden.</p>
<hr>

Datei anzeigen

@ -2466,7 +2466,7 @@
<h2 id="installation-von-roundcube">Installation von Roundcube<a class="headerlink" href="#installation-von-roundcube" title="Permanent link">&para;</a></h2>
<p>Laden Sie Roundcube 1.5.x in das Web htdocs Verzeichnis herunter und entpacken Sie es (hier <code>rc/</code>):
<div class="highlight"><pre><span></span># Prüfen Sie, ob eine neuere Version vorliegt!
<div class="highlight"><pre><span></span><code># Prüfen Sie, ob eine neuere Version vorliegt!
cd daten/web
wget -O - https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz | tar xfvz -
@ -2478,17 +2478,17 @@ chown -R root: rc/
# Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht erforderlich sein
sed -i &quot;s/\$prefix = &#39;\.\/&#39;;/\$prefix = preg_replace\(&#39;\/\[\?\&amp;]\.\*\$\/&#39;, &#39;&#39;, \$_SERVER\[&#39;REQUEST_URI&#39;] \?\? &#39;&#39;\) \?: &#39;\.\/&#39;;/g&quot; rc/program/include/rcmail.php
</pre></div></p>
</code></pre></div></p>
<p>Wenn Sie eine Rechtschreibprüfung benötigen, erstellen Sie eine Datei <code>data/hooks/phpfpm/aspell.sh</code> mit folgendem Inhalt und geben Sie dann <code>chmod +x data/hooks/phpfpm/aspell.sh</code> ein. Dadurch wird eine lokale Rechtschreibprüfung installiert. Beachten Sie, dass die meisten modernen Webbrowser eine eingebaute Rechtschreibprüfung haben, so dass Sie diese vielleicht nicht benötigen.
<div class="highlight"><pre><span></span>#!/bin/bash
<div class="highlight"><pre><span></span><code>#!/bin/bash
apk update
apk add aspell-de # oder jede andere Sprache
</pre></div></p>
</code></pre></div></p>
<p>Erstellen Sie eine Datei <code>data/web/rc/config/config.inc.php</code> mit dem folgenden Inhalt.
- <strong>Ändern Sie den Parameter <code>des_key</code> auf einen Zufallswert.</strong> Er wird verwendet, um Ihr IMAP-Passwort vorübergehend zu speichern.
- Der <code>db_prefix</code> ist optional, wird aber empfohlen.
- Wenn Sie die Rechtschreibprüfung im obigen Schritt nicht installiert haben, entfernen Sie den Parameter <code>spellcheck_engine</code> und ersetzen ihn durch <code>$config['enable_spellcheck'] = false;</code>.
<div class="highlight"><pre><span></span>&lt;?php
<div class="highlight"><pre><span></span><code>&lt;?php
error_reporting(0);
if (!file_exists(&#39;/tmp/mime.types&#39;)) {
file_put_contents(&quot;/tmp/mime.types&quot;, fopen(&quot;http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types&quot;, &#39;r&#39;));
@ -2520,13 +2520,13 @@ $config[&#39;smtp_conn_options&#39;] = array(
&#39;ssl&#39; =&gt; array(&#39;verify_peer&#39; =&gt; false, &#39;verify_peer_name&#39; =&gt; false, &#39;allow_self_signed&#39; =&gt; true)
);
$config[&#39;db_prefix&#39;] = &#39;mailcow_rc1&#39;;
</pre></div></p>
</code></pre></div></p>
<p>Richten Sie Ihren Browser auf <code>https://myserver/rc/installer</code> und folgen Sie den Anweisungen.
Initialisiere die Datenbank und verlasse das Installationsprogramm.</p>
<p>**Löschen Sie das Verzeichnis <code>data/web/rc/installer</code> nach einer erfolgreichen Installation!</p>
<h2 id="konfigurieren-sie-die-managesieve-filterung">Konfigurieren Sie die ManageSieve-Filterung<a class="headerlink" href="#konfigurieren-sie-die-managesieve-filterung" title="Permanent link">&para;</a></h2>
<p>Öffnen Sie <code>data/web/rc/plugins/managesieve/config.inc.php</code> und ändern Sie die folgenden Parameter (oder fügen Sie sie am Ende der Datei hinzu):
<div class="highlight"><pre><span></span>$config[&#39;managesieve_port&#39;] = 4190;
<div class="highlight"><pre><span></span><code>$config[&#39;managesieve_port&#39;] = 4190;
$config[&#39;managesieve_host&#39;] = &#39;tls://dovecot&#39;;
$config[&#39;managesieve_conn_options&#39;] = array(
ssl&#39; =&gt; array(&#39;verify_peer&#39; =&gt; false, &#39;verify_peer_name&#39; =&gt; false, &#39;allow_self_signed&#39; =&gt; true)
@ -2536,37 +2536,37 @@ $config[&#39;managesieve_conn_options&#39;] = array(
// 1 - Abschnitt &quot;Urlaub&quot; hinzufügen,
// 2 - Abschnitt &quot;Urlaub&quot; hinzufügen, aber Abschnitt &quot;Filter&quot; ausblenden
$config[&#39;managesieve_vacation&#39;] = 1;
</pre></div></p>
</code></pre></div></p>
<h2 id="aktivieren-sie-die-funktion-passwort-andern-in-roundcube">Aktivieren Sie die Funktion "Passwort ändern" in Roundcube<a class="headerlink" href="#aktivieren-sie-die-funktion-passwort-andern-in-roundcube" title="Permanent link">&para;</a></h2>
<p>Öffnen Sie <code>data/web/rc/config/config.inc.php</code> und aktivieren Sie das Passwort-Plugin:</p>
<div class="highlight"><pre><span></span>[...]
<div class="highlight"><pre><span></span><code>[...]
$config[&#39;plugins&#39;] = array(
&#39;archive&#39;,
&#39;password&#39;,
);
[...]
</pre></div>
</code></pre></div>
<p>Öffnen Sie <code>data/web/rc/plugins/password/password.php</code>, suchen Sie nach <code>case 'ssha':</code> und fügen Sie oben hinzu:</p>
<div class="highlight"><pre><span></span> case &#39;ssha256&#39;:
<div class="highlight"><pre><span></span><code> case &#39;ssha256&#39;:
$salt = rcube_utils::random_bytes(8);
$crypted = base64_encode( hash(&#39;sha256&#39;, $password . $salt, TRUE ) . $salt );
$prefix = &#39;{SSHA256}&#39;;
break;
</pre></div>
</code></pre></div>
<p>Öffnen Sie <code>data/web/rc/plugins/password/config.inc.php</code> und ändern Sie die folgenden Parameter (oder fügen Sie sie am Ende der Datei hinzu):</p>
<div class="highlight"><pre><span></span>$config[&#39;password_driver&#39;] = &#39;sql&#39;;
<div class="highlight"><pre><span></span><code>$config[&#39;password_driver&#39;] = &#39;sql&#39;;
$config[&#39;password_algorithm&#39;] = &#39;ssha256&#39;;
$config[&#39;password_algorithm_prefix&#39;] = &#39;{SSHA256}&#39;;
$config[&#39;password_query&#39;] = &quot;UPDATE mailbox SET password = %P WHERE username = %u&quot;;
</pre></div>
</code></pre></div>
<h2 id="carddav-adressbucher-in-roundcube-einbinden">CardDAV Adressbücher in Roundcube einbinden<a class="headerlink" href="#carddav-adressbucher-in-roundcube-einbinden" title="Permanent link">&para;</a></h2>
<p>Laden Sie die neueste Version von <a href="https://github.com/mstilkerich/rcmcarddav">RCMCardDAV</a> in das Roundcube Plugin Verzeichnis und entpacken Sie es (hier <code>rc/plugins</code>):
<div class="highlight"><pre><span></span>cd data/web/rc/plugins
<div class="highlight"><pre><span></span><code>cd data/web/rc/plugins
wget -O - https://github.com/mstilkerich/rcmcarddav/releases/download/v4.3.0/carddav-v4.3.0.tar.gz | tar xfvz -
chown -R root: carddav/
</pre></div></p>
</code></pre></div></p>
<p>Kopieren Sie die Datei <code>config.inc.php.dist</code> nach <code>config.inc.php</code> (hier in <code>rc/plugins/carddav</code>) und fügen Sie die folgende Voreinstellung an das Ende der Datei an - vergessen Sie nicht, <code>mx.example.org</code> durch Ihren eigenen Hostnamen zu ersetzen:
<div class="highlight"><pre><span></span>$prefs[&#39;SOGo&#39;] = array(
<div class="highlight"><pre><span></span><code>$prefs[&#39;SOGo&#39;] = array(
&#39;name&#39; =&gt; &#39;SOGo&#39;,
&#39;username&#39; =&gt; &#39;%u&#39;,
&#39;password&#39; =&gt; &#39;%p&#39;,
@ -2579,7 +2579,7 @@ chown -R root: carddav/
&#39;fixed&#39; =&gt; array( &#39;active&#39;, &#39;name&#39;, &#39;username&#39;, &#39;password&#39;, &#39;refresh_time&#39; ),
&#39;hide&#39; =&gt; false,
);
</pre></div>
</code></pre></div>
Bitte beachten Sie, dass dieses Preset nur das Standard-Adressbuch integriert (dasjenige, das den Namen "Persönliches Adressbuch" trägt und nicht gelöscht werden kann). Weitere Adressbücher werden derzeit nicht automatisch erkannt, können aber manuell in den Roundcube-Einstellungen hinzugefügt werden.</p>
<p>Aktivieren Sie das Plugin, indem Sie <code>carddav</code> zu <code>$config['plugins']</code> in <code>rc/config/config.inc.php</code> hinzufügen.</p>
<p>Wenn Sie die Standard-Adressbücher (die in der Roundcube-Datenbank gespeichert sind) entfernen möchten, so dass nur die CardDAV-Adressbücher zugänglich sind, fügen Sie <code>$config['address_book_type'] = '';</code> in die Konfigurationsdatei <code>data/web/rc/config/config.inc.php</code> ein.</p>
@ -2587,7 +2587,7 @@ Bitte beachten Sie, dass dieses Preset nur das Standard-Adressbuch integriert (d
<p>Optional können Sie Roundcube's Link zu der mailcow Apps Liste hinzufügen.
Um dies zu tun, öffnen oder erstellen Sie <code>data/web/inc/vars.local.inc.php</code> und fügen Sie den folgenden Code-Block hinzu:</p>
<p><em>HINWEIS: Vergessen Sie nicht, das <code>&lt;?php</code> Trennzeichen in der ersten Zeile einzufügen</em></p>
<div class="highlight"><pre><span></span>...
<div class="highlight"><pre><span></span><code>...
$MAILCOW_APPS = array(
array(
&#39;name&#39; =&gt; &#39;SOGo&#39;,
@ -2599,10 +2599,10 @@ $MAILCOW_APPS = array(
)
);
...
</pre></div>
</code></pre></div>
<h2 id="aktualisierung-von-roundcube">Aktualisierung von Roundcube<a class="headerlink" href="#aktualisierung-von-roundcube" title="Permanent link">&para;</a></h2>
<p>Ein Upgrade von Roundcube ist recht einfach: Gehen Sie auf die <a href="https://github.com/roundcube/roundcubemail/releases">Github releases</a> Seite für Roundcube und holen Sie sich den Link für die "complete.tar.gz" Datei für die gewünschte Version. Dann folgen Sie den untenstehenden Befehlen und ändern Sie die URL und den Namen des Roundcube-Ordners, falls nötig. </p>
<div class="highlight"><pre><span></span># Starten Sie eine Bash-Sitzung des mailcow PHP-Containers
<div class="highlight"><pre><span></span><code># Starten Sie eine Bash-Sitzung des mailcow PHP-Containers
docker exec -it mailcowdockerized_php-fpm-mailcow_1 bash
# Installieren Sie die erforderliche Upgrade-Abhängigkeit, dann aktualisieren Sie Roundcube auf die gewünschte Version
@ -2620,42 +2620,42 @@ rm -rf roundcube*
# Fix Allow remote resources (https://github.com/roundcube/roundcubemail/issues/8170) sollte in 1.6 nicht benötigt werden
sed -i &quot;s/\$prefix = &#39;\.\/&#39;;/\$prefix = preg_replace\(&#39;\/\[\?\&amp;]\.\*\$\/&#39;, &#39;&#39;, \$_SERVER\[&#39;REQUEST_URI&#39;] \?\? &#39;&#39;\) \?: &#39;\.\/&#39;;/g&quot; /web/rc/program/include/rcmail.php
</pre></div>
</code></pre></div>
<h2 id="administratoren-ohne-passwort-in-roundcube-einloggen-lassen">Administratoren ohne Passwort in Roundcube einloggen lassen<a class="headerlink" href="#administratoren-ohne-passwort-in-roundcube-einloggen-lassen" title="Permanent link">&para;</a></h2>
<p>Installieren Sie zunächst das Plugin [dovecot_impersonate] (<a href="https://github.com/corbosman/dovecot_impersonate/">https://github.com/corbosman/dovecot_impersonate/</a>) und fügen Sie Roundcube als App hinzu (siehe oben).</p>
<p>Editieren Sie <code>mailcow.conf</code> und fügen Sie folgendes hinzu:</p>
<div class="highlight"><pre><span></span># Erlaube Admins, sich in Roundcube als Email-Benutzer einzuloggen (ohne Passwort)
<div class="highlight"><pre><span></span><code># Erlaube Admins, sich in Roundcube als Email-Benutzer einzuloggen (ohne Passwort)
# Roundcube mit Plugin dovecot_impersonate muss zuerst installiert werden
ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE=y
</pre></div>
</code></pre></div>
<p>Editieren Sie <code>docker-compose.override.yml</code> und verfassen/erweitern Sie den Abschnitt für <code>php-fpm-mailcow</code>:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
php-fpm-mailcow:
environment:
- ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE=${ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE:-n}
</pre></div>
</code></pre></div>
<p>Bearbeiten Sie <code>data/web/js/site/mailbox.js</code> und den folgenden Code nach <a href="https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/js/site/mailbox.js#L485-L487"><code>if (ALLOW_ADMIN_EMAIL_LOGIN) { ... }</code></a></p>
<div class="highlight"><pre><span></span><span class="k">if</span> <span class="p">(</span><span class="nx">ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE</span><span class="p">)</span> <span class="p">{</span>
<div class="highlight"><pre><span></span><code><span class="k">if</span> <span class="p">(</span><span class="nx">ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">item</span><span class="p">.</span><span class="nx">action</span> <span class="o">+=</span> <span class="s1">&#39;&lt;a href=&quot;/rc-auth.php?login=&#39;</span> <span class="o">+</span> <span class="nb">encodeURIComponent</span><span class="p">(</span><span class="nx">item</span><span class="p">.</span><span class="nx">username</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&quot; class=&quot;login_as btn btn-xs &#39;</span> <span class="o">+</span> <span class="nx">btnSize</span> <span class="o">+</span> <span class="s1">&#39; btn-primary&quot; target=&quot;_blank&quot;&gt;&lt;i class=&quot;bi bi-envelope-fill&quot;&gt;&lt;/i&gt; Roundcube&lt;/a&gt;&#39;</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
</code></pre></div>
<p>Bearbeiten Sie <code>data/web/mailbox.php</code> und fügen Sie diese Zeile zum Array <a href="https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/mailbox.php#L33-L43"><code>$template_data</code></a> hinzu:</p>
<div class="highlight"><pre><span></span><span class="x"> &#39;allow_admin_email_login_roundcube&#39; =&gt; (preg_match(&quot;/^(yes|y)+$/i&quot;, $_ENV[&quot;ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE&quot;])) ? &#39;true&#39; : &#39;false&#39;,</span>
</pre></div>
<div class="highlight"><pre><span></span><code><span class="x"> &#39;allow_admin_email_login_roundcube&#39; =&gt; (preg_match(&quot;/^(yes|y)+$/i&quot;, $_ENV[&quot;ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE&quot;])) ? &#39;true&#39; : &#39;false&#39;,</span>
</code></pre></div>
<p>Bearbeiten Sie <code>data/web/templates/mailbox.twig</code> und fügen Sie diesen Code am Ende des [javascript-Abschnitts] ein (<a href="https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/templates/mailbox.twig#L49-L57">https://github.com/mailcow/mailcow-dockerized/blob/2f9da5ae93d93bf62a8c2b7a5a6ae50a41170c48/data/web/templates/mailbox.twig#L49-L57</a>):</p>
<div class="highlight"><pre><span></span> <span class="kd">var</span> <span class="nx">ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE</span> <span class="o">=</span> <span class="p">{{</span> <span class="nx">allow_admin_email_login_roundcube</span> <span class="p">}};</span>
</pre></div>
<div class="highlight"><pre><span></span><code> <span class="kd">var</span> <span class="nx">ALLOW_ADMIN_EMAIL_LOGIN_ROUNDCUBE</span> <span class="o">=</span> <span class="p">{{</span> <span class="nx">allow_admin_email_login_roundcube</span> <span class="p">}};</span>
</code></pre></div>
<p>Kopieren Sie den Inhalt der folgenden Dateien aus diesem <a href="https://gitlab.com/-/snippets/2038244">Snippet</a>:</p>
<ul>
<li><code>data/web/inc/lib/RoundcubeAutoLogin.php</code></li>
<li><code>data/web/rc-auth.php</code></li>
</ul>
<p>Starten Sie schließlich mailcow neu</p>
<div class="highlight"><pre><span></span>docker-compose down
<div class="highlight"><pre><span></span><code>docker-compose down
docker-compose up -d
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2427,11 +2427,11 @@ Dazu wird ein zusätzlicher Link zu SOGo in der Mailbox-Liste (mailcow UI) angez
<p>Auch mehrere gleichzeitige Admin-Logins auf verschiedene Postfächer sind mit dieser Funktion möglich.</p>
<h2 id="aktivieren-der-funktion">Aktivieren der Funktion<a class="headerlink" href="#aktivieren-der-funktion" title="Permanent link">&para;</a></h2>
<p>Die Funktion ist standardmäßig deaktiviert. Es kann in der <code>mailcow.conf</code> durch Setzen aktiviert werden:
<div class="highlight"><pre><span></span>ALLOW_ADMIN_EMAIL_LOGIN=y
</pre></div>
<div class="highlight"><pre><span></span><code>ALLOW_ADMIN_EMAIL_LOGIN=y
</code></pre></div>
und die betroffenen Container neu erstellen mit
<div class="highlight"><pre><span></span>docker-compose up -d
</pre></div></p>
<div class="highlight"><pre><span></span><code>docker-compose up -d
</code></pre></div></p>
<h2 id="nachteile-bei-aktivierung">Nachteile bei Aktivierung<a class="headerlink" href="#nachteile-bei-aktivierung" title="Permanent link">&para;</a></h2>
<ul>
<li>Jeder SOGo-Seiten-Load und jede Active-Sync-Anfrage verursacht eine zusätzliche Ausführung eines internen PHP-Skripts.

Datei anzeigen

@ -2476,17 +2476,17 @@
<h2 id="anhangen-eines-containers-an-ihre-shell">Anhängen eines Containers an Ihre Shell<a class="headerlink" href="#anhangen-eines-containers-an-ihre-shell" title="Permanent link">&para;</a></h2>
<p>Um einen Container an Ihre Shell anzuhängen, können Sie einfach folgendes ausführen</p>
<div class="highlight"><pre><span></span>docker-compose exec $Dienst_Name /bin/bash
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec $Dienst_Name /bin/bash
</code></pre></div>
<h3 id="verbindung-zu-diensten-herstellen">Verbindung zu Diensten herstellen<a class="headerlink" href="#verbindung-zu-diensten-herstellen" title="Permanent link">&para;</a></h3>
<p>Wenn Sie sich direkt mit einem Dienst / einer Anwendung verbinden wollen, ist es immer eine gute Idee, <code>source mailcow.conf</code> zu benutzen, um alle relevanten Variablen in Ihre Umgebung zu bekommen.</p>
<h4 id="mysql">MySQL<a class="headerlink" href="#mysql" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span>Quelle mailcow.conf
<div class="highlight"><pre><span></span><code>Quelle mailcow.conf
docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME}
</pre></div>
</code></pre></div>
<h4 id="redis">Redis<a class="headerlink" href="#redis" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span>docker-compose exec redis-mailcow redis-cli
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec redis-mailcow redis-cli
</code></pre></div>
<h2 id="dienstbeschreibungen">Dienstbeschreibungen<a class="headerlink" href="#dienstbeschreibungen" title="Permanent link">&para;</a></h2>
<p>Hier ist eine kurze Übersicht, welcher Container / Dienst was macht:</p>
<table>

Datei anzeigen

@ -2516,11 +2516,11 @@
<li>Prüfen Sie, ob Ihre IP-Adresse auf einer schwarzen Liste steht. Sie können <a href="http://www.dnsbl.info/">dnsbl.info</a> oder einen ähnlichen Dienst verwenden, um Ihre IP-Adresse zu überprüfen.</li>
<li>Es gibt einige ISP-Router, die Mail-Ports für nicht auf der Blacklist stehende Domains blockieren. Bitte überprüfen Sie, ob Sie Ihren Server über die Ports <code>465</code> oder <code>587</code> erreichen können:</li>
</ul>
<div class="highlight"><pre><span></span># telnet 74.125.133.27 465
<div class="highlight"><pre><span></span><code># telnet 74.125.133.27 465
Versucht 74.125.133.27...
Verbunden mit 74.125.133.27.
Escape-Zeichen ist &#39;^]&#39;.
</pre></div>
</code></pre></div>
<h2 id="meine-mails-werden-als-spam-identifiziert">Meine Mails werden als Spam identifiziert<a class="headerlink" href="#meine-mails-werden-als-spam-identifiziert" title="Permanent link">&para;</a></h2>
<p>Bitte lesen Sie unsere <a href="../../prerequisite/prerequisite-dns/">DNS-Konfiguration</a> Anleitung.</p>
<h2 id="docker-compose-wirft-seltsame-fehler-aus">docker-compose wirft seltsame Fehler aus.<a class="headerlink" href="#docker-compose-wirft-seltsame-fehler-aus" title="Permanent link">&para;</a></h2>
@ -2537,8 +2537,8 @@ Escape-Zeichen ist &#39;^]&#39;.
<p>Es könnte auch eine falsch verknüpfte Datei sein (z. B. ein SSL-Zertifikat), die den Start eines wichtigen Containers (nginx) verhindert. Prüfen Sie daher immer Ihre Protokolle, um herauszufinden, woher das Problem kommt.</p>
<h2 id="adresse-bereits-in-gebrauch">Adresse bereits in Gebrauch<a class="headerlink" href="#adresse-bereits-in-gebrauch" title="Permanent link">&para;</a></h2>
<p>Wenn Sie eine Fehlermeldung erhalten wie:</p>
<div class="highlight"><pre><span></span>ERROR: for postfix-mailcow Cannot start service postfix-mailcow: driver failed programming external connectivity on endpoint mailcowdockerized_postfix-mailcow_1: Error starting userland proxy: listen tcp 0.0.0:25: bind: address already in use
</pre></div>
<div class="highlight"><pre><span></span><code>ERROR: for postfix-mailcow Cannot start service postfix-mailcow: driver failed programming external connectivity on endpoint mailcowdockerized_postfix-mailcow_1: Error starting userland proxy: listen tcp 0.0.0:25: bind: address already in use
</code></pre></div>
<p>während Sie versuchen, mailcow: dockerized zu starten / zu installieren, stellen Sie sicher, dass Sie unseren Abschnitt über <a href="../prerequisite/prerequisite-system.de.md/#firewall-ports">prerequisites</a> befolgt haben.</p>
<h2 id="xyz-kann-keine-verbindung-zu">XYZ kann keine Verbindung zu ...<a class="headerlink" href="#xyz-kann-keine-verbindung-zu" title="Permanent link">&para;</a></h2>
<p>Bitte überprüfen Sie Ihre lokale Firewall!
@ -2546,19 +2546,19 @@ Docker und iptables-basierte Firewalls erstellen manchmal widersprüchliche Rege
<p>Wenn Sie Verbindungsprobleme von zu Hause aus haben, überprüfen Sie bitte auch die Firewall Ihres ISP-Routers, da einige von ihnen den E-Mail-Verkehr über die Ports <em>SMTP</em> (587) oder <em>SMTPS</em> (465) blockieren. Es könnte auch sein, dass Ihr ISP die Ports für <em>SUBMISSION</em> (25) blockiert.</p>
<p>Während Linux-Benutzer aus einer Vielzahl von Tools<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> wählen können, um zu überprüfen, ob ein Port offen ist, steht Windows-Benutzern standardmäßig nur der PowerShell-Befehl <code>Test-NetConnection -ComputerName host -Port port</code> zur Verfügung.</p>
<p>Um Telnet auf einem Windows nach Vista zu aktivieren, lesen Sie bitte diese <a href="https://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-client.aspx">Anleitung</a> oder geben Sie den folgenden Befehl in einem Terminal <strong>mit Administratorrechten</strong> ein:</p>
<div class="highlight"><pre><span></span>dism /online /Enable-Feature /FeatureName:TelnetClient
</pre></div>
<div class="highlight"><pre><span></span><code>dism /online /Enable-Feature /FeatureName:TelnetClient
</code></pre></div>
<h2 id="inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453">Inotify-Instanz-Limit überschritten für Benutzer 5000 (UID vmail) (<a href="https://github.com/mailcow/mailcow-dockerized/issues/453#issuecomment-314711232">siehe #453</a>).<a class="headerlink" href="#inotify-instanz-limit-uberschritten-fur-benutzer-5000-uid-vmail-siehe-453" title="Permanent link">&para;</a></h2>
<p>Docker-Container verwenden die inotify-Limits von Docker-Hosts. Wenn Sie sie auf Ihrem Docker-Host setzen, werden sie an den Container weitergegeben.</p>
<h2 id="dovecot-startet-standig-neu-siehe-2672">Dovecot startet ständig neu (siehe <a href="https://github.com/mailcow/mailcow-dockerized/issues/2672">#2672</a>).<a class="headerlink" href="#dovecot-startet-standig-neu-siehe-2672" title="Permanent link">&para;</a></h2>
<p>Stellen Sie sicher, dass Sie mindestens die folgenden Dateien in <code>data/assets/ssl</code> haben:</p>
<div class="highlight"><pre><span></span>cert.pem
<div class="highlight"><pre><span></span><code>cert.pem
dhparams.pem
key.pem
</pre></div>
</code></pre></div>
<p>Wenn <code>dhparams.pem</code> fehlt, können Sie es mit Bash</p>
<div class="highlight"><pre><span></span>openssl dhparam -out data/assets/ssl/dhparams.pem <span class="m">4096</span>
</pre></div>
<div class="highlight"><pre><span></span><code>openssl dhparam -out data/assets/ssl/dhparams.pem <span class="m">4096</span>
</code></pre></div>
<div class="footnote">
<hr />
<ol>

Datei anzeigen

@ -2398,7 +2398,7 @@
<p>Wenn Ihr Server abgestürzt ist und MariaDB eine Fehlermeldung ähnlich <code>[ERROR] mysqld: Aria recovery failed. Please run aria_chk -r on all Aria tables (*.MAI) and delete all aria_log.######## files</code>, können Sie Folgendes versuchen, um die Datenbank in einen gesunden Zustand zu bringen:</p>
<p>Starten Sie den Stack und warten Sie, bis mysql-mailcow beginnt, einen Neustart zu melden. Überprüfen Sie dies, indem Sie <code>docker-compose ps</code> ausführen.</p>
<p>Führen Sie nun die folgenden Befehle aus:</p>
<div class="highlight"><pre><span></span># Stoppe den Stack, führe nicht &quot;down&quot; aus
<div class="highlight"><pre><span></span><code># Stoppe den Stack, führe nicht &quot;down&quot; aus
docker-compose stop
# Führen Sie eine Bash in dem gestoppten Container als Benutzer mysql aus
docker-compose run --rm --entrypoint &#39;/bin/sh -c &quot;gosu mysql bash&quot;&#39; mysql-mailcow
@ -2408,7 +2408,7 @@ cd /var/lib/mysql
aria_chk --check --force */*.MAI
# Löschen der aria-Logdateien
rm aria_log.*
</pre></div>
</code></pre></div>
<p>Führen Sie nun <code>docker-compose down</code> gefolgt von <code>docker-compose up -d</code> aus.</p>
<hr>

Datei anzeigen

@ -2396,13 +2396,13 @@
<h2 id="fuhren-sie-ein-manuelles-mysql_upgrade-durch">Führen Sie ein manuelles mysql_upgrade durch.<a class="headerlink" href="#fuhren-sie-ein-manuelles-mysql_upgrade-durch" title="Permanent link">&para;</a></h2>
<p>Dieser Schritt ist normalerweise nicht notwendig. </p>
<div class="highlight"><pre><span></span>docker-compose stop mysql-mailcow watchdog-mailcow
<div class="highlight"><pre><span></span><code>docker-compose stop mysql-mailcow watchdog-mailcow
docker-compose run --rm --entrypoint &#39;/bin/sh -c &quot;gosu mysql mysqld --skip-grant-tables &amp; sleep 10 &amp;&amp; bash &amp;&amp; exit 0&quot;&#39; mysql-mailcow
</pre></div>
</code></pre></div>
<p>Sobald die SQL-Shell gestartet wurde, führen Sie <code>mysql_upgrade</code> aus und verlassen den Container:</p>
<div class="highlight"><pre><span></span>mysql_upgrade
<div class="highlight"><pre><span></span><code>mysql_upgrade
exit
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2544,16 +2544,16 @@
<h2 id="mailcow-admin-konto">mailcow Admin-Konto<a class="headerlink" href="#mailcow-admin-konto" title="Permanent link">&para;</a></h2>
<p>Setzt den mailcow Admin Account auf ein zufälliges Passwort zurück. Ältere mailcow: dockerisierte Installationen können das <code>mailcow-reset-admin.sh</code> Skript in ihrem mailcow Stammverzeichnis (mailcow_path) finden.</p>
<div class="highlight"><pre><span></span>cd mailcow_pfad
<div class="highlight"><pre><span></span><code>cd mailcow_pfad
./helper-scripts/mailcow-reset-admin.sh
</pre></div>
</code></pre></div>
<h2 id="mysql-passworter-zurucksetzen">MySQL-Passwörter zurücksetzen<a class="headerlink" href="#mysql-passworter-zurucksetzen" title="Permanent link">&para;</a></h2>
<p>Stoppen Sie den Stack, indem Sie <code>docker-compose stop</code> ausführen.</p>
<p>Wenn die Container heruntergefahren sind, führen Sie diesen Befehl aus:</p>
<div class="highlight"><pre><span></span>docker-compose run --rm --entrypoint &#39;/bin/sh -c &quot;gosu mysql mysqld --skip-grant-tables &amp; sleep 10 &amp;&amp; mysql -hlocalhost -uroot &amp;&amp; exit 0&quot;&#39; mysql-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose run --rm --entrypoint &#39;/bin/sh -c &quot;gosu mysql mysqld --skip-grant-tables &amp; sleep 10 &amp;&amp; mysql -hlocalhost -uroot &amp;&amp; exit 0&quot;&#39; mysql-mailcow
</code></pre></div>
<h3 id="1-datenbank-name-finden">1. Datenbank-Name finden<a class="headerlink" href="#1-datenbank-name-finden" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span># source mailcow.conf
<div class="highlight"><pre><span></span><code># source mailcow.conf
# docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME}
MariaDB [(none)]&gt; show databases;
+--------------------+
@ -2565,11 +2565,11 @@ MariaDB [(none)]&gt; show databases;
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
</pre></div>
</code></pre></div>
<h3 id="2-einen-oder-mehrere-benutzer-zurucksetzen">2. Einen oder mehrere Benutzer zurücksetzen<a class="headerlink" href="#2-einen-oder-mehrere-benutzer-zurucksetzen" title="Permanent link">&para;</a></h3>
<h4 id="21-maria-db-104-altere-mailcow-installationen">2.1 Maria DB &lt; 10.4 (ältere mailcow-Installationen)<a class="headerlink" href="#21-maria-db-104-altere-mailcow-installationen" title="Permanent link">&para;</a></h4>
<p>Sowohl "password" als auch "authentication_string" existieren. Derzeit wird "password" verwendet, aber besser ist es, beide zu setzen.</p>
<div class="highlight"><pre><span></span>MariaDB [(none)]&gt; SELECT user FROM mysql.user;
<div class="highlight"><pre><span></span><code>MariaDB [(none)]&gt; SELECT user FROM mysql.user;
+--------------+
| user |
+--------------+
@ -2582,9 +2582,9 @@ MariaDB [(none)]&gt; FLUSH PRIVILEGES;
MariaDB [(none)]&gt; UPDATE mysql.user SET authentication_string = PASSWORD(&#39;gotr00t&#39;), password = PASSWORD(&#39;gotr00t&#39;) WHERE User = &#39;root&#39;;
MariaDB [(none)]&gt; UPDATE mysql.user SET authentication_string = PASSWORD(&#39;mookuh&#39;), password = PASSWORD(&#39;mookuh&#39;) WHERE User = &#39;mailcow&#39; AND Host = &#39;%&#39;;
MariaDB [(none)]&gt; FLUSH PRIVILEGES;
</pre></div>
</code></pre></div>
<h4 id="22-maria-db-104-aktuelle-mailcows">2.2 Maria DB &gt;= 10.4 (aktuelle mailcows)<a class="headerlink" href="#22-maria-db-104-aktuelle-mailcows" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span>MariaDB [(none)]&gt; SELECT user FROM mysql.user;
<div class="highlight"><pre><span></span><code>MariaDB [(none)]&gt; SELECT user FROM mysql.user;
+--------------+
| user |
+--------------+
@ -2598,16 +2598,16 @@ MariaDB [(none)]&gt; ALTER USER &#39;mailcow&#39;@&#39;%&#39; IDENTIFIED BY &#39
MariaDB [(none)]&gt; ALTER USER &#39;root&#39;@&#39;%&#39; IDENTIFIED BY &#39;gotr00t&#39;; MariaDB [(none)]&gt; ALTER USER &#39;root&#39;@&#39;%&#39; IDENTIFIED BY &#39;gotr00t&#39;;
MariaDB [(none)]&gt; ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;gotr00t&#39;; MariaDB [(none)]&gt; ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;gotr00t&#39;;
MariaDB [(none)]&gt; FLUSH PRIVILEGES;
</pre></div>
</code></pre></div>
<h2 id="zwei-faktor-authentifizierung-entfernen">Zwei-Faktor-Authentifizierung entfernen<a class="headerlink" href="#zwei-faktor-authentifizierung-entfernen" title="Permanent link">&para;</a></h2>
<h3 id="fur-mailcow-webui">Für mailcow WebUI:<a class="headerlink" href="#fur-mailcow-webui" title="Permanent link">&para;</a></h3>
<p>Dies funktioniert ähnlich wie das Zurücksetzen eines MySQL-Passworts, jetzt machen wir es vom Host aus, ohne uns mit dem MySQL CLI zu verbinden:</p>
<div class="highlight"><pre><span></span>Quelle mailcow.conf
<div class="highlight"><pre><span></span><code>Quelle mailcow.conf
docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} -e &quot;DELETE FROM tfa WHERE username=&#39;YOUR_USERNAME&#39;;&quot;
</pre></div>
</code></pre></div>
<h3 id="fur-sogo">Für SOGo:<a class="headerlink" href="#fur-sogo" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span>docker-compose exec -u sogo sogo-mailcow sogo-tool user-preferences set defaults user@example.com SOGoGoogleAuthenticatorEnabled &#39;{&quot;SOGoGoogleAuthenticatorEnabled&quot;:0}&#39;
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec -u sogo sogo-mailcow sogo-tool user-preferences set defaults user@example.com SOGoGoogleAuthenticatorEnabled &#39;{&quot;SOGoGoogleAuthenticatorEnabled&quot;:0}&#39;
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2346,14 +2346,14 @@
<h1>TLS-Zertifikate zurücksetzen</h1>
<p>Sollten Sie Probleme mit Ihrem Zertifikat, Schlüssel oder Let's Encrypt-Konto haben, versuchen Sie bitte, die TLS-Assets zurückzusetzen:</p>
<div class="highlight"><pre><span></span>source mailcow.conf
<div class="highlight"><pre><span></span><code>source mailcow.conf
docker-compose down
rm -rf data/assets/ssl
mkdir data/assets/ssl
openssl req -x509 -newkey rsa:4096 -keyout data/assets/ssl-example/key.pem -out data/assets/ssl-example/cert.pem -days 365 -subj &quot;/C=DE/ST=NRW/L=Willich/O=mailcow/OU=mailcow/CN=${MAILCOW_HOSTNAME}&quot; -sha256 -nodes
cp -n -d data/assets/ssl-example/*.pem data/assets/ssl/
docker-compose up -d
</pre></div>
</code></pre></div>
<p>Dies wird mailcow stoppen, die benötigten Variablen beschaffen, ein selbstsigniertes Zertifikat erstellen und mailcow starten.</p>
<p>Wenn Sie Let's Encrypt verwenden, sollten Sie vorsichtig sein, da Sie ein neues Konto und einen neuen Satz von Zertifikaten erstellen werden. Sie werden früher oder später auf ein Ratelimit stoßen.</p>
<p>Bitte beachten Sie auch, dass frühere TLSA-Datensätze ungültig werden.</p>

Datei anzeigen

@ -2348,8 +2348,8 @@
<p>Es kann sein, dass Sie einen Satz persistenter Daten entfernen wollen, um einen Konflikt zu lösen oder um neu zu beginnen.</p>
<p><code>mailcowdockerized</code> kann variieren und hängt von Ihrem Compose-Projektnamen ab (wenn er unverändert ist, ist <code>mailcowdockerized</code> der richtige Wert). Wenn Sie sich unsicher sind, führen Sie <code>docker volume ls</code> aus, um eine vollständige Liste zu erhalten.</p>
<p>Löschen Sie ein einzelnes Volume:</p>
<div class="highlight"><pre><span></span>docker volume rm mailcowdockerized_${VOLUME_NAME}
</pre></div>
<div class="highlight"><pre><span></span><code>docker volume rm mailcowdockerized_${VOLUME_NAME}
</code></pre></div>
<ul>
<li>Entfernen Sie Volume <code>mysql-vol-1</code>, um alle MySQL-Daten zu entfernen.</li>
<li>Entfernen Sie Volume <code>redis-vol-1</code> um alle Redis Daten zu entfernen.</li>

Datei anzeigen

@ -2346,7 +2346,7 @@
<h1>Fortgeschritten: Memory-Leaks in Rspamd finden</h1>
<p>Eine kurze Anleitung, um einen schlecht funktionierenden Rspamd tiefgehend zu analysieren.</p>
<div class="highlight"><pre><span></span>docker-compose exec rspamd-mailcow bash
<div class="highlight"><pre><span></span><code>docker-compose exec rspamd-mailcow bash
if ! grep -qi &#39;apt-stable-asan&#39; /etc/apt/sources.list.d/rspamd.list; then
sed -i &#39;s/apt-stabil/apt-stabil-asan/i&#39; /etc/apt/sources.list.d/rspamd.list
@ -2360,7 +2360,7 @@ nano /docker-entrypoint.sh
export G_SLICE=always-malloc
export ASAN_OPTIONS=new_delete_type_mismatch=0:detect_leaks=1:detect_odr_violation=0:log_path=/tmp/rspamd-asan:quarantine_size_mb=2048:malloc_context_size=8:fast_unwind_on_malloc=0
</pre></div>
</code></pre></div>
<p>Starten Sie Rspamd neu: <code>docker-compose restart rspamd-mailcow</code></p>
<p>Ihr Speicherverbrauch wird stark ansteigen, er wird auch stetig wachsen, was nicht mit einem möglichen Memory Leak zusammenhängt, nach dem Sie suchen.</p>
<p>Lassen Sie den Container für ein paar Minuten, Stunden oder Tage laufen (es sollte die Zeit sein, die Sie normalerweise warten, bis der Memory Leak "passiert") und starten Sie ihn neu: <code>docker-compose restart rspamd-mailcow</code>.</p>

Datei anzeigen

@ -2428,9 +2428,9 @@
<p>To restore make sure you are actually restoring to the same mailcow it was deleted from or you use the same encryption keys in <code>crypt-vol-1</code>.</p>
<p><strong>Make sure the user you want to restore exists in your mailcow</strong>. Re-create them if they are missing.</p>
<p>Copy the folders from <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/_garbage/[timestamp]_[domain_sanitized][user_sanitized]</code> back to <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/[domain]/[user]</code> and resync the folder and recalc the quota:</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net &#39;*&#39;
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm force-resync -u restoreme@example.net &#39;*&#39;
docker-compose exec dovecot-mailcow doveadm quota recalc -u restoreme@example.net
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2454,7 +2454,7 @@
<p>Please do not copy this script to another location.</p>
<p>To run a backup, write "backup" as first parameter and either one or more components to backup as following parameters.
You can also use "all" as second parameter to backup all components. Append <code>--delete-days n</code> to delete backups older than n days.</p>
<div class="highlight"><pre><span></span># Syntax:
<div class="highlight"><pre><span></span><code># Syntax:
# ./helper-scripts/backup_and_restore.sh backup (vmail|crypt|redis|rspamd|postfix|mysql|all|--delete-days)
# Backup all, delete backups older than 3 days
@ -2465,19 +2465,19 @@ You can also use "all" as second parameter to backup all components. Append <cod
# Backup vmail
./helper-scripts/backup_and_restore.sh backup vmail
</pre></div>
</code></pre></div>
<p>The script will ask you for a backup location. Inside of this location it will create folders in the format "mailcow_DATE".
You should not rename those folders to not break the restore process.</p>
<p>To run a backup unattended, define MAILCOW_BACKUP_LOCATION as environment variable before starting the script:</p>
<div class="highlight"><pre><span></span>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all
</pre></div>
<div class="highlight"><pre><span></span><code>MAILCOW_BACKUP_LOCATION=/opt/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all
</code></pre></div>
<h4 id="cronjob">Cronjob<a class="headerlink" href="#cronjob" title="Permanent link">&para;</a></h4>
<p>You can run the backup script regularly via cronjob. Make sure <code>BACKUP_LOCATION</code> exists:</p>
<div class="highlight"><pre><span></span>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3
</pre></div>
<div class="highlight"><pre><span></span><code>5 4 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/mnt/mailcow_backups /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3
</code></pre></div>
<p>Per default cron sends the full result of each backup operation by email. If you want cron to only mail on error (non-zero exit code) you may want to use the following snippet. Pathes need to be modified according to your setup (this script is a user contribution).</p>
<p>This following script may be placed in <code>/etc/cron.daily/mailcow-backup</code> - do not forget to mark it as executable via <code>chmod +x</code>:</p>
<div class="highlight"><pre><span></span>#!/bin/sh
<div class="highlight"><pre><span></span><code>#!/bin/sh
# Backup mailcow data
# https://mailcow.github.io/mailcow-dockerized-docs/backup_restore/b_n_r-backup/
@ -2502,17 +2502,17 @@ if [ $RESULT -ne 0 ]
echo &quot;STDOUT / STDERR:&quot;
cat &quot;$OUT&quot;
fi
</pre></div>
</code></pre></div>
<h1 id="backup-strategy-with-rsync-and-mailcow-backup-script">Backup strategy with rsync and mailcow backup script<a class="headerlink" href="#backup-strategy-with-rsync-and-mailcow-backup-script" title="Permanent link">&para;</a></h1>
<p>Create the destination directory for mailcows helper script:
<div class="highlight"><pre><span></span>mkdir -p /external_share/backups/backup_script
</pre></div></p>
<div class="highlight"><pre><span></span><code>mkdir -p /external_share/backups/backup_script
</code></pre></div></p>
<p>Create cronjobs:
<div class="highlight"><pre><span></span>25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized
<div class="highlight"><pre><span></span><code>25 1 * * * rsync -aH --delete /opt/mailcow-dockerized /external_share/backups/mailcow-dockerized
40 2 * * * rsync -aH --delete /var/lib/docker/volumes /external_share/backups/var_lib_docker_volumes
5 4 * * * cd /opt/mailcow-dockerized/; BACKUP_LOCATION=/external_share/backups/backup_script /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis --delete-days 3
# If you want to, use the acl util to backup permissions of some/all folders/files: getfacl -Rn /path
</pre></div></p>
</code></pre></div></p>
<p>On the destination (in this case <code>/external_share/backups</code>) you may want to have snapshot capabilities (ZFS, Btrfs etc.). Snapshot daily and keep for n days for a consistent backup.
Do <strong>not</strong> rsync to a Samba share, you need to keep the correct permissions!</p>
<p>To restore you'd simply need to run rsync the other way round and restart Docker to re-read the volumes. Run <code>docker-compose pull</code> and <code>docker-compose up -d</code>.</p>

Datei anzeigen

@ -2412,15 +2412,15 @@
<h3 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h3>
<p>This line backups the vmail directory to a file backup_vmail.tar.gz in the mailcow root directory:
<div class="highlight"><pre><span></span>cd /path/to/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized
docker run --rm -i -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar cvfz /backup/backup_vmail.tar.gz /vmail
</pre></div></p>
</code></pre></div></p>
<p>You can change the path by adjusting ${PWD} (which equals to the current directory) to any path you have write-access to.
Set the filename <code>backup_vmail.tar.gz</code> to any custom name, but leave the path as it is. Example: <code>[...] tar cvfz /backup/my_own_filename_.tar.gz</code></p>
<h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span>cd /path/to/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized
docker run --rm -it -v $(docker inspect --format &#39;{{ range .Mounts }}{{ if eq .Destination &quot;/var/vmail&quot; }}{{ .Name }}{{ end }}{{ end }}&#39; $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:stretch-slim tar xvfz /backup/backup_vmail.tar.gz
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2411,20 +2411,20 @@
<h1>MySQL (mysqldump)</h1>
<h2 id="backup">Backup<a class="headerlink" href="#backup" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span>cd /path/to/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized
source mailcow.conf
DATE=$(date +&quot;%Y%m%d_%H%M%S&quot;)
docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} &gt; backup_${DBNAME}_${DATE}.sql
</pre></div>
</code></pre></div>
<h2 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h2>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>You should redirect the SQL dump without <code>docker-compose</code> to prevent parsing errors.</p>
</div>
<div class="highlight"><pre><span></span>cd /path/to/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /path/to/mailcow-dockerized
source mailcow.conf
docker exec -i $(docker-compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} &lt; backup_file.sql
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2459,10 +2459,10 @@
<p>You will need a SSH-enabled destination and a keyfile to connect to said destination. The key should not be protected by a password for the script to work unattended.</p>
<p>In your mailcow base directory, e.g. <code>/opt/mailcow-dockerized</code> you will find a file <code>create_cold_standby.sh</code>.</p>
<p>Edit this file and change the exported variables:</p>
<div class="highlight"><pre><span></span>export REMOTE_SSH_KEY=/path/to/keyfile
<div class="highlight"><pre><span></span><code>export REMOTE_SSH_KEY=/path/to/keyfile
export REMOTE_SSH_PORT=22
export REMOTE_SSH_HOST=mailcow-backup.host.name
</pre></div>
</code></pre></div>
<p>The key must be owned and readable by root only.</p>
<p>Both the source and destination require <code>rsync</code> &gt;= v3.1.0.
The destination must have Docker and docker-compose <strong>v1</strong> available.</p>
@ -2470,28 +2470,28 @@ The destination must have Docker and docker-compose <strong>v1</strong> availabl
<p>You may want to test the connection by running <code>ssh mailcow-backup.host.name -p22 -i /path/to/keyfile</code>.</p>
<h2 id="backup-and-refresh-the-cold-standby">Backup and refresh the cold-standby<a class="headerlink" href="#backup-and-refresh-the-cold-standby" title="Permanent link">&para;</a></h2>
<p>Run the first backup, this may take a while depending on the connection:</p>
<div class="highlight"><pre><span></span>bash /opt/mailcow-dockerized/create_cold_standby.sh
</pre></div>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh
</code></pre></div>
<p>That was easy, wasn't it?</p>
<p>Updating your cold-standby is just as easy:</p>
<div class="highlight"><pre><span></span>bash /opt/mailcow-dockerized/create_cold_standby.sh
</pre></div>
<div class="highlight"><pre><span></span><code>bash /opt/mailcow-dockerized/create_cold_standby.sh
</code></pre></div>
<p>It's the same command.</p>
<h2 id="automated-backups-with-cron">Automated backups with cron<a class="headerlink" href="#automated-backups-with-cron" title="Permanent link">&para;</a></h2>
<p>First make sure that the <code>cron</code> service is enabled and running:</p>
<div class="highlight"><pre><span></span>systemctl enable cron.service &amp;&amp; systemctl start cron.service
</pre></div>
<div class="highlight"><pre><span></span><code>systemctl enable cron.service &amp;&amp; systemctl start cron.service
</code></pre></div>
<p>To automate the backups to the cold-standby server you can use a cron job. To edit the cron jobs for the root user run:</p>
<div class="highlight"><pre><span></span>crontab -e
</pre></div>
<div class="highlight"><pre><span></span><code>crontab -e
</code></pre></div>
<p>Add the following lines to synchronize the cold standby server daily at 03:00. In this example errors of the last execution are logged into a file.</p>
<div class="highlight"><pre><span></span>PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
<div class="highlight"><pre><span></span><code>PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 3 * * * bash /opt/mailcow-dockerized/create_cold_standby.sh 2&gt; /var/log/mailcow-coldstandby-sync.log
</pre></div>
</code></pre></div>
<p>If saved correctly, the cron job should be shown by typing:</p>
<div class="highlight"><pre><span></span>crontab -l
</pre></div>
<div class="highlight"><pre><span></span><code>crontab -l
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2399,9 +2399,9 @@
<h3 id="restore">Restore<a class="headerlink" href="#restore" title="Permanent link">&para;</a></h3>
<p>Please do not copy this script to another location.</p>
<p>To run a restore, <strong>start mailcow</strong>, use the script with "restore" as first parameter.</p>
<div class="highlight"><pre><span></span># Syntax:
<div class="highlight"><pre><span></span><code># Syntax:
# ./helper-scripts/backup_and_restore.sh restore
</pre></div>
</code></pre></div>
<p>The script will ask you for a backup location containing the mailcow_DATE folders.</p>
<hr>

Datei anzeigen

@ -2346,8 +2346,8 @@
<h1>Deinstallation</h1>
<p>To remove mailcow: dockerized with all it's volumes, images and containers do:</p>
<div class="highlight"><pre><span></span>docker-compose down -v --rmi all --remove-orphans
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose down -v --rmi all --remove-orphans
</code></pre></div>
<div class="admonition info">
<p class="admonition-title">Info</p>
<ul>

Datei anzeigen

@ -2351,10 +2351,10 @@
<ul>
<li>
<p>Docker
<div class="highlight"><pre><span></span>curl -sSL https://get.docker.com/ | CHANNEL=stable sh
<div class="highlight"><pre><span></span><code>curl -sSL https://get.docker.com/ | CHANNEL=stable sh
# After the installation process is finished, you may need to enable the service and make sure it is started (e.g. CentOS 7)
systemctl enable --now docker
</pre></div></p>
</code></pre></div></p>
</li>
<li>
<p>Docker-Compose</p>
@ -2365,44 +2365,44 @@ systemctl enable --now docker
<p><strong>mailcow requires the latest version of docker-compose v1.</strong> It is highly recommended to use the commands below to install <code>docker-compose</code>. Package managers (e.g. <code>apt</code>, <code>yum</code>) <strong>likely won't</strong> give you the correct version.
<em>Note: This command downloads docker-compose from the official Docker Github repository and is a safe method. The snippet will determine the latest supported version by mailcow. In almost all cases this is the latest version available (exceptions are broken releases or major changes not yet supported by mailcow).</em></p>
</div>
<div class="highlight"><pre><span></span>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
<div class="highlight"><pre><span></span><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
</pre></div>
</code></pre></div>
<p>Please use the latest Docker engine available and do not use the engine that ships with your distros repository.</p>
<p><strong>1.1.</strong> On SELinux enabled systems, e.g. CentOS 7:</p>
<ul>
<li>Check if "container-selinux" package is present on your system:</li>
</ul>
<div class="highlight"><pre><span></span>rpm -qa | grep container-selinux
</pre></div>
<div class="highlight"><pre><span></span><code>rpm -qa | grep container-selinux
</code></pre></div>
<p>If the above command returns an empty or no output, you should install it via your package manager.</p>
<ul>
<li>Check if docker has SELinux support enabled:</li>
</ul>
<div class="highlight"><pre><span></span>docker info | grep selinux
</pre></div>
<div class="highlight"><pre><span></span><code>docker info | grep selinux
</code></pre></div>
<p>If the above command returns an empty or no output, create or edit <code>/etc/docker/daemon.json</code> and add <code>"selinux-enabled": true</code>. Example file content:</p>
<div class="highlight"><pre><span></span>{
<div class="highlight"><pre><span></span><code>{
&quot;selinux-enabled&quot;: true
}
</pre></div>
</code></pre></div>
<p>Restart the docker daemon and verify SELinux is now enabled.</p>
<p>This step is required to make sure mailcows volumes are properly labeled as declared in the compose file.
If you are interested in how this works, you can check out the readme of <a href="https://github.com/containers/container-selinux">https://github.com/containers/container-selinux</a> which links to a lot of useful information on that topic.</p>
<p><strong>2.</strong> Clone the master branch of the repository, make sure your umask equals 0022. Please clone the repository as root user and also control the stack as root. We will modify attributes - if necessary - while bootstrapping the containers automatically and make sure everything is secured. The update.sh script must therefore also be run as root. It might be necessary to change ownership and other attributes of files you will otherwise not have access to. <strong>We drop permissions for every exposed application</strong> and will not run an exposed service as root! Controlling the Docker daemon as non-root user does not give you additional security. The unprivileged user will spawn the containers as root likewise. The behaviour of the stack is identical.</p>
<div class="highlight"><pre><span></span>$ su
<div class="highlight"><pre><span></span><code>$ su
# umask
0022 # &lt;- Verify it is 0022
# cd /opt
# git clone https://github.com/mailcow/mailcow-dockerized
# cd mailcow-dockerized
</pre></div>
</code></pre></div>
<p><strong>3.</strong> Generate a configuration file. Use a FQDN (<code>host.domain.tld</code>) as hostname when asked.
<div class="highlight"><pre><span></span>./generate_config.sh
</pre></div></p>
<div class="highlight"><pre><span></span><code>./generate_config.sh
</code></pre></div></p>
<p><strong>4.</strong> Change configuration if you want or need to.
<div class="highlight"><pre><span></span>nano mailcow.conf
</pre></div>
<div class="highlight"><pre><span></span><code>nano mailcow.conf
</code></pre></div>
If you plan to use a reverse proxy, you can, for example, bind HTTPS to 127.0.0.1 on port 8443 and HTTP to 127.0.0.1 on port 8080.</p>
<p>You may need to stop an existing pre-installed MTA which blocks port 25/tcp. See <a href="../../post_installation/firststeps-local_mta/">this chapter</a> to learn how to reconfigure Postfix to run besides mailcow after a successful installation.</p>
<p>Some updates modify mailcow.conf and add new parameters. It is hard to keep track of them in the documentation. Please check their description and, if unsure, ask at the known channels for advise.</p>
@ -2410,20 +2410,20 @@ If you plan to use a reverse proxy, you can, for example, bind HTTPS to 127.0.0.
<p><strong>Whenever you run into trouble and strange phenomena, please check your MTU.</strong></p>
<p>Edit <code>docker-compose.yml</code> and change the network settings according to your MTU.
Add the new driver_opts parameter like this:
<div class="highlight"><pre><span></span>networks:
<div class="highlight"><pre><span></span><code>networks:
mailcow-network:
...
driver_opts:
com.docker.network.driver.mtu: 1450
...
</pre></div></p>
</code></pre></div></p>
<p><strong>4.2.</strong> Users without an IPv6 enabled network on their host system:</p>
<p><strong>Enable IPv6. Finally.</strong></p>
<p>If you do not have an IPv6 enabled network on your host and you don't care for a better internet (thehe), it is recommended to <a href="../../post_installation/firststeps-disable_ipv6/">disable IPv6</a> for the mailcow network to prevent unforeseen issues.</p>
<p><strong>5.</strong> Pull the images and run the compose file. The parameter <code>-d</code> will start mailcow: dockerized detached:
<div class="highlight"><pre><span></span>docker-compose pull
<div class="highlight"><pre><span></span><code>docker-compose pull
docker-compose up -d
</pre></div></p>
</code></pre></div></p>
<p>Done!</p>
<p>You can now access <strong>https://${MAILCOW_HOSTNAME}</strong> with the default credentials <code>admin</code> + password <code>moohoo</code>.</p>
<div class="admonition info">

Datei anzeigen

@ -2359,43 +2359,43 @@ Install <a href="https://docs.docker.com/engine/installation/linux/">Docker</a>
<ul>
<li>
<p>Docker
<div class="highlight"><pre><span></span>curl -sSL https://get.docker.com/ | CHANNEL=stable sh
<div class="highlight"><pre><span></span><code>curl -sSL https://get.docker.com/ | CHANNEL=stable sh
# After the installation process is finished, you may need to enable the service and make sure it is started (e.g. CentOS 7)
systemctl enable docker.service
</pre></div></p>
</code></pre></div></p>
</li>
<li>
<p>docker-compose
<div class="highlight"><pre><span></span>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
<div class="highlight"><pre><span></span><code>curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) &gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
</pre></div></p>
</code></pre></div></p>
</li>
</ul>
<p>Please use the latest Docker engine available and do not use the engine that ships with your distros repository.</p>
<p><strong>2.</strong> Stop Docker and assure Docker has stopped:
<div class="highlight"><pre><span></span>systemctl stop docker.service
<div class="highlight"><pre><span></span><code>systemctl stop docker.service
systemctl status docker.service
</pre></div></p>
</code></pre></div></p>
<p><strong>3.</strong> Run the following commands on the source machine (take care of adding the trailing slashes in the first path parameter as shown below!) - <strong>WARNING: This command will erase anything that may already exist under <code>/var/lib/docker/volumes</code> on the target machine</strong>:
<div class="highlight"><pre><span></span>rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@target-machine.example.com:/opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>rsync -aHhP --numeric-ids --delete /opt/mailcow-dockerized/ root@target-machine.example.com:/opt/mailcow-dockerized
rsync -aHhP --numeric-ids --delete /var/lib/docker/volumes/ root@target-machine.example.com:/var/lib/docker/volumes
</pre></div></p>
</code></pre></div></p>
<p><strong>4.</strong> Shut down mailcow and stop Docker on the source machine.
<div class="highlight"><pre><span></span>cd /opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized
docker-compose down
systemctl stop docker.service
</pre></div></p>
</code></pre></div></p>
<p><strong>5.</strong> Repeat step 3 with the same commands. This will be much quicker than the first time.</p>
<p><strong>6.</strong> Switch over to the target machine and start Docker.
<div class="highlight"><pre><span></span>systemctl start docker.service
</pre></div></p>
<div class="highlight"><pre><span></span><code>systemctl start docker.service
</code></pre></div></p>
<p><strong>7.</strong> Now pull the mailcow Docker images on the target machine.
<div class="highlight"><pre><span></span>cd /opt/mailcow-dockerized
<div class="highlight"><pre><span></span><code>cd /opt/mailcow-dockerized
docker-compose pull
</pre></div></p>
</code></pre></div></p>
<p><strong>8.</strong> Start the whole mailcow stack and everything should be done!
<div class="highlight"><pre><span></span>docker-compose up -d
</pre></div></p>
<div class="highlight"><pre><span></span><code>docker-compose up -d
</code></pre></div></p>
<p><strong>9.</strong> Finally, change your DNS settings to point to the target server.</p>
<hr>

Datei anzeigen

@ -2480,13 +2480,13 @@
<p>An update script in your mailcow-dockerized directory will take care of updates.</p>
<p>But use it with caution! If you think you made a lot of changes to the mailcow code, you should use the manual update guide below.</p>
<p>Run the update script:
<div class="highlight"><pre><span></span>./update.sh
</pre></div></p>
<div class="highlight"><pre><span></span><code>./update.sh
</code></pre></div></p>
<p>If it needs to, it will ask you how you wish to proceed.
Merge errors will be reported.
Some minor conflicts will be auto-corrected (in favour for the mailcow: dockerized repository code).</p>
<h3 id="options">Options<a class="headerlink" href="#options" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span># Options can be combined
<div class="highlight"><pre><span></span><code># Options can be combined
# - Check for updates and show changes
./update.sh --check
@ -2509,22 +2509,22 @@ Some minor conflicts will be auto-corrected (in favour for the mailcow: dockeriz
# - Don&#39;t update, but prefetch images and exit
./update.sh --prefetch
</pre></div>
</code></pre></div>
<h3 id="i-forgot-what-i-changed-before-running-updatesh">I forgot what I changed before running update.sh<a class="headerlink" href="#i-forgot-what-i-changed-before-running-updatesh" title="Permanent link">&para;</a></h3>
<p>See <code>git log --pretty=oneline | grep -i "before update"</code>, you will have an output similar to this:</p>
<div class="highlight"><pre><span></span>22cd00b5e28893ef9ddef3c2b5436453cc5223ab Before update on 2020-09-28_19_25_45
<div class="highlight"><pre><span></span><code>22cd00b5e28893ef9ddef3c2b5436453cc5223ab Before update on 2020-09-28_19_25_45
dacd4fb9b51e9e1c8a37d84485b92ffaf6c59353 Before update on 2020-08-07_13_31_31
</pre></div>
</code></pre></div>
<p>Run <code>git diff 22cd00b5e28893ef9ddef3c2b5436453cc5223ab</code> to see what changed.</p>
<h3 id="can-i-roll-back">Can I roll back?<a class="headerlink" href="#can-i-roll-back" title="Permanent link">&para;</a></h3>
<p>Yes.</p>
<p>See the topic above, instead of a diff, you run checkout:</p>
<div class="highlight"><pre><span></span>docker-compose down
<div class="highlight"><pre><span></span><code>docker-compose down
# Replace commit ID 22cd00b5e28893ef9ddef3c2b5436453cc5223ab by your ID
git checkout 22cd00b5e28893ef9ddef3c2b5436453cc5223ab
docker-compose pull
docker-compose up -d
</pre></div>
</code></pre></div>
<h3 id="hooks">Hooks<a class="headerlink" href="#hooks" title="Permanent link">&para;</a></h3>
<p>You can hook into the update mechanism by adding scripts called <code>pre_commit_hook.sh</code> and <code>post_commit_hook.sh</code> to your mailcows root directory. See <a href="../../manual-guides/u_e-update-hooks/">this</a> for more details.</p>
<h2 id="footnotes">Footnotes<a class="headerlink" href="#footnotes" title="Permanent link">&para;</a></h2>

Datei anzeigen

@ -2466,21 +2466,21 @@
<li>You will need to get <code>your_id</code> from one of the download links, they are individual for every user</li>
<li>
<p>Add to <code>data/conf/clamav/freshclam.conf</code> with replaced <code>your_id</code> part:
<div class="highlight"><pre><span></span>DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.hdb
<div class="highlight"><pre><span></span><code>DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfo.ign2
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/javascript.ndb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/spam_marketing.ndb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfohtml.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfoascii.hdb
DatabaseCustomURL https://www.securiteinfo.com/get/signatures/your_id/securiteinfopdf.hdb
</pre></div></p>
</code></pre></div></p>
</li>
<li>
<p>For free SecuriteInfo databases, download speed is limited to 300 kB/s. In <code>data/conf/clamav/freshclam.conf</code>, increase the default <code>ReceiveTimeout 20</code> value to <code>ReceiveTimeout 90</code> (time in seconds), otherwise some of the database downloads could fail because of their size.</p>
</li>
<li>
<p>Adjust <code>data/conf/clamav/clamd.conf</code> to align with next settings:
<div class="highlight"><pre><span></span>DetectPUA yes
<div class="highlight"><pre><span></span><code>DetectPUA yes
ExcludePUA PUA.Win.Packer
ExcludePUA PUA.Win.Trojan.Packed
ExcludePUA PUA.Win.Trojan.Molebox
@ -2493,11 +2493,11 @@ MaxEmbeddedPE 100M
MaxHTMLNormalize 50M
MaxScriptNormalize 50M
MaxZipTypeRcg 50M
</pre></div></p>
</code></pre></div></p>
</li>
<li>Restart ClamAV container:
<div class="highlight"><pre><span></span>docker-compose restart clamd-mailcow
</pre></div></li>
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow
</code></pre></div></li>
</ol>
<p>Please note:</p>
<ul>
@ -2509,14 +2509,14 @@ MaxZipTypeRcg 50M
<h3 id="enable-interserver-databases">Enable InterServer databases<a class="headerlink" href="#enable-interserver-databases" title="Permanent link">&para;</a></h3>
<ol>
<li>Add to <code>data/conf/clamav/freshclam.conf</code>:
<div class="highlight"><pre><span></span>DatabaseCustomURL http://sigs.interserver.net/interserver256.hdb
<div class="highlight"><pre><span></span><code>DatabaseCustomURL http://sigs.interserver.net/interserver256.hdb
DatabaseCustomURL http://sigs.interserver.net/interservertopline.db
DatabaseCustomURL http://sigs.interserver.net/shell.ldb
DatabaseCustomURL http://sigs.interserver.net/whitelist.fp
</pre></div></li>
</code></pre></div></li>
<li>Restart ClamAV container:
<div class="highlight"><pre><span></span>docker-compose restart clamd-mailcow
</pre></div></li>
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow
</code></pre></div></li>
</ol>
<hr>

Datei anzeigen

@ -2398,22 +2398,22 @@
<h2 id="whitelist-specific-clamav-signatures">Whitelist specific ClamAV signatures<a class="headerlink" href="#whitelist-specific-clamav-signatures" title="Permanent link">&para;</a></h2>
<p>You may find that legitimate (clean) mail is being blocked by ClamAV (Rspamd will flag the mail with <code>VIRUS_FOUND</code>). For instance, interactive PDF form attachments are blocked by default because the embedded Javascript code may be used for nefarious purposes. Confirm by looking at the clamd logs, e.g.:</p>
<div class="highlight"><pre><span></span>docker-compose logs clamd-mailcow <span class="p">|</span> grep <span class="s2">&quot;FOUND&quot;</span>
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose logs clamd-mailcow <span class="p">|</span> grep <span class="s2">&quot;FOUND&quot;</span>
</code></pre></div>
<p>This line confirms that such was identified:</p>
<div class="highlight"><pre><span></span>clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -&gt; instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND
</pre></div>
<div class="highlight"><pre><span></span><code>clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -&gt; instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND
</code></pre></div>
<p>To whitelist this particular signature (and enable sending this type of file attached), add it to the ClamAV signature whitelist file:</p>
<div class="highlight"><pre><span></span><span class="nb">echo</span> <span class="s1">&#39;PUA.Pdf.Trojan.EmbeddedJavaScript-1&#39;</span> &gt;&gt; data/conf/clamav/whitelist.ign2
</pre></div>
<div class="highlight"><pre><span></span><code><span class="nb">echo</span> <span class="s1">&#39;PUA.Pdf.Trojan.EmbeddedJavaScript-1&#39;</span> &gt;&gt; data/conf/clamav/whitelist.ign2
</code></pre></div>
<p>Then restart the clamd-mailcow service container in the mailcow UI or using docker-compose:</p>
<div class="highlight"><pre><span></span>docker-compose restart clamd-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart clamd-mailcow
</code></pre></div>
<p>Cleanup cached ClamAV results in Redis:</p>
<div class="highlight"><pre><span></span># docker-compose exec redis-mailcow /bin/sh
<div class="highlight"><pre><span></span><code># docker-compose exec redis-mailcow /bin/sh
/data # redis-cli KEYS rs_cl* | xargs redis-cli DEL
/data # exit
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2348,14 +2348,14 @@
<h1>Customize Dockerfiles</h1>
<p>You need to copy the override file with corresponding build tags to the mailcow: dockerized root folder (i.e. <code>/opt/mailcow-dockerized</code>):</p>
<div class="highlight"><pre><span></span>cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml
</pre></div>
<div class="highlight"><pre><span></span><code>cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml
</code></pre></div>
<p>Make your changes in <code>data/Dockerfiles/$service</code> and build the image locally:</p>
<div class="highlight"><pre><span></span>docker build data/Dockerfiles/service -t mailcow/$service
</pre></div>
<div class="highlight"><pre><span></span><code>docker build data/Dockerfiles/service -t mailcow/$service
</code></pre></div>
<p>Now auto-recreate modified containers:</p>
<div class="highlight"><pre><span></span>docker-compose up -d
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose up -d
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2348,8 +2348,8 @@
<h1>Docker Compose Bash Completion</h1>
<p>To get some sexy bash completion inside your containers simply execute the following:</p>
<div class="highlight"><pre><span></span>curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
</pre></div>
<div class="highlight"><pre><span></span><code>curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2349,8 +2349,8 @@
<p>On August the 17th, we disabled the possibility to share with "any" or "all authenticated users" by default.</p>
<p>This function can be re-enabled by setting <code>ACL_ANYONE</code> to <code>allow</code> in mailcow.conf:</p>
<div class="highlight"><pre><span></span>ACL_ANYONE=allow
</pre></div>
<div class="highlight"><pre><span></span><code>ACL_ANYONE=allow
</code></pre></div>
<p>Apply the changes by running <code>docker-compose up -d</code>.</p>
<hr>

Datei anzeigen

@ -2454,17 +2454,17 @@
<h2 id="the-manual-way">The manual way<a class="headerlink" href="#the-manual-way" title="Permanent link">&para;</a></h2>
<p>That said, let's dive in:</p>
<p>Delete a user's mails inside the junk folder that <strong>are read</strong> and <strong>older</strong> than 4 hours</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;Junk&#39; SEEN not SINCE 4h
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;Junk&#39; SEEN not SINCE 4h
</code></pre></div>
<p>Delete <strong>all</strong> user's mails in the junk folder that are <strong>older</strong> than 7 days</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 7d
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 7d
</code></pre></div>
<p>Delete <strong>all</strong> mails (of all users) in <strong>all</strong> folders that are <strong>older</strong> than 52 weeks (internal date of the mail, not the date it was saved on the system =&gt; <code>before</code> instead of <code>savedbefore</code>). Useful for deleting very old mails on all users and folders (thus especially useful for GDPR-compliance).</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w
</code></pre></div>
<p>Delete mails inside a custom folder <strong>inside</strong> a user's inbox that are <strong>not</strong> flagged and <strong>older</strong> than 2 weeks</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;INBOX/custom-folder&#39; not FLAGGED not SINCE 2w
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm expunge -u &#39;mailbox@example.com&#39; mailbox &#39;INBOX/custom-folder&#39; not FLAGGED not SINCE 2w
</code></pre></div>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>For possible <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_date_specification">time spans</a> or <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery#section_search_keys">search keys</a> have a look at <a href="https://wiki.dovecot.org/Tools/Doveadm/SearchQuery">man doveadm-search-query</a></p>
@ -2472,21 +2472,21 @@
<h2 id="job-scheduler">Job scheduler<a class="headerlink" href="#job-scheduler" title="Permanent link">&para;</a></h2>
<h3 id="via-the-host-system-cron">via the host system cron<a class="headerlink" href="#via-the-host-system-cron" title="Permanent link">&para;</a></h3>
<p>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:</p>
<div class="highlight"><pre><span></span>#!/bin/bash
<div class="highlight"><pre><span></span><code>#!/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 &#39;Junk&#39; savedbefore 2w
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox &#39;Junk&#39; SEEN not SINCE 12h
[...]
</pre></div>
</code></pre></div>
<p>To create a cron job you may execute <code>crontab -e</code> and insert something like the following to execute a script:</p>
<div class="highlight"><pre><span></span># Execute everyday at 04:00 A.M.
<div class="highlight"><pre><span></span><code># Execute everyday at 04:00 A.M.
0 4 * * * /path/to/your/expunge_mailboxes.sh
</pre></div>
</code></pre></div>
<h3 id="via-docker-job-scheduler">via Docker job scheduler<a class="headerlink" href="#via-docker-job-scheduler" title="Permanent link">&para;</a></h3>
<p>To archive this with a docker job scheduler use this docker-compose.override.yml with your mailcow: </p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
services:
@ -2504,12 +2504,12 @@ services:
- &quot;ofelia.job-exec.dovecot-expunge-trash.schedule=0 4 * * *&quot;
- &quot;ofelia.job-exec.dovecot-expunge-trash.command=doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w&quot;
- &quot;ofelia.job-exec.dovecot-expunge-trash.tty=false&quot;
</pre></div>
</code></pre></div>
<p>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 <a href="https://crontab.guru/">crontab guru</a>.
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:</p>
<div class="highlight"><pre><span></span>common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Started - doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w,
<div class="highlight"><pre><span></span><code>common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Started - doveadm expunge -A mailbox &#39;Junk&#39; savedbefore 2w,
common.go:124 ▶ NOTICE [Job &quot;dovecot-expunge-trash&quot; (8759567efa66)] Finished in &quot;285.032291ms&quot;, failed: false, skipped: false, error: none,
</pre></div>
</code></pre></div>
<p>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.</p>
<p>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 <a href="https://github.com/mcuadros/ofelia">mcuadros/ofelia</a>.</p>

Datei anzeigen

@ -2349,8 +2349,8 @@
<p>Create a file <code>data/conf/dovecot/extra.conf</code> - if missing - and add your additional content here.</p>
<p>Restart <code>dovecot-mailcow</code> to apply your changes:</p>
<div class="highlight"><pre><span></span>docker-compose restart dovecot-mailcow
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose restart dovecot-mailcow
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2443,19 +2443,19 @@
<p>The default heap size (1024 M) is defined in mailcow.conf.</p>
<p>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.</p>
<h3 id="fts-related-dovecot-commands">FTS related Dovecot commands<a class="headerlink" href="#fts-related-dovecot-commands" title="Permanent link">&para;</a></h3>
<div class="highlight"><pre><span></span># single user
<div class="highlight"><pre><span></span><code># single user
docker-compose exec dovecot-mailcow doveadm fts rescan -u user@domain
# all users
docker-compose exec dovecot-mailcow doveadm fts rescan -A
</pre></div>
</code></pre></div>
<p>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)."</p>
<p>This does <strong>not</strong> re-index a mailbox. It basically repairs a given index.</p>
<p>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:</p>
<div class="highlight"><pre><span></span># single user
<div class="highlight"><pre><span></span><code># single user
docker-compose exec dovecot-mailcow doveadm index -u user@domain &#39;*&#39;
# all users, but obviously slower and more dangerous
docker-compose exec dovecot-mailcow doveadm index -A &#39;*&#39;
</pre></div>
</code></pre></div>
<p>This <strong>will</strong> take some time depending on your machine and Solr can run oom, monitor it!</p>
<p>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.</p>
<h3 id="delete-mailbox-data">Delete mailbox data<a class="headerlink" href="#delete-mailbox-data" title="Permanent link">&para;</a></h3>

Datei anzeigen

@ -2462,8 +2462,8 @@
<h3 id="change-configuration">Change configuration<a class="headerlink" href="#change-configuration" title="Permanent link">&para;</a></h3>
<p>Create a new file <code>data/conf/dovecot/extra.conf</code> (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:</p>
<div class="highlight"><pre><span></span>imap_idle_notify_interval = 5 mins
</pre></div>
<div class="highlight"><pre><span></span><code>imap_idle_notify_interval = 5 mins
</code></pre></div>
<p>29 minutes is the maximum value allowed by the <a href="https://tools.ietf.org/html/rfc2177">corresponding RFC</a>.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
@ -2471,13 +2471,13 @@ Insert the setting followed by the new value. For example, to set the interval t
</div>
<h3 id="reload-dovecot">Reload Dovecot<a class="headerlink" href="#reload-dovecot" title="Permanent link">&para;</a></h3>
<p>Now reload Dovecot:
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow dovecot reload
</pre></div></p>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow dovecot reload
</code></pre></div></p>
<div class="admonition info">
<p class="admonition-title">Info</p>
<p>You can check the value of this setting with
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow dovecot -a | grep &quot;imap_idle_notify_interval&quot;
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow dovecot -a | grep &quot;imap_idle_notify_interval&quot;
</code></pre></div>
If you didn't change it, it should be at 2m. If you did change it, you should see your new value.</p>
</div>

Datei anzeigen

@ -2350,7 +2350,7 @@
<p>Mails are stored compressed (lz4) and encrypted. The key pair can be found in crypt-vol-1.</p>
<p>If you want to decode/encode existing maildir files, you can use the following script at your own risk:</p>
<p>Enter Dovecot by running <code>docker-compose exec dovecot-mailcow /bin/bash</code> in the mailcow-dockerized location.</p>
<div class="highlight"><pre><span></span># Decrypt /var/vmail
<div class="highlight"><pre><span></span><code># Decrypt /var/vmail
find /var/vmail/ -type f -regextype egrep -regex &#39;.*S=.*W=.*&#39; | while read -r file; do
if [[ $(head -c7 &quot;$file&quot;) == &quot;CRYPTED&quot; ]]; then
doveadm fs get compress lz4:0:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \
@ -2374,7 +2374,7 @@ doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=
chown 5000:5000 &quot;$file&quot;
fi
done
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2414,25 +2414,25 @@
<h2 id="doveadm-quota">doveadm quota<a class="headerlink" href="#doveadm-quota" title="Permanent link">&para;</a></h2>
<p>The <code>quota get</code> and <code>quota recalc</code><sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup> commands are used to display or recalculate the current user's quota usage. The reported values are in <em>kilobytes</em>.</p>
<p>To list the current quota status for a user / mailbox, do:</p>
<div class="highlight"><pre><span></span>doveadm quota get -u &#39;mailbox@example.org&#39;
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm quota get -u &#39;mailbox@example.org&#39;
</code></pre></div>
<p>To list the quota storage value for <strong>all</strong> users, do:</p>
<div class="highlight"><pre><span></span>doveadm quota get -A |grep &quot;STORAGE&quot;
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm quota get -A |grep &quot;STORAGE&quot;
</code></pre></div>
<p>Recalculate a single user's quota usage:</p>
<div class="highlight"><pre><span></span>doveadm quota recalc -u &#39;mailbox@example.org&#39;
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm quota recalc -u &#39;mailbox@example.org&#39;
</code></pre></div>
<h2 id="doveadm-search">doveadm search<a class="headerlink" href="#doveadm-search" title="Permanent link">&para;</a></h2>
<p>The <code>doveadm search</code><sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup> command is used to find messages matching your query. It can return the username, mailbox-GUID / -UID and message-GUIDs / -UIDs.</p>
<p>To view the number of messages, by user, in their <strong>.Trash</strong> folder:</p>
<div class="highlight"><pre><span></span>doveadm search -A mailbox &#39;Trash&#39; | awk &#39;{print $1}&#39; | sort | uniq -c
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm search -A mailbox &#39;Trash&#39; | awk &#39;{print $1}&#39; | sort | uniq -c
</code></pre></div>
<p>Show all messages in a user's <strong>inbox</strong> older then 90 days:</p>
<div class="highlight"><pre><span></span>doveadm search -u &#39;mailbox@example.org&#39; mailbox &#39;INBOX&#39; savedbefore 90d
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm search -u &#39;mailbox@example.org&#39; mailbox &#39;INBOX&#39; savedbefore 90d
</code></pre></div>
<p>Show <strong>all messages</strong> in <strong>any folder</strong> that are <strong>older</strong> then 30 days for <code>mailbox@example.org</code>:</p>
<div class="highlight"><pre><span></span>doveadm search -u &#39;mailbox@example.org&#39; mailbox &quot;*&quot; savedbefore 30d
</pre></div>
<div class="highlight"><pre><span></span><code>doveadm search -u &#39;mailbox@example.org&#39; mailbox &quot;*&quot; savedbefore 30d
</code></pre></div>
<div class="footnote">
<hr />
<ol>

Datei anzeigen

@ -2398,7 +2398,7 @@
<p>Create a new public namespace "Public" and a mailbox "Develcow" inside that namespace:</p>
<p>Edit or create <code>data/conf/dovecot/extra.conf</code>, add:</p>
<div class="highlight"><pre><span></span>namespace {
<div class="highlight"><pre><span></span><code>namespace {
type = public
separator = /
prefix = Public/
@ -2408,18 +2408,18 @@
auto = subscribe
}
}
</pre></div>
</code></pre></div>
<p><code>:INDEXPVT=~/public</code> can be omitted if per-user seen flags are not wanted.</p>
<p>The new mailbox in the public namespace will be auto-subscribed by users.</p>
<p>To allow all authenticated users access full to that new mailbox (not the whole namespace), run:</p>
<div class="highlight"><pre><span></span>docker-compose exec dovecot-mailcow doveadm acl set -A &quot;Public/Develcow&quot; &quot;authenticated&quot; lookup read write write-seen write-deleted insert post delete expunge create
</pre></div>
<div class="highlight"><pre><span></span><code>docker-compose exec dovecot-mailcow doveadm acl set -A &quot;Public/Develcow&quot; &quot;authenticated&quot; lookup read write write-seen write-deleted insert post delete expunge create
</code></pre></div>
<p>Adjust the command to your needs if you like to assign more granular rights per user (use <code>-u user@domain</code> instead of <code>-A</code> for example).</p>
<h2 id="allow-authenticated-users-access-to-the-whole-public-namespace">Allow authenticated users access to the whole public namespace<a class="headerlink" href="#allow-authenticated-users-access-to-the-whole-public-namespace" title="Permanent link">&para;</a></h2>
<p>To allow all authenticated users access full access to the whole public namespace and its subfolders, create a new <code>dovecot-acl</code> file in the namespace root directory:</p>
<p>Open/edit/create <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl</code> (adjust the path accordingly) to create the global ACL file with the following content:</p>
<div class="highlight"><pre><span></span>authenticated kxeilprwts
</pre></div>
<div class="highlight"><pre><span></span><code>authenticated kxeilprwts
</code></pre></div>
<p><code>kxeilprwts</code> equals to <code>lookup read write write-seen write-deleted insert post delete expunge create</code>.</p>
<p>You can use <code>doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read</code> 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.</p>
<p>See <a href="https://doc.dovecot.org/settings/plugin/acl/">Dovecot ACL</a> for further information about ACL.</p>

Datei anzeigen

@ -2351,9 +2351,9 @@
<p><strong>That's recommended and should not be changed.</strong></p>
<p>If you need the user to be static anyway, please specify two variables in <code>mailcow.conf</code>.</p>
<p><strong>Both</strong> parameters must not be empty!</p>
<div class="highlight"><pre><span></span>DOVECOT_MASTER_USER=mymasteruser
<div class="highlight"><pre><span></span><code>DOVECOT_MASTER_USER=mymasteruser
DOVECOT_MASTER_PASS=mysecretpass
</pre></div>
</code></pre></div>
<p>Run <code>docker-compose up -d</code> to apply your changes.</p>
<p>The static master username will be expanded to <code>DOVECOT_MASTER_USER@mailcow.local</code>.</p>
<p>To login as <code>test@example.org</code> this would equal to <code>test@example.org*mymasteruser@mailcow.local</code> with the specified password above.</p>

Datei anzeigen

@ -2442,26 +2442,26 @@
<p>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).</p>
</div>
<p>An easy, dirty, yet stable workaround is to stop mailcow (<code>docker-compose down</code>), remove <code>/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data</code> and create a new link to your remote filesystem location, for example:</p>
<div class="highlight"><pre><span></span>mv /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data /var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data_backup
<div class="highlight"><pre><span></span><code>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
</pre></div>
</code></pre></div>
<p>Start mailcow afterwards.</p>
<hr />
<h2 id="the-old-way">The "old" way<a class="headerlink" href="#the-old-way" title="Permanent link">&para;</a></h2>
<p>If you want to use another folder for the vmail-volume, you can create a <code>docker-compose.override.yml</code> file and add the following content:</p>
<div class="highlight"><pre><span></span>version: &#39;2.1&#39;
<div class="highlight"><pre><span></span><code>version: &#39;2.1&#39;
volumes:
vmail-vol-1:
driver_opts:
type: none
device: /data/mailcow/vmail
o: bind
</pre></div>
</code></pre></div>
<h3 id="moving-an-existing-vmail-folder">Moving an existing vmail folder:<a class="headerlink" href="#moving-an-existing-vmail-folder" title="Permanent link">&para;</a></h3>
<ul>
<li>Locate the current vmail folder by its "Mountpoint" attribute: <code>docker volume inspect mailcowdockerized_vmail-vol-1</code></li>
</ul>
<div class="highlight"><pre><span></span>[
<div class="highlight"><pre><span></span><code>[
{
&quot;CreatedAt&quot;: &quot;2019-06-16T22:08:34+02:00&quot;,
&quot;Driver&quot;: &quot;local&quot;,
@ -2476,7 +2476,7 @@ volumes:
&quot;Scope&quot;: &quot;local&quot;
}
]
</pre></div>
</code></pre></div>
<ul>
<li>Copy the content of the <code>Mountpoint</code> folder to the new location (e.g. <code>/data/mailcow/vmail</code>) using <code>cp -a</code>, <code>rsync -a</code> or a similar non strcuture breaking copy command</li>
<li>Stop mailcow by executing <code>docker-compose down</code> from within your mailcow root folder (e.g. <code>/opt/mailcow-dockerized</code>)</li>

Datei anzeigen

@ -2444,9 +2444,9 @@
<h2 id="new-site">New site<a class="headerlink" href="#new-site" title="Permanent link">&para;</a></h2>
<p>To create persistent (over updates) sites hosted by mailcow: dockerized, a new site configuration must be placed inside <code>data/conf/nginx/</code>:</p>
<p>A good template to begin with:</p>
<div class="highlight"><pre><span></span>nano data/conf/nginx/my_custom_site.conf
</pre></div>
<div class="highlight"><pre><span></span>server {
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/my_custom_site.conf
</code></pre></div>
<div class="highlight"><pre><span></span><code>server {
ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
@ -2478,12 +2478,12 @@
return 301 https://$server_name$request_uri;
}
}
</pre></div>
</code></pre></div>
<h2 id="new-site-with-proxy-to-a-remote-location">New site with proxy to a remote location<a class="headerlink" href="#new-site-with-proxy-to-a-remote-location" title="Permanent link">&para;</a></h2>
<p>Another example with a reverse proxy configuration:</p>
<div class="highlight"><pre><span></span>nano data/conf/nginx/my_custom_site.conf
</pre></div>
<div class="highlight"><pre><span></span>server {
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/my_custom_site.conf
</code></pre></div>
<div class="highlight"><pre><span></span><code>server {
ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
@ -2519,18 +2519,18 @@
client_max_body_size 0;
}
}
</pre></div>
</code></pre></div>
<h2 id="config-expansion-in-mailcows-nginx">Config expansion in mailcows Nginx<a class="headerlink" href="#config-expansion-in-mailcows-nginx" title="Permanent link">&para;</a></h2>
<p>The filename used for a new site is not important, as long as the filename carries a .conf extension.</p>
<p>It is also possible to extend the configuration of the default file <code>site.conf</code> file:</p>
<div class="highlight"><pre><span></span>nano data/conf/nginx/site.my_content.custom
</pre></div>
<div class="highlight"><pre><span></span><code>nano data/conf/nginx/site.my_content.custom
</code></pre></div>
<p>This filename does not need to have a ".conf" extension but follows the pattern <code>site.*.custom</code>, where <code>*</code> is a custom name.</p>
<p>If PHP is to be included in a custom site, please use the PHP-FPM listener on phpfpm:9002 or create a new listener in <code>data/conf/phpfpm/php-fpm.d/pools.conf</code>.</p>
<p>Restart Nginx (and PHP-FPM, if a new listener was created):</p>
<div class="highlight"><pre><span></span>docker-compose restart nginx-mailcow
<div class="highlight"><pre><span></span><code>docker-compose restart nginx-mailcow
docker-compose restart php-fpm-mailcow
</pre></div>
</code></pre></div>
<hr>
<div class="md-source-file">

Datei anzeigen

@ -2350,7 +2350,7 @@
<p><strong>IMPORTANT</strong>: This guide only applies to non SNI enabled configurations. The certificate path needs to be adjusted if SNI is enabled. Something like <code>ssl_certificate,key /etc/ssl/mail/webmail.example.org/cert.pem,key.pem;</code> will do. <strong>But</strong>: The certificate should be acquired <strong>first</strong> and only after the certificate exists a site config should be created. Nginx will fail to start if it cannot find the certificate and key.</p>
<p>To create a subdomain <code>webmail.example.org</code> and redirect it to SOGo, you need to create a <strong>new</strong> Nginx site. Take care of "CHANGE_TO_MAILCOW_HOSTNAME"!</p>
<p><strong>nano data/conf/nginx/webmail.conf</strong></p>
<div class="highlight"><pre><span></span>server {
<div class="highlight"><pre><span></span><code>server {
ssl_certificate /etc/ssl/mail/cert.pem;
ssl_certificate_key /etc/ssl/mail/key.pem;
index index.php index.html;
@ -2369,12 +2369,12 @@
<span class="hll"> return 301 https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo;
</span> }
}
</pre></div>
</code></pre></div>
<p>Save and restart Nginx: <code>docker-compose restart nginx-mailcow</code>.</p>
<p>Now open <code>mailcow.conf</code> and find <code>ADDITIONAL_SAN</code>.
Add <code>webmail.example.org</code> to this array, don't use quotes!</p>
<div class="highlight"><pre><span></span>ADDITIONAL_SAN=webmail.example.org
</pre></div>
<div class="highlight"><pre><span></span><code>ADDITIONAL_SAN=webmail.example.org
</code></pre></div>
<p>Run <code>docker-compose up -d</code>. See "acme-mailcow" and "nginx-mailcow" logs if anything fails.</p>
<hr>

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden Mehr anzeigen