Inhaltsverzeichnis

MailServer

Bestandteile der eMail-Infrastruktur

aus: http://de.wikipedia.org/wiki/Datei:E-mail.svg Lizenz: GNU FDL

DNS Blacklisting

Realtime Blackhole List (RBL) bzw. DNS-based Blackhole List (DNSBL): In Echtzeit (realtime) abfragbare schwarze Listen, die verwendet werden, um E-Mail zweifelhafter Herkunft als Spam zu klassifizieren. Die Listen werden von sog. DNS-Blacklistern gepflegt.

Greylisting

Greylisting: Die erste E-Mail von unbekannten Absendern wird temporär abgewiesen und erst nach einem zweiten Zustellversuch angenommen. Gute Software wie postgrey (oder amavisd-new) lernt verlässliche Mailserver automatisch und sorgt somit bei bekannt (zuverlässigen) Sendern für eine sofortige Zustellung.

Sender Policy Framework (SPF)

Das Verfahren Sender Policy Framework (SPF) macht überprüfbar welche Computer E-Mails für eine Domäne versenden dürfen. Dazu wird in der DNS-Zone einer Domäne ein sog. Resource Record vom Typ TXT oder SPF mit Informationen darüber hinterlegt, welche Computer E-Mails für diese Domäne versenden dürfen. Anhand dieser Informationen soll nach RFC 4408 der Empfangs-Server dann sowohl die „MAIL FROM“-Identität als auch die „HELO“-Identität des Senders nachprüfen.

Schema:

 v=spf1 mx a include:mailxy.domain.tld ip4:WeitereIP.IP.IP.IP ~all
  1. a „Meine Webseiten verschicken Mails, z.B. über Formmailskripte oder als Teil der installierten Programme wie Forum, Shoplösung etc.“ ansonsten weglassen.
  2. include:smtp-server (weiterer SMTP-Server)
  3. ip4:WeitereIP.IP.IP.IP (zusätzliche IPs von smtp-Server)
  4. ~all (=nicht alle aufgelistet); -all (ALLE Mailserver aufgelistet, Vorsicht!)

Problematisch an SPF ist, das SMTP bewusst keine Aussage darüber treffen wollte wer den „Briefkasten“ spielt. Daher gibt es einige Szenarien die bei -all Probleme bereiten:

Da zudem Spammer die ersten waren die SPF korrekt umgesetzt haben wird heute von Spamassassin ein korrekter SPF (SPF_PASS) nur noch extrem minimal positiv bewertet und ein fehlgeschlagener SPF (SPF_FAIL) zur Zeit nur mit 0,919 Punkten bestraft (siehe 3.3.x-Tests). Der Einsatz von SPF hat also nur wenig bis keine praktische Auswirkung.

DomainKeys Identified Mail (DKIM)

Das DomainKeys-Verfahren führt eine Digitale Signatur ein über die der Empfänger überprüfen kann ob eine E-Mail tatsächlich unverändert vom richtigen Mailserver stammt. Dazu wird per DNS der öffentliche Schlüssel zugänglich gemacht und dieser durch asymmetrischer Verschlüsselung überprüft. Aufgrund dieses Konzeptes muss der E-Mail-Provider seine Systeme entsprechend angepasst haben was aus Komplexitätgründen selten passiert.

Wie testen?

OpenDKIM

Die folgende Anleitung funktioniert mit opendkim als milter in Postfix. !!! amavisd-new könnte das auch direkt: https://dokuwiki.tachtler.net/doku.php?id=tachtler:postfix_amavis_dkim_einsetzen

Quelle: https://kofler.info/dkim-konfiguration-fuer-postfix/

apt install opendkim opendkim-tools 
 
mkdir /etc/opendkim
mkdir /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys

Template /etc/opendkim.conf

# stefanux opendkim config 
# For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.

# Log to syslog
Syslog			yes
# debug:
SyslogSuccess           yes
LogWhy                  yes

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

