4.7 KiB
SMTPGraphRelay 1.7.0
SMTPGraphRelay V1.7 ergänzt optionales lokales SMTP-AUTH für interne Clients.
Hinweis:
AUTH LOGINundAUTH PLAINwerden 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:
$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:
AUTH LOGIN
AUTH PLAIN
EHLO bewirbt die Mechanismen, sobald mindestens ein SMTP-Benutzer existiert:
250-AUTH LOGIN PLAIN
Erfolgreiche Anmeldung:
235 2.7.0 Authentication successful
Fehlgeschlagene Anmeldung:
535 5.7.8 Authentication credentials invalid
Wenn AUTH für den Client erforderlich ist:
530 5.7.0 Authentication required
Nach standardmäßig fünf Fehlversuchen innerhalb derselben Verbindung werden weitere AUTH-Versuche temporär abgewiesen:
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:
PBKDF2-HMAC-SHA256
Salt: 16 Byte zufällig
Iterations: 150000
Hash: 32 Byte
Beispiel in config.json:
{
"Username": "scanner01",
"Salt": "...",
"PasswordHash": "...",
"Iterations": 150000
}
Konfiguration
"Smtp": {
"RequireAuth": true,
"AuthMaxFailures": 5,
"AllowUnauthenticatedNetworks": [
"10.60.10.0/24"
],
"AuthUsers": [
{
"Username": "scanner01",
"Salt": "...",
"PasswordHash": "...",
"Iterations": 150000
}
]
}
RequireAuth
false
AUTH ist optional. Clients aus AllowedNetworks dürfen weiterhin ohne
Benutzername/Passwort senden.
true
Clients müssen sich authentifizieren, außer ihre IP liegt in
AllowUnauthenticatedNetworks.
AllowUnauthenticatedNetworks
Beispiel:
[
"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:
[9] SMTP-AUTH verwalten
Untermenü:
[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:
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:
"AuthenticatedUser": "scanner01"
und im Log ausgegeben:
[7F3A91C2D441] Mail angenommen | ... | Auth=scanner01
Bei nicht authentifizierten, aber erlaubten Verbindungen:
Auth=unauthenticated
Health Check
Der Health Check validiert zusätzlich die SMTP-AUTH-Konfiguration.
Eine Testmail kann weiterhin mit:
.\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:
.\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