Spam Bekämpfung · 5 min read · Nov 12, 2025

Wie man Spam mit der Postfix-Konfiguration bekämpft

Wie man Spam mit der Postfix-Konfiguration bekämpft

In diesem Leitfaden lernen Sie, wie Sie den Standard-Falko-Mail-Leitfaden für Postfix (+Auth SMTP + Quota), https://www.howtoforge.com/virtual_postfix_mysql_quota_courier, anpassen, um SPAM besser zu bekämpfen und ein wenig Rückwärtskompatibilität zu den älteren Qmail-Systemen zu ermöglichen.

Also, lassen Sie uns anfangen…

Der HowtoForge-Leitfaden ist großartig für alles, jedoch ist ein sehr beschäftigter Mailserver, der Spam Assasin mit 1000 Nachrichten pro Minute ausführt, ein CPU-Killer. Die beste Antwort ist, die Mail zu stoppen, bevor sie Spam Assasin erreicht, mit einer Reihe von RBL (Realtime Blacklists) und RHBL (das Gleiche, aber anders), Greylistings und Helo-Checks.

Zuerst wollen wir die bestehenden smtpd-Einschränkungen ändern und eine ganze Reihe neuer Prüfungen hinzufügen, um die Menge an Mail, die das System akzeptiert, zu reduzieren in /etc/postfix/main.cf

### Prüfungen, um schlecht formatierte E-Mails zu entfernen  
smtpd_helo_required     = yes  
strict_rfc821_envelopes = yes  
disable_vrfy_command = yes  
  
unknown_address_reject_code  = 554  
  
unknown_hostname_reject_code = 554  
  
unknown_client_reject_code   = 554  
  
  
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, regexp:/etc/postfix/helo.regexp, permit  
  
  
  
### Wenn sender_checks geändert werden, muss diese Datei mit postmap  regeneriert werden, um eine Berkeley DB zu generieren  
  
smtpd_recipient_restrictions =   
   check_client_access hash:/etc/postfix/helo_client_exceptions  
   check_sender_access    hash:/etc/postfix/sender_checks,  
   reject_invalid_hostname,  
### Kann Probleme mit Auth SMTP verursachen, also seien Sie vorsichtig!  
   reject_non_fqdn_hostname,  
##################################  
   reject_non_fqdn_sender,  
   reject_non_fqdn_recipient,  
   reject_unknown_sender_domain,  
   reject_unknown_recipient_domain,  
   permit_mynetworks,  
   reject_unauth_destination,  
  
  
# Fügen Sie hier RBL-Ausnahmen hinzu, wenn rbl_client_exceptions geändert wird, muss diese  
Datei mit postmap  regeneriert werden, um eine  
Berkeley DB zu generieren  
          check_client_access hash:/etc/postfix/rbl_client_exceptions,  
          reject_rbl_client cbl.abuseat.org,  
          reject_rbl_client sbl-xbl.spamhaus.org,  
          reject_rbl_client bl.spamcop.net,   
          reject_rhsbl_sender    dsn.rfc-ignorant.org,  
  
         check_policy_service inet:127.0.0.1:60000  
         permit 

Jetzt zur Erklärung, aber zuerst müssen wir ein paar Dateien erstellen:

Die erste Datei, die wir erstellen möchten, ist /etc/postfix/helo.regexp und diese wird enthalten:

/^subdomain\.host\.com$/           550 Verwenden Sie nicht meinen eigenen Hostnamen  
/^xxx\.yyy\.zzz\.xxx$/             550 Verwenden Sie nicht meine eigene IP-Adresse  
/^\[xxx\.yyy\.zzz\.xxx\]$/       550 Verwenden Sie nicht meine eigene IP-Adresse  
/^[0-9.]+$/                          550 Ihre Software entspricht nicht RFC 2821  
/^[0-9]+(\.[0-9]+){3}$/              550 Ihre Software entspricht nicht RFC 2821

Allein dies wird Spammer abweisen, die versuchen, den helo-Befehl zu senden und entweder den Server, der die Mail empfängt, durch IP oder durch Hostnamen zu impersonieren, sowie einige der Mails abzulehnen, die nicht den RFC 2821-Standards entsprechen.

Als Nächstes müssen wir /etc/postfix/helo_client_exceptions erstellen:

#Diese Client-IP-Adressen dürfen fqdn-Prüfungen umgehen  
# Ein Kommentar zur Identifizierung der untenstehenden IP-Adresse  
www.xxx.yyy.zzz OK  

Diese Datei wird benötigt, falls ein schlecht funktionierender Mailserver den richtigen helo-Befehl nicht senden kann und Sie die Annahme von Mails aus dieser Quelle zulassen müssen. Nach meiner Erfahrung sind Dinge wie Standalone-Geräte, CCTV-Kameras schlecht darin, Standards einzuhalten, sodass Sie möglicherweise eine Ausnahme dafür machen müssen.

Bevor Änderungen in dieser Datei verwendbar werden, müssen Sie ausführen

postmap /etc/postfix/helo_client_exceptions

Dies wird eine Datei namens /etc/postfix/helo_client_exceptions.db erstellen

Weiter geht es mit /etc/postfix/sender_checks, das es Ihnen ermöglicht, die verschiedenen FQDN-Prüfungen zu umgehen und einen bestimmten Absender durchzulassen. Dies ist besonders nützlich, wenn ein Unternehmen ein internes Mailnetzwerk wie domain.com betreibt, aber E-Mails auf int.domain.com laufen und es keine DNS-Einrichtung für int.domain.com gibt. Dies ist großartig für die Sicherheit, aber nicht großartig, da externe DNS nicht über die interne Struktur informiert ist und Postfix daher int.domain.com ablehnen wird.

[email protected]      REJECT   
[email protected]   OK 

Einmal mehr muss diese Datei nach der Änderung eine Berkeley DB-Datei erstellt werden, und so erstellen wir sie mit:

postmap /etc/postfix/sender_checks

Als Nächstes haben wir unsere RBL-Prüfungen. Es gibt viele Websites, die sich RBLs widmen, aber um die Länge des Artikels zu verkürzen, einfach gesagt, diese Listen werden ständig aktualisiert und bieten IPs und Hostnamen, die Spammer verwenden, um Mails weiterzuleiten. Jede IP, die versucht, Mail an Ihren Mailserver zu senden, wird gegen diese Listen (4 oben verwendet) überprüft, und wenn die IP nicht in den RBLs aufgeführt ist, akzeptiert der Mailserver die Mail. Natürlich finden sich Server ständig unbeabsichtigt auf diesen Listen oder die Listen benötigen 24 Stunden, um die auf die schwarze Liste gesetzte IP nach einem Spam-Ausbruch zu entfernen, sodass es immer am besten ist, erneut eine Möglichkeit zu haben, diese Prüfungen zu umgehen.

Um dies zu tun, erstellen wir eine Datei namens /etc/postfix/rbl_client_exceptions:

## Ein zufälliger Kommentar  
www.xxx.yyy.zzz OK   

Einmal mehr müssen Sie postmap ausführen, um die Berkeley DB-Datei zu generieren

postmap /etc/postfix/rbl_client_exceptions

Die letzte Zeile der smtpd-Einschränkungen ist der Greylisting-Filter. Ich werde nicht ins Detail gehen, da bereits ein Leitfaden auf howtoforge existiert, https://www.howtoforge.com/greylisting_postfix_postgrey, aber wenn Sie kein Greylisting verwenden möchten, lassen Sie einfach die Zeile weg

check_policy_service inet:127.0.0.1:60000

Die smtpd-Einschränkungen sind sehr einfach zu befolgen, bis einer der Checks das grüne Licht für die Nachricht gibt, um in die Postfix-Warteschlange zu gelangen. Die meisten Antworten sind nicht sicher, fahren Sie fort, es sei denn, es wird ein ausdrückliches NEIN gegeben, die Nachricht wird die Liste der Prüfungen hinunterbewegt.

QMAIL-LEGACY

DJB (Dan Bernstein) entwickelte eine Alternative zu SMTP namens QMQP. Es wird gesagt, dass es schneller mit weniger Overheads ist. Wenn Sie also Ihre alten Qmail-MTAs durch Postfix ersetzen, müssen Sie möglicherweise die Unterstützung für QMQP aktivieren.

Wir tun dies, indem wir Folgendes in /etc/postfix/main.cf hinzufügen

qmqpd_authorized_clients = $mynetworks   
qmqpd_error_delay = 5s  
qmqpd_timeout = 300s   

Realistisch gesehen können Sie gegen alles authentifizieren, aber ich habe mich entschieden, gegen mynetworks zu authentifizieren. Nachdem Sie das Obige in main.cf hinzugefügt haben, müssen Sie /etc/postfix/master.cf weiter modifizieren und sicherstellen, dass es Folgendes enthält:

628      inet  n       -       -       -       100       qmqpd    

Jetzt müssen Sie nur noch Postfix neu starten

/etc/init.d/postfix restart

Sie können Ihr neues QMQP-fähiges Postfix überprüfen, indem Sie eingeben:

telnet localhost 628

Authentifizierung über IP (Ideal für Smarthost-Relay in MS Exchange-Servern)

Als Nächstes werden wir den Leitfaden ein wenig modifizieren, um die Einstellung von mynetworks einfacher zu gestalten als über Flachdateien, nämlich /etc/postfix/main.cf

Erstellen Sie die folgende /etc/postfix/mysql-mynetworks.cf

user = mail_admin  
password = password  
dbname = mail  
table = allowed_hosts  
select_field = 'IP'  
where_field = IP  
hosts = 127.0.0.1  
additional_conditions = and active='yes'   

Sie benötigen zu diesem Zeitpunkt das folgende SQL

CREATE TABLE allowed_hosts (
active enum(‘yes’,’no’) NOT NULL default ‘1’,
IP varchar(15) NOT NULL default ‘’,
Client varchar(128) NOT NULL default ‘’,
Comments text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Schließlich aktivieren wir dies, indem wir unsere mynetworks-Zeile in der main.cf von Postfix auf:

mynetworks = 127.0.0.0/8, proxy:mysql:/etc/postfix/mysql-mynetworks.cf    

Schließlich starten Sie Postfix neu, damit die Änderungen wirksam werden:

chmod o= /etc/postfix/mysql-mynetworks.cf
chgrp postfix /etc/postfix/mysql-mynetworks.cf

/etc/init.d/postfix restart

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.