# 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	relaxed/simple
# Mode			sv
# only sign:
Mode			s
#SubDomains		no

# 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			local:/var/run/opendkim/opendkim.sock
Socket                  inet:8892@localhost

##  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

# OpenDKIM bei Problemen neustarten,
# aber max. 10 mal pro Stunde
AutoRestart             yes
AutoRestartRate         10/1h

# interne Mails (signieren, nicht verifizieren)
InternalHosts           refile:/etc/opendkim/trusted

# Hosts, denen vertraut wird (vermeidet Warnungen beim Logging)
ExternalIgnoreList      refile:/etc/opendkim/trusted

# welche Verschlüsselungs-Keys sollen für welche
# Domains verwendet werden        
# (refile: für Dateien mit regulären Ausdrücke)        
SigningTable            refile:/etc/opendkim/signing.table
KeyTable                /etc/opendkim/key.table       

# diesen Signatur-Algorithmus verwenden
SignatureAlgorithm      rsa-sha256

/etc/opendkim/trusted

# Host without signature
127.0.0.1
::1
localhost
meinMailserver.stefanux.net

/etc/opendkim/signing.table

# Domain keyname
*@stefanux.net stefanux

/etc/opendkim/key.table

#Name Hostname:Selektor:Filename
stefanux stefanux.net:20201110:/etc/opendkim/keys/stefanux.private

cd /etc/opendkim opendkim-genkey -d stefanux.net -b 2048 -r -s 20201110

Ergebnis: → 20201110.private

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

20201110.txt

20201110._domainkey	IN	TXT	( "v=DKIM1; h=sha256; k=rsa; s=email; "
	  "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+CSXRWPhO3Ig3pG3WSehRCtxaa9Wr6hSy5Q6HTr9QAoNzOOnhK2/7qlxIPLw09MwVgMj+vbWZ9KtgnkRqJrO/18lk5CcL6/ozGy99bk0IHr+zp4wJTERZPUvg81oHMiZph4j6kaJixOt49hmiC50nzrirywDF1+3CjIZ/PScHPSi2/+M20DfM5+/Df3DaNPdgorwZrLLXZyGya"
	  "IvQl/G7a8/rdLGTlN4SYZPOjjQn2aDO8QkGdbqY+j0tTE5+bPEbCksIcciLk7pJVMgNhMwW1OSAPiZUfB+5a7gqYuicwUfvqMthWD5D4Jy2X6CeRstwBMd9USq+AmAU61YhZCN1wIDAQAB" )  ; ----- DKIM key 20201110 for stefanux.net

→ für den DNS Eintrag die Anführungszeichen + Leerzeichen wegnehmen, Ergebnis:

dig txt 20201110._domainkey.stefanux.net +short

"v=DKIM1; h=sha256; k=rsa; s=email;  p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+CSXRWPhO3Ig3pG3WSehRCtxaa9Wr6hSy5Q6HTr9QAoNzOOnhK2/7qlxIPLw09MwVgMj+vbWZ9KtgnkRqJrO/18lk5CcL6/ozGy99bk0IHr+zp4wJTERZPUvg81oHMiZph4j6kaJixOt49hmiC50nzrirywDF1+3CjIZ/PScHPSi2" "/+M20DfM5+/Df3DaNPdgorwZrLLXZyGyaIvQl/G7a8/rdLGTlN4SYZPOjjQn2aDO8QkGdbqY+j0tTE5+bPEbCksIcciLk7pJVMgNhMwW1OSAPiZUfB+5a7gqYuicwUfvqMthWD5D4Jy2X6CeRstwBMd9USq+AmAU61YhZCN1wIDAQAB

mv /etc/opendkim/20201110.private /etc/opendkim/keys/stefanux.private mv /etc/opendkim/20201110.txt /etc/opendkim/keys/stefanux.txt

