Debian Mailserver bestehend aus Fetchmail, Procmail, Dovecot und Postfix

Geschrieben von Eric Scheibler am 24.09.2010

Nachdem mein Debian Lenny Server eine Weile zuverlässig lief, habe ich mich entschlossen, auch einen Mailserver hinzuzufügen. Nach kurzer Zeit wurde mir allerdings klar, dass dies nicht so einfach werden und ich einige Zeit benötigen würde, um diesen fehlerfrei zum Laufen zu bringen. Viele Howtos und Manpages später steht nun meine Konfiguration, die ich im Folgenden beschreiben will.

Ziel ist es einerseits, die Mails verschiedener Konten abzuholen, sie zu sortieren und anschließend mit einem IMAP Server zugänglich zu machen, andererseits sollen auch Mails vom Server und von authorisierten Clients verschickt werden können. Das Abholen erledigt Fetchmail, filtern werde ich die Nachrichten mit Procmail und Dovecot stellt den IMAP Server zur Verfügung. Für das Senden der Mails verwende ich Postfix.

Zuerst habe ich einen neuen Benutzer erstellt, den ich einfach mal “mailuser” nennen will (Root Rechte benötigt):

# adduser mailuser

Wenn ab jetzt vor einem Befehl nicht das “#” (root) steht, muss der Befehl vom mailuser aus abgesetzt werden.

1. Mails abholen mit Fetchmail

Sollte Fetchmail nicht bereits vorinstalliert sein so wird das mit dem folgenden Befehl getan:

# apt-get install fetchmail

Nun wechselt man mit su mailuser den Benutzer und begibt sich in sein Homeverzeichnis:

cd /home/mailuser/

Um Fetchmail zu konfigurieren erstellt man einfach die Datei .fetchmailrc. hier stelle ich erstmal meine Konfigurationsdatei zur Verfügung, die jeder nach seinen Wünschen anpassen kann, die Erklärung folgt darunter.

nano .fetchmailrc
# Fetchmail Konfigurationsdatei
set daemon 151
set logfile /home/mailuser/fetchmail.log

# Server yourdomain.com
poll yourdomain.com
protocol POP3
user "USERNAME" there
with password "PASSWORD"
is "mailuser" here
ssl
fetchall
nokeep
mda '/usr/bin/procmail'

# Web.de Server
poll pop3.web.de
protocol POP3
interval 6
user "USERNAME" there
with password "PASSWORD"
is "mailuser" here
ssl
fetchall
nokeep
mda '/usr/bin/procmail'

Erklärung:Ich möchte gern zwei Mailkonten abrufen: zum einen das meiner Domain und zum anderen eines von Web.de, welches mir aus früheren Tagen geblieben ist und jetzt Nachrichten von niedriger Priorität aufnimmt.

In der ersten Zeile wird mit “set daemon 151” der Daemon Modus aktiviert, d.h. Fetchmail prüft alle 151 Sekunden (2,5 Minuten) selbstständig die nach “poll” angegebenen Mailkonten auf neue Nachrichten. Man kann der obigen Syntax folgend beliebig viele Adressen angeben. Für meinen neuen Mailprovider ist das pollen alle 2,5 Minuten kein Problem aber Web.de gestattet mir nur eine Abfrage alle 15 Minuten, anderenfalls bekomme ich einen Fehler zurück. Ich löse das Problem, indem ich unterhalb des Protokolls den Parameter “interval 6” angebe. Das bedeutet, dass Web.de nur jedes sechste Mal gepollt wird, meine neue Domain hingegen behält ihren 2,5 minütigen Zyklus bei (2,5 × 6 = 15 Min). Die zusätzliche Sekunde dient lediglich der Fehlervermeidung bei der Abfrage von Web.de.

