Mailserver verstehen und einrichten

Ich möchte lernen, wie genau Mailserver funktionieren und was DKIM, SPF, DMARC sind und wie das funktioniert und lernen, das richtig einzurichten.

1 „Gefällt mir“

Ich kann Mailserver mit Postfix und Dovecot unter Debian bauen. Kann ich gerne zeigen.

1 „Gefällt mir“

Ich kann Mailserver mit Postfix und Dovecot unter Debian bauen. Kann ich gerne zeigen.

Wenn Ingo das als Experte macht, mach ich den Themenpaten.

@iw Wir sind ja gleich verabredet, dann können wir da kurz didaktisch
drüber reden.

Ich bin Themenpate; @iw Experte.

Wir wollen uns an einem Termin treffen und dann dort den Mailserver aufsetzen (jeder bei sich selbst).

Das Treffen soll über ein BBB stattfinden und wird etwa 3/4 Stunden treffen.

  • Samstag, 25.01.
  • Samstag, 08.02.
  • Sonntag, 09.02
  • Samstag, 15.02.
  • Sonntag, 16.02.
  • Samstag, 22.02.
  • Sonntag, 23.02.
0 Teilnehmer

Wir wollen uns am Sonntag, den 09.02.2025 ab 10 Uhr (ungefähr 4-5h + Pausen) in einem BBB treffen.

2025-02-09T09:00:00Z2025-02-09T14:00:00Z

1 „Gefällt mir“

Ich bin da nicht da, kann da jemand die wichtig(st)en Inhalte irgendwie festhalten (also aufschreiben, nicht mit den Händen umklammern oder so)?

Wir schreiben das alles als Sessionbericht auf.

Wer hier mitmacht, sollte idealerweise vorher auch bei Domains, DNS, URLs, (Web-)Server usw. verstehen mitmachen oder die Inhalte von dort verstanden haben.

Mailserver verstehen und einrichten - Session am 09.02.25

Vorraussetzung:

  • Ein Server mit Debian
  • Ein Client auf dem z.B. Debian läuft

DNS-Einrichtung

sub.domain.tld.        A  123.456.78
sub.domain.tld.        AAAA  2a01:4f9:c013:5c3::1

Man kann nun auf sub.domain.tld. gehen und das zeigt dann auf die IP-Adresse (also ssh sub.domain.tld anstatt 123.456.78.9)

SMTP

Schauen, ob schon ein Mailserver läuft

# lsof = List open files
# Prüft, ob ein Port geöffnet ist
# Port 25 ist der Standardport für SMTP
lsof -i :25

SMTP - Was ist das?

SMTP = Simple Mail Transport Protocol

Das Protokoll ist sozusagen eine Norm, um Mails zu transportieren.

Es läuft standardmäßig auf Port 25.

SMTP-Software installieren

apt install postfix

# Hier dann immer die Standard-Konfiguration wählen
# Also 'Internet site' wählen und den hostname so lassen
# Prüfen, ob installiert:
lsof -nPi :25

# COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
# master  2359 root   13u  IPv4  21807      0t0  TCP *:25 (LISTEN)
# master  2359 root   14u  IPv6  21808      0t0  TCP *:25 (LISTEN)

Jetzt wären schon Mails empfangbar!

Testen!

Auf der Clientseite swaks installieren:

apt install swaks

Client-Software auf dem eigenen Computer - Swaks ist ein Mailclient.
Den installiert man auf seinem eigenen Computer und kann damit dann den neu installierten Postfix-Server testen:

swaks -f mail@meine-mail.de \  # f = from
    -t root@domain.tld \   # t = to
    -s sub.domain.tld          # s = server
    
# So sieht die Ausgabe dann aus, also die Kommunikation zwischen Server und Client:

=== Trying sub.domain.tld:25...
=== Connected to sub.domain.tld.
<-  220 domain ESMTP Postfix (Debian/GNU)
# Im Moment weiß der Server nur die IP.
# Was kann man damit anfangen?
#   - Alle auf Blacklists blockieren
#   - Alle über Geoblocks (also z.B. alle aus Russland blockieren)
# 220 = Server bereit und Verbindung angenommen
 -> EHLO client-hostname
