Zusaetzliche Ports fuer Postfix

Aus Synology Wiki
Wechseln zu: Navigation, Suche

Zusätzlicher Port für Postfix

Per Default läuft ein SMTP Server auf Port 25. Wenn nur ein Port verwendet wird, dann hat das einen entscheidenden Nachteil: Sowohl E-Mails, die direkt an die DS geschickt werden, als auch E-Mails von lokalen Benutzern, die diese via die DS versenden, landen auf dem gleichen Port. Problematisch wird es dann, wenn auf dem Server eine Antispam-Software wie z.B. Spamassassin auf dem Port läuft. E-Mails die externe User an die DS schicken, sollen ja nach Spam gescannt werden. Bei E-Mails von lokalen Benutzern ist das jedoch unnötig und erzeugt nur sinnlos Last auf der DS.
Die Verarbeitung einer eingehenden E-Mail ohne jegliche externen Filter dauert einen Sekundenbruchteil. Wenn jedoch noch ein Spamfilter involviert ist, dann steigt die Verarbeitungszeit auf 2 bis 3 Sekunden! Die Lösung dieses Dilemas ist ein zusätzlicher Port auf dem der SMTP Server lauscht. Dieser ist ziemlich schnell eingerichtet

Konfiguration

Die verantwortliche Datei für die Konfiguration ist /usr/syno/mailstation/etc/master.cf

Wichtig ist bei Änderungen folgendes:

192.168.1.99:25 inet    n       -       n       -       -       smtpd
 -o content_filter=spamfilter:dummy
  • Eine Konfiguration eines Dienstes hat in der ersten Zeile immer TABs als Trennzeichen.
  • Weitere Zeilen, die zu einem Dienst gehören, müssen immer mit einem Leerzeichen eingeleitet werden.
  • Innerhalb einer weiteren Zeile muss man aber Leerzeichen als Trenner benutzen

Das -o steht für Override d.h. jeder Dienst wird erstmal mit den Optionen aus main.cf eingerichtet. Der Admin kann dann die gewünschten Optionen mittels -o so überschreiben wie es für den entsprechenden Dienst sein soll.
Im obigen Beispiel habe ich Spamassassin in die Postfix Zustellkette eingebaut. Wer mehr dazu wissen möchte kann mal in unser Wiki schauen

Wichtig: Wenn ihr eine Konfig wie oben auf eine explizite IP erstellt, dann müsst ihr zwei Dinge beachten:

Erstens braucht ihr dann ebenfalls eine Konfig für die localhost IP (127.0.0.1)

127.0.0.1:25    inet    n       -       n       -       -       smtpd
 -o receive_override_options=no_address_mappings

die -o Zeile ist nicht unbedingt nötig. Die erste Zeile muss aber in master.cf rein, sonst läuft Euer Webmail nicht mehr.

Zweitens müsst ihr sicherstellen, dass der Eintrag, den Synology in master.cf setzt nicht aktiviert ist. Per default legt die Mailstation in master.cf immer einen Service

smtp    inet    n       -       n       -       -       smtpd

an. Dieser Eintrag steht im Konflikt zur Definition per expliziter IP von oben und würde den Postfix Server sofort abschmieren lassen. Diese Zeile müsste also auskommentiert werden, damit postfix starten kann. Leider setzt die Mailstation diesen Eintrag immer wiedermal, oft bei einem Reboot. Dann schmiert natürlich der Postfix ab.

Dieser Beitrag setzt defakto voraus, dass die Mailstation im DSM komplett deaktiviert ist und die benötigten Dienste via eigene Startscripte gestartet werden. Macht ihr das nicht, dann wird master.cf irgendwann wieder geschrieben und Postfix verweigert jeglichen Dienst

Beliebiger Port

192.168.1.99:2525 inet    n       -       n       -       -       smtpd
 -o receive_override_options=no_header_body_checks

