Postfix Mailgateway: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
−
=Ziel=
+
*[[Postfix Mailgateway rspamd]]
−
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==
 
−
{| class="wikitable" style="background-color: #f2f2f2;"
 
−
! 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
 
−
*[[Anpassen des Debian 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
 
−
<pre>
 
−
Host mail-gw.it2XX.int
 
−
  HostName 10.88.2XX.49
 
−
  User kit
 
−
  ProxyJump fw.it2XX.int
 
−
</pre>
 
−
 
 
−
==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
 
−
{| class="wikitable"
 
−
! Parameter !! Bedeutung
 
−
|-
 
−
| <code>mydestination =</code> || Leer – der Gateway ist für keine Domain finaler Empfänger
 
−
|-
 
−
| <code>relay_domains</code> || Domains für die Mails weitergeleitet werden
 
−
|-
 
−
| <code>transport_maps</code> || Definiert wohin die Mail für welche Domain geht
 
−
|-
 
−
| <code>mynetworks</code> || Nur localhost darf Mails einliefern (kein Open Relay)
 
−
|-
 
−
| <code>smtpd_relay_restrictions</code> || Verhindert Missbrauch als Open Relay
 
−
|}
 
−
 
 
−
;Konfigurationsdatei anlegen
 
−
* vi /etc/postfix/main.cf
 
−
<syntaxhighlight lang="bash">
 
−
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
 
−
</syntaxhighlight>
 
−
 
 
−
===Mailrouting===
 
−
;Warum eckige Klammern?
 
−
Die eckigen Klammern um <code>[mail.it2XX.int]</code> 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
 
−
<syntaxhighlight lang="bash">
 
−
servers = "127.0.0.1:6379";
 
−
</syntaxhighlight>
 
−
 
 
−
===Rspamd Controller absichern===
 
−
;Passwort erzeugen
 
−
* rspamadm pw
 
−
 
 
−
;In die Controller-Konfiguration eintragen
 
−
* vi /etc/rspamd/override.d/worker-controller.inc
 
−
<syntaxhighlight lang="bash">
 
−
password = "$2$...";
 
−
bind_socket = "*:11334";
 
−
</syntaxhighlight>
 
−
 
 
−
* systemctl restart rspamd
 
−
 
 
−
;Webinterface aufrufen
 
−
* http://10.88.2XX.49:11334
 
−
 
 
−
===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
 
−
<syntaxhighlight lang="bash">
 
−
# TCP deaktiviert
 
−
#TCPSocket 3310
 
−
#TCPAddr 127.0.0.1
 
−
 
 
−
# UNIX Socket
 
−
LocalSocket /var/run/clamav/clamd.ctl
 
−
LocalSocketMode 666
 
−
</syntaxhighlight>
 
−
 
 
−
;Rspamd Antivirus-Modul konfigurieren
 
−
* vi /etc/rspamd/override.d/antivirus.conf
 
−
<syntaxhighlight lang="bash">
 
−
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;
 
−
}
 
−
</syntaxhighlight>
 
−
 
 
−
* 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
 
−
<syntaxhighlight lang="bash">
 
−
enabled = true;
 
−
domain {
 
−
    it2XX.int {
 
−
        path = "/var/lib/rspamd/dkim/it2XX.int.mail.key";
 
−
        selector = "mail";
 
−
    }
 
−
}
 
−
</syntaxhighlight>
 
−
 
 
−
* 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:
 
−
<pre>
 
−
mail._domainkey.it2XX.int IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."
 
−
</pre>
 
−
 
 
−
!!!'''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
 
−
<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)
 
−
|}
 
−
 
 
−
==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 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
 
−
<syntaxhighlight lang="bash">
 
−
_dmarc.it2XX.int.  IN  TXT  "v=DMARC1; p=none; rua=mailto:postmaster@it2XX.int"
 
−
</syntaxhighlight>
 
−
 
 
−
{| class="wikitable"
 
−
! Parameter !! Bedeutung
 
−
|-
 
−
| <code>v=DMARC1</code> || DMARC Version 1
 
−
|-
 
−
| <code>p=none</code> || Nur beobachten, nichts abweisen (zum Einstieg)
 
−
|-
 
−
| <code>rua=</code> || Adresse für Aggregat-Reports
 
−
|}
 
−
 
 
−
!!!'''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 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=
 
−
==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=
 
−
{| class="wikitable"
 
−
! 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
 
−
|}
 
−
 
 
−
[[Kategorie:Mail]]
 
−
[[Kategorie:Security]]
 
−
[[Kategorie:DMZ]]
 

Aktuelle Version vom 6. Juni 2026, 10:33 Uhr