Ich benutze das Protokoll POP3 und möchte die nachrichten nach dem Abrufen vomm Server löschen (nokeep). Die Zeile “is mailuser here” besagt, dass die ankommenden Nachrichten explizit an den User “mailuser” weitergegeben werden. “fetchall” sorgt dafür, dass alle Mails unabhännig von ihren Atributen wie z.B. “gelesen” geholt werden und SSL ist für die verschlüsselte Verbindung zuständig. in der jeweils letzten Zeile werden die Mails an den MDA (Mail Delivery Agent) übergeben, der die Sortierung übernimmt. In meinem Fall ist das Procmail.

Nun müssen noch die Zugriffs - und Besitzerrechte der Datei .fetchmailrc angepasst werden, da diese nur von ihrem Owner gelesen und geschrieben werden darf, welcher natürlich “mailuser” sein sollte:

chown mailuser:mailuser .fetchmailrc
chmod 600 .fetchmailrc

Nun kann man das Ganze mit dem Befehl fetchmail starten. Werden keine Fehler ausgegeben, so läuft der Prozess ab jetzt als Daemon. Dies kann man beispielsweise mittels

ps aux | grep fetchmail

überprüfen. Außerdem lohnt auch ein Blick in das Logfile, welches ebenfalls unter /home/mailuser zu finden ist. Am Anfang empfiehlt es sich, den Prozess mit dem Befehl “fetchmail -v” aufzurufen, wobei -v das Logfile etwas aufbläht (so kann man z.B. überprüfen, ob der Verbindungsaufbau klappt und ob der richtige Port benutzt wird). Will man den Daemon abschießen, gibt man “fetchmail –quit” ein.

Zum Schluss kann man noch einen Cron Job anlegen, der Fetchmail nach jedem Neustart des Servers automatisch startet. Dazu öffnet man mit dem Befehl

crontab -e

die Cron Job Tabelle und fügt die folgende zeile ein. Dies muss weiterhin als eingeloggter Nutzer “mailuser” statt finden:

@reboot  fetchmail

nach dem abspeichern und beenden sollte der Cron Job installiert werden. Gab es keine Fehler kann man sich zur Bestätigung mit “crontab -l” noch die Liste aller Cron Jobs ausgeben lassen.

2. Mails filtern mit Procmail

Nachdem ich gerade bei Fetchmail definiert habe, dass die Mails nicht direkt ausgeliefert, sondern von Procmail gefiltert werden sollen, folgt hier nun die Einrichtung von Procmail. Zuerst muss das Programm wie üblich installiert werden (Root Rechte):

# apt-get install procmail

Anschließend muss man wieder den Nutzer und das Verzeichnis wechseln:

su mailuser
cd ~

Procmail sucht nach der Konfigurationsdatei .procmailrc im Homeverzeichnis von mailuser, also anlegen und folgendermaßen füllen:

nano .procmailrc
# Procmail Konfigurationsdatei
COMSAT=no
# Den Pfad zur Mailbox angeben, in den Procmail die Mails sortieren soll
# üblicherweise geschieht das auch im Homeverzeichnis des Benutzers
# da Procmail von Fetchmail aufgerufen wird und Fetchmail unter dem Benutzer "mailuser" läuft, ist $HOME = /home/mailuser/ (siehe auch Dovecot unter 3.)
MAILDIR=$HOME/.maildir/
DEFAULT=$HOME/.maildir/
# Um die Übersichtlichkeit bei den folgenden Filterregeln zu behalten, werden diese in einzelne Dateien ausgelagert,
# die alle unter $HOME/.procmail/ gespeichert wsind (siehe auch die "INCLUDERC" Anweisungen weiter unten)
PROCDIR=$HOME/.procmail/
FGREP=/bin/fgrep
# Die Variable YEARMONTH wird u.A. für das Erstellen des Mailarchivs gebraucht und lautet beispielsweise 2010.09
YEARMONTH=`date +%Y.%m`

# Anlegen monatilicher Logfiles im Homeverzeichnis
LOGFILE=$HOME/procmail.$YEARMONTH.log

