Dateien nach "/" hochladen

This commit is contained in:
2026-08-13 23:15:08 +02:00
parent 07f7cea199
commit c4ffc9b0cf
2 changed files with 243 additions and 75 deletions
+103 -70
View File
@@ -1,104 +1,137 @@
# SMTPGraphRelay V1.4 Zertifikats-Lifecycle
# SMTPGraphRelay V1.5 Log-Rotation
V1.4 erweitert V1.3 um Zertifikatsüberwachung und sichere Rotation.
V1.5 erweitert V1.4 um automatische Log-Rotation und Log-Aufbewahrung.
## Relay: automatische Zertifikatsüberwachung
## Standardverhalten
Beim Start wird das Zertifikat aus `Graph.CertificateThumbprint` geprüft:
Ohne Änderungen an `config.json` gelten:
- Zertifikat vorhanden
- privater Schlüssel vorhanden
- Ablaufdatum
```text
MaxFileSizeMB = 10
RetentionDays = 30
CleanupHours = 12
```
Standardwerte:
Das aktive Log bleibt:
- Warnung ab 60 Tagen Restlaufzeit
- kritisch ab 14 Tagen
- erneute Prüfung alle 12 Stunden
```text
logs\SMTPGraphRelay.log
```
Optional in `config.json`:
Sobald es 10 MB erreicht, wird es z. B. umbenannt in:
```text
logs\SMTPGraphRelay-20260813-231500.log
```
Danach wird automatisch eine neue `SMTPGraphRelay.log` begonnen.
Archiv-Logs, die älter als 30 Tage sind, werden automatisch entfernt.
## Optionale Konfiguration
Die bestehende Config funktioniert unverändert.
Optional kann auf Root-Ebene ergänzt werden:
```json
"Graph": {
"TenantId": "...",
"ClientId": "...",
"CertificateThumbprint": "...",
"SenderMailbox": "info@example.com",
"ForceSender": true,
"CertificateWarningDays": 60,
"CertificateCriticalDays": 14,
"CertificateCheckHours": 12
"Logging": {
"MaxFileSizeMB": 10,
"RetentionDays": 30,
"CleanupHours": 12
}
```
Die zusätzlichen Werte sind optional; bestehende Configs funktionieren unverändert.
Beispiel:
## Rotation
`Renew-SMTPGraphRelayCertificate.ps1` muss als Administrator mit
**Windows PowerShell 5.1** ausgeführt werden.
```powershell
cd "C:\Program Files\SMTPGraphRelay"
.\Renew-SMTPGraphRelayCertificate.ps1
```json
{
"Smtp": {
"ListenAddress": "0.0.0.0",
"Port": 2525,
"Hostname": "SMTPRELAY01",
"AllowedNetworks": [
"127.0.0.1/32",
"10.0.0.0/8"
],
"MaxMessageSizeMB": 25,
"ClientTimeoutSeconds": 120,
"MaxConcurrentClients": 20
},
"Graph": {
"TenantId": "...",
"ClientId": "...",
"CertificateThumbprint": "...",
"SenderMailbox": "info@example.com",
"ForceSender": true
},
"Queue": {
"PollSeconds": 10,
"MaxRetries": 8,
"RetryMinutes": [1,5,15,30,60,120,240,480]
},
"Paths": {
"Queue": "queue",
"Failed": "failed",
"Logs": "logs"
},
"Logging": {
"MaxFileSizeMB": 10,
"RetentionDays": 30,
"CleanupHours": 12
}
}
```
Ablauf:
## Parallel-sicher
1. bestehende Config lesen
2. neues nicht exportierbares Zertifikat in `LocalMachine\My` erzeugen
3. Entra-Admin interaktiv anmelden
4. bestehende App über ihre ClientId finden
5. neues Zertifikat **zusätzlich** in `keyCredentials` hinterlegen
6. App-only Login mit dem neuen Zertifikat testen
7. erst danach `config.json` atomar auf den neuen Thumbprint umstellen
8. Relay-Scheduled-Task neu starten
9. optional altes Cloud- und lokales Zertifikat entfernen
Exchange Application RBAC muss nicht neu aufgebaut werden, weil die App/ClientId
bei der Rotation unverändert bleibt.
## Warum das alte Zertifikat zunächst erhalten bleibt
Die sichere Reihenfolge ist:
V1.5 verwendet weiterhin den benannten Mutex:
```text
OLD funktioniert
|
NEW erzeugen
|
OLD + NEW in Entra
|
NEW Auth testen
|
Config -> NEW
|
Relay neu starten
|
erst dann optional OLD entfernen
Local\SMTPGraphRelay-Log
```
So gibt es während der Rotation keinen Zeitpunkt ohne gültiges Credential und ein
Rollback bleibt möglich.
Rotation und Schreiben passieren innerhalb desselben Locks. Dadurch können parallele
SMTP-Runspaces und der Queue-/Graph-Worker nicht gleichzeitig dieselbe Logdatei
rotieren oder beschreiben.
## Update von V1.3
Task stoppen:
## Update von V1.4
```powershell
Stop-ScheduledTask -TaskName "SMTPGraphRelay"
Copy-Item `
"C:\Program Files\SMTPGraphRelay\SMTPGraphRelay.ps1" `
"C:\Program Files\SMTPGraphRelay\SMTPGraphRelay-V1.4-backup.ps1"
```
V1.3 sichern und V1.4 als `SMTPGraphRelay.ps1` ablegen, dann:
Dann V1.5 als:
```text
C:\Program Files\SMTPGraphRelay\SMTPGraphRelay.ps1
```
ablegen und:
```powershell
Start-ScheduledTask -TaskName "SMTPGraphRelay"
```
Die `config.json` muss nicht geändert werden.
Im Log erscheint bei einem gesunden Zertifikat beim Start beispielsweise:
Im Log sollte beim Start u. a. erscheinen:
```text
Graph-Zertifikat gültig bis 2028-08-13 23:00:00 (729 Tage verbleibend).
SMTPGraphRelay V1.5 gestartet ...
Log-Rotation: max. 10 MB pro Datei, Aufbewahrung 30 Tage.
```
## Hinweis
Nur archivierte Dateien im Muster
```text
SMTPGraphRelay-*.log
```
werden automatisch gelöscht.
Die aktuell aktive `SMTPGraphRelay.log` wird nie durch die Retention-Regel gelöscht.