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:

$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
S
Description
No description provided
Readme
370 KiB
Languages
PowerShell 100%