Update PMG Integration and rejecting behviour

This commit is contained in:
Thorsten Spille
2026-02-22 11:55:05 +00:00
parent 91f5296538
commit d3060354f9
3 changed files with 134 additions and 115 deletions

View File

@@ -1,115 +0,0 @@
# 🛡️ Integration Guide: PMG & Mailcow an Rspamd-AI
Dieses Dokument beschreibt die Anbindung von Proxmox Mail Gateway (PMG) und Mailcow-Instanzen an das zentrale `pmg-ai-rspamd` Gehirn.
## 1. Integration: Proxmox Mail Gateway (PMG)
Das PMG dient als Grobfilter und nutzt den Rspamd-LXC via Milter-Protokoll für die KI-Analyse.
### Schritt A: Whitelist-Eintrag im Rspamd-LXC
Bevor das PMG senden darf, muss seine IP im Rspamd-LXC hinterlegt werden, damit Rspamd die Mail nicht als "Relay-Versuch von extern" blockiert.
1. Erstelle auf dem **Rspamd-LXC** eine neue Datei für das PMG:
```javascript
cat << 'EOF' > /etc/rspamd/local.d/local_addrs.d/pmg-gateway.conf
# IP des Proxmox Mail Gateways
local_addrs = "10.10.10.50";
EOF
```
2. Rspamd neu laden: `systemctl reload rspamd`
### Schritt B: PMG Postfix Konfiguration
Auf dem **PMG-Server** (via SSH):
1. Template-System vorbereiten:
```javascript
mkdir -p /etc/pmg/templates
cp /var/lib/pmg/templates/main.cf.in /etc/pmg/templates/main.cf.in
```
2. Am Ende von `/etc/pmg/templates/main.cf.in` einfügen:
```javascript
# Rspamd Milter Integration
smtpd_milters = inet:10.10.10.200:11332
non_smtpd_milters = inet:10.10.10.200:11332
milter_protocol = 6
milter_default_action = accept
```
*(Ersetze* `*10.10.10.200*` *durch die IP deines Rspamd-LXC)*.
3. Aktivieren: `pmgconfig sync --restart 1`
---
## 2. Integration: Mailcow Remote Learning
Hier bringen wir der Mailcow bei, Spam/Ham nicht lokal zu lernen, sondern an dein KI-Gehirn zu senden.
### Option A: Via VPN (Sicherster Weg)
**Voraussetzung:** Mailcow-IP ist im Rspamd-LXC unter `secure_ips.d/` hinterlegt.
1. Erstelle auf dem **Rspamd-LXC** den Eintrag:
```javascript
cat << 'EOF' > /etc/rspamd/local.d/secure_ips.d/kunde-mailcow.conf
secure_ip = "10.8.0.10"; # VPN-IP der Mailcow
EOF
```
2. In der **Mailcow UI** unter *Konfiguration > System-Konfiguration > Rspamd*:
* **Rspamd-Host:** `10.8.0.200` (VPN-IP des LXC)
* **API-Key / Passwort:** Dein `rspamadm pw` Klartext-Passwort.
### Option B: Via HTTPS (Ohne VPN über Public IP)
Wenn kein VPN möglich ist, nutzen wir einen Reverse Proxy (z. B. Nginx) auf dem LXC-Host, um die API per TLS zu schützen.
**Sicherheits-Warnung:** Öffne niemals Port 11334 direkt zum Internet!
1. Installiere Nginx auf dem LXC-Host (oder einem Proxy davor).
2. Nginx-Config (Auszug):
```javascript
server {
listen 443 ssl;
server_name rspamd-api.deine-domain.de;
# SSL-Zertifikat hier konfigurieren (Certbot)
location / {
proxy_pass http://127.0.0.1:11334;
allow 1.2.3.4; # Nur die öffentliche IP der Mailcow erlauben!
deny all;
}
}
```
3. In der **Mailcow** nun als Host `https://rspamd-api.deine-domain.de` eintragen.
---
## 3. Erfolgskontrolle (Debugging)
Um zu sehen, ob die KI arbeitet, schau in das Log des Rspamd-LXC:
```javascript
tail -f /var/log/rspamd/rspamd.log | grep -i "QWEN"
```
Wenn eine Mail vom PMG kommt, solltest du einen Eintrag wie diesen sehen: `... (main) <...> symbol: QWEN_LLM_FRAUD(2.50); ... score: 5 ...`
---

View File

@@ -0,0 +1,111 @@
# PMG-Integration des KI-Rspamd Filters
Diese Anleitung beschreibt, wie das PMG als zentrale Filter-Instanz die Scores deines externen Rspamd-LXC abfragt, visualisiert und gewichtet, ohne die eigene Filterhoheit zu verlieren.
## 1. Architektur-Übersicht
Das PMG fungiert als SMTP-Relay. Der externe Rspamd wird als **Before-Queue Milter** eingebunden. Er verarbeitet die Mail, setzt Header-Attribute und das PMG wertet diese Header innerhalb seines eigenen Regelwerks aus.
---
## 2. Persistente Milter-Anbindung (Updatesicher)
Damit Postfix den Rspamd-LXC anspricht, muss die Konfiguration über das PMG-Template-System erfolgen.
1. **Template-Verzeichnis erstellen:**
```javascript
mkdir -p /etc/pmg/templates
cp /var/lib/pmg/templates/main.cf.in /etc/pmg/templates/
```
2. **Milter in `main.cf.in` eintragen:** Öffne `/etc/pmg/templates/main.cf.in` und füge am Ende (vor den lokalen Overrides) folgende Zeilen hinzu:
```javascript
smtpd_milters = inet:IP_DEINES_LXC:11332
milter_default_action = accept
milter_protocol = 6
```
3. **Konfiguration generieren:**
```javascript
pmgconfig sync
```
---
## 3. Score-Gewichtung (SpamAssassin-Integration)
Da das PMG-UI keine direkte Punkte-Addition erlaubt, integrieren wir die Rspamd-Ergebnisse direkt in den internen Scan-Prozess. Dies stellt sicher, dass die Scores im **Tracking Center** namentlich auftauchen.
1. **Konfigurationsdatei erstellen:** Erstelle auf dem PMG-Host: `/etc/mail/spamassassin/rspamd_scores.cf`
2. **Regeln definieren:** Kopiere diesen Block in die Datei:
```javascript
# Rspamd Medium (4 - 5.9)
header RSPAMD_MEDIUM X-Rspamd-Score =~ /^([45]\.[0-9]+)/
describe RSPAMD_MEDIUM Rspamd bewertet diese Mail als leicht verdaechtig (4-5.9)
score RSPAMD_MEDIUM 1.5
# Rspamd High (6 - 14.9)
header RSPAMD_HIGH X-Rspamd-Score =~ /^([6-9]|1[0-4])\.[0-9]+/
describe RSPAMD_HIGH Rspamd bewertet diese Mail als Spam (6-14.9)
score RSPAMD_HIGH 4.0
# Rspamd Critical (15+)
header RSPAMD_CRITICAL X-Rspamd-Score =~ /^(1[5-9]|[2-9][0-9]|[1-9][0-9][0-9])\.[0-9]+/
describe RSPAMD_CRITICAL Rspamd (KI/Llama) ist sich absolut sicher: Scam/Betrug (15+)
score RSPAMD_CRITICAL 10.0
```
3. **Dienst neu starten:**
```javascript
systemctl restart pmg-smtp-filter
```
---
## 4. UI-Logik für harte Aktionen (Optional)
Wenn du für extrem hohe Scores (`RSPAMD_CRITICAL`) eine sofortige Quarantäne erzwingen möchtest, kannst du dies im WebUI ergänzen:
1. **What Object:** Erstelle unter *Mail Filter > What Objects* ein **Match Field**.
* **Name:** `Rspamd-Critical-Header`
* **Field:** `X-Rspamd-Score`
* **Value:** `^(1[5-9]|[2-9][0-9])\..*`
2. **Rule:** Erstelle eine Regel mit Priorität **99**.
* **What:** `Rspamd-Critical-Header`
* **Action:** `Quarantine`
---
## 5. Verifizierung & Monitoring
Nach der Integration sollten eingehende E-Mails im PMG Tracking Center detailliert aufgeschlüsselt werden.
* **Live-Log Prüfung:** Überwache die Auswertung der neuen Header live auf der Konsole:
```javascript
tail -f /var/log/mail.log | grep -E "RSPAMD_(MEDIUM|HIGH|CRITICAL)"
```
* **Tracking Center:** In der Detailansicht einer E-Mail unter **Spam Analysis** erscheint nun z. B. der Eintrag: `RSPAMD_HIGH (4.00)`
---
### Wartungshinweise
* **Persistent:** Die `.cf`-Dateien unter `/etc/mail/spamassassin/` bleiben bei PMG-Updates erhalten.
* **Anpassung:** Sollten zu viele False Positives auftreten, senke einfach die `score`-Werte in der `rspamd_scores.cf` und starte den `pmg-smtp-filter` neu.

View File

@@ -243,6 +243,29 @@ secure_ip = "${LXC_IP%/*}";
.include(try=true,glob=true) "\$LOCAL_CONFDIR/secure_ips.d/*.conf" .include(try=true,glob=true) "\$LOCAL_CONFDIR/secure_ips.d/*.conf"
EOF EOF
cat << EOF > /etc/rspamd/local.d/actions.conf
# Alle Aktionen, die normalerweise ablehnen würden, auf null setzen
reject = null; # Niemals ablehnen
add_header = 6.0; # Ab diesem Score den X-Spam-Header setzen
greylist = null; # Greylisting deaktivieren (macht PMG schon besser)
rewrite_subject = null;
EOF
cat << EOF > /etc/rspamd/local.d/milter_headers.conf
# Diese Header werden für jede Mail geschrieben
use = ["spam-header", "symbols", "score"];
header_names {
"spam-header" = "X-Spam-Flag";
"symbols" = "X-Rspamd-Symbols";
"score" = "X-Rspamd-Score";
}
# Fügt den Score immer hinzu, egal wie hoch er ist
skip_local = false;
extended_symbols = true;
EOF
# oletools aktivieren # oletools aktivieren
cat << 'EOF' > /etc/rspamd/local.d/oletools.conf cat << 'EOF' > /etc/rspamd/local.d/oletools.conf
enabled = true; enabled = true;