Inhaltsverzeichnis

Postfix ist ein SMTP Server. Siehe auch Dovecot. Von Haus aus nutzt Postfix die vorhandenen Systembenutzer als Email accounts.

postqueue -p // list queue
postqueue -f // flush queue
postsuper -d <message-id> // delete specific mail
postsuper -d ALL // delete all

Installation

Die „System email“ ist der Domain name (z.B zarat.ml).

apt-get install postfix

Postfix läuft nun bereits im Hintergrund. Die meisste Konfiguration liegt im Verzeichnis /etc/postfix.

Spam

Um nur bekannte Empfänger zu erlauben fügt man in die Datei /etc/postfix/main.cf folgendes ein.

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Um nur bekannte Absender zu erlauben fügt man folgendes ein.

smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname

WICHTIG Mann kann an die restrictions eigene Scripte anhängen!

Postfächer

Um Postfix mitzuteilen welche Verzeichnisstruktur (in diesem Fall das am weitesten verbreitete Maildir) man für Mail Postfächer verwenden will fügt man in der Datei /etc/postfix/main.cf folgendes ein.

home_mailbox = MailDir/
mailbox_command = 

Nun kann man bereits Dovecot installieren um die Mailstruktur anzulegen.

Nicht vergessen!

Danach den Postfix Dienst neu starten.

Spamassassin

Nachdem man SpamAssassin installiert hat kann man dieses in Postfix integrieren

Die Datei /etc/postfix/master.cf bearbeiten. Die Zeile

smtp      inet  n       -       y       -       -       smtpd

kopieren und gleich darunter einfügen. Das y in der 5. Spalte durch ein - ersetzen und in der darauf folgenden Zeile 4 Leerzeichen voranstellen und die Zeile -o content_filter=spamassassin einfügen. Am Ende sollte es so aussehen.

smtp      inet  n       -       y       -       -       smtpd
smtp      inet  n       -       -       -       -       smtpd
    -o content_filter=spamassassin

Damit wird Spam aber nur erkannt, die Mails in die entsprechenden Ordner zu verschieben muss Dovecot. Siehe auch Sieve

SASL Authentifizierung

In der Datei /etc/postfix/main.cf fügt man folgendes ein.

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

Verschlüsselung

Wenn man noch kein Zertifikat hat kann man mit Certbot eines erstellen. Um Postfix mitzuteilen das neue Zertifikat zu verwenden bearbeitet man in der Datei /etc/postfix/main.cf die Einträge. Siehe uch Dovecot #Verschlüsselung.

#
# Vorsicht bei der Unterscheidung zwischen 
#
# smtp -> ausgehender traffic
# smtpd -> einkommender traffic
#

smtpd_tls_cert_file = /etc/letsencrypt/live/zarat.ml/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/zarat.ml/privkey.pem
smtp_use_tls = yes

STATTLS

Um das ganze zu vereinfachen nutzt man STARTTLS dann muss man die Ports für smtps und imaps nicht extra konfigurieren sondern das ganze läuft dann auf den normalen Ports 25 und 143.

Um auch den einkommenden Verkehr zu verschlüsseln fügt man der Datei /etc/postfix/main.cf folgendes ein

smtpd_use_tls = yes

# zeige tls info in email header
smtpd_tls_received_header = yes

SPF

Mit dem sender policy framework Wikipedia kann man verhindern das fremde Mails im Namen des eigenen Servers senden können. Dazu muss man einen DNS Eintrag vom Typ TXT erstellen.

v=spf1 mx ~all

Installation über das apt tool.

apt install postfix-policyd-spf-python

Gleich zu Beginn wird in der Datei /etc/postfix/master.cf wird folgendes hinzugefügt.

policyd-spf       unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf

In der Datei /etc/postfix/main.cf wird in die Zeile vor den recipient_restrictions folgendes eingefügt

policyd-spf_time_limit = 3600

Ausserdem wird an den Eintrag smtpd_recipient_restrictions selbst das Argument

check_policy_service unix:private/policyd-spf

