Halli Leute! Vielleicht habt ihr es schon gemerkt, dass ich mir einen neuen Server einrichte ,denn heute gibts ne Anleitung, wie ich mir Postfix mit Spamassasin und Procmail einrichte, damit mein Mailserver nicht mehr so mit Spam überschüttet wird.
Voraussetzungen
Diese Anleitung ist für Debian 7 Wheezy geschrieben, sollte aber auch auf anderen Debian basierten Systemen funktionieren. Standardmäßig ist exim als Mailserver installiert. Die Installation von Postfix wird diesen automatisch entfernen, da ein Server keine zwei Mailserver haben darf. Für die Anleitung wird ein Root-Zugriff benötigt. Als Editor verwende ich vim (das darf euch aber reichlich egal sein ;)). Grundverständnisse von Konsole und das Bearbeiten von Dateien setzte ich aus gegeben voraus.
Der Server beherbergt verschiedene Domains und Webseiten und verschiedenste Postfächer und Weiterleitungen.
Postfix
Postfix ist ein mächtiger Mailserver der unsere Postfächer und Domains verwaltet. Weitere Informationen über Postfix sind hier zu finden: Wikipediaeintrag zu Postfix.
Ich habe mich für Postfix entschieden, da dies der quasi Standard bei Linux-Maschinen ist. Ich bin mir sicher, es gibt viele schöne Alternativen, aber ich habe mich bereits sehr an Postfix gewöhnt.
Postfix Installation
Zunächst müssen wir uns natürlich erst mal Postfix installieren und konfigurieren.
aptitude install postfix
Postfix wird installiert und eine Installationsprozedur wird gestartet. Zunächst soll man den Typ der Mailkonfiguration wählen:
- No configuration
- Internet Site
- Internet with smarthost
- Satelite system
- Local only
Wir wählen natürlich „Internet Site“. Anschließend fragt die Installation welches unser mail name ist. Dies ist in der Regel eine Domain. Da wir aber mehrere Domains mit dem Server abhandeln wollen, setzten wir hier eine Defaultadresse (sucht euch eine eurer Domains aus). Das wars auch schon mit der Installation.
Postfix konfiguration
Zunächst muss festgelegt werden, für welche Domains Emails akzeptiert werden sollen. Ich verwalte dies über eine extra Datei. Dazu erstellen wir zunächst einen Ordner und dann die entsprechende Datei:
mkdir /etc/postfix/virtual/ vim /etc/postfix/virtual/domains
In der Datei sollte eine Liste von Domains stehen, für die der Mailserver Mails akzeptieren soll. Beispielsweise also etwas wie das:
domain1.net domain1.de domain2.de domain3.com
Nun müssen wir eine Datei anelgen, in dem die Emailweiterleitungen bzw. Konten verwaltet werden.
vim /etc/postfix/virtual/addresses
Eine Beispielkonfiguration könnte wie folgt aussehen:
################################# # # # domain1.de # # # ################################# domain1.de DOMAIN @domain1.de nichtempfehlenswert@gmx.de mail@domain1.de blablub@gmail.com hans@domain1.de hans@localhost
Die Bedeutung der Konfiguration:
- # : Dies ist ein stink normaler Kommentar, damit man sich in seiner Konfiguration auch ein bisschen zurechtfindet.
- domain1.de DOMAIN : Dies legt die Domain fest. Für jede Domain die berücksichtigt werden soll, muss ein solcher Identifyer in der Konfiguration vorhanden sein.
- @domain1.de : Diese Zeile würde alle Emails an die Emailadresse nichtempfehlenswert@gmx.de weiterleiten. Dies ist, wie die Email schon sagt nicht wirklich empfehlenswert, da das ein hohes Spamaufkommen provoziert.
- mail@domain1.de wird an die Adresse blablub@gmail.de weitergeleitet
- hans@domain1.de wird an das lokale Emailkonto hans@localhost weitergeleitet
Der Postfix weiß natürlich noch nichts von unseren neu erstellten Dateien, deshalb müssen wir diese zunächst in der Konfigurationsdatei vermerken. Die Datei /etc/postfix/main.cf muss wie folgt verändert werden:
mydestination = somedomain.de, localhost.localdomain, localhost, /etc/postfix/virtual/domains virtual_maps = hash:/etc/postfix/virtual/addresses
Der Eintrag mydestination sollte bereits vorhanden sein. virtual_maps musste ich bei mir erst erstellen. Nun weiß Postfix schon einmal über unsere Konfiugrationsdateien Bescheid. Nun müssen wir aber noch zwei Befehle ausführen:
postmap /etc/postfix/virtual/addresses /etc/init.d/postfix reload
Der erste Befehl macht die Adressen in der Datei „addresses“ für postfix verfügbar. Dieser Befehl muss bei jeder Änderung durchgeführt werden! Schreibt euch diesen Befehl am besten gleich in einen Kommentar in die Datei „addresses“ mit rein, damit ihr ihn nicht vergesst. Der zweite Befehl startet den Postfix-Mailserver neu und macht die Änderungen an der Konfiguration sichtbar.
Nun sollte bereits ein Mailempfang möglich sein. Testet dies indem ihr euch selbst eine Email schickt.
Beachtet dazu immer /var/log/mail.info auf etwaige Fehler.
TLS für Postfix einrichten
Um die Kommunikation verschlüsselt ablaufen zu lassen, ist eine TLS-Verschlüsselung dringend zu empfehlen. Es gibt kostenlose Zertifikate, so z.B. von www.startssl.com. Diese sind gültig und werden von nahezu jedem Client angenommen. Dazu müsst ihr euch zunächst einen Account bei startssl.com einrichten. Lasst euch nicht von dem überaus hässlichen Design abschrecken. startssl.com bietet einen kostenlosen Service, der einfach nur Gold wert ist.
Wenn ihr einen Account habt, müsst ihr zunächst die Domain eures Mailservers validieren. Dazu einfach im Usermenü auf „Validation Wizzard“ klicken und anschließend „Domain Name Validation“. Füllt nun alles aus und lasst euch eine Email zuschicken (dazu müsst ihr die angezeigte Email natürlich zunächst in eure /etc/postfix/virtual/addresses eintragen).
Nachdem die Validierung erfolgt ist, klickt auf „Certificate Wizzard“ und wählt anschließend „Web-Server Validation“ aus. Der erste Schritt kann übersprungen werden, da wir uns unser eigenes Zertifikat erstellen:
mkdir /etc/postfix/certs cd /etc/postfix/certs openssl req -new -newkey rsa:4048 -nodes -keyout private.key -out website.de.csr chmod 400 private.key
Mit dem ersten Befehl erstellt ihr zunächst ein neues Verzeichnis für die Zertifikate. Anschließend wechseln wir in dieses Verzeichnis mit „cd“. Nun erstellen wir uns einen eigenen privaten Schlüssel und gleichzeitig auch ein csr (Request-Zertifikat für startssl.com). Ihr werdet einige Dinge gefragt, füllt diese so gut wie möglich aus. Die optionalen Angaben können ausgelassen werden. Einzig bei „Common Name“ müsst ihr die Domain des Mailservers eintragen. Mit dem letzten Befehl ändern wir die rechte des privaten Schlüssels. Sichert diesen und stellt außerdem sicher, dass niemand in den Besitz dieses Schlüssels gerät!
Bei Startssl solltet ihr euch nun bei dem Schritt „Submit Certificate Request“ befinden. Öffnet die Date „website.de.csr“ und kopiert den Inhalt in das Textfeld.
Folgt nun den Schritten bis ihr euer Zertifikat in einem Textfeld angezeigt bekommt. Kopiert dieses und erstellt auf eurem Server im Verzeichnis certs die Datei „website.de.crt“ und kopiert den kompletten Inhalt in diese Datei und speichert diese.
Nun laden wir mit dem Befehl
wget --no-check-certificate https://www.startssl.com/certs/ca-bundle.pem -O startssl-ca-bundle.pem
das Zertifikatbundel von startssl herunter. Damit sagen wir unserem Server, das wir Startssl vertrauen. Führt diesen Befehl wieder im certs-Ordner aus.
Nun müssen wir der Konfiguration von Postfix nur noch die Zertifikatdaten geben. Die Konfiguration ist manchmal etwas anders, hier gibt es jetzt mal meine, damit ihr vergleichen könnt (die Konfiguration ist wieder in der main.cf).
# TLS parameters # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. smtpd_tls_auth_only = no smtp_use_tls = yes smtpd_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /etc/postfix/certs/private.key smtpd_tls_cert_file = /etc/postfix/certs/website.de.crt smtpd_tls_CAfile = /etc/postfix/certs/startssl-ca-bundle.pem smtp_tls_CAfile = $smtpd_tls_CAfile smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom
Es ist geschafft. Ab hier funktioniert schon mal der Postfix für den Mailversand. Alle weiteren Schritte sind nun nicht mehr zwingend erforderlich, werden jedoch dringend empfohlen!
Postfix abhärten
Um das System ein wenig widerstandsfähiger gegen Spam zu machen, hier ein paar kleine Einstellungen, die ihr in die main.cf eintragen könnt. Bitte testet dann aber den Mailversand, ob noch alles korrekt funktioniert. Die Doku dazu findet ihr hier: Postfix Doku
smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination smtpd_helo_restrictions = reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname
Postfix IPv6 fähig machen
Tja, ich glaube, ich brauche euch nicht erklären, warum es langsam echt nötig wird, die Server für IPv6 vorzubereiten. Für diese Anleitung wird vorausgesetzt, dass euer Server bereits IPV6 kann. Vergesst auch nicht, den DNS-Eintrag eurer Domain richtig einzustellen. Dem Mailserver bringen wir das Ganze dann auch noch bei :).
Um den Mailserver richtig zu konfigurieren ist eigentlich nicht viel nötig. Es reicht folgender Eintrag:
inet_protocols = all smtp_bind_address6 = 2a01:4f8:202:5028::2
Mit „inet_protocols“ legt ihr fest, dass auch IPv6 akzeptiert werden soll. Mit dem Eintrag „smtp_bind_address6“ legt ihr die IPv6-Adresse des Mailservers fest. Dieser Eintrag sollte mit dem Eintrag im DNS-Record übereinstimmen. Um zu testen, ob alles klappt, könnt ihr temporär „inet_protocols = ipv6“ einstellen und eine Email an eine @gmail.com-Adresse schicken. Bei Gmail bin ich mir sicher, dass diese auch IPv6 akzeptieren. Schaut auch immer wieder ins Logfile. Kommt die Mail an, hat alles geklappt und euer Server ist richtig konfiguriert. Stellt anschließend wieder auf „all“ um. Es ist zwingend notwendig, den Mailserver neu zu starten, nachdem das Protokoll geändert wurde. Ein Reload ist nicht ausreichend.
Zusammenfassung
Postfix ist soweit eingerichtet. Je nach Umfang hat man damit schon wirklich viel zu tun, aber die Einstellung lohnt sich auf jeden Fall. Beim Schreiben der Anleitung hab ich die Erfahrung gemacht, dass an diversen anderen Stellen noch weitere Einstellungen gemacht werden müssen. So muss z.B. der DNS-Server umgestellt werden. Wie dieser eingerichtet wird, werde ich an einer anderen Stelle noch weiter erläutern.
Auch die Installation von Spamassassin und Procmail werde ich in einem anderen Beitrag verwursten. Wie dies geht könnt ihr im Beitrag Spamassassin für Postfix auf Debian 7 einrichten nachlesen.
Pingback: Spamassassin mit Postfix unter Debian 7 Wheezy | Timos Blog
Pingback: Dovecot 2 mit Postfix auf Debian 7 Wheezy installieren und konfigurieren | Timos Blog
Gute Anleitung. Aber wie schaut es mit der Sicherheit von Startssl aus? Ist es tatsächlich empfehlenswert?
Hallo Lagerprofi,
die Sicherheit durch Verschlüsselung und das vertrauen in das Zertifikat bzw. den Aussteller des Zertifikates sind zwei unterschiedliche Dinge. Die Sicherheit der Verschlüsselung legst du mit der länge des Schlüssels und der gewählten Verschlüsselung fest. Es ist also zum Großteil deine Aufgabe für die Sicherheit zu sorgen (ja ok, das Zertifikat hat einen kleinen Anteil, aber wenn du den privaten Schlüssel selbst wählst und 2048bit verwendest, sollte es keine Einbußen in Sachen Sicherheit geben). Das Vertrauen zur Zertifizierungsstelle ist dahingehend bei Email eher zweitrangig. Nichts desto trotz würde ich StartSSL viel Vertrauen entgegen bringen.
Ich hoffe ich konnte deine Frage damit klären.
Grüzi
Mal eine supereinfache Anleitung – kurze Frage:
die Datei /etc/postfix/virtual/domains muss postfix nicht extra bekannt gemacht werden? Du setzt ja nur den pfad zu den address-mappings, aber nicht zu den Domains?
Hallo Philipp,
doch muss es. Das habe ich hier beschrieben: https://www.timoschindler.de/postfix-mit-tls-und-ipv6-auf-debian-7-wheezy-installieren-und-konfigurieren/
Schau dir die Konfiguration der main.cf an.
Grüße
Achso und natürlich – besten Dank für diese Anleitung. 🙂 Bisher die am Besten struktrierte und verständlichste, die ich gefunden habe.
Hallo,
super Anleitung. Danke dafür 🙂
Allerdings hänge ich bei der “Submit Certificate Request” fest. Den Inhalt meiner Datei “website.de.csr” kann ich nicht einfügen bzw. es wird ein Fehler angezeigt.
Liegt das vielleicht am Zeichensatz? StartSSL möchte nur letters and numbers, aber bei mir sind auch Sonderzeichen wie = / mit in dem Inhalt der Datei.
Hast du einen Tipp?
Gruß,
Marco
Hallo Marco,
das Problem trat bei mir nicht auf. Schau dir auch mal die Hilfeseite von startssl.com an. Die ist zwar hässlich, aber dennoch ist fast alles beschrieben.
Grüße
Timo
hi,
ich komme nicht ganz klar mit der Aussage „Ab hier funktioniert schon mal der Postfix für den Mailversand“ …wie du schreibst. Wie kann ich das denn testen?
Ansonsten war die Erklärung bisher echt super, danke dafür.
Hallo Frox,
richtie dir eine Email ein und teste Sie mit einem lokalen Thunderbird z.B. Das ist wohl die einfachste Möglichkeit.
Grüße
Dabei wird mein Passwort jedes mal nicht akzeptiert. Ich kann den Fehler nicht so richtig ausfindig machen. Ich habe alles so gemacht, wie es in der Anleitung steht und auch startssl verwendet. Ich habe auch weiterführend spamassacin und dovecot installiert, wie du es beschreibst. sowohl postfix als auch dovecot lassen sich fehlerlos starten auf dem server. hast du evtl tips, was ich prüfen kann um rauszufinden, warum ich bei der verbindung mit thunderbird scheitere?
Hallo Frox,
zum debuggen würde ich erst mal in den Mail-Log deines Servers schauen. diesen findest du in der Regel unter /var/log/mail.err und /var/log/mail.info
Und dann hilft glaube ich nur googeln 😉 es kann ein sehr spezifisches Problem sein. Verwendest du z.B. irgend welche Firewalls?
Grüzi
Hallo Timo,
ich bekomme nach den main.cf-Einträgen:
„/etc/postfix/virtual/domains
virtual_maps = hash:/etc/postfix/virtual/addresses“
und dem folgenden Befehl:
„postmap /etc/postfix/virtual/addresses“ nachstehendes ausgegeben:
postmap: fatal: /etc/postfix/main.cf, line 36: missing ‚=‘ after attribute name: „/etc/postfix/virtual/domains
Was muss ich hinter der Zeile eingeben? Das „=“ mit was folgend?
DANKE DIR
Hallo Gysbert,
könntest du bitte mehr deiner config zeigen? Inklusive Zeilen wäre super, danke.
Grüzi