# Server weiß jetzt den Hostnamen
# Man kann z.B. das DNS auflösen
# Das ist der eigene Hostname, also im eigenen Netz
# Das DNS ist also wahrscheinlich nicht auflösbar
# z.B.: 'dig client-hostname'
# Der Server macht aber normalerweise weiter, weil der Client kann ja später noch Authenitifzierung nachlegen
### Ab hier sagt der Server erstmal, was er alles kann (also z.B. Message size):
<-  250-domain
<-  250-PIPELINING
<-  250-SIZE 10240000
<-  250-VRFY
<-  250-ETRN
<-  250-STARTTLS
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250-DSN
<-  250-SMTPUTF8
<-  250 CHUNKING
 -> MAIL FROM:<mail@meine-mail.de>    # Absenderadresse
# Hier kann der Server das Absender-DNS abfragen.
# Also: 'dig TXT meine-mail.de'
# Was kann man damit machen?
#   - z.B. SPF überprüfen
<-  250 2.1.0 Ok
 -> RCPT TO:<root@domain.tld>     # Empfänger
# Wollen wir die Email überhaupt annehmen?
# Also: Ist der Empfänger-Server überhaupt einer der konfigurierten?
<** 454 4.7.1 <root@domain.tld>: Relay access denied
# Relay = Mail ist nicht für den Server, sondern soll einfach nur weitergesendet werden
# Das lehnt der Server ab
# Die Mail wäre aber für den Server, also muss man hier Postfix konfigurieren
 -> QUIT
<-  221 2.0.0 Bye
=== Connection closed with remote host.

Postfix konfigurieren

# Zeigt nur nicht-Default Konfigurationen an
postconf -n

# Kürzer als:
cat /etc/postfix/main.cf

Das erste wichtige wäre:

mydestination = $myhostname, domain, localhost.localdomain, localhost

Hier wird der Hostname des Servers genutzt:

hostname -f

# domain

# Das ist 'domain', nicht 'domain.tld' -> Also nicht der FQDN

Es gibt zwei Möglichkeiten: Entweder wir ändern den Hostnamen des Servers oder wir ändern die Postfix-Konfiguration:

# Hostname in der Postfix-Konfiguration setzen
postconf -e "mydestination = domain.tld, tuxilio-1, local.host.localdomain, localhost"

Postfix sagt bei Änderungen mit postconf Bescheid und lädt sich automatisch neu.

Jetzt kann man swaks nochmal testen, die Mail sollte jetzt angenommen werden:

=== Trying sub.domain.tld:25...
=== Connected to sub.domain.tld.
<-  220 domain ESMTP Postfix (Debian/GNU)
 -> EHLO client-hostname
<-  250-domain
<-  250-PIPELINING
<-  250-SIZE 10240000
<-  250-VRFY
<-  250-ETRN
<-  250-STARTTLS
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250-DSN
<-  250-SMTPUTF8
<-  250 CHUNKING
 -> MAIL FROM:<mail@meine-mail.de>
<-  250 2.1.0 Ok
 -> RCPT TO:<root@domain.tld>
<-  250 2.1.5 Ok
 -> DATA
<-  354 End data with <CR><LF>.<CR><LF>
 -> Date: Sun, 09 Feb 2025 11:21:43 +0100
 -> To: root@domain.tld
 -> From: mail@sub.domain.tld
 -> Subject: test Sun, 09 Feb 2025 11:21:43 +0100
 -> Message-Id: <20250209112143.016322@ice-pad>
 -> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/
 -> 
 -> This is a test mailing
 -> 
 -> 
 -> .
<-  250 2.0.0 Ok: queued as EE53B414EA # Queue number, die der Server dem Client zurückgibt
 -> QUIT
<-  221 2.0.0 Bye
=== Connection closed with remote host.

Was hat Postfix mit der Mail jetzt gemacht?

Auf dem Server kann man die Queue number jetzt nehmen und die Logs dazu ansehen:

journalctl ist ein Client, um die Log-Datenbank abzufragen.

# journalctl -e = ans Ende springen
# journalcrl -g = grep
journalctl -eg <Queue number>
# Also z.B.:
# journalctl -eg EE53B414EA

# Bzw:
journalctl -e --facility=mail | grep -C1 <Queue number>
# Das -C1 heißt Context, also dass eine Zeile oben drüber und dadrunter angezeigt wird
# Also z.B.:
# journalctl -e --facility=mail | grep -C1 EE53B414EA

# Mit 'journalctl -f' kann man alle neuen Logs ansehen, die nach der Ausführung ankommen
journalctl -f

Zum Schutz vor Sicherheitslücken läuft nur smtpd (weil man für das Öffnen von Ports kleiner 1024 root-Rechte braucht) und gibt ihn an den Cleanup-Prozess weiter. Der sorgt dafür, dass keine Buffer Overflows und keine nichterlaubten Zeichen im Text sind.
Der Cleanup-Prozess gibt das dann an den Queue-Manager weiter und entscheidet Mail für Mail, was er mit der Mail macht.
Der gibt ihn weiter und local speichert das in der Mailbox.

Man sieht die Mails mit:

tail /var/mail/root 

Gegenprobe: Nimmt der Server jetzt Mails als Relay an?

swaks -f mail@meine-mail.de \  # f = from
    -t root@domain-2.tld \     # t = to
    -s sub.domain.tld          # s = server

Das sollte jetzt ein Relay access denied geben.

IMAP

Mails relayen

Wir wollen jetzt auch Mails verschicken könne.

swaks -f root@domain.tld \     # f = from
    -t mail@meine-mail.de \    # t = to
    -s sub.domain.tld          # s = server

Das gibt im Moment noch ein Relay access denied geben - schließlich soll nicht jeder Mails verschicken können.

Dazu nutzen wir Authenifizierung, also melden uns am Server an.

SASL

SASL = Simple Authentication and Security Layer

Die Idee ist, dass Postfix das SASL von Dovecot nutzt. Dovecot ist ein IMAP-Server, der Mails zwischen Client und Server transportiert.

Dovecot

Wichtigste Befehle mit Dovecot - Übersicht: https://wiki.lab.linuxhotel.de/doku.php/lpi2:dovecot-imapd

Erstmal braucht man IMAP:

apt install dovecot-imapd

Prüfen, ob es läuft:

lsof -nPi :imap

# COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
# dovecot 38992 root   34u  IPv4  81464      0t0  TCP *:143 (LISTEN)
# dovecot 38992 root   35u  IPv6  81465      0t0  TCP *:143 (LISTEN)

Dovecot konfigurieren

doveconf -n
# Listet alle Konfigurationsdateien in /etc/dovecot/ als eine auf

Systembenutzer nutzen

Also legen wir einen neuen Nutzer an:

# Nutzer hinzufügen
useradd -m -s /bin/false USERNAME
passwd USERNAME

# Dovecot testen
doveadm user USERNAME
doveadm auth login USERNAME

Postfix soll Emails an Dovecot weitergeben

Im Moment werden Mails hier gespeichert:

doveconf mail_location

mail_location = mbox:~/mail:INBOX=/var/mail/%u

Man hat also alle Mails, immer in /var/spool/mail/root.

less /var/spool/mail/root 

Um eine Mail zu lesen, muss man also die gesamte Datei öffnen. Je mehr Mails es werden, desto langsamer wird es.

Man will die aber im home-Verzeichnis des Nutzers speichern.

Wir möchten jetzt ein Maildir nutzen, sodass eine Email = eine Datei ist.

Also schreiben wir die Zeile

mail_location = maildir:~/Maildir

in die Datei /etc/dovecot/local.conf. Wenn man Dine in diese Datei schreibt, haben die Vorrang zu allen anderen Dateien.

Und überprüfen:

doveconf mail_location

# mail_location = maildir:~/Maildir

Wie können Dovecot und Postfix jetzt miteinander spechen?

Das geht z.B. über sog. Sockets. Das sind dann normalerweise TCP- und UDP-Sockets oder UNIX-Sockets.

Dovecot soll bei uns über Sockets lauschen und Postfix soll die Mails rüberschieben.

Das Protokoll dazu heißt LMTP und ist so ähnlich wie SMTP.

LMTP von Postfix → Dovecot

apt install dovecot-lmtpd

In /etc/dovecot/local.conf:

auth_username_format = %Ln

(Siehe https://wiki.lab.linuxhotel.de/doku.php/lpi2:postfix-dovecot-imapd)

Postfix läuft aber unter chroot, also darf nur unter /var/spool/postfix.

Also sagen wir Dovecot, dass es den Socket unter dem Postfix-Dir ablegen soll:

Also in /etc/dovecot/local.conf:

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    user = postfix
    group = postfix
    mode = 0660
  }
}

Testen:

systemctl restart dovecot.service

lsof /var/spool/postfix/private/dovecot-lmtp

# COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF  NODE NAME
# dovecot 39612 root   26u  unix 0x000000001bc34063      0t0 86067 /var/spool/postfix/private/dovecot-lmtp type=STREAM (LISTEN)

Jetzt noch Postfix konfigurieren:

postconf mailbox_transport

# mailbox_transport =

postconf -e 'mailbox_transport = lmtp:unix:private/dovecot-lmtp'

postconf mailbox_transport

# mailbox_transport = lmtp:unix:private/dovecot-lmtp

Jetzt nochmal testen (vom Client):

swaks -f mail@meine-mail.de \     # f = from
    -t USERNAME@domain.tld \      # t = to
    -s sub.domain.tld             # s = server

Das sollte wieder eine Queue number geben, die man wieder abrufen kann.

Jetzt testen wir noch die Authentifizierung (vom Server):

curl -v --url imap://localhost:143 --user USERNAME

SASL vom Dovecot auch für Postfix nutzen

In: /etc/dovecot/local.conf

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

# Outlook braucht noch 'login', Standard ist 'plain'
auth_mechanisms = plain login

Testen:

doveconf auth_mechanisms

Jetzt soll Dovecot auch Postfix auth nutzen:

postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_auth_enable = yes'

Neu laden und testen:

systemctl restart dovecot.service postfix.service
lsof /var/spool/postfix/private/auth 
# COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF  NODE NAME
# dovecot 39940 root   55u  unix 0x00000000ccbd44d1      0t0 89249 /var/spool/postfix/private/auth type=STREAM (LISTEN)

Und clientseitig mit swaks:

swaks -f mail@meine-mail.de \     # f = from
    -t USERNAME@domain.tld \      # t = to
    -s sub.domain.tld \           # s = server
    -a -au USERNAME               # Authentifizierung

Dabei sollte im swaks neu nach einem Passwort gefragt werden und dort 250-AUTH PLAIN LOGIN stehen.

Dann kann man wieder Logs ansehen mit

journalctl -e --facility=mail | grep -C1 <QUEUE ID>

Mails an alle verschicken

DKIM

Mit DKIM wird die Mail vom Server signiert. Es gibt dann jeweils einen Private und einen Public key, wobei der Public key im DNS steht.

rDNS

Es gibt bei der DNS-Auflösung zwei Möglichkeiten:

Vorwärts: Domain Name → IP
Rückwärts (das wäre dann rDNS / reverse DNS): IP → Domain Name

Man kann das abfragen mit:

dig -x 123.456.789.1

MX record

Der ist dafür da, dass Server wissen, an wen sie sich wenden müssen.

Wir wollen an domain.tld senden, aber der Server ist unter sub.domain.tld:

domain.tld.        MX 10  sub.domain.tld

Man kann auch mehrere MX Records machen, damit, falls ein Server ausfällt, noch Mails empfangen werden können.

Die Zahl hinter MX sagt, welches der bevorzugte Server ist. Dabei ist die kleinste Nummer der bevorzugste.