angehängt.

DKIM

DKIM (DomainKeys Identified Mail) ist eine Methode, die eindeutig feststellen kann, dass eine Mail von einem ganz bestimmten Mailserver gesendet wurde. Dies wird realisiert, indem auf dem eigenen Mailserver ein Schlüsselpaar generiert wird und der öffentliche Schlüssel der Domain per DNS Eintrag beigefügt wird.

Installation Windows

DKIM Signer

Installation Linux

apt install opendkim opendkim-tools

Nun fügen wir den Benutzer postfix der Gruppe opendkim hinzu.

gpasswd -a postfix opendkim

Nun bearbeitet man die Datei /etc/opendkim.conf - hier kann man alles löschen und neu schreiben.

# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.

# Log to syslog
Syslog                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   002

# Sign for example.com with key in /etc/dkimkeys/dkim.key using
# selector '2007' (e.g. 2007._domainkey.example.com)
#Domain                 example.com
#KeyFile                /etc/dkimkeys/dkim.key
#Selector               2007

# Commonly-used options; the commented-out versions show the defaults.
Canonicalization        simple
Mode                    sv
SubDomains              no
AutoRestart       yes
AutoRestartRate         10/1M
Background          yes
DNSTimeout          5
SignatureAlgorithm      rsa-sha256



# Socket smtp://localhost
#
# ##  Socket socketspec
# ##
# ##  Names the socket where this filter should listen for milter connections
# ##  from the MTA.  Required.  Should be in one of these forms:
# ##
# ##  inet:port@address           to listen on a specific interface
# ##  inet:port                   to listen on all interfaces
# ##  local:/path/to/socket       to listen on a UNIX domain socket
#
#Socket                  inet:8892@localhost
Socket                  local:/var/spool/postfix/opendkim/opendkim.sock
##  PidFile filename
###      default (none)
###
###  Name of the file where the filter should write its pid before beginning
###  normal operations.
#
PidFile               /var/run/opendkim/opendkim.pid


# Always oversign From (sign using actual From and a null From to prevent
# malicious signatures header fields (From and/or others) between the signer
# and the verifier.  From is oversigned by default in the Debian pacakge
# because it is often the identity key used by reputation systems and thus
# somewhat security sensitive.
OversignHeaders         From

##  ResolverConfiguration filename
##      default (none)
##
##  Specifies a configuration file to be passed to the Unbound library that
##  performs DNS queries applying the DNSSEC protocol.  See the Unbound
##  documentation at http://unbound.net for the expected content of this file.
##  The results of using this and the TrustAnchorFile setting at the same
##  time are undefined.
##  In Debian, /etc/unbound/unbound.conf is shipped as part of the Suggested
##  unbound package

# ResolverConfiguration     /etc/unbound/unbound.conf

##  TrustAnchorFile filename
##      default (none)
##
## Specifies a file from which trust anchor data should be read when doing
## DNS queries and applying the DNSSEC protocol.  See the Unbound documentation
## at http://unbound.net for the expected format of this file.

TrustAnchorFile       /usr/share/dns/root.key

##  Userid userid
###      default (none)
###
###  Change to user "userid" before starting normal operation?  May include
###  a group ID as well, separated from the userid by a colon.
#
UserID                opendkim

# Map domains in From addresses to keys used to sign messages
KeyTable            refile:/etc/opendkim/key.table
SigningTable        refile:/etc/opendkim/signing.table

# Hosts to ignore when verifying signatures
ExternalIgnoreList  /etc/opendkim/trusted.hosts

# A set of internal hosts whose mail should be signed
InternalHosts /etc/opendkim/trusted.hosts

Jetzt muss man folgende Verzeichnisstruktur anlegen

/etc/opendkim/
/etc/opendkim/keys

Nicht vergessen!

Die richtigen Berechtigungen zu setzen!
chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys

Jetzt wird die Datei /etc/opendkim/signing.table angelegt

*@zarat.ml    defaul._domainkey.zarat.ml

Jetzt wird die Datei /etc/opendkim/key.table angelegt

default._domainkey.zarat.ml    zarat.ml:default:/etc/opendkim/keys/zarat.ml/default.private

Jetzt wird die Datei /etc/opendkim/trusted.hosts angelegt

127.0.0.1
localhost

*.zarat.ml

Für DKIM verwendet man nicht den Serverkey - man muss einen eigenen erstellen. Dazu erstellt man das Verzeichnis /etc/opendkim/keys/zarat.ml. Den Key erzeugt man mit

opendkim-genkey -b 2048 -d zarat.ml -D /etc/opendkim/keys/zarat.ml -s default -v

Nicht vergessen!

Die entsprechenden Berechtigungen zu setzen!
chown opendkim:opendkim /etc/opendkim/
chown opendkim:opendkim /etc/opendkim/keys/zarat.ml/default.private

DNS Eintrag

Wir haben einen DNS TXT Eintrag zu setzen, dieser wurde beim genereren des Schlüssels in der Datei /etc/opendkim/keys/zarat.ml/default.txt gespeichert. Leerzeichen und entfernen!

Man erstellt einen TXT Eintrag mit dem Namen default._domainkey und als Inhalt den generierten Key. Es sollten 3 Attribute sein

Jetzt erstellt man das Verzeichnis /var/spool/postfix/opendkim und setzt die entsprechenden Berechtigungen.

mkdir /var/spool/postfix/opendkim
chown opendkim:postfix /var/spool/postfix/opendkim

In der Datei /etc/default/opendkim den Eintrag SOCKET bearbeiten.

SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"

und am Ende folgendes einfügen (falls nicht vorhanden)

USER=opendkim
GROUP=opendkim
PIDFILE=$RUNDIR/$NAME.pid
EXTRAAFTER=

Nnu mss noch die Postfix Konfiguration unter /etc/postfix/main.cf bearbeitet werden.

milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

Die Services neu starten und zum testen kann man das Programm opendkim-testkey nutzen.

opendkim-testkey -d zarat.ml -s default -vvv

DMARC

Domain-based Message Authentication, Reporting and Conformance Wikipedia

Wichtig!

SPF und DKIM muss eingerichtet sein!

Man erstellt einen DNS TXT Record mit dem Namen _DMARK.zarat.ml und folgendem Inhalt erstellen. (Es können auch 2 verschiedene Mailadressen sein, dorthin werden Security reports gesendet)

v=DMARC1; p = none; rua = mailto:postmaster@zarat.ml; ruf = mailto:manuel@zarat.ml; fo = 1;

User

Aliases

Aliases bedeuten die Mailkonten werden auf die UNIX Konten des Systems gemapt. Aliases werden in die Datei

/etc/postfix/aliases

eingetragen.

mylongusername@domain.local username@domain.local

Danach muss man

postalias /etc/postfix/aliases
newaliases

aufrufen. Alternativ können Sie die Datei ~/.forward erstellen, z.B. /root/.forward für root. Geben Sie den Benutzer an, an den Root-Mails weitergeleitet werden sollen, z.B benutzer@lokalhost.

Local mail

Um Mails nur an lokale Systembenutzer (die sich in /etc/passwd befinden) zuzustellen, aktualisieren Sie

/etc/postfix/main.cf

und kommentieren Sie die folgenden Zeilen aus, ändern Sie sie oder fügen Sie sie hinzu. ToDo

myhostname = zarat.ml
smtpd_banner = $myhostname SMTP (Postfix)
mydomain = zarat.ml
mydestination = $myhostname, localhost.$mydomain, localhost
inet_interfaces = $myhostname, localhost
mynetworks_style = host
default_transport = error: outside mail is not deliverable

Virtual mail

Virtual Mail sind Mailkonten, die keinem Benutzerkonto aus

/etc/passwd

zugeordnet sind. Todo Siehe https://wiki.archlinux.org/title/Virtual_user_mail_system_with_Postfix,_Dovecot_and_Roundcube und https://wiki.dovecot.org/VirtualUsers