Postfix mit TLS und IPv6 auf Debian 7 Wheezy installieren und konfigurieren

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.

15 Antworten auf „Postfix mit TLS und IPv6 auf Debian 7 Wheezy installieren und konfigurieren“

    1. 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

  1. 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?

  2. 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

    1. 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

  3. 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.

      1. 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?

        1. 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

  4. 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.