Postfix Mailgateway: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 11: Zeile 11:
 
  Internet → mail-gw.it2XX.int [Postfix + Rspamd + ClamAV] → mail.it2XX.int [Postfix + Dovecot] → LAN [Clients]
 
  Internet → mail-gw.it2XX.int [Postfix + Rspamd + ClamAV] → mail.it2XX.int [Postfix + Dovecot] → LAN [Clients]
  
=Netzkonfiguration MAILGW-Server (DMZ)=
+
=Auf dem MAILGW=
 +
==Netzkonfiguration==
 
{| class="wikitable" style="background-color: #f2f2f2;"
 
{| class="wikitable" style="background-color: #f2f2f2;"
 
! Parameter !! Wert !! Erläuterung
 
! Parameter !! Wert !! Erläuterung
Zeile 37: Zeile 38:
 
* debian-setup.sh -f mail-gw.it2XX.int -a 10.88.2XX.49/24 -g 10.88.2XX.1 -n 10.88.2XX.21
 
* debian-setup.sh -f mail-gw.it2XX.int -a 10.88.2XX.49/24 -g 10.88.2XX.1 -n 10.88.2XX.21
  
=Einfügen in die ~/.ssh/config=
+
==Einfügen in die ~/.ssh/config==
 
;als kit user auf dem Host über den ProxyJump eintragen
 
;als kit user auf dem Host über den ProxyJump eintragen
 
<pre>
 
<pre>
Zeile 46: Zeile 47:
 
</pre>
 
</pre>
  
=Postfix als Relay=
+
==Postfix als Relay==
==Warum kein "Internet Site"?==
+
===Warum kein "Internet Site"?===
 
Bei der Postfix-Installation wählen wir '''No configuration''', da der mail-gw kein finaler Empfänger ist.
 
Bei der Postfix-Installation wählen wir '''No configuration''', da der mail-gw kein finaler Empfänger ist.
 
Er nimmt Mails an und leitet sie weiter – er speichert keine Mailboxen.
 
Er nimmt Mails an und leitet sie weiter – er speichert keine Mailboxen.
 
Die komplette Konfiguration erfolgt manuell.
 
Die komplette Konfiguration erfolgt manuell.
  
==Installation==
+
===Installation===
 
;Postfix installieren
 
;Postfix installieren
 
* apt install postfix
 
* apt install postfix
 
* no configuration
 
* no configuration
  
==Konfiguration==
+
===Konfiguration===
 
;Wichtige Parameter im Überblick
 
;Wichtige Parameter im Überblick
 
{| class="wikitable"
 
{| class="wikitable"
Zeile 109: Zeile 110:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==Mailrouting==
+
===Mailrouting===
 
;Warum eckige Klammern?
 
;Warum eckige Klammern?
 
Die eckigen Klammern um <code>[mail.it2XX.int]</code> verhindern einen MX-Lookup.
 
Die eckigen Klammern um <code>[mail.it2XX.int]</code> verhindern einen MX-Lookup.
Zeile 119: Zeile 120:
 
* postfix reload
 
* postfix reload
  
=Rspamd und ClamAV=
+
==Rspamd und ClamAV==
==Warum auf dem Gateway?==
+
===Warum auf dem Gateway?===
 
Spam- und Virenfilterung gehört auf den Gateway – nicht auf den Mailserver.
 
Spam- und Virenfilterung gehört auf den Gateway – nicht auf den Mailserver.
 
Schädliche Mails werden abgewiesen bevor sie den internen Mailserver überhaupt erreichen.
 
Schädliche Mails werden abgewiesen bevor sie den internen Mailserver überhaupt erreichen.
 
Der Mailserver bleibt sauber und hat weniger Last.
 
Der Mailserver bleibt sauber und hat weniger Last.
  
==Installation==
+
===Installation===
 
;Pakete installieren
 
;Pakete installieren
 
* apt install rspamd clamav-daemon clamav-freshclam redis-server swaks
 
* apt install rspamd clamav-daemon clamav-freshclam redis-server swaks
Zeile 132: Zeile 133:
 
* systemctl enable rspamd clamav-daemon redis-server --now
 
* systemctl enable rspamd clamav-daemon redis-server --now
  
==Redis-Anbindung==
+
===Redis-Anbindung===
 
;Redis dient als Gedächtnis für Rspamd – für Bayes-Filter, Greylisting und den ClamAV-Cache
 
;Redis dient als Gedächtnis für Rspamd – für Bayes-Filter, Greylisting und den ClamAV-Cache
 
* vi /etc/rspamd/local.d/redis.conf
 
* vi /etc/rspamd/local.d/redis.conf
Zeile 139: Zeile 140:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==Rspamd Controller absichern==
+
===Rspamd Controller absichern===
 
;Passwort erzeugen
 
;Passwort erzeugen
 
* rspamadm pw
 
* rspamadm pw
Zeile 155: Zeile 156:
 
* http://10.88.2XX.49:11334
 
* http://10.88.2XX.49:11334
  
==Einbinden in Postfix==
+
===Einbinden in Postfix===
 
;Rspamd hängt sich als Milter zwischen Empfang und Weiterleitung
 
;Rspamd hängt sich als Milter zwischen Empfang und Weiterleitung
 
Jede eingehende Mail wird erst von Rspamd geprüft, bevor Postfix sie an mail.it2XX.int weiterleitet.
 
Jede eingehende Mail wird erst von Rspamd geprüft, bevor Postfix sie an mail.it2XX.int weiterleitet.
Zeile 162: Zeile 163:
 
* postfix reload
 
* postfix reload
  
==ClamAV-Anbindung==
+
===ClamAV-Anbindung===
 
;Warum UNIX Socket?
 
;Warum UNIX Socket?
 
Der UNIX Socket ist schneller als TCP und bleibt lokal – kein Netzwerkoverhead.
 
Der UNIX Socket ist schneller als TCP und bleibt lokal – kein Netzwerkoverhead.
Zeile 197: Zeile 198:
 
* systemctl restart rspamd clamav-daemon
 
* systemctl restart rspamd clamav-daemon
  
=SPF=
+
==DKIM-Schlüssel erzeugen==
==Was ist SPF?==
+
;Der Public Key wird später in den DNS eingetragen – daher zuerst hier erzeugen
SPF (Sender Policy Framework) legt fest, welche Mailserver berechtigt sind, Mails für eine Domain zu versenden.
 
Der Empfänger prüft beim Eingang ob der sendende Server in der SPF-Liste der Absenderdomain steht.
 
Steht er nicht drin, gilt die Mail als verdächtig.
 
 
 
==DNS-Eintrag==
 
;TXT-Record auf ns.it2XX.int eintragen
 
* vi /var/cache/bind/it2XX.int
 
<syntaxhighlight lang="bash">
 
it2XX.int.  IN  TXT  "v=spf1 mx a:mail-gw.it2XX.int ~all"
 
</syntaxhighlight>
 
 
 
;Bedeutung der Parameter
 
{| class="wikitable"
 
! Parameter !! Bedeutung
 
|-
 
| <code>v=spf1</code> || SPF Version 1
 
|-
 
| <code>mx</code> || Der MX-Eintrag der Domain ist berechtigt
 
|-
 
| <code>a:mail-gw.it2XX.int</code> || Dieser Host ist explizit berechtigt
 
|-
 
| <code>~all</code> || Alle anderen sind Softfail (verdächtig, aber nicht abgewiesen)
 
|}
 
 
 
* rndc reload
 
 
 
=DKIM=
 
==Was ist DKIM?==
 
DKIM (DomainKeys Identified Mail) signiert ausgehende Mails kryptografisch.
 
Der Empfänger prüft die Signatur anhand des öffentlichen Schlüssels im DNS.
 
Wurde die Mail unterwegs verändert, schlägt die Prüfung fehl.
 
Rspamd übernimmt das Signieren automatisch.
 
 
 
==Schlüsselpaar erzeugen==
 
;Verzeichnis anlegen und Schlüssel generieren
 
 
* mkdir -p /var/lib/rspamd/dkim
 
* mkdir -p /var/lib/rspamd/dkim
 
* rspamadm dkim_keygen -s mail -d it2XX.int -k /var/lib/rspamd/dkim/it2XX.int.mail.key > /var/lib/rspamd/dkim/it2XX.int.mail.pub
 
* rspamadm dkim_keygen -s mail -d it2XX.int -k /var/lib/rspamd/dkim/it2XX.int.mail.key > /var/lib/rspamd/dkim/it2XX.int.mail.pub
 
* chown -R _rspamd:_rspamd /var/lib/rspamd/dkim
 
* chown -R _rspamd:_rspamd /var/lib/rspamd/dkim
  
==Rspamd DKIM-Signing konfigurieren==
+
;Rspamd DKIM-Signing konfigurieren
;Signing-Konfiguration anlegen
 
 
* vi /etc/rspamd/local.d/dkim_signing.conf
 
* vi /etc/rspamd/local.d/dkim_signing.conf
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Zeile 253: Zeile 218:
 
* systemctl restart rspamd
 
* systemctl restart rspamd
  
==DNS-Eintrag==
+
;Public Key für den DNS auslesen
;Public Key auslesen
 
 
* cat /var/lib/rspamd/dkim/it2XX.int.mail.pub
 
* cat /var/lib/rspamd/dkim/it2XX.int.mail.pub
  
Zeile 262: Zeile 226:
 
</pre>
 
</pre>
  
;Eintrag per nsupdate auf ns.it2XX.int eintragen
+
!!!'''Wichtig'''!!! Diesen Wert für den nächsten Schritt notieren – er wird auf dem Nameserver eingetragen.
* nsupdate -k /etc/bind/rndc.key
+
 
<pre>
+
=Auf dem Nameserver=
server 127.0.0.1
+
==Was muss geändert werden?==
zone it2XX.int
+
Durch den neuen Gateway muss der MX-Record auf mail-gw zeigen.
update add mail._domainkey.it2XX.int 3600 TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."
+
Zusätzlich kommen SPF, DKIM und DMARC neu dazu.
send
+
Am Ende muss die Zone neu signiert werden (DNSSEC).
EOF
+
 
</pre>
+
==MX-Record==
 +
;Der MX-Record zeigt jetzt auf den Gateway – nicht mehr direkt auf mail
 +
* vi /var/cache/bind/it2XX.int
 +
<syntaxhighlight lang="bash">
 +
it2XX.int. IN  MX  10  mail-gw.it2XX.int.
 +
</syntaxhighlight>
 +
 
 +
==SPF==
 +
;SPF legt fest welche Server Mails für die Domain versenden dürfen
 +
SPF (Sender Policy Framework) legt fest, welche Mailserver berechtigt sind, Mails für eine Domain zu versenden.
 +
Der Empfänger prüft beim Eingang ob der sendende Server in der SPF-Liste der Absenderdomain steht.
 +
* vi /var/cache/bind/it2XX.int
 +
<syntaxhighlight lang="bash">
 +
it2XX.int.  IN  TXT "v=spf1 mx a:mail-gw.it2XX.int ~all"
 +
</syntaxhighlight>
 +
 
 +
{| class="wikitable"
 +
! Parameter !! Bedeutung
 +
|-
 +
| <code>v=spf1</code> || SPF Version 1
 +
|-
 +
| <code>mx</code> || Der MX-Eintrag der Domain ist berechtigt
 +
|-
 +
| <code>a:mail-gw.it2XX.int</code> || Dieser Host ist explizit berechtigt
 +
|-
 +
| <code>~all</code> || Alle anderen sind Softfail (verdächtig, aber nicht abgewiesen)
 +
|}
  
* rndc reload
+
==DKIM==
 +
;DKIM signiert ausgehende Mails kryptografisch – der Public Key muss im DNS stehen
 +
DKIM (DomainKeys Identified Mail) signiert ausgehende Mails kryptografisch.
 +
Der Empfänger prüft die Signatur anhand des öffentlichen Schlüssels im DNS.
 +
Wurde die Mail unterwegs verändert, schlägt die Prüfung fehl.
 +
* vi /var/cache/bind/it2XX.int
 +
<syntaxhighlight lang="bash">
 +
mail._domainkey.it2XX.int.  IN  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."
 +
</syntaxhighlight>
  
=DMARC=
+
==DMARC==
==Was ist DMARC?==
+
;DMARC verbindet SPF und DKIM und legt fest was bei Fehlschlag passiert
 
DMARC (Domain-based Message Authentication, Reporting and Conformance) verbindet SPF und DKIM.
 
DMARC (Domain-based Message Authentication, Reporting and Conformance) verbindet SPF und DKIM.
 
Es legt fest was passieren soll wenn SPF oder DKIM fehlschlägt – und wer einen Bericht bekommt.
 
Es legt fest was passieren soll wenn SPF oder DKIM fehlschlägt – und wer einen Bericht bekommt.
Ohne DMARC können SPF und DKIM einzeln umgangen werden.
+
* vi /var/cache/bind/it2XX.int
 
 
==DNS-Eintrag==
 
;TXT-Record auf ns.it2XX.int eintragen
 
* vi /etc/bind/db.it2XX.int
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
_dmarc.it2XX.int.  IN  TXT  "v=DMARC1; p=none; rua=mailto:postmaster@it2XX.int"
 
_dmarc.it2XX.int.  IN  TXT  "v=DMARC1; p=none; rua=mailto:postmaster@it2XX.int"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
;Bedeutung der Parameter
 
 
{| class="wikitable"
 
{| class="wikitable"
 
! Parameter !! Bedeutung
 
! Parameter !! Bedeutung
Zeile 299: Zeile 292:
  
 
!!!'''Wichtig'''!!! <code>p=none</code> ist nur für den Anfang. Sobald SPF und DKIM stabil laufen auf <code>p=quarantine</code> oder <code>p=reject</code> umstellen.
 
!!!'''Wichtig'''!!! <code>p=none</code> ist nur für den Anfang. Sobald SPF und DKIM stabil laufen auf <code>p=quarantine</code> oder <code>p=reject</code> umstellen.
 +
 +
==Serial erhöhen und neu signieren==
 +
;Nach jeder Änderung muss die Serial erhöht und die Zone neu signiert werden
 +
* vi /var/cache/bind/it2XX.int
 +
<syntaxhighlight lang="bash">
 +
2026060401  ; Serial erhoehen
 +
</syntaxhighlight>
  
 
* rndc reload
 
* rndc reload
 +
* rndc sign it2XX.int
 +
 +
;Prüfen
 +
* dig MX it2XX.int
 +
* dig TXT it2XX.int
 +
* dig TXT mail._domainkey.it2XX.int
 +
* dig TXT _dmarc.it2XX.int
 +
 +
=Auf dem Mailserver=
 +
==Postfix einschränken==
 +
;mail.it2XX.int soll Mails nur noch vom Gateway annehmen
 +
Bisher hat der Mailserver direkt von außen empfangen.
 +
Jetzt ist der Gateway vorgelagert – der Mailserver muss entsprechend eingeschränkt werden.
 +
 +
;mynetworks um mail-gw erweitern
 +
* vi /etc/postfix/main.cf
 +
<syntaxhighlight lang="bash">
 +
mynetworks = 127.0.0.0/8 10.88.2XX.49/32
 +
</syntaxhighlight>
 +
 +
* postfix reload
 +
 +
;Prüfen – von außen darf kein direkter Zugriff mehr möglich sein
 +
* postfix check
  
 
=Test=
 
=Test=

Version vom 4. Juni 2026, 15:35 Uhr

Ziel

In dieser Übung wird ein Mailgateway (mail-gw.it2XX.int) in der DMZ eingerichtet. Es übernimmt folgende Aufgaben:

  • Annahme eingehender Mails von außen (Port 25)
  • Weiterleitung an den internen Mailserver (mail.it2XX.int)
  • Spamfilterung und Virenscanning mit Rspamd und ClamAV
  • DKIM-Signierung ausgehender Mails
  • SPF- und DMARC-Validierung

Die Architektur sieht wie folgt aus:

Internet → mail-gw.it2XX.int [Postfix + Rspamd + ClamAV] → mail.it2XX.int [Postfix + Dovecot] → LAN [Clients]

Auf dem MAILGW

Netzkonfiguration

Parameter Wert Erläuterung
Netzwerk (NIC) DMZ Interface-Zuweisung in VirtualBox
IP 10.88.2XX.49 Statische IP
CIDR 24 Classless Inter-Domain Routing Präfixlänge
GW 10.88.2XX.1 GATEWAY
NS 10.88.2XX.21 Resolver
FQDN mail-gw.it2XX.int Fully Qualified Domain Name
SHORT mail-gw Short Name
DOM it2XX.int Domain Name
Anpassen des Templates

oder

  • debian-setup.sh -f mail-gw.it2XX.int -a 10.88.2XX.49/24 -g 10.88.2XX.1 -n 10.88.2XX.21

Einfügen in die ~/.ssh/config

als kit user auf dem Host über den ProxyJump eintragen
Host mail-gw.it2XX.int
  HostName 10.88.2XX.49
  User kit
  ProxyJump fw.it2XX.int

Postfix als Relay

Warum kein "Internet Site"?

Bei der Postfix-Installation wählen wir No configuration, da der mail-gw kein finaler Empfänger ist. Er nimmt Mails an und leitet sie weiter – er speichert keine Mailboxen. Die komplette Konfiguration erfolgt manuell.

Installation

Postfix installieren
  • apt install postfix
  • no configuration

Konfiguration

Wichtige Parameter im Überblick
Parameter Bedeutung
mydestination = Leer – der Gateway ist für keine Domain finaler Empfänger
relay_domains Domains für die Mails weitergeleitet werden
transport_maps Definiert wohin die Mail für welche Domain geht
mynetworks Nur localhost darf Mails einliefern (kein Open Relay)
smtpd_relay_restrictions Verhindert Missbrauch als Open Relay
Konfigurationsdatei anlegen
  • vi /etc/postfix/main.cf
compatibility_level = 3.9
myhostname = mail-gw.it2XX.int
myorigin = /etc/mailname
mydomain = it2XX.int

smtpd_banner = $myhostname ESMTP $mail_name (Debian)
biff = no
inet_protocols = ipv4
inet_interfaces = all

# Kein finaler Empfaenger
mydestination =
mailbox_size_limit = 0
recipient_delimiter = +

# Relay
relay_domains = it2XX.int
transport_maps = hash:/etc/postfix/transport

# Netzwerk
mynetworks = 127.0.0.0/8

# TLS
smtpd_tls_key_file = /etc/ssl/own.key
smtpd_tls_cert_file = /etc/ssl/own.crt
smtpd_tls_security_level = may
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks defer_unauth_destination

Mailrouting

Warum eckige Klammern?

Die eckigen Klammern um [mail.it2XX.int] verhindern einen MX-Lookup. Postfix liefert die Mail direkt an diesen Host – ohne DNS-Umweg über den MX-Record.

Transport-Map anlegen und aktivieren
  • echo "it2XX.int smtp:[mail.it2XX.int]:25" > /etc/postfix/transport
  • postmap /etc/postfix/transport
  • postfix reload

Rspamd und ClamAV

Warum auf dem Gateway?

Spam- und Virenfilterung gehört auf den Gateway – nicht auf den Mailserver. Schädliche Mails werden abgewiesen bevor sie den internen Mailserver überhaupt erreichen. Der Mailserver bleibt sauber und hat weniger Last.

Installation

Pakete installieren
  • apt install rspamd clamav-daemon clamav-freshclam redis-server swaks
Dienste aktivieren und starten
  • systemctl enable rspamd clamav-daemon redis-server --now

Redis-Anbindung

Redis dient als Gedächtnis für Rspamd – für Bayes-Filter, Greylisting und den ClamAV-Cache
  • vi /etc/rspamd/local.d/redis.conf
servers = "127.0.0.1:6379";

Rspamd Controller absichern

Passwort erzeugen
  • rspamadm pw
In die Controller-Konfiguration eintragen
  • vi /etc/rspamd/override.d/worker-controller.inc
password = "$2$...";
bind_socket = "*:11334";
  • systemctl restart rspamd
Webinterface aufrufen

Einbinden in Postfix

Rspamd hängt sich als Milter zwischen Empfang und Weiterleitung

Jede eingehende Mail wird erst von Rspamd geprüft, bevor Postfix sie an mail.it2XX.int weiterleitet.

  • postconf -e "smtpd_milters=inet:127.0.0.1:11332"
  • postconf -e "non_smtpd_milters=inet:127.0.0.1:11332"
  • postfix reload

ClamAV-Anbindung

Warum UNIX Socket?

Der UNIX Socket ist schneller als TCP und bleibt lokal – kein Netzwerkoverhead.

ClamAV auf UNIX Socket umstellen
  • vi /etc/clamav/clamd.conf
# TCP deaktiviert
#TCPSocket 3310
#TCPAddr 127.0.0.1

# UNIX Socket
LocalSocket /var/run/clamav/clamd.ctl
LocalSocketMode 666
Rspamd Antivirus-Modul konfigurieren
  • vi /etc/rspamd/override.d/antivirus.conf
enabled = true;
clamav {
    type = "clamav";
    symbol = "CLAM_VIRUS";
    servers = "/var/run/clamav/clamd.ctl";
    scan_text_mime = true;
    scan_mime_parts = true;
    min_size = 0;
    scan_unauthenticated = true;
    stream = true;
    score = 20.0;
}
  • systemctl restart rspamd clamav-daemon

DKIM-Schlüssel erzeugen

Der Public Key wird später in den DNS eingetragen – daher zuerst hier erzeugen
  • mkdir -p /var/lib/rspamd/dkim
  • rspamadm dkim_keygen -s mail -d it2XX.int -k /var/lib/rspamd/dkim/it2XX.int.mail.key > /var/lib/rspamd/dkim/it2XX.int.mail.pub
  • chown -R _rspamd:_rspamd /var/lib/rspamd/dkim
Rspamd DKIM-Signing konfigurieren
  • vi /etc/rspamd/local.d/dkim_signing.conf
enabled = true;
domain {
    it2XX.int {
        path = "/var/lib/rspamd/dkim/it2XX.int.mail.key";
        selector = "mail";
    }
}
  • systemctl restart rspamd
Public Key für den DNS auslesen
  • cat /var/lib/rspamd/dkim/it2XX.int.mail.pub

Der Inhalt sieht etwa so aus:

mail._domainkey.it2XX.int IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."

!!!Wichtig!!! Diesen Wert für den nächsten Schritt notieren – er wird auf dem Nameserver eingetragen.

Auf dem Nameserver

Was muss geändert werden?

Durch den neuen Gateway muss der MX-Record auf mail-gw zeigen. Zusätzlich kommen SPF, DKIM und DMARC neu dazu. Am Ende muss die Zone neu signiert werden (DNSSEC).

MX-Record

Der MX-Record zeigt jetzt auf den Gateway – nicht mehr direkt auf mail
  • vi /var/cache/bind/it2XX.int
it2XX.int.  IN  MX  10  mail-gw.it2XX.int.

SPF

SPF legt fest welche Server Mails für die Domain versenden dürfen

SPF (Sender Policy Framework) legt fest, welche Mailserver berechtigt sind, Mails für eine Domain zu versenden. Der Empfänger prüft beim Eingang ob der sendende Server in der SPF-Liste der Absenderdomain steht.

  • vi /var/cache/bind/it2XX.int
it2XX.int.  IN  TXT  "v=spf1 mx a:mail-gw.it2XX.int ~all"
Parameter Bedeutung
v=spf1 SPF Version 1
mx Der MX-Eintrag der Domain ist berechtigt
a:mail-gw.it2XX.int Dieser Host ist explizit berechtigt
~all Alle anderen sind Softfail (verdächtig, aber nicht abgewiesen)

DKIM

DKIM signiert ausgehende Mails kryptografisch – der Public Key muss im DNS stehen

DKIM (DomainKeys Identified Mail) signiert ausgehende Mails kryptografisch. Der Empfänger prüft die Signatur anhand des öffentlichen Schlüssels im DNS. Wurde die Mail unterwegs verändert, schlägt die Prüfung fehl.

  • vi /var/cache/bind/it2XX.int
mail._domainkey.it2XX.int.  IN  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."

DMARC

DMARC verbindet SPF und DKIM und legt fest was bei Fehlschlag passiert

DMARC (Domain-based Message Authentication, Reporting and Conformance) verbindet SPF und DKIM. Es legt fest was passieren soll wenn SPF oder DKIM fehlschlägt – und wer einen Bericht bekommt.

  • vi /var/cache/bind/it2XX.int
_dmarc.it2XX.int.  IN  TXT  "v=DMARC1; p=none; rua=mailto:postmaster@it2XX.int"
Parameter Bedeutung
v=DMARC1 DMARC Version 1
p=none Nur beobachten, nichts abweisen (zum Einstieg)
rua= Adresse für Aggregat-Reports

!!!Wichtig!!! p=none ist nur für den Anfang. Sobald SPF und DKIM stabil laufen auf p=quarantine oder p=reject umstellen.

Serial erhöhen und neu signieren

Nach jeder Änderung muss die Serial erhöht und die Zone neu signiert werden
  • vi /var/cache/bind/it2XX.int
2026060401  ; Serial erhoehen
  • rndc reload
  • rndc sign it2XX.int
Prüfen
  • dig MX it2XX.int
  • dig TXT it2XX.int
  • dig TXT mail._domainkey.it2XX.int
  • dig TXT _dmarc.it2XX.int

Auf dem Mailserver

Postfix einschränken

mail.it2XX.int soll Mails nur noch vom Gateway annehmen

Bisher hat der Mailserver direkt von außen empfangen. Jetzt ist der Gateway vorgelagert – der Mailserver muss entsprechend eingeschränkt werden.

mynetworks um mail-gw erweitern
  • vi /etc/postfix/main.cf
mynetworks = 127.0.0.0/8 10.88.2XX.49/32
  • postfix reload
Prüfen – von außen darf kein direkter Zugriff mehr möglich sein
  • postfix check

Test

Testmail senden

Einfache Testmail über den Gateway schicken
  • swaks --to martha@it2XX.int --from test@it2XX.int --server mail-gw.it2XX.int

DKIM prüfen

DKIM-Header in der Antwort prüfen
  • swaks --to martha@it2XX.int --from test@it2XX.int --server mail-gw.it2XX.int | grep DKIM

Logs

Postfix und Rspamd live beobachten
  • journalctl -u postfix -f
  • journalctl -u rspamd -f

GTUBE Spam-Test

Standardisierte Spam-Testmail senden
  • swaks --to martha@it2XX.int --server mail-gw.it2XX.int --body "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"

EICAR Virus-Test

Testmail mit EICAR-Anhang durch Rspamd scannen
  • rspamc --ip 1.2.3.4 /tmp/virus.eml

Ports und Dienste

Dienst Port Protokoll
Postfix SMTP (eingehend) 25 TCP
Rspamd Proxy (Milter) 11332 TCP
Rspamd Worker 11333 TCP
Rspamd Controller (WebUI) 11334 TCP
Redis 6379 TCP