Feintuning Postfix (Howto)

Nachdem wir Postfix anhand des vorherigen Howtos aufgesetzt haben und dieser auch schon fehlerfrei läuft geht es nun an das Feintuning.

Zunächst werden wir Postfix soweit vorbereiten, dass sich Postfix für ausgehende Emails an einen externen, vertrauenswürdigen Mailserver wendet, also einen Relay Server für den Versand externer Post verwendet (Smarthost). In der Regel muss man sich hier beim fremden Mailserver authentifizieren, bevor man seine Mails zur weiteren Verarbeitung bei dem Server hinterlegen darf. Wir bedienen uns hierzu des SMTP Auth. Postfix arbeitet in diesem Fall nicht als Server, sondern als Client.

Hierzu legen wir zunächst im Postfix Konfigurationsorder einen Unterordner sasl an (Dieser Schritt ist obsolet wenn der erste Teil des Howtos komplett umgesetzt wurde (siehe smtpd.conf):

mkdir -p /etc/postfix/sasl

Jetzt legen wir eine Datei namens sasl_passwd an. Der Inhalt der Datei sieht wie folgt aus:

mail.provider.org benutzername:passwort

An erster Stelle kommt der Mailserver, den wir als Relay für unsere Emails benutzen möchten (mail.provider.org), anschließend durch ein Leerzeichen getrennt der Benutzername und darauf folgend das Passwort des Benutzer, durch einen Doppelpunkt vom Benutzer getrennt (benutzername:passwort). Im eigenen Interesse sollte man bei den Passwörtern auf allzu exotische Zeichen verzichten – ebenso wie auf den Doppelpunkt, damit es hier keine Komplikationen mit der Datei gibt. Natürlich können hier auch mehrere Kombinationen für verschiedene Zielserver hinterlegt werden.

Da die Passwörter in dieser Datei als Klartext hinterlegt sind sollten wir den Zugriff nur für den Benutzer root oder postfix zulassen. Der aufmerksame Leser wird bemerken, dass der Postfix unter selbigem User läuft. Wenn also nur der User root Zugriff auf die Datei hat, wie sollte dann postfix den Inhalt lesen können? Ganz einfach: Postfix wird vom Benutzer root gestartet und wechselt erst für den Betrieb den User (postfix). Daher kann die Datei beim Start eingelesen werden. Hier die entsprechende Anpassung der Berechtigungen:

chown root:root /etc/postfix/sasl/sasl_passwd
chmod 600 /etc/postfix/sasl/sasl_passwd

Sollte man aus irgendeinem Grund den Besitzer des Files nicht ändern wollen, so sollte man zumindest dafür sorgen, dass die Dateien nur vom Besitzer les- und schreibbar sind (600). Postfix selbst kann mit der Datei im Klartext allerdings nichts anfangen und braucht wie immer ein File mit Hashwerten. Dieses erzeugt man durch folgenden Befehl:

postmap hash:/etc/postfix/sasl/sasl_passwd

Sollte die Datei verändert worden sein muss man anschließend wieder den postmap über die Datei laufen lassen. Sollte man dies vergessen, werden die Änderungen nicht aktiv, da Postfix ja nur mit der erstellten Hashwertdatei arbeitet – und diese beinhaltet ja noch die alte Konfiguration.

Die Konfigurationsdatei main.cf müssen wir dann noch entsprechend konfigurieren:

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
relayhost = mail.provider.org

Den ersten Parameter „smtp_sasl_auth_enable = yes“ haben wir bereits im vorherigen Postfix Howto gesetzt. Er ist hier nur der Vollständigkeit halber noch ein mal genannt. Mit dem Parameter smtp_sasl_password_maps teilen wir Postfix mit, wo er die Hashwert Datei mit den Passwörtern findet, die wir im vorherigen Schritt angelegt haben. Der Securityparameter noanonymous verbietet Postfix eine anonyme Anmeldung auszuführen. Es wird also immer unser eingetragener User und das entsprechende Passwort benutzt. Über den smtp_sasl_security_options Parameter könnte man auch die Verwendung von Plaintextauthentifizierungen unterbinden. Hierzu wird einfach ein weiterer Parameter, durch Komma getrennt, angefügt: „noplaintext“. Mit dem Parameter relayhost geben wir Postfix mit, an welchen Mailserver er sich als Client zwecks Übergabe der zu versendenden Mails wenden soll.

Anschließend muss Postfix neu gestartet werden, damit die Änderungen auch geladen werden. Sollte es Probleme geben empfiehlt es sich eine Email an eine externe Adresse zu verschicken und parallel mit folgendem Befehl das Logfile des Mailservers im Auge zu behalten:

tail -f /var/log/mail.log

Der nächste Schritt besteht nun darin, Postfix von vorn herein bestimmte Emails oder Emailtypen nicht annehmen zu lassen. Postfix prüft dann bereits während der eigentlich Übertragung ob die Email gewünscht ist oder nicht. So kann man amavis und CO viel Arbeit ersparen, denn diese müssen sich dann nicht um die unerwünschten Emails kümmern, da diese erst gar nicht weitergereicht werden.

Hierzu legen wir zunächst eine Datei mit dem Namen body_check im Verzeichnis /etc/postfix ab und füllen die Datei mit folgendem Inhalt:

/^((Content-(Disposition: attachment;|Type:).*| +)| *)(file)?name *= *"?.*
.(lnk|asd|hlp|ocx|reg|bat|c[ho]m|cmd|exe|dll|vxd|pif|scr|hta|jse?|sh[mbs]|vb[esx]|ws[fh]|wmf)"
? *$/ REJECT This attachment type is not allowed. Please do not spam and please not try silly things.

Achtung, bitte die Zeilenumbrüche entfernen. Hierbei handelt es sich lediglich um eine Zeile! Wir verbieten hiermit Postfix die Annahme von Mails mit folgenden Anhängen: lnk asd hlp ocx reg bat c[ho]m cmd exe dll vxd pif scr hta jse? sh[mbs] vb[esx] ws[fh] wmf. Sollte eine Email in das Muster passen wird Postfix die Email gar nicht erst annehmen und mit einem entsprechenden Kommentar zurückweisen (REJECT <KOMMENTAR>). Der kann natürlich nach herzenslust angepasst werden.

Als Parameter in die main.cf tragen wir folgendes ein:

mime_header_checks=pcre:/etc/postfix/body_check

Jetzt noch den Postfix neustarten und Testen. Achtung, hierdurch werden nicht nur eingehende, auf das Muster passende Emails verworfen, sondern auch der Versand solcher mit der Reject Fehlermeldung quittiert. Sollten sich die Rechner in unserem Netzwerk also einmal mit einem Wurm infiziert haben könnte dies schon die erste Hürde für die Verbreitung des Schädlings darstellen. Zudem reduziert es die Rechenzeit von amavis enorm – dieser hätte sich nämlich sonst nach Annahme der Email durch den Server mit dem (unerwünschten) Inhalt befassen müssen.

Wenn wir Absender auf eine verspätete Zustellung von Emails hinweisen wollen können wir das mit folgendem Eintrag in der main.cf tun. Dieser bewirkt, dass der Server nach 4 Stunden erfolgloser Zustellungsversuche dem Absender der Email eine Nachricht zukommen lässt. 4 Stunden ist der Default Wert, sinnvoll sind hier Werte ab 24 Stunden, sofern es sich nicht um zeitkritische Emailsysteme handelt.

# Uncomment the next line to generate "delayed mail" warnings
delay_warning_time = 4h

Nun bringen wir Postfix noch einige weitere Checks bei, die eventuell dafür sorgen können, Spam und unerwünschten Inhalt gleich an der Haustüre abzuwimmeln. Einige Parameter haben wir bereits im ersten Teil des Postfix Howtos in der main.cf gesetzt (permit_mynetworks, reject_unknown_recipient_domain, permit_sasl_authenticated, reject_unauth_destination), diese erweitern wir nun:

smtpd_recipient_restrictions =
        permit_mynetworks,
        reject_unknown_recipient_domain,
        permit_sasl_authenticated,
        reject_unauth_destination,
        reject_invalid_hostname,
        reject_non_fqdn_hostname,
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
        reject_unauth_pipelining,
        reject_unauth_destination,

Auchdie smtpd_sernde_restrictions haben wir bereits im ersten Teil gesetzt (reject_unknown_address) und erweitern diese entsprechend.

smtpd_sender_restrictions =
        permit_sasl_authenticated,
        permit_mynetworks,
        reject_unknown_address,
         reject_unauth_destination,
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
        reject_unauth_pipelining

Der folgende Parameter weist Postfix an, sich höflich bei einer Kontaktaufnahme zu melden.

smtp_always_send_ehlo = yes

Wir verwenden eine Blacklist und geben bei einem Treffer einen entsprechenden Text aus:

default_rbl_reply = $rbl_code RBLTRAP: We don't accept spam!

Soweit, so gut. Als nächstes werden wir dann die Helferlein von Postfix konfigurieren (siehe nachfolgendes Howto)

About the author