An official website of the European UnionAn official EU website
My Email Communications Security Assessment (MECSA)

Installationsanweisung für Postfix um maximale Kennwerte und Sicherheitsergebnisse in MECSA zu bekommen

Im Folgenden finden sie eine kurze Beschreibung des Installationsvorgangs für den Postfix Email-Server, der maximale Kennwerte in allen drei Bereichen des Berichts erzielt: Vertrauliche Nachrichtenübertragung, Phishing und Identitätsbetrug und Vertrauenswürdigkeit von Nachrichten. Diese Anleitung wurde auf einer virtuellen Maschine mit Ubuntu 16.04 LTS getestet.

1. Zuerst müssen Sie Ubuntu Server 16.04 LTS installieren.

  • # sudo su -
  • # apt-get update
  • # apt-get upgrade

2. Konfiguration von DNS und DNSSEC

Der einfachste Weg, um DNSSEC zu bekommen, ist einen Service zu nutzen der direkt DNSSEX unterstützt. Als Alternative prüfen wir die Möglichkeit in der Zukunft Hinweise zu veröffentlichen, wie man seinen eigenen DNS-Service mit DNSSEC-Support installieren kann. Vor Beginn muss sichergestellt sein, dass die Domain ein MX-Record hat und dass dieses MX-Record eine IP-Adresse und einen A-record zugewiesen bekommen hat. Unser DNS-Service (entweder lokal oder durch einen dritte Gruppe bereit gestellt) erzeugt einen MX-Record (mindestens einen) für die Domain model.dcslab.eu: 5 mx.model.dcslab.eu. Der erste Wert entspricht der Priorität, der zweite dem Hostname des MTA. Für jeden erzeugten MX-record, wird auch ein A-record erzeugt, um den MX-Hostname in eine IP-Adresse umzuwandeln, z.B.:

mx.model.dcslab.eu. IN A 139.191.36.5

3. Installieren Sie Postfix und konfigurieren Sie das System.

  • # apt-get install postfix
  • # dpkg-reconfigure postfix
General type of mail configuration?Internet Site
System mail namemodel.dcslab.eu
root and postmaster mail recipientsmodel (root user)
destinations to accept mail for (mydestinations)model.dcslab.eu
force synchronous updates on mailyes
local networks (mynetworks)192.168.1.0/24 127.0.0.1
Mailbox Size limit (bytes)0 (means no limit)
Local address extension character(no address extensions)
Internet Protocols to useIPv4
  • # postconf -e 'home_mailbox = Maildir/'
  • # postconf -e 'mailbox_command ='
  • # service postfix restart

Wir erstellen Aliases um DMARC-Berichte zu erhalten

  • # vi /etc/aliases
  • postmaster: model
  • dmarc_reports: model
  • # postalias /etc/aliases
  • # service postfix restart

4. StartTLS-Konfiguration

Um StartTLS korrekt in die Postfix-Installation einzubinden, wird ein unterschriebenes Zertifikat einer anerkannten „Certification Authority“ (CA) benötigt. Desweiteren müssen eine Reihe von Einstellungen im Postfix-Server vorgenommen werden. Zuerst beginnen wir mit dem Zertifikat einer CA. In unserem Beispiel wenden wir uns für ein kostenloses Zertifikat an Let's Encrypt als CA. Wir folgen der Installationsanleitung für eine Debian-Installation.

Die App um das Zertifikat zu beantragen benötigt freien Zugung zum TCP Port 80. Jede Anwedung, die diesen Port nutzt, muss zuerst geschlossen werden. Sobald wir das Zertifikat erhalten haben, können wir unseren Service wieder aufnehmen. Es ist sehr wichtig, dass im Prozess der Zertifizierung exakt der richtige, zu zertifizierende Domain-Name angegeben wird. In diesem Fall verwenden wir mx.model.dcslab.eu für unseren Email-Server.

  • # apt-get install ca-certificates
  • # postconf -e 'smtp_tls_security_level = dane'
  • # postconf -e 'smtp_dns_support_level = dnssec'
  • # postconf -e 'smtpd_tls_security_level = may'
  • # postconf -e 'smtp_tls_note_starttls_offer = yes'
  • # postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mx.model.dcslab.eu/privkey.pem'
  • # postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mx.model.dcslab.eu/fullchain.pem'
  • # postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
  • # postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
  • # postconf -e 'smtpd_tls_ask_ccert = yes'
  • # postconf -e 'smtpd_tls_loglevel = 1'
  • # postconf -e 'smtpd_tls_received_header = yes'
  • # postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
  • # postconf -e 'tls_random_source = dev:/dev/urandom'
  • # postconf -e 'myhostname = model.dcslab.eu'

