server:mailserver

MailServer

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

  • MUA (Mail User Agent) = eMail-Programm: ein Programm, mit dem E-Mails empfangen, gelesen, geschrieben und versendet werden.
  • SMTP: Protokoll zur Übertragung der eMail-Daten
  • Mail Transfer Agent (MTA; auch Mail Transport Agent): Ein Programm, das den Transport und die Verteilung von Nachrichten erledigt
    • MX-Record (Mail Exchange-Record) (siehe DNS: Zeigt auf die zuständigen Mail-Server einer Domain, wird vom MTA ausgewertet
  • Mail Delivery Agent (MDA): Eine Software, die eingehende E-Mails annimmt und sie nach bestimmten Kriterien an die Empfänger verteilt.
  • Mail Retrieval Agent holt E-Mails von einem Mailserver, genauer dem Mail Delivery Agent (MDA), ab und speichert sie auf dem lokalen Rechner.
  • POP3/IMAP: Protokolle zum eMail-Abruf.

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: 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.

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:

  • Weiterleitungen an einen anderen Provider
  • Mailinglisten die in meinem Namen mails weiterleiten (und nicht den Envelope umschreiben)
  • Artikelempfehlungen/Webgrußkarten etc. die den Absender des Empfehlenden setzen

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.

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?

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

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 im Header einer eMAIL:
    • To: Der Empfänger der eMail
    • CC: grundsätzlich wie „To:“, hier kann der Sender deutlich machen, dass die eMail nur eine Kopie zur Kenntnisnahme darstellt. Empfänger in diesem Feld sind für andere Empfänger sichtbar.
    • BCC: Empfänger in diesem Feld sind für andere Empfänger nicht sichtbar.
    • Subject: Betreff einer eMail
    • X-… hinzugefügte Informationsfelder von Virenscanner, Spamfilter, Zwischenstationen, …

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"

Unter Linux:

  • cyrus mail server: läuft nicht als root, viele Features
  • Courier Mail Server
  • dovecot: Design-Ziel: Sicherheit und Zuverlässigkeit (u. a. gutes Fehlerhandling)
  • Perdition: POP3 and IMAP4 Proxy server
  • Web-cyradm: eine web-basierte Verwaltungsoberfläche für cyrus-imap and Postfix.

Unter Windows:

SMTP Proxies

TIP: swaks: SMTP command-line test tool

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

  • IP Addressen der MTAs/Mailserver sollten
    • nicht dynamisch sein (die werden von großen Providern blockiert und hat Kommunikationsprobleme)
    • identische vorwärts- und Rückwärts-DNS-Auflösung haben
    • nicht auf einer Blacklist sein
  • der MTA/Mailserver sollte den zur IP-Adresse passenden Namen konfiguriert haben und sich damit melden („greeting“)
  • kein offenes Relay sein (mail nur von authentizierten Benutzern annehmen bzw. nur für die eigenen Domains annehmen)
  • korrekte (!) SPF/DKIM-Records helfen sind aber nicht Zwang

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.