Backup-Server konfigurieren

postconf -e 'relay_domains = $mydestination, andere-domain.tld.'

Andere Befehle

postqueue -p

Zeigt die Queue.

sendmail -q

versucht, Mails neu zu senden.

postsuper -d <QUEUE ID>

löscht etwas aus der Queue.

Mailserver sicherer machen

Wenn jemand seinen FQDN nicht sagen kann

KLAPPT LEIDER NOCH NICHT

postconf -e 'smtpd_helo_restrictions = permit_mynetworks, reject_invalid_helo_hostname'

Mit swaks sollte es jetzt nicht mehr klappen:

swaks -f mail@meine-mail.de \     # f = from
    -t USERNAME@domain.tld \      # t = to
    -s sub.domain.tld \           # s = server
    -a -au USERNAME               # Authentifizierung
    -ap 'PASSWORD'                # Passwort

Weitere Dinge zum selber porbieren:

  • Keine Systemnutzer verwenden: https://wiki.lab.linuxhotel.de/doku.php/lpi2:dovecot-virtual-domains & https://wiki.lab.linuxhotel.de/doku.php/lpi2:postfix-virtual-domains
  • DKIM nutzen: PDF in Projektchat Hack’n’Fun

Wir wollen uns am 2025-02-23T12:00:00Z2025-02-23T14:00:00Z treffen, wo @nik uns rspamd erklärt.

Das muss leider verschoben werden, da wir fast alle Kick-Offs der neuen AGs auf diesen Tag planen mussten.

Wir wollen uns für 2-3 h treffen, um rspamd erklärt zu bekommen.

  • Samstag, 15.03.
  • Sonntag, 16.03.
  • Samstag, 29.03.
  • Sonntag, 29.03.
0 Teilnehmer

Ich gehe davon aus, dass Sonntag, 30.3. gemeint war

1 „Gefällt mir“

rspamd einrichten (15.03.25)

Mails schicken

Mail Header

Es gibt erstmal viele Behauptungen in den Mail Headern:

  • die Domain, von der die Mail kommt

Prüfen, ob der Absenderserver berechtigt ist, Mails unter der Domain zu verschicken

dig mag-roboter.de TXT  

# ; <<>> DiG 9.20.5-1-Debian <<>> mag-roboter.de TXT
# ;; global options: +cmd
# ;; Got answer:
# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58722
# ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

# ;; OPT PSEUDOSECTION:
# ; EDNS: version: 0, flags:; udp: 1232
# ;; QUESTION SECTION:
# ;mag-roboter.de.                        IN      TXT

# ;; ANSWER SECTION:
# mag-roboter.de.         500     IN      TXT     "v=spf1 a mx -all"
# mag-roboter.de.         500     IN      TXT     "google-site-verification=s-sp4E8xucbPaU100PHlM1euFUxii1WvzwrbKzokpHU"

;; Query time: 35 msec
;; SERVER: 176.9.93.198#53(176.9.93.198) (UDP)
;; WHEN: Sat Mar 15 11:45:44 CET 2025
;; MSG SIZE  rcvd: 173

Wer darf also alles Mails verschicken?

Wichtig ist hierbei der SPF-Record.

SPF = Sender Policy Framework

v=spf1 a mx -all

Also dürfen der A Record und der MX Record Mails verschicken. (a steht hierbei für IPV4 und IPV6).

Das -all heißt: Alle anderen dürfen das nicht (-).

SPF Record setzen

server1.domain.tld. 500 IN TXT "v=spf1 a mx -all"

Das kann man dann ins DNS als TXT record reinschreiben.

rspamd

Envelope Sender

Der Mailserver packt oft die Nachricht in sozusagen einen Briefumschlag und schreibt eine andere Absenderadresse drauf.

Damit werden dann die Header signiert. Der Public key davon liegt im DNS, der Private key auf dem server.

Installieren

apt install rspamd

Was kann rspamd?

Empfängerseite

  • Passt der Absender?
  • Darf der Server Mails senden?
  • Spam filtern

