249 lines
4.7 KiB
Markdown
249 lines
4.7 KiB
Markdown
# SMTPGraphRelay 1.7.0
|
|
|
|
SMTPGraphRelay V1.7 ergänzt optionales lokales SMTP-AUTH für interne Clients.
|
|
|
|
> **Hinweis:** `AUTH LOGIN` und `AUTH PLAIN` werden hier bewusst ohne TLS angeboten,
|
|
> weil dieses Relay für vertrauenswürdige interne Netze gedacht ist. Die Zugangsdaten
|
|
> sind auf dem Netzwerkpfad daher nur Base64-kodiert, nicht verschlüsselt. Die
|
|
> bestehende IP-Allowlist sollte weiterhin restriktiv gesetzt bleiben.
|
|
|
|
## Installation
|
|
|
|
**Windows PowerShell 5.1 als Administrator**:
|
|
|
|
```powershell
|
|
$u='https://me-gitea.maieredv.cloud/MAIEREDV/SMTPGraphRelay/raw/branch/main/Setup-SMTPGraphRelay.ps1';$f="$env:TEMP\Setup-SMTPGraphRelay.ps1";Invoke-WebRequest $u -UseBasicParsing -OutFile $f;& $f
|
|
```
|
|
|
|
## Neu in V1.7: SMTP AUTH
|
|
|
|
Unterstützt:
|
|
|
|
```text
|
|
AUTH LOGIN
|
|
AUTH PLAIN
|
|
```
|
|
|
|
EHLO bewirbt die Mechanismen, sobald mindestens ein SMTP-Benutzer existiert:
|
|
|
|
```text
|
|
250-AUTH LOGIN PLAIN
|
|
```
|
|
|
|
Erfolgreiche Anmeldung:
|
|
|
|
```text
|
|
235 2.7.0 Authentication successful
|
|
```
|
|
|
|
Fehlgeschlagene Anmeldung:
|
|
|
|
```text
|
|
535 5.7.8 Authentication credentials invalid
|
|
```
|
|
|
|
Wenn AUTH für den Client erforderlich ist:
|
|
|
|
```text
|
|
530 5.7.0 Authentication required
|
|
```
|
|
|
|
Nach standardmäßig fünf Fehlversuchen innerhalb derselben Verbindung werden
|
|
weitere AUTH-Versuche temporär abgewiesen:
|
|
|
|
```text
|
|
454 4.7.0 Too many authentication failures
|
|
```
|
|
|
|
## IP-Allowlist bleibt vorgeschaltet
|
|
|
|
SMTP-AUTH ersetzt die bestehende `AllowedNetworks`-Prüfung **nicht**.
|
|
|
|
Ein Client muss zuerst aus einem erlaubten Netz kommen. Erst danach kann er sich
|
|
optional bzw. verpflichtend authentifizieren.
|
|
|
|
AUTH kann daher niemals einem ansonsten nicht erlaubten Host Zugriff verschaffen.
|
|
|
|
## Passwortspeicherung
|
|
|
|
SMTP-Passwörter werden nicht im Klartext gespeichert.
|
|
|
|
Verwendet wird:
|
|
|
|
```text
|
|
PBKDF2-HMAC-SHA256
|
|
Salt: 16 Byte zufällig
|
|
Iterations: 150000
|
|
Hash: 32 Byte
|
|
```
|
|
|
|
Beispiel in `config.json`:
|
|
|
|
```json
|
|
{
|
|
"Username": "scanner01",
|
|
"Salt": "...",
|
|
"PasswordHash": "...",
|
|
"Iterations": 150000
|
|
}
|
|
```
|
|
|
|
## Konfiguration
|
|
|
|
```json
|
|
"Smtp": {
|
|
"RequireAuth": true,
|
|
"AuthMaxFailures": 5,
|
|
"AllowUnauthenticatedNetworks": [
|
|
"10.60.10.0/24"
|
|
],
|
|
"AuthUsers": [
|
|
{
|
|
"Username": "scanner01",
|
|
"Salt": "...",
|
|
"PasswordHash": "...",
|
|
"Iterations": 150000
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### RequireAuth
|
|
|
|
```text
|
|
false
|
|
```
|
|
|
|
AUTH ist optional. Clients aus `AllowedNetworks` dürfen weiterhin ohne
|
|
Benutzername/Passwort senden.
|
|
|
|
```text
|
|
true
|
|
```
|
|
|
|
Clients müssen sich authentifizieren, außer ihre IP liegt in
|
|
`AllowUnauthenticatedNetworks`.
|
|
|
|
### AllowUnauthenticatedNetworks
|
|
|
|
Beispiel:
|
|
|
|
```json
|
|
[
|
|
"10.60.10.0/24",
|
|
"192.168.50.10"
|
|
]
|
|
```
|
|
|
|
Diese Hosts/Netze dürfen trotz `RequireAuth=true` ohne AUTH senden.
|
|
|
|
Sie müssen trotzdem zusätzlich durch `AllowedNetworks` erlaubt sein.
|
|
|
|
## Benutzerverwaltung
|
|
|
|
Im Setup-/Manager gibt es jetzt:
|
|
|
|
```text
|
|
[9] SMTP-AUTH verwalten
|
|
```
|
|
|
|
Untermenü:
|
|
|
|
```text
|
|
[1] SMTP-AUTH erforderlich EIN/AUS
|
|
[2] Benutzer hinzufügen
|
|
[3] Benutzer anzeigen
|
|
[4] Passwort ändern
|
|
[5] Benutzer löschen
|
|
[6] Netze ohne Auth verwalten
|
|
[7] Max. Fehlversuche ändern
|
|
[0] Zurück
|
|
```
|
|
|
|
Beim Hinzufügen bzw. Ändern eines Passworts erfolgt die Eingabe verdeckt.
|
|
|
|
## Graph-Sender bleibt unabhängig
|
|
|
|
Der SMTP-Benutzer dient ausschließlich zur Authentifizierung am lokalen Relay.
|
|
|
|
Beispiel:
|
|
|
|
```text
|
|
SMTP AUTH: scanner01
|
|
MAIL FROM: scanner@device.local
|
|
|
|
|
v
|
|
SMTPGraphRelay
|
|
|
|
|
ForceSender=true
|
|
|
|
|
v
|
|
info@example.com
|
|
```
|
|
|
|
AUTH verändert weder die Entra-App noch das Graph-Zertifikat oder
|
|
`Graph.SenderMailbox`.
|
|
|
|
## Queue-Metadaten
|
|
|
|
Bei authentifizierten Einlieferungen wird der Benutzer zusätzlich in den
|
|
Queue-Metadaten gespeichert:
|
|
|
|
```json
|
|
"AuthenticatedUser": "scanner01"
|
|
```
|
|
|
|
und im Log ausgegeben:
|
|
|
|
```text
|
|
[7F3A91C2D441] Mail angenommen | ... | Auth=scanner01
|
|
```
|
|
|
|
Bei nicht authentifizierten, aber erlaubten Verbindungen:
|
|
|
|
```text
|
|
Auth=unauthenticated
|
|
```
|
|
|
|
## Health Check
|
|
|
|
Der Health Check validiert zusätzlich die SMTP-AUTH-Konfiguration.
|
|
|
|
Eine Testmail kann weiterhin mit:
|
|
|
|
```powershell
|
|
.\Test-SMTPGraphRelay.ps1 -SendTestMail -TestRecipient "user@example.com"
|
|
```
|
|
|
|
ausgeführt werden.
|
|
|
|
Ist AUTH erforderlich, fragt der Health Check bei Bedarf Benutzername und
|
|
Passwort interaktiv ab.
|
|
|
|
Optional:
|
|
|
|
```powershell
|
|
.\Test-SMTPGraphRelay.ps1 `
|
|
-SendTestMail `
|
|
-TestRecipient "user@example.com" `
|
|
-SmtpUsername "scanner01"
|
|
```
|
|
|
|
Das Passwort wird weiterhin verdeckt abgefragt.
|
|
|
|
## V1.6 Funktionen bleiben erhalten
|
|
|
|
- Queue-ID
|
|
- Received-Header
|
|
- automatische Message-ID
|
|
- MaxRecipients
|
|
- MaxMessagesPerConnection
|
|
- MaxPendingMessages
|
|
- MinFreeDiskSpaceMB
|
|
- Queue-/Disk-Backpressure
|
|
- parallele SMTP-Clients
|
|
- Graph-Retry
|
|
- Log-Rotation
|
|
- Zertifikatsüberwachung
|
|
- Online-Update / Repair / Rollback
|