Jetzt kommt Postfix an die Reihe. Postfix ist ein MTA (Mail Transport Agent). Es gibt im Groben 2 verschiedene Möglichkeiten diesen zu nutzen:

Möglichkeit 1

Ihr hab einen Server mit fester IP-Adresse und die Möglichkeit eure DNS-Angaben selbst zu bearbeiten:

E-Mail Eingang

In diesem Fall werden die E-Mails von anderen Servern direkt bei eurem Server "eingeliefert". Postfix prüft als Erstes, ob sowohl Domain-Part (also der Teil HINTER dem @) als auch Local Part (der Teil VOR dem @) in der Datenbank existiert. Sollte das der Fall sein, wird die E-Mail entweder direkt in ein bestehendes Postfach gelegt oder aber für die weitere Bearbeitung (z. B. Spam- und Virenprüfung) an weitere Programme übergeben und dann in das Postfach gelegt.
Wenn bei der Prüfung der E-Mail festgestellt wird, daß entweder der Domain Part oder der Local Part falsch sind, wird die E-Mail mit einer Fehlermeldung abgewiesen.

E-Mail Ausgang

Postfix prüft, ob der User überhaupt E-Mails über ihn versenden darf und ob der User auch eine gütige Absenderadresse hat, dann liefert er die E-Mail direkt an den fü die Empfängerdomain zuständigen Server.
Die Überprüfung vor dem Versand ist besonders wichtig, da ansonsten jeder über diesen Server E-Mails versenden kann (Stichwort offenes Relay).

Möglichkeit 2

Ihr habt keinen Server mit fester IP-Adresse:

E-Mail Eingang

Die E-Mails werden z. B. mit fetchmail per POP3 vom Server des E-Mail-Anbieters abgeholt und dann an Postfix übergeben. Der restliche Ablauf entspricht dann wieder Möglichkeit 1

E-Mail Ausgang

Postfix liefert die E-Mail nicht direkt an den Server der Empfängerdomain sondern sendet Sie an den Server des E-Mail-Anbieters (Smarthost) der dann die E-Mail zur Empfängerdomain sendet. Die vorherige Prüfung ist widerum das Selbe wie bei Möglichkeit 1.

In diesem Tutorial werde ich nur Möglichkeit 2 behandeln!

 

Installation und Konfiguration

root@tutorial:~# apt install postfix postfix-pgsql

Jetzt ein "Grundgerüst" der

/etc/postfix/main.cf

 

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
mydestination = $mydomain, $myhostname

smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key

smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtpd_sasl_type = dovecot
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth

smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
relayhost = securesmtp.t-online.de:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

virtual_mailbox_base = /var/vmail/
transport_maps = pgsql:/etc/postfix/transport.cf
virtual_uid_maps = pgsql:/etc/postfix/uids.cf
virtual_gid_maps = pgsql:/etc/postfix/gids.cf
virtual_mailbox_maps = pgsql:/etc/postfix/mailboxes.cf
virtual_maps = pgsql:/etc/postfix/virtual.cf

Die Zeile 

relayhost = securesmtp.t-online.de:587

auf den Postausgangsserver bei euerem Provider ändern. Ich habe hier den T-Online-Server drin, weil ich bis vor kurzem noch meine Domain dort liegen hatte.

 Jetzt die Datei mit den Zugangsdaten für den Postausgangsserver bei eurem E-Mail-Provider erstellen

/etc/postfix/sasl_passwd 

und wie nachfolgend aufgezeigt eintragen

sfwdallmx.t-online.de Benutzername:Passwort 

Die Daten müssen natürlich auf die eigenen Server- und Zugangsdaten angepasst werden.

Als nächstes die erstellte sasl_passwd-Datei in eine Postfix Datenbankdatei konvertieren

root@tutorial:~# postmap /etc/postfix/sasl_passwd

Im nächsten Schritt müssen wir die Postfix-Datenbankabfragen erstellen dafür erstellen wir die folgenden Dateien mit dem entsprechenden Inhalt

/etc/postfix/transport.cf

user=mailreader
password=secret
dbname=mails
table=transport
select_field=transport
where_field=domain
hosts=localhost

/etc/postfix/uids.cf

user=mailreader
password=secret
dbname=mails
table=users
select_field=uid
where_field=userid
hosts=localhost

/etc/postfix/gids.cf

user=mailreader
password=secret
dbname=mails
table=users
select_field=gid
where_field=userid
hosts=localhost

/etc/postfix/mailboxes.cf

user=mailreader
password=secret
dbname=mails
table=postfix_mailboxes
select_field=mailbox
where_field=userid
hosts=localhost

/etc/postfix/virtual.cf

user=mailreader
password=secret
dbname=mails
table=postfix_virtual
select_field=userid
where_field=address
hosts=localhost

Nun eine kleine Änderung an der

/etc/postfix/master.cf

Wir löschen die nachfolgenden 2 Abschnitte

Da sie auskommentiert sind, können sie natürlich auch drin bleiben, allerdings find ich es in diesem Fall übersichtlicher, wenn nur die Option drin ist, die ich auch wirklich brauche.

#submission inet n - y - - smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#smtps inet n - y - - smtpd
# -o syslog_name=postfix/smtps
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject

und fügen diese Zeilen ein

submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING