server:mailserver

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
server:mailserver [2009/09/06 17:25] stserver:mailserver [2021/09/12 16:24] (aktuell) – OpenDKIM st
Zeile 1: Zeile 1:
 +====== MailServer ======
 +
 +
 +===== Bestandteile der eMail-Infrastruktur =====
 +
 +{{:server:email-kette.png|aus: http://de.wikipedia.org/wiki/Datei:E-mail.svg Lizenz: GNU FDL}}
 +
 +  * [[wpde>E-Mail-Programm|MUA (Mail User Agent) = eMail-Programm]]: ein Programm, mit dem E-Mails empfangen, gelesen, geschrieben und versendet werden.
 +  * [[netzwerke:SMTP]]: Protokoll zur Übertragung der eMail-Daten
 +  * [[wpde>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 [[netzwerke:DNS]]: Zeigt auf die zuständigen Mail-Server einer Domain, wird vom [[wpde>Mail Transfer Agent|MTA]] ausgewertet
 +  * [[wpde>Mail Delivery Agent]] (MDA): Eine Software, die eingehende E-Mails annimmt und sie nach bestimmten Kriterien an die Empfänger verteilt.
 +  * [[wpde>Mail Retrieval Agent]] holt E-Mails von einem Mailserver, genauer dem [[wpde>Mail Delivery Agent]] (MDA), ab und speichert sie auf dem lokalen Rechner.
 +  * [[netzwerke:POP3]]/[[netzwerke:IMAP]]: Protokolle zum eMail-Abruf.
 +
 +
 +  * **[[Spamfilterung]]**
 +
 +==== DNS Blacklisting ====
 +
 +[[wpde>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.
 +
 +  * [[http://www.heise.de/ix/nixspam/|iX DNSBL]]
 +  * [[http://www.spamhaus.org/|Spamhaus.org]]
 +  * [[http://www.surbl.org/|SURBL - Spam URI Realtime Blocklists]]
 +  * [[http://uribl.com/|URIBL.COM]]
 +
 +==== Greylisting ====
 +
 +[[wpde>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 [[wpde>Sender Policy Framework (SPF)]] macht überprüfbar welche Computer E-Mails für eine Domäne versenden dürfen.
 +Dazu wird in der [[netzwerke: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. 
 +
 +  * [[http://www.openspf.org/SPF_Record_Syntax|SPF Syntax]]
 +
 +
 +Schema:
 +<file>
 + v=spf1 mx a include:mailxy.domain.tld ip4:WeitereIP.IP.IP.IP ~all
 +</file>
 +  - **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 [[http://spamassassin.apache.org/tests_3_3_x.html|3.3.x-Tests]]). Der Einsatz von SPF hat also nur wenig bis keine praktische Auswirkung.
 +
 +==== DomainKeys Identified Mail (DKIM) ====
 +
 +Das [[wpde>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 [[netzwerke: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.
 +
 +  * [[http://www.dkim.org/|dpki.org]]
 +
 +Wie testen?
 +  * [[https://www.dmarcanalyzer.com/dkim/dkim-check/|DKIM DNS-Record checker]]
 +  * [[https://www.sparkpost.com/email-tools/authentication-checker/|Authentication Checker]]
 +  * -> 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/
 +
 +<code bash>
 +apt install opendkim opendkim-tools 
 +
 +mkdir /etc/opendkim
 +mkdir /etc/opendkim/keys
 +chown -R opendkim:opendkim /etc/opendkim
 +chmod go-rw /etc/opendkim/keys
 +</code>
 +
 +
 +Template ''/etc/opendkim.conf''
 +<file>
 +# 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
 +</file>
 +
 +''/etc/opendkim/trusted''
 +<file>
 +# Host without signature
 +127.0.0.1
 +::1
 +localhost
 +meinMailserver.stefanux.net
 +</file>
 +
 +
 +''/etc/opendkim/signing.table''
 +<file>
 +# Domain keyname
 +*@stefanux.net stefanux
 +</file>
 +
 +''/etc/opendkim/key.table''
 +<file>
 +#Name Hostname:Selektor:Filename
 +stefanux stefanux.net:20201110:/etc/opendkim/keys/stefanux.private
 +</file>
 +
 +
 +''cd /etc/opendkim
 +opendkim-genkey -d stefanux.net -b 2048 -r -s 20201110''
 +
 +Ergebnis:
 +-> 20201110.private
 +<file>
 +-----BEGIN RSA PRIVATE KEY-----
 +...
 +-----END RSA PRIVATE KEY-----
 +</file>
 +
 +20201110.txt
 +<file>
 +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
 +</file>
 +-> für den DNS Eintrag die Anführungszeichen + Leerzeichen wegnehmen, Ergebnis:
 +
 +''dig txt 20201110._domainkey.stefanux.net +short'' 
 +<file>
 +"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
 +</file>
 +
 +''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''
 +
 +<file>
 +opendkim-testkey: using default configfile /etc/opendkim.conf
 +opendkim-testkey: checking key '20201110._domainkey.stefanux.net'
 +opendkim-testkey: key secure
 +opendkim-testkey: key OK
 +</file>
 +
 +<file>
 +opendkim-testkey: key secure -> dnssec OK + DKIM OK
 +Key not secure -> kein DNSSEC
 +record not found -> defekt
 +</file>
 +
 +''/etc/postfix/main.cf'':
 +<file>
 +# 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
 +</file>
 +
 +<file>
 +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)
 +</file>
 +
 +TXT für _dmarc.stefanux.net:
 +
 +<file>
 +Type: TXT
 +Host/Name: _DMARC.stefanux.net
 +Value: v=DMARC1; p=none; rua=mailto:postmaster@stefanux.net; ruf=mailto:postmaster@stefanux.net; fo=1 
 +</file>
 +
 +<file>
 +rua -> DMARC reports
 +ruf -> forensic DMARC failure reports
 +</file>
 +
 +[[https://mxtoolbox.com/SPFRecordGenerator.aspx|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.
 +
 +[[http://www.msxfaq.de/spam/dmarc.htm|DMARC @msxfaq.de]]
 +
 +<code>dig txt _dmarc.ebay.de</code>
 +<file>_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"</file>
 +
 +
 +
 +===== 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''): 
 +<file>
 +php_admin_value sendmail_from user@domain.de
 +php_admin_value sendmail_path "sendmail ­t ­i ­f user@domain.de"
 +</file>
 +===== MailServer (Opensource) =====
 +
 +Unter [[linux:Linux]]:
 +  * **cyrus** mail server:  läuft nicht als root, viele Features
 +  * [[Courier]] Mail Server
 +  * **[[server:dovecot]]:** Design-Ziel: Sicherheit und Zuverlässigkeit (u. a. gutes Fehlerhandling)
 +  * Perdition: POP3 and IMAP4 Proxy server
 +  * [[http://www.web-cyradm.org/|Web-cyradm]]: eine web-basierte Verwaltungsoberfläche für cyrus-imap and [[Postfix]].
 +
 +Unter [[windows:Windows]]:
 +  * [[http://www.heise.de/download/hmailserver.html|hmailserver]] (freeware)
 +
 +
 +
 +==== Links und Anleitungen ====
 +  * [[http://www.hypexr.org/linux_mail_server.php|Creating a Linux Mail Server]]
 +  * [[http://linux-magazin.de/videos/open_source_antispam_antivirus_and_mail_processing_solutions| Open source antispam, antivirus and mail processing solutions]]
 +  * [[http://www.heise.de/open/artikel/74991/|Mailserver mit Spamfilter]]
 +  * [[http://www.tecchannel.de/server/hardware/1750499/index.html|Zehn kritische Fehler beim Einrichten eines E-Mail-Servers]]
 +
 +
 +
 +==== kommerzielle ====
 +[[http://www.axigenmailgate.de/index.html|axigen.mailserver]]
 +
 +
 +
 +===== Mail Transfer Agents (MTAs) =====
 +
 +  * [[Postfix]] - flexibel, schnell, erweiterbar
 +  * [[exim]]
 +  * sendmail (veraltet)
 +  * [[wpde>qmail]]
 +
 +
 +[[http://www.onlamp.com/pub/a/bsd/2003/07/24/FreeBSD_Basics.html|SMTP Proxies]]
 +
 +
 +===== Links =====
 +  * [[http://www.tecchannel.de/storage/grundlagen/576672/|Das ungeliebte Kind E-Mail-Archivierung]]
 +
 +
 +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 ====
 +
 +  * [[http://www.cortado.com/eude/CortadoFree/%C3%9CberCortadoFree.aspx|Cortado free]]
 +
 +===== 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 <code>newaliases</code> 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:
 +<file>
 +benutzer: "|/var/lib/mailman/mail/mailman post Benutzergruppe"
 +</file>
 +Das Beispiel ist von [[software:mailman]].
 +
 +
 +