Zusaetzliche Ports fuer Postfix: Unterschied zwischen den Versionen

Aus
Zeile 80: Zeile 80:
  -o smtpd_recipient_restrictions=reject_unknown_recipient_domain,permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=reject_unknown_recipient_domain,permit_sasl_authenticated,reject
</pre>
</pre>
[[Category:Mailstation]]
[[Category:Postfix]]

Version vom 12. September 2010, 12:25 Uhr

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 Email 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

Kofiguration

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

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