# Die erste Regel erstellt ein monatliches Mailarchiv, so werden alle eingehenden Mails zusätzlich zu ihrer weiteren Filterung in den Archivordner kopiert, für September 2010 also beispielsweise in den Ordner $HOME/ .maildir/.Archive.2010.09.
# Der "." symbolisiert für den IMAP Client einen Unterordner, so werden die Mails hirarchisch archiviert. Da ich genug Platz habe, kann ich es mir problemlos leisten, alle Mails doppelt vorliegen zu haben, sollte ich mal eine Nachricht versehentlich löschen, so findet sie sich garantiert noch im Archiv wieder. Das "c" bei der Anweisung ":0 c" bedeutet, dass die zu filternde Mail noch nicht aus dem System fällt, sondern nach wie vor durch die anderen Filter geschoben wird.
:0c:
.Archive.$YEARMONTH/

# die folgenden Befehle dienen lediglich der Verbesserung der Suchperformance und könnten evtl. auch weggelassen werden.
:0
* ^From:/.*
{
FROM = "$MATCH"
}

:0
* ^To:/.*
{
TO = "$MATCH"
}

# Hier werden die Dateien mit den eigentlichen Regeln eingebunden, dazu gleich mehr.
INCLUDERC=$PROCDIR/unirc
INCLUDERC=$PROCDIR/tazrc

Abspeichern und den Editor verlassen.

Die Hauptkonfiguration ist erledigt, nun geht es daran, die Filterregeln zu definieren. Diese muss natürlich jeder nach seinen Wünschen erstellen. Beispielhaft werde ich zwei meiner Regeln vorstellen.

Wie bereits erwähnt lagern die Files bei mir im Ordner .procmail, dem man nun erstmal erstellen muss

mkdir ~/.procmail
cd ~/.procmail
  1. Unimails filtern Alle Mails, die in den Feldern “From”, “CC” oder “To” mit “tu-dresden.de” enden, werden in den Ordner .uni gelegt, “.*” bedeutet, dass beliebig viele Zeichen vor dem String stehen dürfen. Wichtig ist auch der “/” nach .uni, fehlt er, funktionierts nicht.
nano unirc
:0
* ^(From|Cc|To):.*tu-dresden.de
.Uni/
  1. TAZ Ich bekomme die Tageszeitung (TAZ) im Online Abo täglich per Mail zugeschickt (.zip Archiv im Anhang) und möchte sie u.A. automatisch entpacken.
nano tazrc
:0
# Regel trifft zu, wenn die Mail von "digiabo@taz.de" kommt
* ^From:.*digiabo@taz.de
{
# als erstes möchte ich wieder eine Kopie der Mail in den Ordner .tazarchiv legen
# für den Fall, dass beim Entpacken mal was schief geht
:0 c
.tazarchiv/

# anschließend wird die Mail in das weiter unten angegebene Shellskript geschoben, "|" ist die bekannte Pipe
:0
| $HOME/.procmail/taz.sh
}

Das folgende Shellskript soll beispielhaft verdeutlichen, wie man Mailanhänge verarbeiten kann. In meinem Fall ist es wie oben bereits erwähnt ein .zip Archiv. Auch wenn das nicht mehr unmittelbar zur Procmail konfiguration gehört, erschien es mir an dieser Stelle doch anfügenswert.

Vorgehen: Unter /tmp/ wird ein neuer Ordner angelegt, in den ich den Mailanhang extrahiere. Danach entpacke ich die .zip mit Unzip. Ziel ist der Ordner /buecher/taz. Beim Entpacken werden alte Dateien überschrieben, dies funktioniert, da die TAZ ein eigenes Inhaltsverzeichnis mitbringt und ich die aktuelle ausgabe somit lediglich in den hauptordner entpacken muss. Zum Schluss entferne ich noch den vorher angelegten Ordner unter /tmp/. Das Skript ist nicht gerade fehlerrobust, da z.B. die Überprüfung auf das Bestehen der Ordner nicht erfolgt, sollte man bei der Weiternutzung beachten.

