Postfix Mailgateway: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(6 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]
 
 
 
=Netzkonfiguration MAILGW-Server (DMZ)=
 
{| 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
 
 
 
=SPF=
 
==Was ist SPF?==
 
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
 
* 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==
 
;Signing-Konfiguration anlegen
 
* 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
 
 
 
==DNS-Eintrag==
 
;Public Key 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>
 
 
 
;Eintrag per nsupdate auf ns.it2XX.int eintragen
 
* nsupdate -k /etc/bind/rndc.key
 
<pre>
 
server 127.0.0.1
 
zone it2XX.int
 
update add mail._domainkey.it2XX.int 3600 TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkq..."
 
send
 
EOF
 
</pre>
 
 
 
* rndc reload
 
 
 
=DMARC=
 
==Was ist DMARC?==
 
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.
 
Ohne DMARC können SPF und DKIM einzeln umgangen werden.
 
 
 
==DNS-Eintrag==
 
;TXT-Record auf ns.it2XX.int eintragen
 
* vi /etc/bind/db.it2XX.int
 
<syntaxhighlight lang="bash">
 
_dmarc.it2XX.int.  IN  TXT  "v=DMARC1; p=none; rua=mailto:postmaster@it2XX.int"
 
</syntaxhighlight>
 
 
 
;Bedeutung der Parameter
 
{| 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.
 
 
 
* rndc reload
 
 
 
=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