5. Konfiguration des SPF („Sender Policy Framework“)

Um ein SPF zu konfigurieren, müssen wir einen DNS-Record aufsetzen. so dass anderen Mail Transfer Agents (MTAs) Zugriff darauf haben, wenn Sie Emails von unserer Domain erhalten. Aber, damit unsere Domain SPF richtig nutzen kann um seinerseits Mails zu empfangen, müssen wir eine weitere Anwendung mit dem apt-get Werkzug installieren und richtig konfigurieren.

Wir beginnen, indem wir einige einfache DNS-Record-Regeln aufsetzten, die alle Hosts festlegen, welche über unsere Domain 'model.dcslab.eu' Emails versenden dürfen.

IN TXT "v=spf1 mx -all"

Danach installieren und konfigurieren wir das postfix-policyd-spf-python-Paket:

  • # apt-get install postfix-policyd-spf-python
  • # vi /etc/postfix/master.cf

# SPF /etc/postfix/master.cf configuration
#
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/policyd-spf

  • # vi /etc/postfix/main.cf

# SPF /etc/postfix/main.cf configuration
policy-spf_time_limit = 3600s
smtpd_helo_restrictions = reject_invalid_hostname
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination, check_policy_service unix:private/policy-spf

6. Konfiguration der DKIM („DomainKeys Identified Mail“)

DKIM benötigt 3 Schritte für die Aktivierung:

  • Installation von opendkim.
  • Erstellung von Schlüsseln.
  • Erstellung eines DNS-Records.
  • Konfiguration von opendki und Postfix.
  • # apt-get install opendkim opendkim-tools
  • # mkdir -pv /etc/opendkim/private_keys/
  • # chown -R opendkim:opendkim /etc/opendkim
  • # chmod 700 /etc/opendkim/*
  • # cd /etc/opendkim/private_keys/
  • # opendkim-genkey -b 2048 -r -h rsa-sha256 -d model.dcslab.eu -s modelSelector
  • # mv -v modelSelector.private modelSelector.key
  • # chown opendkim:opendkim *
  • # chmod 600 *

Sobald wir die Schlüssel erzeugt haben, können wir eine Ausgabe nutzen umd den entsprechenden TXT-Record in unserer Domain zu erzeugen. Die Subdomain, an die es angehängt wird ist <selector>._domainkey.<our_domain>.

  • # cat modelSelector.txt
  • !!!!! obwohl der Inhalt der datei behauptet 'h=rsa-sha256;, the CORRECT value is h=sha256'

modelSelector._domainkey IN TXT ("v=DKIM1; h=sha256; k=rsa; s=email; p=MIGf...QAB")

Nach der Erstellung des Schlüssels und des TXT-records, müssen wir opendkim so konfigurien, dass es mit Postfix funktioniert.

  • # cd /etc/opendkim/
  • # vi KeyTable

#key_name domain:selector:/path/to/private_key_file
model.dcslab.eu model.dcslab.eu:modelSelector:/etc/opendkim/private_keys/modelSelector.key

  • # vi SigningTable

#signer_of_the_message key_name
*@model.dcslab.eu model.dcslab.eu

  • # vi TrustedHosts

#list-of-hosts (ips and hostnames)
127.0.0.1
model.dcslab.eu
192.168.1.0/24

  • # chown opendkim:opendkim /etc/opendkim/{KeyTable,SigningTable,TrustedHosts}
  • # mv /etc/opendkim.conf /etc/opendkim.conf.original
  • # vi /etc/opendkim.conf