Zuvor noch folgendes installieren:

# apt-get install unzip mpack

nano taz.sh:

#!/bin/bash

# Variablen definieren
TMPDIR=/tmp/taztmp
TAZ=/buecher/TAZ

# Ordner unter /tmp/ erstellen
mkdir $TMPDIR
# den Anhang von der Mail trennen und in das Tempverzeichnis kopieren
# munpack wartet auf Daten von STDIN, daher verwende ich oben in der "tazrc" die Pipe
# -q = be quiet, -C Directory
munpack -q -C $TMPDIR
# entpacken, -o = overwrite existing data, -d extract into an arbitrary directory
unzip -o $TMPDIR/*zip -d $TAZ
# oben angelegtes Verzeichnis löschen
rm -r $TMPDIR

Anschließend muss das Skript noch ausfürhbar gemacht werden:

chmod +x taz.sh

Nun sollte Procmail einsatzbereit sein.

zum Schluss noch zwei Beispiele, die evtl. ganz nützlich sind. 1. Alle mails, die größer als 200KB sind, werden an mail@example.com weitergeleitet:

:0 c
* > 200000
! mail@example.com
  1. Erstellen von Unterordnern, alle Mails mit dem Betreff “Debian” werden unter “computer” in den Unterordner “debian” einsortiert:
:0
* ^Subject:.*Debian
.computer.debian/

3. IMAP Konto bereitstellen mit Dovecot

Ich habe mich für Dovecot entschieden, da es mit wenigen Schritten konfiguriert werden kann. Da ich kein POP3 sondern nur ein IMAP Konto bereitstellen möchte, genügt mir folgender Befehl zur Installation:

# apt-get install dovecot-imapd

Die weitere Konfiguration geschieht ausschließlich in der Datei dovecot.conf. Da diese auf Grund der vielen Kommentare ziemlich lang ist, beschreibe ich nur meine Anpassungen. Zuerst mal öffnen:

# nano /etc/dovecot/dovecot.conf
  • Zeile 24: Überprüfen der bereitgestellten Protokolle.
protocols = imap imaps
  • Zeile 53: Das unverschlüsselte Senden der Logindaten verbieten, kann ich problemlos machen, da nur ich den Server benutze und man Thunderbird dementsprechend konfigurieren kann.
disable_plaintext_auth = yes
  • Zeile 69: Spezifizieren des Log Files.
log_path = /var/log/dovecot
  • Zeile 218: Das Format und den Speicherort der Mailbox wählen. Ich habe mich für das Maildir Format entschieden, da ich so jede mail in einer einzelnen Datei vorliegen habe und genügend Speicherplatz verfügbar ist. Außerdem sollte die Mailbox auch im Homeverzeichnis des Mailnutzers liegen.
mail_location = maildir:/home/mailuser/.maildir
  • Zeile 811: Hier wird schon mal für Postfix vorgearbeitet. Postfix soll die Authentifikationsmechanismen von Dovecot nutzen können. Momentan wird dafür die Nutzerdatenbank des Servers benutzt (passwd), d.h. ich melde mich bei Dovecot und Postfix mit dem Passwort von “mailuser” an. Man kann natürlich auch eine eigene Passwortdatei anlegen, das füge ich vielleicht später mal ein. Die folgenden Zeilen müssen im “auth default” Block unter “user=root” eingefügt werden (bei mir ab Zeile 1062):
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}

Nachdem man abgespeichert hat, startet man Dovecot neu:

# /etc/init.d/dovecot restart

Nun kann man beispielsweise unter Thunderbird das IMAP Konto mit folgenden parametern einrichten.

Server: Adresse_des_Servers
Port: 993
Benutzername: mailuser
Verbindungssicherheit: SSL / TLS
Authentifizierungsmethode: Passwort, normal

Dabei muss man bei der ersten Verbindung das selbst signierte Zertifikat akzeptieren, Thunderbird merkt es sich dann. Ferner empfiehlt es sich, den Port 993 in der genutzten Firewall freizuschalten, wenn das Konto auch von außen erreichbar sein soll.

4. Postfix zum Versenden von E-Mails

Zum Versenden von E-Mails verwende ich Postfix. Diese Konfiguration hat mit Abstand am Längsten gedauert, jetzt habe ich folgende Funktionen eingerichtet:

Der Server verschickt Mails zum einen an den Mailserver meines Mailproviders und zum anderen an den von Web.de. Außerdem können sich Clients an meinem Server anmelden und ebenfalls Nachrichten darüber versenden. Sämptliche Kommunikation findet zwingend verschlüsselt statt.

Zuerst einmal muss Postfix installiert werden:

# apt-get install postfix

Beim anschließenden Setup habe ich “Internet mit Smarthost” gewählt und die Domain und den SMTP Server eingetragen (siehe Setup - Dialog). “Internet”, weil mein Server sowohl Mails entgegennehmen als auch senden soll und “Smarthost”, weil mein Server eine ständig wechselnde IP Adresse bekommt und ich daher meine zu sendenden Nachrichten an den SMTP Server meines Providers weitergeben möchte. Dieser verschickt sie dann an den Empfänger. Die einzelnen Einstellungen können nachher auch problemlos in der “main.cf” geändert werden oder man nutzt folgenden Befehl:

# dpkg-reconfigure postfix

Nachdem man das Setup abgeschlossen hat, ist Postfix installiert. Nun in den Ordner mit den Config Dateien wechseln:

cd /etc/postfix/

Dort sollte man erstmal die Hauptkonfigurationsdatei namens “main.cf” sichern:

# cp main.cf main.cf.bak

Anschließend kann sie wunschgemäß angepasst werden. Bevor dies geschieht, muss noch überprüft werden, welche SASL Authentifikationsmethoden Postfix verwenden kann:

# postconf -a

Die Ausgabe muss neben Cyrus auch Dovecot enthalten.

Hier meine main.cf:

# nano main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# Konfiguration der TLS Parameter
# SMTPD - Server TLS, für die Anmeldung der Clients an meinen Server
# Serverzertifikat
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
# Verschlüsselung der Verbindung wird vorausgesetzt
smtpd_tls_security_level = encrypt
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
# Ausführlichkeit der TLS Protokollierung, zu finden unter /var/log/mail.info, 2 ist für Debug ein guter Kompromiss
# hab ich jetzt natürlich deaktiviert, das Logfile wäre sonst riesig
smtpd_tls_loglevel = 0

# Client TLS, für die Anmeldung an den SMTP Server meines Providers
smtp_tls_loglevel = 0
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = encrypt
smtp_sasl_tls_security_options = noanonymous

# SASL Authentifikation
# SMTPD server authentification
smtpd_sasl_auth_enable = yes
# hier werden die Authentifikationsmechanismen von Dovecot verwendet, siehe 3.
# private/auth ist ein relativer Pfad, vollständig: /var/spool/postfix/private/auth
# auth wird erst angelegt, nachdem man auch Dovecot neu startet, siehe unten
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
# nur Clients aus dem Netzwerk (siehe unten) und SASL authentifizierte Nutzer können Mails bei meinem Server abliefern
smtpd_recipient_restrictions =  permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
# die folgenden 2 Optionen filtern die IP Adresse des angemeldeten Clients aus der Mail, siehe weiter unten
smtpd_sasl_authenticated_header = yes
header_checks = regexp:/etc/postfix/header_checks

# SMTP Client Authentification, Anmeldung beim Provider
smtp_sasl_auth_enable = yes
# speichern der Passwörter für die SMTP Server der Provider
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# verschiedene SMTP Server werden benutzt
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_sasl_security_options = noanonymous

mydomain = eric-scheibler.de
myhostname = server.eric-scheibler.de
# Mailweiterleitungen
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# damit eine Mail, die von mailuser gesendet wird, nicht den Absender mailuser@... traägt
sender_canonical_maps = hash:/etc/postfix/sender_canonical
myorigin = /etc/mailname
# die hier gelisteten Domains werden direkt auf meinem Server verwaltet
mydestination = localhost, eric-scheibler.de
# für alle anderen Mails gilt der Relayhost
relayhost = der_smtp_server.eric-scheibler.de:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

# wenn Mails nicht zugestellt werden können soll dies nach 10 Min abgebrochen werden
maximal_queue_lifetime = 10m
bounce_queue_lifetime = 10m
# Bouncemail wird mit folgendem Template versendet
bounce_template_file = /etc/postfix/bounce.cf
# der Admin (ich) bekommt alle Fehlermeldungen, die Postfix zu bieten hat zusätzlich zugeschickt
notify_classes = bounce, 2bounce, delay, policy, protocol, resource, software

So viel erstmal zur main.cf. jetzt müssen noch einige Dateien erstellt oder angepasst werden. 1. header_checks Normalerweise würde in jeder Mail, die ich von einem angemeldeten Client sende, dessen IP mit verzeichnet werden. Da es meiner Meinung nach aber genügt, wenn die IP des Servers protokolliert wird, wird in dieser Datei ein regulärer Ausdruck definiert, der die Client IP entfernt. Alles weitere kann man unter Remove IPs from Outgoing Mail (Postfix SMTP) - Moblog nachlesen.

~~~# nano header_checks /^Received: .(Authenticated sender:./ IGNORE /^Received: by server.eric-scheibler.de .*from userid [0-9]+)/ IGNORE ~~~

  1. sasl_passwd Dies ist die Datei, in der die Passwörter für die Relayhosts gespeichert werden. Da ich für die ausgehenden Mails von …@eric-scheibler.de den SMTP meines Providers und für die Mails der Web.de Adresse den SMPT von Web.de benutzen möchte, sind zwei Einträge notwendig. Der SMTP meines Providers ist der standard Relayhost, d.h. wenn der Absender nicht gerade die Web.de Adresse ist, wird dieser SMTP genutzt. Erstmal die Datei erstellen, am besten mit “touch”, so bekommt sie einen gültigen Zeitstempel:
# touch sasl_passwd
# nano sasl_passwd
# zuerst die Web.de Adresse, der zugeöhrige SMTP folgt gleich noch
meine.adresse@web.de   benutzername:passwort
# nun noch die Login Daten für den Relayhost, der in der main.cf definiert wurde
# diesmal direkt die Adresse des SMTP Servers nehmen
der_smtp_server.eric-scheibler.de:587   benutzername:passwort

Nach dem Abspeichern muss noch eine für Postfix lesbare Datenbank erstellt werden:

# postmap sasl_passwd
  1. sender_relay
# nano sender_relay
# hier muss noch der SMTP Server für die Web.de Adresse rein
# wichtig: in beiden Dateien muss die exakte Web.de Adresse angegeben werden, sonst gehts nicht
# es wird wieder Port 587 genutzt
meine.adresse@web.de   smtp.web.de:587

Abspeichern und hashen:

# postmap sender_relay

Wenn man nur einen Relayhost benötigt, kann man auf die Datei “sender_relay” ganz verzichten und braucht in der “sasl_passwd” nur die letzte Zeile anzugeben.

  1. /etc/aliases In der Aliases Datei werden Mailweiterleitungen definiert. Einige sind auch schon standardmäßig dabei. Erstmal kann man nur eine Mail an die Systembenutzer versenden, die Mail an blog@eric-scheibler.de könnte also beispielsweise nicht zugestellt werden. Diese Einstellung ist für mich nicht so relevant, da mir ja niemand eine Mail direkt an meinen Server schreibt, sondern an meinen Provider. Allerdings ist sie hilfreich für netzwerkinterne Kommunikation. So können z.B. alle mails, die an “root” geschickt werden umgeleitet werden. Also füge ich mal folgende Zeilen an:
# nano /etc/aliases
blog: mailuser
root: mailuser
postmaster: mailuser

Nach dem Speichern noch:

# postalias /etc/aliases

Schickt jetzt also ein Programm eine Mail an “root” bekommt sie automatisch der “mailuser”. Würde ich diese Regel nicht einfügen, bekäme ich die Mails nicht, da das IMAP Konto, welches ich oben eingerichtet hab, ja nur für den Mailuser gilt (sie würden in dem Mailspool von root landen, den ich nie abrufe). Ebenso verhält es sich mit dem Postmaster, auch diese Warnungen müssen bei mir ankommen. Natürlich geht das nur, weil ich den Server allein betreibe bzw. der Admin bin, sonst wäre das ein ziemliches Sicherheitsproblem…

  1. sender_canonical Damit eine Mail, die vom mailuser versendet wird, nicht den Absender mailuser@eric-scheibler.de trägt, muss in der Datei sender_canonical der Absender angegeben werden. Manche Mailprovider würden Nachrichten, die nicht genau dem registrierten Empfänger entsprechen, sogar als Spam identifizieren und verwerfen.
# nano sender_canonical
mailuser   meine_richtige_adresse@eric-scheibler.de

Abspeichern und hashen:

# postmap sender_canonical
  1. /etc/mailname In dieser Datei wird definiert, was hinter dem @ stehen soll. Standardmäßig ist dies der Servername.Arbeitsgruppe. Ich hätte da aber gern meine Domain.
# nano /etc/mailname
eric-scheibler.de
  1. bounce.cf Eine Bouncemail wird an den Absender geschickt, wenn der Mailversand nicht erfolgreich war. Ich habe die Datei bounce.cf erstellt und das Template von folgender Seite reinkopiert: http://postfix.state-of-mind.de/bounce-templates/index.html

Brauche ich als Admin und einziger Nutzer des Mailservers nicht unbedingt, aber der Vollständigkeit halber sei es erwähnt.

Anschließend die Konfiguration auf Fehler überprüfen:

# postfix check
# postconf

Wenn beim ersten kein Fehler und beim zweiten die config ausgegeben wird, ist zumindest bezüglich der Syntax alles in Ordnung.

Nun müssen Dovecot und Postfix noch neu gestartet werden (Dovecot, weil erst dann die Authentifizierung von Postfix funktioniert, da ja dafür Dovecot benutzt wird):

# /etc/init.d/dovecot restart
# /etc/init.d/postfix restart

Jetzt kann man den Mailserver testen, z.B. eine Testmail mit:

mail adresse@example.de

schreiben (um die Nachricht abzuschließen, muss im Body der Mail ein einzelner “.” auf einer neuen Zeile stehen. Sollte “mail” nicht verfügbar sein so muss man es noch nachinstallieren:

# apt-get install mailutils

Die Logs für Postfix finden sich unter /var/log/mail.info. Da zumindest bei mir am Anfang einiges nicht funktioniert hat, hab ich vorübergehend die Ausführlichkeit der Logs erhöht. In der Datei “master.cf” kann man dazu an die folgenden Zeilen ein -v anhängen (sollte man aber nicht vergessen, wieder zu löschen), Postfix muss danach auch neu gestartet werden:

# nano master.cf
# Clients die sich bei meinem Server authentifizieren
smtp      inet  n       -       -       -       -       smtpd -v
# Authentifizierung am Relayhost
smtp unix    -    -    -    -    -    smtpd -v

Für das Debuggen empfiehlt sich auch der unten verlinkte Artikel, listet eigentlich alles nötige auf.

Damit die Mails auch von außerhalb an den Server übergeben werden können, muss in der Firewall der Port 25 freigeschaltet werden. Im thunderbird kann der SMTP Server nun mit den gleichen Login Daten wie schon der IMAP Server auf Port 25 mit STARTTLS eingerichtet werden.

Quellen

Allgemein:

Fetchmail:

Postfix:

Procmail:

Sonstige: