Postfix Konfiguration · 13 min read · Nov 14, 2025
Postfix-Spamfilter mit Ubuntu Dapper, MailScanner, SpamAssassin, Razor, Pyzor, DCC und ClamAV - Seite 2
2 Einrichtung von Postfix
Wir benötigen einige Beispieldateien aus dem Postfix-Quellcode. Beachten Sie, dass der Quellcode, den wir hier abrufen, der originale Quellcode ist, bevor er von den Ubuntu/Debian-Paketbetreuern modifiziert wird:
cd /usr/local/src
wget http://us.archive.ubuntu.com/ubuntu/pool/main/p/postfix/postfix_2.3.3.orig.tar.gz
tar xzvf postfix_2.3.3.orig.tar.gzStoppen Sie Postfix:
postfix stopSTELLEN SIE SICHER, dass Sie auf “n” bei “überschreiben?” antworten. Machen Sie jeden Abschnitt separat:
cp -i /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
cp -i /usr/local/src/postfix-2.3.3/conf/* /etc/postfix
cp -i /etc/postfix/header_checks /etc/postfix/body_checks
cp -i /etc/postfix/access /etc/postfix/sender_access2.1 master.cf bearbeiten
Übrigens, achten Sie auf die beiden Postfix-Konfigurationsdateien, die sich beide im Ordner /etc/postfix befinden. Mehr als ein Administrator hat sich zwischen master.cf und main.cf verwirrt!
Zuerst sichern Sie die aktuelle master.cf:
cp /etc/postfix/master.cf /etc/postfix/master.cf-origBearbeiten Sie master.cf:
vi /etc/postfix/master.cfWir müssen zwei Elemente unterhalb des Abholdiensttyps hinzufügen. Der Abholdienst “holt” lokale E-Mails (lokal bedeutet “auf dieser Maschine”) und liefert sie aus. Später werden wir einen täglichen/wöchentlichen Bericht erstellen, den diese Box uns zusenden wird, und da der Bericht Inhalte enthalten wird, die den Bericht selbst als Spam klassifizieren, ist dies eine Möglichkeit, die Inhaltsfilterung für E-Mails zu umgehen, die von dieser Maschine generiert werden.
Fügen Sie dies direkt unter dem ‘pickup’-Diensttyp hinzu:
-o content_filter=
-o receive_override_options=no_header_body_checksEs sollte so aussehen, wenn Sie fertig sind:
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks2.2 main.cf bearbeiten
Dies ist die Hauptkonfigurationsdatei für Postfix. Für weitere Informationen lesen Sie bitte die Kommentare in der main.cf-Datei, die Dokumentation in /usr/local/src/postfix-2.3.3/README_FILES oder die Postfix-Website http://www.postfix.org/documentation.html.
Zuerst müssen wir die main.cf-Datei sichern.
cp /etc/postfix/main.cf /etc/postfix/main.cf-origDa wir unseren Spamfilter so einrichten, dass er alle seine E-Mails an einen anderen Server weiterleitet, verwenden wir das, was Postfix als “Relay-Domain-Adressklasse” betrachtet, was im Wesentlichen bedeutet, dass wir aus den über 300 konfigurierbaren Parametern in Postfix eine kleine Gruppe von Parametern verwenden, die unseren Zweck am besten erfüllt. Diese Adressklasse wird hier beschrieben: http://www.postfix.org/ADDRESS_CLASS_README.html#relay_domain_class. Wir fungieren auch als primärer MX für einen anderen Server, also lesen Sie bitte diesen entsprechenden Abschnitt: http://www.postfix.org/STANDARD_CONFIGURATION_README.html#backup.
Es ist üblich, in Postfix Elemente in Nachschlagetabellen zu speichern. Wir werden mehrere Hashtabellen verwenden, um Daten zu speichern, die Postfix verwenden wird. Sobald wir Klartextdaten in diesen Tabellen haben, verwenden wir den postmap-Befehl, um Binärdateien (Berkeley DB-Format) zu erstellen, die Postfix letztendlich verwenden wird, um die Daten abzurufen. Zum Beispiel, wenn Sie eine Datei namens “sampletext” haben und Sie postmap sampletext ausführen, wird eine neue Datei “sampletext.db” erstellt. Postfix wird Daten aus “sampletext.db” abrufen, nicht aus “sampletext”. Es gibt mehr als ein Dutzend anderer Arten von Datendateien, die Postfix verwenden kann, um Daten zu speichern. Hashtabellen sind eine geeignete Wahl für mehrere Tabellen, die wir verwenden werden, und pcre (Perl Compatible Regular Expressions) ist für einige Tabellen geeignet, die wir verwenden werden, um Daten zur Inhaltsfilterung zu halten. In seiner einfachsten Form besteht eine Hashtabelle aus 2 Datenstücken, einem Schlüssel und einem Wert; typischerweise als Schlüssel/Wert-Paar bezeichnet. Der Schlüssel und der Wert sind durch Leerzeichen (typischerweise ein Leerzeichen oder Tabulator) getrennt. Die Daten in einer typischen Tabelle, die wir in Postfix verwenden, würden etwa so aussehen:
[email protected] OK
[email protected] OK
[email protected] OKVorgeschlagene Lektüre: http://www.postfix.org/DATABASE_README.html.
Wir werden postconf verwenden, um main.cf zu bearbeiten, anstatt die Parameter manuell in die Datei mit vi einzugeben. Die “”-Zeichen sind erforderlich, wie sie in den Befehlsfeldern erscheinen.
2.2.1 alias_maps
Wir müssen hier einfach eine Korrektur der Standardeinstellung vornehmen:
postconf -e "alias_maps = hash:/etc/aliases"Erstellen Sie die Aliasdatei:
newaliasesSie werden sehen, dass jetzt eine aliases.db-Datei im /etc/-Verzeichnis vorhanden ist. Das ist es, was Postfix normalerweise liest. Jetzt, da Sie eine ordnungsgemäße Aliasdatei haben und da wir unser System so konfigurieren, dass es alle E-Mails weiterleitet (keine E-Mails werden lokal zugestellt), wird die Aliasdatei von Postfix ignoriert. Stattdessen werden wir virtual_alias_maps für die Adressumleitung einrichten. Andere Programme funktionieren möglicherweise nicht richtig, wenn die /etc/aliases-Datei fehlt, also entfernen Sie sie nicht.
2.2.2 myorigin
Der Domainname, von dem E-Mails, die auf dieser Maschine erstellt werden, zu kommen scheinen. Wenn beispielsweise cron E-Mails an “[email protected]” sendet, wird es so erscheinen, als käme es von “[email protected]”.
postconf -e "myorigin = example.com"Offensichtlich ersetzen Sie in den obigen und allen folgenden Befehlen meine Beispielparameter wie “example.com” durch Ihre eigenen spezifischen Werte.
2.2.3 myhostname
Der vollständig qualifizierte Domainname (FQDN) der Maschine, die das Postfix-System ausführt.
postconf -e "myhostname = sfa.example.com"2.2.4 mynetworks
Dies sind die Maschinen, denen ich vertraue und für die ich E-Mails an jedes Ziel weiterleiten werde. Im Allgemeinen wird dies auf mein LAN oder nur auf einen oder einige vertrauenswürdige interne Mailserver eingestellt. Zusammen mit relay_domains ist dies eine wichtige Einstellung, die richtig konfiguriert werden muss, um zu vermeiden, dass Sie ein “offenes Relay” werden. Mit anderen Worten, Ihre Box könnte E-Mails an Domains akzeptieren und weiterleiten, für die sie nicht zuständig ist. Ein offenes Relay ist ein ernstes Problem und kann dazu führen, dass Sie von verschiedenen Internet-Anti-Spam-Listen auf die schwarze Liste gesetzt werden, unter anderem. Sie können einen einzelnen Computer, mehrere einzelne Computer oder jeden Computer in einem bestimmten Netzwerk angeben. Sie können auch bestimmte Hosts in Ihrem Netzwerk ausschließen, indem Sie die IP-Adresse mit einem Ausrufezeichen voranstellen. Wenn Sie mit mehreren internen Mailservern zu tun haben und/oder mehreren Maschinen und/oder Subnetzen erlauben möchten, über diesen Server weiterzuleiten (vorsichtig!), fügen Sie sie einfach in diesem Parameter im CIDR-Format hinzu und trennen Sie die Netzwerke wie folgt:
postconf -e "mynetworks = 127.0.0.0/8, 222.222.222.222/24, 10.10.10.10/24"Das obige erlaubt den Maschinen in den Netzwerken 222.222.222.222/24 und 10.10.10.10/24, SMTP-E-Mails über diese Box weiterzuleiten. Die 127.0.0.0/8 ist da, um dem lokalen Server das Senden zu ermöglichen; Sie müssen mindestens diese hier einfügen. Sie könnten auch die IP-Adresse eines einzelnen Computers angeben. Wenn Sie nur Ihre dezimale Netzmaske (d.h. 255.255.255.240) kennen und diese in CIDR-Format umwandeln müssen, versuchen Sie es mit http://www.wildpackets.com/products/free_utilities/ipsubnetcalc/overview. (Geben Sie eine IP-Adresse in Ihrem Netzwerk ein, wählen Sie die Registerkarte Subnetzinfo, wählen Sie Ihre Subnetzmaske aus, Ihr Netzwerk ist Subnetz-ID/Maschinenbits.) Oder schauen Sie sich einfach http://www.belchfire.net/webtools/cidr_conversion_table.html an.
Wenn Sie keine Netzwerke oder Computer haben, die über diesen Server weiterleiten, führen Sie diesen Befehl nur mit der 127.0.0.0/8-Adresse aus.
2.2.5 message_size_limit
Maximale Größe der E-Mail, die Postfix an der “Vordertür” zulässt.
postconf -e "message_size_limit = 10485760"Das obige erlaubt E-Mails bis zu 10 MB, der Wert ist in Bytes (1010241024). E-Mails, die größer sind als dies, können möglicherweise vom Antiviren-Scanner (ClamAV) umgangen werden. Sie könnten dies erhöhen, wenn Sie auch ClamAV so konfigurieren, dass es Dateien größer als 10 MB scannt. Wenn Sie Nachrichten größer als 10 MB zulassen, achten Sie auf den RAM.
2.2.6 local_transport
Geben Sie eine Fehlermeldung für lokale Zustellversuche zurück.
postconf -e "local_transport = error:No local mail delivery"2.2.7 mydestination
Ein leeres mydestination sagt Postfix, dass diese Maschine nicht das endgültige Ziel ist.
postconf -e "mydestination = "2.2.8 local_recipient_maps
Ein leeres local_recipient_maps sagt Postfix, dass es keine lokalen Postfächer gibt.
postconf -e "local_recipient_maps = "2.2.9 virtual_alias_maps
Unser Spamfilter muss in der Lage sein, E-Mails für postmaster@yourIP zu empfangen. Berichten zufolge erwarten einige Dinge tatsächlich, dass diese Fähigkeit existiert. Wir werden auch E-Mails an abuse@yourIP zulassen. Da wir keine lokale E-Mail-Zustellung zulassen, wird E-Mail, die an die IP-Adresse unseres Spamfilters adressiert ist, mit einer Fehlermeldung abgelehnt. Die Einrichtung von virtual_alias_maps ermöglicht es, E-Mails an diese beiden Konten an eine interne Adresse weiterzuleiten. Stellen Sie sicher, dass Ihr Exchange-Server so konfiguriert ist, dass er Nachrichten empfängt, die an “root”, “postmaster” und “abuse” adressiert sind.
Richten Sie einen Verweis auf die virtuelle Datei ein:
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"Bearbeiten Sie dann die virtuelle Datei:
vi /etc/postfix/virtualFügen Sie diese beiden Zeilen an den Anfang der virtuellen Datei hinzu:
postmaster [email protected]
abuse [email protected]Speichern und beenden Sie die Datei, und erstellen Sie dann die Binärdatei, die Postfix verwenden wird:
postmap /etc/postfix/virtual2.2.10 relayhost
/etc/postfix/relayhost sagt unserem Spamfilter, wie ausgehende E-Mails gesendet werden sollen. relayhost enthält die IP oder den FQDN des E-Mail-Servers, den Sie verwenden möchten, um ausgehende E-Mails zu senden. Mit anderen Worten, nicht-lokale E-Mails, E-Mails, die an Domains außerhalb unserer gerichtet sind. Nicht zu verwechseln mit der /etc/postfix/transport-Datei, die verwendet wird, um eingehende E-Mails, die an eine unserer lokalen Domains gerichtet sind, zu routen. Wir kommen gleich zur Transportdatei.
Wenn relayhost leer oder nicht konfiguriert ist, wird unser Spamfilter für diesen Zweck verwendet.
Hinweis: Die Klammern [] sind in diesem Befehl erforderlich.postconf -e "relayhost = [mymailserver.example.com]"Optional können Sie Ihren Spamfilter als Ihren ausgehenden SMTP-Server einrichten, aber Sie sollten zuerst Ihren Reverse-DNS-Eintrag einrichten und natürlich Ihren “A”-Eintrag und “MX”-Eintrag, damit andere Server im Internet Ihre E-Mails akzeptieren. Wenn Sie Ihre Clients und andere SMTP-Server so umkonfigurieren, dass sie unseren Spamfilter für ihre ausgehenden E-Mails verwenden, wird diese E-Mail denselben Scanprozess durchlaufen wie Ihre eingehenden E-Mails (es sei denn, Sie finden einige raffinierte Anpassungen, um dies zu verhindern). Wenn diese noch nicht vorhanden sind, ist es sehr nützlich, relayhost vorübergehend mit Ihrem aktuellen, funktionierenden, ausgehenden Mailserver zu konfigurieren.
Stellen Sie auch sicher, dass der relayhost, den Sie benennen, so konfiguriert ist, dass er E-Mails von dieser Maschine akzeptiert und DASS Maschine nicht diese Maschine für IHRE ausgehenden E-Mails verwendet (können Sie “Schleife” sagen?).
2.2.11 relay_recipient_maps
Wir werden eine Tabelle aller Benutzer in jeder Domain erstellen, für die wir E-Mails akzeptieren. Diese Tabelle wird verwendet, um E-Mails abzulehnen, die an nicht vorhandene Benutzer in unseren Domain(s) adressiert sind. MACHEN SIE SICH NOCH KEINE SORGEN… Zu diesem Zeitpunkt werden wir nur die Struktur der Tabelle einrichten. Wenn Sie Exchange verwenden, gibt es HOWTOs, die den automatisierten Prozess zum Erstellen der relay_recipients-Tabelle beschreiben. Es ist in letzter Zeit sehr häufig geworden, dass Spammer Wörterbuchangriffe starten; sie senden Tausende von Nachrichten an eine Domain mit erfundenen Benutzernamen. Unser Spamfilter müsste jede einzelne dieser E-Mails verarbeiten, es sei denn, Sie tragen gültige Benutzer in die relay_recipients-Tabelle ein. Unterschätzen Sie die Bedeutung davon nicht und stellen Sie sicher, dass Sie nicht der einzige in Ihrer Organisation sind, der weiß, wie man Änderungen an dieser Datei vornimmt. Wir werden später zur Automatisierung zurückkommen, nachdem Ihr Spamfilter funktionsfähig ist. Wenn Sie eine überschaubare Anzahl von Benutzern haben, geben Sie sie manuell ein.
Richten Sie einen Verweis auf eine Datei ein, die wir erstellen werden, um die Daten zu speichern:
postconf -e "relay_recipient_maps = hash:/etc/postfix/relay_recipients"Bearbeiten Sie dann relay_recipients:
vi /etc/postfix/relay_recipientsIm Moment werden wir E-Mails für alle Benutzer in unseren Domain(s) akzeptieren, also geben Sie jede Domain, für die Sie E-Mails akzeptieren, im folgenden Format ein:
@example.com OK
@example2.com OK
@example3.com OKErstellen Sie dann die Binärdatei, die Postfix verwenden wird:
postmap /etc/postfix/relay_recipientsDie obigen Einträge sind vorübergehend. Sie sind Platzhalter, die E-Mails an Ihre Domains zulassen. Sie MÜSSEN die obigen Einträge irgendwann in naher Zukunft entfernen und sie durch jede einzelne gültige E-Mail-Adresse Ihrer Empfänger ersetzen. Wenn Sie bereit sind, jeden Benutzer einzeln in die relay_recipients-Datei einzugeben, entfernen Sie zuerst (oder kommentieren Sie) die Daten oben, die E-Mails an alle Benutzer in der Domain zulassen, und listen Sie dann jeden Benutzer einzeln in der Form auf:
[email protected] OK
[email protected] OK
[email protected] OKTatsächlich wird in dieser speziellen Datei der Wert “OK”, der nach jedem Benutzer aufgeführt ist, für nichts verwendet, aber es muss etwas vorhanden sein, da eine Hashtabelle einen Wert nach dem Schlüssel erfordert. Beachten Sie, dass Sie durch das Entfernen von [email protected] aus dieser Datei verhindern können, dass Benutzer aus dem Internet E-Mails an [email protected] senden, aber tun Sie dies nicht, wenn einige Ihrer eigenen Server diese Maschine verwenden müssen, um E-Mails an root zu senden. Wenn Sie Exchange verwenden, finden Sie hier die HOWTOs. Selbst wenn Sie Exchange nicht verwenden, fand ich die Informationen zu Dateiübertragungen nützlich. http://www2.origogeneris.com:4000/relay_recipients.html - http://www-personal.umich.edu/~malth/gaptuning/postfix/ - http://www.unixwiz.net/techtips/postfix-exchange-users.html - http://postfix.state-of-mind.de/patrick.koetter/mailrelay/ - http://doc.nettools.ru/Unix/Postfix&intserver/
2.2.12 transport_maps
Sagt Postfix, wo nach einer Transportdatei gesucht werden soll. Wir verwenden die Transportdatei, um Postfix zu sagen, wo gültige E-Mails für unsere Domain(s) weitergeleitet werden sollen. Die Einrichtung von Transport ist ähnlich wie die Einrichtung von relay_recipients.
Erstellen Sie einen Verweis darauf in main.cf:
postconf -e "transport_maps = hash:/etc/postfix/transport"Bearbeiten Sie dann transport:
vi /etc/postfix/transportFügen Sie für jede Domain, für die Sie E-Mails bearbeiten werden, eine neue Zeile hinzu, ähnlich dem folgenden Beispiel. Die IP-Adresse ist die des Servers, der das endgültige Ziel von Nachrichten ist, die an unsere Domain(s) adressiert sind (unser Exchange-Server). Es spielt keine Rolle, wo Sie diese Elemente in der Datei platzieren, aber ich mag es, sie oben zu platzieren.
example1.com smtp:[10.10.10.100]
example2.com smtp:[10.10.10.101]
example3.com smtp:[10.10.10.102]DOCH die Klammern auf diesen Zeilen einfügen!). Sie können auch den FQDN-Hostnamen anstelle einer IP-Adresse verwenden (d.h. smtp:[exchange1.example.com]).
Jetzt erstellen Sie die Binärdatei, die Postfix verwenden wird:
postmap /etc/postfix/transport2.2.13 relay_domains
Für welche Ziel-Domains (und Subdomains davon) dieses System E-Mails weiterleiten wird. Sie möchten hier NUR Domains auflisten, für die Sie verantwortlich sind, E-Mails zu akzeptieren. Neben der Erlaubnis, E-Mails an diese Domains weiterzuleiten, impliziert diese Einstellung auch, dass wir keine E-Mails an Domains weiterleiten, die hier nicht aufgeführt sind, und daher ist dies ein kritischer Bestandteil, um zu verhindern, dass der Spamfilter ein offenes Relay wird.
postconf -e "relay_domains = hash:/etc/postfix/relay_domains"Bearbeiten Sie relay_domains:
vi /etc/postfix/relay_domainsFügen Sie für jede Domain, für die Sie E-Mails bearbeiten werden, eine neue Zeile hinzu, ähnlich dem folgenden Beispiel:
example1.com OK
example2.com OK
example3.com OKDiese Datei hat derzeit ein sehr ähnliches Format wie relay_recipients, verwechseln Sie die beiden nicht. Diese Datei kann kein ‘@’ vor dem Domainnamen haben. Ich wollte nur erwähnen, dass einige sehr kluge Leute bekannt dafür sind, dies getan zu haben…
Erstellen Sie dann die Binärdatei, die Postfix verwenden wird:
postmap /etc/postfix/relay_domainsHINWEIS: relay_recipients, relay_domains und transport sind Dateien, mit denen Sie sehr vertraut werden. Jedes Mal, wenn Sie Benutzer zu einer Domain hinzufügen, eine Domain hinzufügen oder eine Domain aus Ihrer Liste entfernen müssen, müssen Sie alle drei dieser Dateien aufrufen und bearbeiten. Nach der Bearbeitung führen Sie ein postmap für jede aus und starten Postfix mit 'postfix reload'. Auf der letzten Seite gibt es einen Teil "Wartung", der eine README enthält, die als schnelle Referenz für einige häufige Aufgaben in Ihren Spamfilter kopiert werden kann.2.2.14 recipient_delimiter
Wenn Ihr aktueller SMTP/POP3/IMAP-Server so konfiguriert ist, dass er Adress-Erweiterungen verwendet (zum Beispiel [email protected]), sollte recipient_delimiter so eingestellt werden, dass es mit dem Trennzeichen übereinstimmt, das Sie derzeit verwenden, um den Benutzernamen von der Adress-Erweiterung zu trennen. Dies hat nichts mit dem Komma zu tun, das Sie verwenden, um mehrere Personen zu trennen, an die Sie E-Mails senden ([email protected], [email protected], [email protected]) mit Ihrem E-Mail-Client (MUA). Sie sind möglicherweise damit vertraut, wenn Sie GMail verwenden. Wenn Sie ein GMail-Konto haben, können Sie E-Mails in diesem Format senden, zum Beispiel [email protected] und einen Filter in GMail einrichten, um alles mit dem ‘testtag’ in der Adresse zu kennzeichnen und den Posteingang zu überspringen. Kürzlich wurde diese Funktion häufig verwendet, um diese Tags zu verwenden, wenn Sie sich für einen Webdienst anmelden, und dann nach dem Tag zu filtern. Wie auch immer, wenn Sie es haben, wissen Sie, dass Sie es haben, wenn Sie keine Ahnung haben, wovon ich spreche, folgen Sie den Anweisungen “Ich verwende keine Empfänger-Trennzeichen”.
3 Typische Einstellungen - Wählen Sie eine aus.
- Ich verwende keine Empfänger-Trennzeichen:
postconf -e "recipient_delimiter = "- Ich verwende derzeit das Pluszeichen:
postconf -e "recipient_delimiter = +"- Ich verwende derzeit das Minuszeichen:
postconf -e "recipient_delimiter = -"2.2.15 NAT/Proxy-Einstellungen (Optional)
Wenn (und nur wenn) die IP-Adresse, die Sie der Welt präsentieren, nicht die IP-Adresse Ihres Spamfilters ist (Sie sind so konfiguriert, dass Sie hinter einer NAT-Firewall oder einem Proxy-Server laufen), fügen Sie die folgenden beiden Zeilen zu main.cf hinzu, und kommentieren Sie proxy_interfaces aus und konfigurieren Sie es (60.50.40.30 stellt die öffentliche IP-Adresse dar):
# Geben Sie hier Ihre NAT/Proxy-EXTERNE Adresse an.
#proxy_interfaces = 60.50.40.30Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.