chown -R opendkim:opendkim /etc/opendkim chmod -R go-rwx /etc/opendkim/keys

systemctl restart opendkim

opendkim-testkey -d stefanux.net -s 20201110 -vvv

opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key '20201110._domainkey.stefanux.net'
opendkim-testkey: key secure
opendkim-testkey: key OK
opendkim-testkey: key secure -> dnssec OK + DKIM OK
Key not secure -> kein DNSSEC
record not found -> defekt

/etc/postfix/main.cf:

# openDKIM:
# accept mail when milter does not work:
milter_default_action = accept
# 6 is default:
milter_protocol   = 6
smtpd_milters     = inet:localhost:8892
# local generated mails:
non_smtpd_milters = inet:localhost:8892
Nov 10 20:16:16 mx1 opendkim[9055]: OpenDKIM Filter: mi_stop=1
Nov 10 20:16:16 mx1 opendkim[9055]: OpenDKIM Filter v2.11.0 terminating with status 0, errno = 0
Nov 10 20:16:16 mx1 opendkim[9321]: OpenDKIM Filter v2.11.0 starting (args: -x /etc/opendkim.conf)
Nov 10 20:16:36 mx1 opendkim[9321]: 9158A1DF87: DKIM-Signature field added (s=20201110, d=mx1.stefanux.net)

TXT für _dmarc.stefanux.net:

Type: TXT
Host/Name: _DMARC.stefanux.net
Value: v=DMARC1; p=none; rua=mailto:postmaster@stefanux.net; ruf=mailto:postmaster@stefanux.net; fo=1 
rua -> DMARC reports
ruf -> forensic DMARC failure reports

SPF-Record-Generator

DMARC

Das Domain-based Message Authentication, Reporting and Conformance (kurz DMARC) baut auf den bekannten Techniken SPF und DKIM auf (siehe oben). DMARC legt zusätzlich fest auf welche Art der Empfänger mit einer Mail umgeht, die in einem oder beiden Fällen nicht den Anforderungen entspricht. Es ist also erstmals ein Benachrichtigung (wieviel Spam unterwegs ist) und leichtere Auswertung auf Providerebene möglich.

DMARC @msxfaq.de

dig txt _dmarc.ebay.de
_dmarc.ebay.de.		300	IN	TXT	"v=DMARC1\; p=none\; rua=mailto:ebay@rua.agari.com,mailto:dmarc_agg@auth.returnpath.net\; ruf=mailto:ebay@ruf.agari.com,mailto:dmarc_afrf@auth.returnpath.net\; fo=1\; rf=afrf\; pct=100"

Felder einer eMail

Webserver richtigen Standardabsender angeben lassen (php.ini oder httpd.conf):

php_admin_value sendmail_from user@domain.de
php_admin_value sendmail_path "sendmail ­t ­i ­f user@domain.de"

MailServer (Opensource)

Unter Linux:

Unter Windows:

kommerzielle

axigen.mailserver

Mail Transfer Agents (MTAs)

SMTP Proxies

TIP: swaks: SMTP command-line test tool

Push-mail

Push-mail wird, im Gegensatz zum periodischen Abholen (pull) der eMail, direkt nach dem eintreffen auf mobile Geräte gesendet. Es sind offene Lösungen (IMAP-IDLE) propritären Lösungen (wie Blackberry) vorzuziehen.

FIXME

Anbieter

Konfiguration

Checkliste

Aliase

Aliase für Nutzer trägt man in der Datei /etc/aliases ein. Die Änderungen gibt man durch

newaliases

bekannt.

Das Format ist Benutzer: ALIAS, wobei ALIAS ein anderer Benutzer oder eine eMail-Adresse sein kann. Alternativ sind auch Aufrufe vom Programme (über Pipe) möglich:

benutzer: "|/var/lib/mailman/mail/mailman post Benutzergruppe"

Das Beispiel ist von mailman.