Wie kann ich das Journaling in Postfix (Linux) aktivieren?


Wenn Sie EuropeanMX sowohl für die Filterung eingehender als auch ausgehender E-Mails verwenden (mit Hilfe des Smarthost-Setups), wird die gesamte externe SMTP-Kommunikation automatisch als Teil der Domain archiviert, für die die Archivierung aktiviert ist. Allerdings leitet Postfix die interne Kommunikation nicht über den ausgehenden Smarthost weiter, daher wird die interne Kommunikation standardmäßig nicht archiviert.

Die interne Kommunikation über EuropeanMX zu archivieren ist jedoch recht einfach und kann mit wenigen Schritten aktiviert werden. Das Journaling-System ermöglicht es Postfix, automatisch eine Kopie der gesamten internen Kommunikation an eine externe E-Mail-Adresse zu senden. Solange Sie die externe E-Mail-Adresse mit EuropeanMX zur Archivierung eingerichtet haben, verarbeitet der EuropeanMX-Eingangsfilter die Nachricht und archiviert sie. Konfigurieren Sie die Zieladresse, an die die Journaling-Berichte geschickt werden, als Empfänger in der Zulassungsliste. D. h. für die empfangenen Nachrichten findet keine Filterung statt.

Es gibt zwei Möglichkeiten, das Journaling mit Postfix zu konfigurieren:

  • Verwendung einer lokalen Journaling-Adresse: Hier erstellen Sie eine Journaling-Adresse, die lokal zu Ihrer in EuropeanMX konfigurierten Hauptdomain ist, z. B. ist Ihr Domainname meinedomain.de, und Sie entscheiden sich für die Verwendung von europeanmxjournal@meinedomain.de
  • Verwendung einer lokalen Journaling-Adresse: Hier verwenden Sie die globale Journaling-Adresse, die die Domain in EuropeanMX verwendet, z. B. 12h66634-2fg6-8f49-bd81-3b7c11b692dc-meinedomain.de@mx1.europeanmx.eu

Bevor Sie das Journaling mit der globalen oder einer lokalen Journaling-Adresse einrichten, müssen Sie sicherstellen, dass die Archivierung in EuropeanMX aktiviert ist. Eine Anleitung zur Aktivierung finden Sie in unserem FAQ "Wie kann ich die Archivfunktion für meine Domain einrichten?".


Einrichten von Journaling mit einer lokalen Journaling-Adresse in Postfix (Linux)

Die Einrichtung des Journalings mit einer lokalen Journaling-Adresse erfolgt in drei Schritten:

  1. Erstellung einer SMTP-Transportregel für die Journaling-Adresse, die in EuropeanMX generiert wurde und einer Pipe für eine interne Adresse in Ihrem E-Mail-System, die zur Weiterleitung von E-Mails an das Journaling-Skript verwendet wird.
  2. Bearbeitung der primären Postfix-Konfigurationsdatei und Hinzufügen einer externen Pipe-Transport zum Journaling-Skript.
  3. Erstellung eines Skripts, das feststellt, ob es sich um interne Mails handelt, die protokolliert werden müssen.
  4. Neustart des Postfix-Servers.

Die folgende Konfiguration wurde auf Ubuntu 14.04.5 LTS getestet, andere Distributionen können andere Dateispeicherorte verwenden. Stellen Sie sicher, dass Ihre Postfix-Konfigurationsdateien in /etc/postfix/ gespeichert sind.

1. Schritt: Erstellung einer Transportregel für jede der beiden Journaling-Adressen

1

Fügen Sie die folgenden Zeilen in die Postfix-Transporttabelle ein - z. B. /etc/postfix/transport - und ersetzen Sie die Platzhalterwerte durch die entsprechenden Werte für Ihre Einrichtung (Bitte entfernen Sie die spitzen Klammern):

<ma-journal-address@meinedomain.de> smtp:smtp.antispamcloud.com:587
<internal-journal-address@meinedomain.de> external-pipe
2

Um die Transportdatenbank zu erstellen, führen Sie den folgenden Befehl als root aus:

postmap /etc/posfix/transport
3

Stellen Sie sicher, dass die Zeile transport_map in /etc/postfix/main.cf so eingestellt ist, dass die Transport-Map-Datenbank verwendet wird:

transport_maps = hash:/etc/postfix/transport


2. Schritt: Bearbeitung der primären Postfix-Konfigurationsdatei und Hinzufügen einer externen Pipe-Transport zum Journaling-Skript.

Fügen Sie nun die folgenden Zeilen in /etc/postfix/master.cf ein (es ist erforderlich, dass die zweite Zeile eingerückt wird):

external-pipe unix - n n - - pipe
  flags=DRhu user=dovecot:dovecot argv=/etc/postfix/journal.sh {-f $sender} {-j <external journal address>} {-d <yourdomain>}

