Mail-Relay mit Postfix

Aus Synology Wiki
Wechseln zu: Navigation, Suche

Absenderbasiertes Relaying mit Postfix

Absenderbasiertes Relaying ist etwas sehr feines bei Postfix und sorgt dafür, dass die Emails jeden Absenders über den korrekten SMTP Server (SMTP Server des jeweiligen Emailanbieters z.B. gmx oder gmail) verschickt werden kann. Dazu gibt es die entsprechenden Infos bei postfix.org im Manual

Hintergrund

Viele Benutzer der Mailstation wollen diese als zentralen Emailgateway für's LAN verwenden. Dabei stellen sich v.a. bei der Verwendung einer dynamischen externen IP Adresse einige Probleme und Unwägbarkeiten. Das Problem bei dynamischen Absenderadressen ist es, dass sie von vielen Antispamlösungen auf Mailservern als Kriterium für Spam erkannt werden. Dazu werden Listen eingesetzt, die die IP-Blöcke aller dynamischen Adressen weltweit enthalten.

Es ist jetzt von Provider zu Provider unterschiedlich wie diese Listen eingesetzt werden: So gibt es Provider die dynamische IP Adressen als alleiniges Kriterium verwenden oder solche die eine ganze Armada von Listen und Scannern einsetzen. Die Email kann an verschiedenen Stellen auf der Empfangsseite geblockt bzw. als Spam markiert werden.

Der einfachste Fall ist es wenn der SMTP Server der Gegenseite den Empfang der Email ablehnt und damit eine Fehlermeldung an den Sender schickt. Problematisch wird es dann wenn der Server die Email akzeptiert hat, eine dahintergeschaltete Software die Email aber verwirft. Dabei erhält der Absender keinerlei Information, dass die Email nicht zugestellt werden konnte. Ich persönlich setze daher die Liste mit dynamischen IP Adressen direkt auf dem Postfix auf. Damit stelle ich sicher, dass der SMTP Dialog eine Fehlermeldung an den Client bei dynamischen Adressen sendet.

Es gibt verschiedene Ansätze die man beim Versenden von Emails von der DS verwenden kann, um die "Spamgefahr" zu senken. Der einfachste Weg ist es den Postfix Server anzuweisen externe Relay Server zum Versenden der Emails zu nutzen. Dabei wird sichergestellt, dass die Email via eine fixe IP Adresse verschickt wird, was das Risiko mindert, dass eine Email fälschlicherweise als Spam erkannt wird.

Der zweite - schwierigere - Weg ist es die Emails direkt an die Empfangsserver zuzustellen. Dabei besteht aber das Risiko, dass je nach Provider der Empfang der Emails verweigert resp die Email als Spam markiert wird. Wenn man die Emails direkt zustellen möchte, dann sollte man seine IP Adresse auf einer Seite wie z.B. rbl-check.org prüfen. Dann sollte man probieren bei jeder Liste wo die IP auftaucht via deren Webseite die Austragung der IP zu beantragen. Erst dann hat man eine realistische Chance Emails direkt (direct-MX) zu versenden.

Beispiele von Seiten zur Prüfung der IP

Hier soll es aber um die Relay-Lösung gehen, weil sie eigentlich immer und ohne grösseren Aufwand klappt. Wenn ihr direct-mx einsetzen wollt, dann solltet ihr Euch das Folgende anschauen. Denn es gibt einige Listen, die eine Austragung von dynamischen IPs nicht zulassen. Und es gibt Provider, die diese Listen einsetzen. Für diese hartnäckigen Fälle kann man auch empfängerbasiert relayen.

Wichtig

Damit der Postfix solche Dateien auch lesen kann müssen diese mittels einem speziellen postfix-Kommando in die entsprechende Form gebracht werden

# Konvertieren des Files
/usr/syno/mailstation/sbin/postmap /path/to/file.ext
# Neueinlesen der Files
/usr/syno/mailstation/sbin/postfix reload

Die Konfigurationsfile für die Mailserverprozesse liegen auf der DS unter

/usr/syno/mailstation/etc

Die beiden wichtigsten Files sind dabei main.cf und master.cf die zu Postfix (SMTP Server) gehören. In dieses Verzeichnis solltet ihre alle euren "persönlichen" Konfigfiles (siehe weiter unten) ablegen. Damit ist alles zentral zusammen und kann sehr einfach "gebackuppt" werden

Konfiguration

Es gibt für den Postfix mehrere Möglichkeite Emails via Relay zu versenden: Einmal die Möglichkeit alle Emails über den gleichen Relay zu schicken oder pro User der Absenderdomain einen Relay Server zu benutzen. Weitergehende Infos kannst du hier finden.

Alle Emails über den gleichen Server

Dazu muss man in der /usr/syno/mailstation/etc/main.cf folgende Variabeln setzen

relayhost

Hier könnt ihr den globalen Relay Server angeben. Wenn ihr hier eine Angabe macht, dann gilt das für alle Emails die nach extern verschickt werden &nbsp