Syslog yes
SyslogSuccess yes
LogWhy yes
UMask 002
OversignHeaders From,Subject
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
SignatureAlgorithm rsa-sha256
AutoRestart Yes
UserID opendkim:opendkim

  • # mkdir -p /var/spool/postfix/var/run/opendkim
  • # chown opendkim:opendkim /var/spool/postfix/var/run/opendkim
  • # usermod -a -G opendkim postfix
  • # vi /etc/default/opendkim

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

  • # vi /etc/postfix/main.cf

# OpenDKIM milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:/var/run/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

  • # vi service opendkim restart
  • # vi service postfix restart

7. Konfiguration von DMARC

Die Konfiguration von DMARC ist identisch zu der von DKIM, abgesehen von der Erstellung des Schlüssels.

  • Installation von opendmarc
  • Erzeugung eines DNS-records
  • Konfiguration von opendmarc und Postfix

  • # apt-get install opendmarc

Im Falle von DMRAC ist der TXT-Record an die Subdomain _dmarc.<our_domain> gebunden. Grundsätzlich beinhalten die DMARC Regeln die Version, die Regeln für die Behandlung von Nachrichten (Akzeptieren, Ablehnen,...) und die Email-Adresse für Berichte.

_dmarc TXT( "v=DMARC1; p=reject; rua=mailto:dmarc_reports@model.dcslab.eu")

Schlussendlich müssen wir noch Postfix and opendmarc zusammen konfigurieren.

  • # vi /etc/opendmarc.conf

AuthservID model.dcslab.eu
Socket inet:8893@localhost

  • # vi /etc/postfix/main.cf

# DMARC /etc/postfix/main.cf configuration
# 8893 is default for opendmarc
smtpd_milters = unix:/var/run/opendkim/opendkim.sock, inet:127.0.0.1:8893

  • # vi service opendmarc restart
  • # vi service postfix restart

8. Konfiguration von DANE

Postfix unterstützt DANE als Option in der TLS-Konfiguration. Diese Optionen wurden normalerweise schon während der Konfiguration von StrtTLS gesetzt.

smtp_tls_security_level = dane
smtp_dns_support_level = dnssec

Postfix benötigt einen rekursiven Nameserver, der in der Lage ist die DNSSEC-Bestätigung um DNSSEC zu validieren. Deswegen müssen wir entweder einen solchen Nameserver lokal installieren und konfigurieren, oder wir stellen unser System so ein, dass es einen externen benutzen kann. Um die TLSA-records aufzusetzen, können wir ein Online-Werkzeug benutzen (z.B. (example)) um die entsprechenden Werte zu erzeugen. Um die PEM-Werte des Zertifikats einzusehen, können wir folgenden Befehl ausführen:

  • # cat /etc/letsencrypt/live/mx.model.dcslab.eu/cert.pem

-----BEGIN CERTIFICATE-----
MIIFMjCCBBqgAwIBAgISA/ZiA+nFT1Hd5emwMgI20KtdMA0GCSqGSIb3DQEBCwUA
...
Wq6bzNp36KG7fb86FW5VfJsINeIUdad/6J/gBylPPzaoonQ7vcT0VB6TI4/ic1C1
VuvF9e7YHH42YnWMoBesmOqoNWty+tzyFObvZPp7XLyQCDbS4ZY=
-----END CERTIFICATE-----

Der Anweisung von Postfix documentation folgend, wählen wir die folgenden Parameter aus um die TLSA-recods zu erzeugen:

  • Usage Field: 3 (Domain Issued Certificate)
  • Selector Field: 1 (Use subject public key)
  • Matching-Type Field: 1 (SHA-256)

wir erzeugen einen Record für einen TCP-Service auf Port 25, demnach gilt:

_25._tcp.mx.model.dcslab.eu TLSA 3 1 1 1cf86240705080beee6827b063e52274e545859711d4f63aca3af259210ad6ab