Das Skript muss als Nicht-Root-Benutzer (in diesem Beispiel dovecot) und nicht als Postfix ausgeführt werden. Dies dient der Vermeidung potenzieller Gefahren durch Skriptinjektion.

3. Schritt: Erstellung eines Skripts, das feststellt, ob es sich um interne Mails handelt, die protokolliert werden müssen.

Mit dem folgenden Skript erhalten Sie eine Grundlage für Ihr eigenes Skript. Bitte passen Sie es an Ihre eigene Umgebung an. Speichern Sie das Skript als etc/postfix/journal.sh (wenn Sie es an anderer Stelle speichern, müssen Sie die Datei master.cf  anpassen, damit die Änderung berücksichtigt wird).

#!/bin/bash
################
#
#  Takes three parameters: -f <the from address> -j <journaling address> -d <the local domain>
#
###############
while getopts f:d:j: option
do
    case "${option}"
    in
    f) FROM_ADDRESS=${OPTARG# };;
    j) JOURNAL_ADDRESS=${OPTARG# };;
    d) LOCAL_DOMAIN=${OPTARG# };;
    esac
done
TO_ADDRESS="unset"
TO_DOMAIN=
FROM_DOMAIN=
#Create a temp file
OUTFILE="$(mktemp)"
#Cleanup on errors
trap "rm -f $OUTFILE; exit 1" 0 1 2 3 13 15 # Exit, HUP, INT, QUIT, PIPE, TERM
#Write the email to temp file and also read it to find the to and from addresses
tee $OUTFILE |
{
while read -r LINE
do
    if [[ "$TO_ADDRESS" == "unset" ]] ; then
    #Read this line and see if it is the To: line, if it is then strip out the email address
    THIS_LINE=`echo $LINE | grep -E "^(To:)" | grep -E -o "(\S)*@(\S)*" | sed 's/<//;s/>//'`
        If the address hasn't already been captured, store it into TO_ADDRESS
        if [[ $THIS_LINE ]] ; then
        TO_ADDRESS=$THIS_LINE
        break
        fi
done
#Strip the domain from the to and from email addresses
TO_DOMAIN=$(echo $TO_ADDRESS | sed 's/.*@//')
FROM_DOMAIN=$(echo $FROM_ADDRESS | sed 's/.*@//')
#If the domains match then go ahead and send it to the journaling address
if [[ "$TO_DOMAIN" == "$LOCAL_DOMAIN" && "$LOCAL_DOMAIN" == "$FROM_DOMAIN" ]]; then
    cat $OUTFILE | /usr/sbin/sendmail -f $FROM_ADDRESS -t $JOURNAL_ADDRESS
fi
}
#Cleanup
rm -f $OUTFILE
trap 0
exit $exit_status

Stellen Sie sicher, dass das Skript von der in master.cf festgelegten BenutzerID ausgeführt werden kann.

4. Schritt: Neustart des Postfix

Nachdem Sie die Schritte 1 - 3 durchgeführt haben, sollten Sie den Postfix neustarten.


Einrichten von Journaling mit der globalen Journaling-Adresse in Postfix (Linux)

Die globale Journaladresse finden

Die globale Jounaladresse können Sie unter Archivierung > Status finden. Stellen Sie sicher, dass die Archivierung aktiviert ist.


Wenn die Adresse auf @MX-record-hostname endet, verwenden Sie bitte stattdessen @mx1.europeanmx.eu.

Einrichtung der globalen Journaling-Adresse in Postfix (Linux)

Bei den nachfolgenden Anweisungen gehen wir davon aus, dass Procmail noch nicht verwendet wird. Wenn Sie bereits Procmail einsetzen, beginnen Sie bitte mit Schritt 3.

1

Installieren Sie Procmail mit der Paketverwaltungslösung Ihrer Distribution, z. B:

  • Ubuntu: sudo apt install procmail
  • CentOS: sudo yum install procmail
2

Bearbeiten Sie die Datei /etc/postfix/main.cf und fügen Sie die folgende Zeile hinzu:

mailbox_command = /usr/bin/procmail -a "$EXTENSION"
3

Bearbeiten Sie die Datei /etc/procmailrc und fügen Sie die folgende Zeile hinzu:

:0c:
To:\W?.*@(?<domain>.*)(?=(?:From: ?.*@(\k<domain>)))
!<12h66634-2fg6-8f49-bd81-3b7c11b692dc-meinedomain.de@mx1.europeanmx.eu>
$DEFAULT

Tauschen Sie 12h66634-2fg6-8f49-bd81-3b7c11b692dc-meinedomain.de@mx1.europeanmx.eu gegen Ihre globale Jounal-Adresse aus EuropeanMX aus.

4

Starten Sie Postfix neu.

sudo postfix reload


WICHTIG: Die auf dieser Seite beschriebenen Einstellungen haben sich in unserer Testumgebung bewährt, sollten aber in Ihrer eigenen Konfiguration überprüft werden.


Empfanden Sie diesen Artikel als hilfreich?

Nein Ja