Obige Anweisung erstellt einen smtp-Daemon auf Port 2525 mit den gegebenen Optionen. Wichtig ist dabei v.a., dass 1. SASL Auth aktiviert wird und 2. die recipient_restrictions korrekt gesetzt sind (sonst kann man über diesen Port beliebig relayen). Diese prüfen beim **RCPT TO** Kommando ob der sendende Client aus mynetworks (IP-Adress Bereich, zu konfigurieren in main.cf) kommt oder der User an Dovecot authentifiziert werden konnte. In diesen beiden Fällen wird die Email in jedem Fall akzeptiert und weitergeschickt resp lokal zugestellt. Ansonsten kriegt der Sender einen REJECT vorgesetzt.

SMTP Submission Port 587

submission      inet    n       -       n       -       -       smtpd
 -o receive_override_options=no_header_body_checks

Obige Anweisung lässt Postfix auf Port 587 auf jeder erreichbaren IP lauschen (z.B. auch 127.0.0.1)

Sicherheit

Wenn man mindestens 2 Ports verwendet hat man einen entscheidenden Vorteil gegenüber nur einem Port: Man kann die smtpd-Restriktionen für interne und externe User unterschiedlich steuern. Ich habe bei mir 3 Ports für den Postfix. Einmal Port 25 (der default Port), der via main.cf seine smtpd_restrictions erhält, welche so ausschauen

smtpd_delay_reject = yes

smtpd_helo_required = yes

smtpd_client_restrictions =
        permit_mynetworks,
        reject_rbl_client,
        reject_rhsbl_client

smtpd_sender_restrictions =
        reject_unknown_address,
        reject_unknown_sender_domain

smtpd_recipient_restrictions =
        reject_unauth_destination,
        reject_unknown_recipient_domain,
        permit

Diese erlauben nur den Zugriff von Clients mit E-Mails, die auf der DS ihre Endstation haben. Über diesen Port können keine E-Mails nach extern verschickt werden. Zusätzlich sitzt spamassassin auf diesem Port und scannt alle E-Mails (konfiguriert in master.cf). Ausserdem sind "Bremsen" für Clients eingebaut, die immer wieder Fehler produzieren. Bei 4 oder mehr smtp Fehlern wird die Verbindung vom Server geschlossen, ausserdem muss der Client nach 2 und mehr Fehlern jeweils 2 Sekunden warten, ehe der Server wieder eine Kommando vom Client entgegennimmt. Das bremst Spammer ziemlich gut aus ;-)

192.168.100.102:25      inet    n       -       n       -       -       smtpd
 -o receive_override_option=no_header_body_checks
 -o content_filter=spamfilter:dummy
 -o smtpd_soft_error_limit=1
 -o smtpd_hard_error_limit=3
 -o smtpd_error_sleep_time=2

Dann verwende ich Port 2525 nur im LAN für Clients, die sich nicht sauber bei einem SMTP Server authentifizieren können (z.B. Statusmails vom Router). Auf diesem Port läuft kein spamassassin und die Restrictions kommen aus master.cf

192.168.100.102:2525      inet    n       -       n       -       -       smtpd
 -o smtpd_sender_restrictions=reject_unknown_address,reject_unknown_sender_domain
 -o smtpd_recipient_restrictions=reject_unknown_recipient_domain,permit_mynetworks,reject

Zusätzlich leite ich diesen Port am Router nicht weiter.

Dann noch Port 587 (submission) für Mails nach extern, welche von authorisierten Usern kommen (ich verwende für die Authentifikation den dovecot, das ist per default nicht so). Auch dieser Port hat keinen Spamfilter

submission      inet    n       -       n       -       -       smtpd
 -o smtpd_etrn_restrictions=reject
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_reject_unlisted_sender=yes
 -o smtpd_sender_restrictions=reject_unknown_address,reject_unknown_sender_domain
 -o smtpd_recipient_restrictions=reject_unknown_recipient_domain,permit_sasl_authenticated,reject