relayhost = mail.isp.tld
relayhost = mail.isp.tld:submission
relayhost = [mail.isp.tld]
relayhost = [mail.isp.tld]:submission

Die obigen 4 Beispiele zeigen die unterschiedlichen Möglichkeiten der Notation.

  1. Die Email wird an den MX-Host im DNS von mail.isp.tld auf Port 25 verschickt
  2. Die Email wird an den MX-Host im DNS von mail.isp.tld auf Port 587 verschickt
  3. Die Email wird an die IP der DNS Abfrage nach mail.isp.tld auf Port 25 verschickt
  4. Die Email wird an die IP der DNS Abfrage nach mail.isp.tld auf Port 587 verschickt
smtp_sasl_password_maps = hash:/usr/syno/mailstation/etc/sasl_passwd

Hier wird die Datei angegeben, die die Userdaten für die einzelnen Relayserver enthält. Diese Datei muss von root angelegt werden und nach dem Eintragen der Daten mittels postmap und postfix reload konvertiert und in Postfix eingebunden werden.

#sasl_passwd
mail.isp.tld      user@isp.tld:secret
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/usr/syno/mailstation/etc/sasl_passwd
smtp_use_tls = yes
smtp_tls_enforce_peername = no
smtp_sasl_security_options = noanonymous

Zur Sicherheit sollte der SMTP Client von Postfix beim Senden der Emails an externe Relayserver eine sichere Verbindung aufbauen. Passworte werden sonst im Klartext an die Server übermittelt

/usr/syno/mailstation/sbin/postmap /usr/syno/mailstation/etc/sasl_passwd

Pro User der Absenderdomain einen eigenen Relay Server

Diese Methode ermöglicht es, mehreren Benutzern den gleichen Relay Server zu benutzen, aber mit unterschiedlichen Benutzernamen und Passworten.

smtp_sasl_auth_enable = yes
smtp_sender_dependent_authentication = yes
smtp_sasl_password_maps = hash:/usr/syno/mailstation/etc/sasl_passwd
sender_dependent_relayhost_maps = hash:/usr/syno/mailstation/etc/sender_relay
smtp_use_tls = yes
smtp_tls_enforce_peername = no
smtp_sasl_security_options = noanonymous

In dieser Datei werden die Absenderadressen einem Relay Host zugewiesen

#sender_relay
user@isp.tld   mail.isp.tld
foo@isp.tld    mail.isp.tld

#sasl_passwd
user@isp.tld   user@isp.tld:secret
foo@isp.tld    foo@isp.tld:totalSecret
/usr/syno/mailstation/sbin/postmap /usr/syno/mailstation/etc/sasl_passwd
/usr/syno/mailstation/sbin/postmap /usr/syno/mailstation/etc/sender_relay

Selektives Realying mit Postfix

Los geht's

Hier möchte ich schnell zeigen wie man es erreichen kann nur bestimmte Empängeradressen über einen Relay Server zu verschicken. Gerade wenn man als Absender eine dynamische IP hat, kann es sein, dass man zu gewissen Domains Emails direkt zustellen kann (direct-mx), zu anderen jedoch nicht (web.de wäre so ein Kanditat oder gmx bei aktiviertem Spamfilter mittels Blacklists). Jetzt könnte man alle Emails des Absenders (z.B. eure dynamische Domain) über den Relay Server verschicken, was aber schade ist wenn man sich die Mühe gemacht hat seine IP Adresse von den vielen Listen zu entfernen.

transport

Mittels transport kann man selektiv festlegen welche Empfängeradressen via Relay verschickt werden sollen. Der Rest geht dann immer noch direkt an die Empfangsserver (ich kriege gut 90% meiner Emails direct-mx an die Empfangsserver). Dazu öffnet/erstellt eine Datei Namens transport (am besten im Postfix Verzeichnis) und tragt dort z.B.

web.de smtp:[meinProvider.tld]

ein. Für [meinProvider.tld] können die folgenden Notationen gebraucht werden. Danach müsst ihr diese Datei noch mittels postmap behandeln

/usr/syno/mailstation/sbin/postmap /usr/syno/mailstation/etc/transport

und noch den Eintrag in main.cf

#/usr/syno/mailstation/etc/main.cf
transport_maps = hash:/usr/syno/mailstation/etc/transport

und dann ein ein

/usr/syno/mailstation/sbin/postfix reload

danach sollten Emails an web.de Adressen via dem Mailserver Eures Providers verschickt werden.

Externe Authentifizierung

Wenn dieser Mailserver eine Auth verlangt könnt ihr wieder in der main.cf

smtp_sasl_password_maps = hash:/usr/syno/mailstation/etc/sasl_passwd

den Pfad zum sasl File festlegen. Dann diese Datei erstellen und einen Eintrag in der Art

[meinProvider.tld]      meinUser@meinProvidr.tld:meinPasswort

machen. Danach diese Datei wieder mit postmap behandeln und dann mit postfix reload den Postfix die Konfig Files neueinlesen lassen

Danach sollte der smtp Client des Postfix sich korrekt an Eurem Relayserver anmelden und die Email verschicken können

Links: