mirror of
https://github.com/bashclub/zamba-lxc-toolbox.git
synced 2026-03-12 06:11:50 +01:00
Update PMG Integration and rejecting behviour
This commit is contained in:
@@ -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 ...`
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
111
src/pmg-ai-rspamd/PMG Integration Guide.md
Normal file
111
src/pmg-ai-rspamd/PMG Integration Guide.md
Normal 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.
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user