Postfix-Cyrus-Procmail-SpamAssassin Howto

von David Lais

+ Konfiguration - Postfix

Jetzt geht es endlich an unser Herzstück :-)

Als erstes nehmen wir Änderungen in master.cf vor (zu finden unter /etc/postfix/.) Dort ändern wir folgende Zeile:

flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}

in folgende um

user=cyrus argv=/usr/lib/cyrus/deliver -e -r ${sender} -m ${extension} ${user}

Weiter geht es mit der main.cf (Auch unter /etc/postfix/ zu finden.)

Als erstes ändern wir den Hostnamen.

myhostname = mein.host.de

Postfix muss natürlich noch wissen, welche Domains zu ihm gehöhren.

mydestination = mein.host.de, mein.zweiter.host.de, mysql:/etc/postfix/mysql-mydestination.cf

Bitte beachten, dass die Domains mit "," zu trennen sind.

Der Mailboxtransport erfolgt über Procmail

mailbox_transport = procmail

Da wir später mit Procmail arbeiten, wird Cyrus nur als "fallback" konfiguriert, das heisst: sollte Procmail aus irgendeinem Grund nicht funktionieren, bekommen die Benutzer trotzdem ihre Post.

Fallback

fallback_transport = cyrus

Nun legen wir die virtual alias Map fest. Damit sagen wir Postfix, welcher virtuelle Benutzer zu welcher Domain gehöhrt.

virtual alias

virtual_alias_maps = hash:/etc/postfix/virtual, mysql:/etc/postfix/mysql-virtual.cf

Noch schnell die canonical Map zum Ändern der E-Mails anlegen. Beispiel: Selbst wenn eine Mail an: autor@postix-howto.de- adressiert ist, erhält sie der Benutzer david@postfix-howto.de. Dabei sieht die E-Mail für den Benutzer so aus, als sei sie direkt an david@postfix-howto.de geschickt worden.

canonical maps

sender_canonical_maps = hash:/etc/postfix/canonical, mysql:/etc/postfix/mysql-canonical.cf

SMTP Authentifizierung

Weiter geht es mit unserer SMTP Authentifizierung, damit NUR unsere Benutzer Mails verschicken können. Ansonsten wären wir ein "Open Relay" und das wird oft von Spammern benutzt, um ihren Müll loszuwerden.

Dazu hängen wir folgende Zeilen an die /etc/postfix/main.cf.

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes

Jetzt legen wir noch einige Regeln fest, die bestimmen, wann wir eine Mail annehmen und wann nicht. Mit einer geschickten Auswahl sperren wir schon eine Menge Spam von vornherein.

Zur Hilfe benutzen wir sogenannte RBL(Realtime Blackhole List). In solchen Listen sind Server aufgelistet, die unerwŁnschten Spam verschicken.

Los geht's mit einigen Konfigurationsschritten:

default_rbl_reply = $rbl_code RBLTRAP: You can't send us a E-mail today!!!

smtpd_helo_required = yes
smtpd_delay_reject = yes

default_rbl_reply = $rbl_code RBLTRAP:, sollte ein Server in einer der RBL Listen stehen, bekommt er die eingegebene Nachricht.
smtpd_helo_required, bedeutet, dass der sendende Mailserver uns erst "Hallo" sagen muss. Viren machen das oft nicht und somit können Sie sich schlecht bei uns verteilen.

Jetzt kommen wir zu unseren Regeln. Bitte drauf achten, dass die Zeilen hinter dem "=" mit einem TAB eingerückt sind, da Postfix sie sonst als neue Befehle erkennt.

Regel: smtpd_recipient_restrictions

smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    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,
    reject_rbl_client zombie.dnsbl.sorbs.net,
    reject_rbl_client relays.ordb.org,
    reject_rbl_client opm.blitzed.org,
    reject_rbl_client list.dsbl.org,
    reject_rbl_client sbl.spamhaus.org,
    reject_rbl_client blackholes.easynet.nl,
    reject_rbl_client unconfirmed.dsbl.org,
    reject_rbl_client dynablock.njabl.org,
    reject_rbl_client dialup.blacklist.jippg.org,
    reject_rbl_client cbl.abuseat.org,
    permit

smtpd_recipient_restrictions, überpüft den zu sendenden Server nach bestimmten Kriterien, sollte z.B. der hostname nicht stimmen, ist die Wahrscheinlichkeit, dass es ein Spammer ist sehr hoch und wir blocken ihn.

Regel: smtpd_helo_restrictions

smtpd_helo_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_non_fqdn_hostname,
    reject_invalid_hostname,
    reject_rhsbl_client rhsbl.sorbs.net,
    reject_rhsbl_sender rhsbl.sorbs.net,
    reject_rbl_client opm.blitzed.org,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client relays.ordb.org,
    reject_rbl_client list.dsbl.org,
    reject_rbl_client sbl.spamhaus.org,
    reject_rbl_client unconfirmed.dsbl.org,
    reject_rbl_client list.dsbl.org,
    reject_rbl_client dynablock.njabl.org,
    reject_rbl_client dialup.blacklist.jippg.org,
    reject_rbl_client opm.blitzed.org,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client multihop.dsbl.org,
    reject_rbl_client dialup.rbl.kropka.net,
    reject_unauth_pipelining

smtpd_helo_restrictions, überpüft den sendenden Server, nachdem er "Hallo" gesagt hat.

Regel: smtpd_sender_restrictions

smtpd_sender_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination,
    reject_rhsbl_client rhsbl.sorbs.net,
    reject_rhsbl_sender rhsbl.sorbs.net,
    reject_rbl_client relays.ordb.org,
    reject_rbl_client list.dsbl.org,
    reject_rbl_client sbl.spamhaus.org,
    reject_rbl_client unconfirmed.dsbl.org,
    reject_rbl_client list.dsbl.org,
    reject_rbl_client dynablock.njabl.org,
    reject_rbl_client dialup.blacklist.jippg.org,
    reject_rbl_client multihop.dsbl.org,
    reject_rbl_client dialup.rbl.kropka.net,
    reject_rbl_client opm.blitzed.org,
    reject_rbl_client cbl.abuseat.org,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unauth_pipelining

Nun fahren wir mit der TLS Konfiguration fort.

TLS

smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/certs/key.pem
smtpd_tls_cert_file = /etc/certs/cert.pem
smtpd_tls_CAfile = /etc/certs/cert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

smtp_use_tls = yes
smtp_tls_key_file = /etc/certs/key.pem
smtp_tls_cert_file = /etc/certs/cert.pem
smtp_tls_CAfile = /etc/certs/cert.pem

Das war es schon! Postifx ist nun TLS fähig.

Damit später SpamAssassin nicht heiss läuft, kann Postifx schon bevor es Mails annimmt, auf bestimmte Kriterien prüfen, um unerwünschte Mails von vorneherein zu blocken. Dazu legen wir die Datei: /etc/postfix/body_checks an und füllen sie mit folgendem Inhalt.

/etc/postfix/body_check

/^((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 attachment type not allowed

ACHTUNG: Ich musste aus Platzgründen Zeilenumbrüche erzwingen. Bitte achtet drauf, dass ihr die Zeilenumbrüche entfernt.

Wer bestimmte Dateien dennoch erlauben will, löscht die Endung einfach heraus.

Nun fügen wir noch folgenden Eintrag in die /etc/postfix/main.cf

mime_header_checks=pcre:/etc/postfix/body_check

Damit hätten wir auch Postfix geschafft.


« Zurük zu Cyrus | Weiter mit Procmail »