1) Ich bin mir ziemlich sicher, dass wegen reject am Ende der smtpd_client_restrictions alle Clients abgewisen werden, die nicht sasl-authorisiert sind, nicht aus mynetwork stamen und nicht in /etc/postfix/access mit OK gelistet sind. Das werde ich nicht testen, du kannst es aber - einfach eine Email von z.B. gmx & Co. schicken (der gmx-Server und der gmx-Sender dürfen natürlich nicht in der access mit OK stehen).
2) Dein Problem im ersten Posting erst überhaupt mit der falschen Platzierung von reject_rbl_client in smtpd_recipient_restrictions entstanden.
Ich versuche im folgendem meine config zu beschreiben. Die Regeln sind ziemlich streng, entsprechen aber meinen Anforderungen/Vorstellungen am besten. Ich bekomme gar kein Spam/Viren. Spam kommt überhaupt sehr selten (1-3 mal am Tag) bis zu Spamassassin. Und das ohne header/body-checks. Der Server selbst wird aber pro Tag mit mehreren Tausenden Emails konfrontiert. Und nur 30-60 davon sind legitim.
Vielleicht hilft das jemandem (steht aber alles in der Postfixdocu).
Folgendes hat keinen Anspruch auf absolute Richtigkeit und es wird keine Verantwortung dafür übernommen.
Damit, alle smtpd-checks durchlaufen bevor Email abgelehnt wird (ist per default schon auf "yes")
Code: Select all
smtpd_client_restrictions =
check_client_access cidr:/etc/postfix/client.cidr,
check_client_access hash:/etc/postfix/access,
permit_sasl_authenticated,
reject_unknown_client,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client unconfirmed.dsbl.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client ix.dnsbl.manitu.net,
permit
Zeile 1: Access-Regeln, wo IP's/Netze nach CIDR-Notation eingetragen sind. Manchmal nützlich, um nicht nur anhand A/B/C-Netzen und Hostnamen zu filtern. Z.B. "123.456.789/32 REJECT Spamhost rejected"
2: Um anhand der Hostnamen der verbundenen Clients zu filtern.
3. Clients erlauben, die mit sasl authorisiert sind.
4. Clients verbieten, die keinen RDNS gesetzt haben. Meist sind das Spamsender und wenn ein "richtiger" Mailserver kein RDNS gesetzt hat, dann halte ich das für seine Fehlkonfiguration, nicht für meine.
5. Clients verbieten, die als dynamische IP dort gelistet sind. Das können auch keine "richtige" Mailserver sein, meiner Auffassung nach.
6-9. Das ist selbsterklärend und jeder hat da eigene Vorlieben.
10. Wenn keine der Restrictions zugeschlagen hat, Client zulassen.
ps: hier kein "permit_mynetwork", weil auch SMTP-Versand vom localhost oder von in mynetwork eingetragenen Rechnern mit SMTP-AUTH geschehen soll. Falls irgendeine Mailsoftware das nicht kann, ist das schlechte Software, meiner Auffassung nach.
Code: Select all
smtpd_sender_restrictions =
check_sender_access hash:/etc/postfix/access,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
reject_unverified_sender,
permit
1. Wie Zeile 2 oben, nur anhand Emailadressen/Domains
2. Die Absenderadresse muss einen vollqualifizierten Domainnamen haben.
3. Die Absenderdomain muss ein MX- oder A-Record haben.
4. Die Absenderadresse muss auch zustellbar sein.
5. Wenn keine der Restrictions zugeschlagen hat, Absender erlauben.
ps: hier kein "permit_sasl_authenticated", weil sonst die autorisierten User den Absender fälschen können - will ich aber nicht haben.
Code: Select all
smtpd_recipient_restrictions =
check_recipient_access hash:/etc/postfix/access,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
permit_auth_destination,
reject_unverified_recipient,
permit_sasl_authenticated,
reject_unauth_destination,
reject
1. Wie oben, anhand Emailadressen/Domains
2. Die Empfängeradresse muss einen vollqualifizierten Domainnamen haben.
3. Die Empfängerdomain muss ein MX- oder A-Record haben.
4. Empfängeradressen erlauben, die auf meinem Server liegen.
5. Wenn nicht auf meinem Server, auf Zustellbarkeit prüfen.
6. Sasl-authorisierten Clients relay auf zustellbare Adressen erlauben.
7. Wenn nicht authorisiert, dann kein relay erlauben.
8. Wenn keine der Restrictions zuschlägt, Empfänger ablehnen (kommt bis dahin praktisch nicht).
ps: Zeilen 2-5 sind eher für meine {SMTP}-User gedacht, falls diese absichtlich oder unbewusst (angenommen es gäbe einen Virus, der die Anmeldedaten aus dem Mailprogramm ausliest) Spam versenden. Damit würde Teil der Emails nicht angenommen und nicht in meiner Queue landen. Hier habe ich noch spf-Prüfung, aber dies erfordert zusätliche Softwareinstallation.
Code: Select all
smtpd_helo_restrictions =
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_unknown_hostname,
permit
1. Erlaube alles im "helo" für authorisierte Clients.
2. Ungültige Hostnamen im helo ablehnen.
3. Nur vollqualifizierte Hostnamen erlauben.
4. Hostname muss ein MX- oder A-Record haben.
5. Wenn keine der Restrictions zugeschlagen hat, helo erlauben (kommt bis dahin praktisch nicht).
Code: Select all
smtpd_data_restrictions =
reject_multi_recipient_bounce,
reject_unauth_pipelining,
permit
1. Bounces an mehrere Empfänger ablehnen.
2. Weist die Anfrage zurück, wenn der Client SMTP-Befehle vorzeitig sendet ohne zu wissen, dass Postfix SMTP-Befehl pipelining unterstüzt. Dies stoppt Emails von Mailsoftware, die unpassend SMTP-Befehl pipelining benutzen, um Ã?bergaben zu beschleunigen. (Ã?bersetzung aus dem Englischen).
3. Wenn keine der Restrictions zugeschlagen hat, Daten erlauben.
Code: Select all
smtpd_helo_required = yes
unverified_sender_reject_code = 550
unverified_recipient_reject_code = 550
unknown_client_reject_code = 550
unknown_address_reject_code = 550
unknown_hostname_reject_code = 550
address_verify_sender = verify_sender@meinedomain.de
address_verify_map = btree:/var/spool/postfix/verify
Hier ist alles selbsterklärend. Wichtig ist nur, dass
verify_sender@meinedomain.de auch wirklich existiert, weil viele andere Server auch den Absender prüfen.
Falls eine Email, die über SMTP kommt, doch durch das ganze schafft, wird sie an "Before queue filter" übergeben, dieser macht Virenprüfung und jagt die Email durch Spamassassin. Erst dann kommt sie in die Queue und wird ausgeliefert/relay(t). Emails, die von localhost mit pickup versendet werden, werden durch "After-Queue Content Filter" gejagt, der das gleiche macht.
Anregungen und Kritik sind immer willkommen :)