MailServer
Bestandteile der eMail-Infrastruktur
- 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
- 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.
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
- a „Meine Webseiten verschicken Mails, z.B. über Formmailskripte oder als Teil der installierten Programme wie Forum, Shoplösung etc.“ ansonsten weglassen.
- include:smtp-server (weiterer SMTP-Server)
- ip4:WeitereIP.IP.IP.IP (zusätzliche IPs von smtp-Server)
- ~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.
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?
- → Google mail zeigt in der Originalansicht des Verifikationsstatus an
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
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.
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
- 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"
MailServer (Opensource)
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:
- hmailserver (freeware)
Links und Anleitungen
kommerzielle
Mail Transfer Agents (MTAs)
- Postfix - flexibel, schnell, erweiterbar
- sendmail (veraltet)
Links
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.
Anbieter
Konfiguration
Checkliste
- 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
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.