Absenderseite

  • Header signieren mittels DKIM
  • Kann auch Spam filtern

Prüfen, ob rspamd läuft

systemctl status rspamd

# ● rspamd.service - rapid spam filtering system
#      Loaded: loaded (/lib/systemd/system/rspamd.service; enabled; preset: enabled)
#      Active: active (running) since Sat 2025-03-15 11:05:34 UTC; 5min ago
#        Docs: https://rspamd.com/doc/
#    Main PID: 7163 (rspamd)
#       Tasks: 4 (limit: 4466)
#      Memory: 75.2M
#         CPU: 602ms
#      CGroup: /system.slice/rspamd.service
#              ├─7163 "rspamd: main process"
#              ├─7166 "rspamd: rspamd_proxy process (localhost:11332)"
#              ├─7167 "rspamd: controller process (localhost:11334)"
#              └─7168 "rspamd: normal process (localhost:11333)"
# 
# Mar 15 11:05:34 debian-4gb-hel1-6 systemd[1]: Started rspamd.service - rapid spam filtering system.
# Mar 15 11:05:34 debian-4gb-hel1-6 rspamd[7163]: 2025-03-15 11:05:34 #7163(main) <119b1e>; main; main: rspamd 3.4 is loading configuration, build id: release

ss -ntopa | grep rspamd

# LISTEN 0      4096                 127.0.0.1:11334                               0.0.0.0:*     users:(("rspamd",pid=7167,fd=11),("rspamd",pid=7163,fd=11))
# LISTEN 0      4096                 127.0.0.1:11332                               0.0.0.0:*     users:(("rspamd",pid=7166,fd=8),("rspamd",pid=7163,fd=8))  
# LISTEN 0      4096                 127.0.0.1:11333                               0.0.0.0:*     users:(("rspamd",pid=7168,fd=15),("rspamd",pid=7163,fd=15))
# LISTEN 0      4096                     [::1]:11332                                  [::]:*     users:(("rspamd",pid=7166,fd=9),("rspamd",pid=7163,fd=9))  
# LISTEN 0      4096                     [::1]:11333                                  [::]:*     users:(("rspamd",pid=7168,fd=17),("rspamd",pid=7163,fd=17))
# LISTEN 0      4096                     [::1]:11334                                  [::]:*     users:(("rspamd",pid=7167,fd=13),("rspamd",pid=7163,fd=13))

Postfix sagen, dass es einen Milter nutzen soll

Was ist ein Milter?

Postfix kann damit bei jedem Schritt de Milter fragen “Was hälst du davon”?

Der Milter kann dann sagen:

  • Gut
  • Weiß ich noch nicht
  • Nein

Einbauen

postconf -e "smtpd_milters = inet:localhost:11332"
postconf -e "milter_default_action = accept"     # Was soll gemacht werden, wenn das mal nicht läuft?

rspamd Webinterface nutzen

ssh root@server -L 11334:127.0.0.1:11334

Das startet einen Reverse Proxy.

Man kann das Webinterface jetzt auf http://127.0.0.1:11334/ auf dem eigenen Rechner sehen.

Wenn man jetzt eine Testmail schickt, sollte man das im Webinterface sehen.

Mehr Infos sehen in der History

apt install redis
rspamadm configwizard checks redis      # immer Enter drücken
systemctl restart rspamd.service

Jetzt sieht man mehr Infos zu den Mails und auch warum eine Mail angenommen / abgelehnt wurde.

Ab eine bestimmten Spampunktezahl wird das dann verschieden gewertet. Je weniger man hat, desto besser.

DKIM einrichten

DKIM signiert Mails und beweist somit, dass die Mail von ihm stammt.

rspamadm configwizard checks dkim

Dabei auswählen:

  • Ja, wir möchten DKIM aufsetzen (y)
  • Use domain from SMTP envelope from for sign (2)
  • Do you want to sign mail from authenticated users? (y)
  • Allow data mismatch, e.g. if mime from domain is not equal to authenticated user domain? (y)
  • Do you want to use effective domain (e.g. example.com instead of foo.example.com)? (n)
  • Enter output directory for the keys [default: /var/lib/rspamd/dkim/]: So lassen
  • Enter domain to sign: eigene Domain (z.B. tuxi.lxht.de)
  • Enter selector [default: dkim]: So lassen

Und neu starten:

chown _rspamd:_rspamd /var/lib/rspamd/dkim/<datei>
systemctl restart rspamd.service

DNS

Den vom Wizard ausgegebenen Key packt man dann ins DNS

Was sollen andere Mailserver tun, wenn jemand unseren Mailserver ausnutzt?

Also: Wenn jemand anders ausgibt, unser Mailserver zu sein, das aber nicht ist?

DMARC Policy

Was soll passieren, wenn entweder DKIM oder SPF nicht OK sind?

Wir können z.B. sagen, dass wir immer DKIM signierte Mails schicken.

Das hier ins DNS:

_dmarc.server.domain.tld. TXT "v=DMARC1; p=reject; rua=mailto:mail@domain.tld"

Das heißt:

  • p=reject: alle falschen signierten ablehnen. Es gibt auch none und quarantine.
  • rua=: Mail, die informiert werden soll, wenn jemand versucht, als einer selbst zu verschicken

Leider habe bei der Terminabstimmung für das nächste Treffen einen anderen Termin übersehen, den ich leider nicht verschieben kann. Da ich jetzt schon einen großen Teil der Grundlagen gelernt habe, ist mein Interesse für eine Fortsetzung auch nicht so hoch, dass ich mich hierfür statt des anderen Termin entscheide.

Sessionbericht 12.02.25

Wiederholung, senden, fixen, etc …

Neues:

Email testen

  • https://internet.nl/
  • https://www.learndmarc.com/
  • https://mecsa.jrc.ec.europa.eu/
  • https://mxtoolbox.com/SuperTool.aspx

Report-Email versenden

Wenn jemand versucht, einen Server zu faken, eine Mail an den Serverinhaber senden:

In /etc/rspamd/local.d/dmarc.conf:

  reporting {
    # Required attributes
    enabled = true; # Enable reports in general
    email = 'dmarc_reports@example.com'; # Source of DMARC reports
    domain = 'example.com'; # Domain to serve
    org_name = 'Example organisation'; # Organisation
    # Optional parameters
    bcc_addrs = ["postmaster@example.com"]; # additional addresses to copy on reports
    report_local_controller = false; # Store reports for local/controller scans (for testing only)
    helo = 'rspamd.localhost'; # Helo used in SMTP dialog
    smtp = '127.0.0.1'; # SMTP server IP
    smtp_port = 25; # SMTP server port
    from_name = 'Rspamd'; # SMTP FROM
    msgid_from = 'rspamd'; # Msgid format
    max_entries = 1k; # Maximum amount of entries per domain
    keys_expire = 2d; # Expire date for Redis keys
    #only_domains = '/path/to/map'; # Only store reports from domains or eSLDs listed in this map
    # Available from 3.3
    #exclude_domains = '/path/to/map'; # Exclude reports from domains or eSLDs listed in this map
    #exclude_domains = ["example.com", "another.com"]; # Alternative, use array to exclude reports from domains or eSLDs
    # Available from 3.8
    #exclude_recipients = '/path/to/map'; # Exclude reports for recipients listed in this map
    #exclude_recipients = ["a@example.com", "b@another.com"]; # Alternative, use array to exclude reports for recipients
  }

Zum ansehen:

redis-cli KEYS '*' | grep dmarc_rpt

redis-cli ZRANGE "<einer der keys von oben>" 0 -1

Reports senden mit:

rspamadm dmarc_report 20250412     # <-- datum von morgen

An Google kann man dann sogar auch Mails verschicken!

Damit wäre das Thema (für Martin, Felix und mich) fertig.

Danke @iw und @nik :slight_smile:

Ich habe übrigens das „Run your own mail server“ von Michael W. Lucas als elektronisches Buch hier; falls es euch hilft könnte ich das verleihen.