Merker: Statusseiten von Webdiensten/Firmen

Viele Anbieter (Apple, Microsoft, OVH,…) bieten eigene Webseiten an, an denen man Störungen derer Dienste erkennen kann. Hier möchte ich nach und nach diese Webseiten auflisten:

Merker: MailCow Container Datensicherung

Bei der „dockerized“ Installation von MailCow kann man ganz einfach einzelne (oder auch alle auf einmal) sichern. Dazu bringt MailCow schon ein eigenes Script mit.

Man findet dies unterhalb seiner MailCow-Docker-Umgebung im Unterordner /helper-scripts/ .

Als Parameter erwartet das Script den Pfad wo die Backup-Dateien abgelegt werden sollen. Möchte man dies in einem Script verarbeiten, so kann man z.B. folgenden Einzeiler verwenden:

BACKUP_LOCATION=/var/backups/ulix/docker/vmail /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup vmail --delete-days 2 >/dev/null 2>&1

Im obigen Beispiel wird in das Verzeichnis /var/backups/ulix/docker/vmail die kompletten Maildaten (aus Dovecot) geschrieben. Sicherungen die älter als 2 Tage (–delete-days 2) sind werden automatisch gelöscht.

Genauso könnte man auch die anderen Container (mysql crypt redis postfix) sichern.

BACKUP_LOCATION=/var/backups/ulix/docker/other /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup mysql crypt redis postfix --delete-days 2 >/dev/null 2>&1

Auf meinen Servern wird z.B. der Backup-Server via SSHFS in das Dateisystem durch das PRE-Script von Duply gemounted und anschließend die Container Backups direkt dort gesichert. (Ebenfalls durch das PRE-Script).
Nach der eigentlichen Duply-Datensicherung wird durch das POST-Script der Sicherungspfad wieder auf dem Dateisystem ausgehängt.

Mailknecht – Mailkonto in Thunderbird einrichten

Hier möchte ich in einem kleinem Video zeigen, wie einfach es sein kann ein Mailkonto in Thunderbird einzurichten.

In dem Video wird die Installation und automatische Konfiguration von Thunderbird unter Windows 10/11 gezeigt. Die dort verwendeten Daten sind natürlich exemplarisch. Die korrekten Zugangsdaten (Mailadresse und zugehöriges Passwort) entnehmen Sie bitte aus Ihrem MailKnecht-Datenblatt.

Alten Domaincontroller entfernen

Um einen alten Domaincontroller zu entfernen sollte man sicherstellen, dass alle 5 Rollen (PDCEmulator, RIDMaster, InfrastructureMaster, SchemaMaster und DomainNamingMaster) auf einem neuen Server laufen. Ist dies der Fall starten wir mit Admin-Rechten eine DOS Box und folgenden Befehl:

dcpromo

Diesen Assistenten durchführen (natürlich NICHT die Domäne löschen) und ein Passwort für den neuen lokalen Admin vergeben. Nach dem Neustart ist dieser nun auch kein Domain-Controller mehr.

Auf dem neuen AD starten wir „Active Directory-Standorte und Dienste“ und kontrollieren ob der Server bei „Default-First-Site-Name“ und Servers nicht mehr vorhanden ist. Sollte da der alte Server noch stehen, einfach ein wenig Zeit geben und evtl. am Folgetag löschen. Ansonsten können Replikationsfehlermeldungen kommen. Bei den NTDS Settings ebenfalls kontrollieren das der alte Server entfernt ist.

Merker: AD Migration

Hier möchte ich mir in Kurzform die notwendigen Schritte zur AD Migration notieren. Ein gewisses Verständnis für Windows 20xx Server sollte man schon mitbringen.

Zuerst starten wir den „Active Director Benutzer und Computer“ und werden die Domänenfunktionsebene heraufstrufen. Je nachdem welche Version man von Windows Server verwendet, sollte man schauen welche Mindestvorraussetzung von Nöten ist.

Ist dies getan starten wir „Active Directory Domänen und Vertrauensstellungen“ sind stufen die Gesamtfunktionsebene herauf.

Nun geht es mit der Powershell (als Administrator) weiter. Neuere Windows Versionen verwenden DFS. Ob dies bei Deinem verwendeten System schon so ist kann Du mit folgendem Befehl prüfen:

dfsrmig /getglobalstate

Sollte dies nicht der Fall sein, musst Du folgende 4 Stufen (0-3) mit den unten stehenden Befehlen aktivieren. Dabei bitte immer mit dem zweiten Befehl prüfen ob die jeweilige Stufe auch erfolgreich beendet ist. Dies kann schon mal pro Stufe 10-30 Minuten andauern.

dfsrmig /setglobalstate 0
dfsrmig /getmigrationstate
dfsrmig /setglobalstate 1
dfsrmig /getmigrationstate
dfsrmig /setglobalstate 2
dfsrmig /getmigrationstate
dfsrmig /setglobalstate 3
dfsrmig /getmigrationstate

Gibt der jeweilige Migrationstate keine Fehlermeldung aus prüfen wir das DFS endgültig nochmal mit:

dfsrmig /getglobalstate

Die Vorarbeiten sind nun getan. Nun können wir auf dem neuen Server die Notwendigen Rollen installieren. „Active Directory-Domänendienste„. DNS wird automatisch installiert, evtl. sollte man noch DHCP oder weitere Rollen auswählen. Dieser Vorgang ist nicht weiter aufwändig und nach dem Boot der Servers auch abgeschlossen.

Nach dem Neustart kann man sich wieder am Server anmelden und muss nun die einzelnen Rollen übertragen. Dazu starten wir „Active Director Benutzer und Computer“ und klicken mit der rechten Maustaste auf die Domäne.
Unter dem Punkt „Betriebsmaster“ können wir die Rollen RID, PDC und Infrastruktur auf den neuen Server umstellen. Prüfen kann man das über folgenden Befehl kontrollieren:

netdom query fsmo

Drei von fünf Rollen sind schonmal verschoben. Um die nächste Rolle zu verschieben starten wir „Active Directory Domänen und Vertrauensstellungen“ und klicken ganz oben (nicht auf die Domäne) mit der rechten Maustaste auf Betriebsmaster. Nun kann dieser „Domänennamen-Betriebsmaster“ auch verschoben werden.

Für die letzte Rolle (Schemamaster) müssen wir (vermutlich) zuerst das Schema-Management registrieren um es via MMC öffnen zu können. Dies geht mit:

regsvr32 schmmgmt.dll

Nun können wir die MMC starten und das Swap-in „Active Directory-Schema“ einblenden. Zuerst müssen wir die Verbindung zu einem anderen Domain-Controller herstellen. Sonst kann diese Rolle nicht auf sich selbst verschoben werden. Ist dies getan geht es wie gewohnt mit der rechten Maustaste auf „Betriebsmaster“ und können diese ändern.

Zum Abschluss der Rollen können wir nochmal mit folgendem Befehl die Rollen kontrollieren.

netdom query fsmo

Bevor man nun auf die Idee kommt den alten Server zu entfernen, sollte man noch schauen ob der neue Server den Global Katalog hat. Dies geht über „Active Director Benutzer und Computer“ und schaut ob bei dem neuen AD ein [GC] bei steht. Falls nicht, einfach doppelt auf die Maschine drauf klicken und den Haken wie gewünscht setzen.

Apps flott unter Windows 10/11 installieren

Mit Windows 10/11 kam auch ein Paketmanager, wie man es unter Linux gewohnt ist dazu. Über diesen Paketmanager „WinGet“ kann man mittels Powershell einfach Programme nach installieren. Gerade wenn man viele Rechner installieren möchte ist dies eine sehr einfache Möglichkeit (sofern man kein SCCM zur Hand hat). Ein weiterer Vorteil gegenüber einer manuellen Installation ist, dass man die Apps sehr einfach aktualisieren kann. (winget upgrade –all)

Installiert wird WinGet über der Microsoft Appstore. Dazu einfach winget in die Suchzeile eingeben und installieren.

Anschließend kann man in der Powershell (oder Command-Box) den Befehl WinGet ausführen. Ohne Parameter wird einem eine Liste möglicher Befehle ausgegeben. WinGet List zeigt z.B. alle installierten Apps an.

Hier meine Apps, die ich eigentlich auf jeden Rechner drauf mache und für notwendig erachte:

winget install 7zip.7zip --accept-package-agreements --silent --accept-source-agreements 
winget install Irfanview -s msstore --accept-package-agreements --silent  
winget install Ghisler.TotalCommander --accept-package-agreements  
winget install Mozilla.Firefox --accept-package-agreements  
winget install Google.Chrome --accept-package-agreements  
winget install "Adobe Acrobat Reader DC" -s msstore --accept-package-agreements  
winget install vlc -s msstore --accept-package-agreements
winget install Notepad++.Notepad++ --accept-package-agreements  
winget install Zoom.Zoom --accept-package-agreements

Zusätzlich vielleicht noch folgende Apps:

winget install TeamViewer.TeamViewer --accept-package-agreements
winget install TeamViewer.TeamViewer.Host --accept-package-agreements
winget install Putty.Putty --accept-package-agreements
winget install TimKosse.FileZilla.Client --accept-package-agreements
winget install WinSCP.WinSCP --accept-package-agreements
winget install sysinternals --accept-package-agreements

Möchte man eine bestimmte Software installieren, dann kann man den Parameter search (also winget search AppName ) bemühen.

Mit Synology Cloudsync Nextcloud Dateien sichern

MIt eine Synology Diskstation kann man mit der App „Cloudsync“ sehr einfach seine Nextcloud Instanz sichern. Einen kleinen Kniff gibt es dabei, den ich hier kurz aufzeigen möchte.

Zuerst müssen wir in das Webinterface von unserem NextCloud und klicken wie auf dem Bild auf Einstellungen.

Die Einstellungen erweitern sich und man kann die WebDAV URL kopieren.

Wechseln wir nun in das Webinterface der Synology NAS.

Nachdem über dem Paketmanager Cloudsync installiert wurde starten wir die App. Anschließend klicken wir auf das Plus Symbol.

Es erscheint der Assistent mit diversen Anbietern. Wir scrollen ein wenig nach unten, wählen WebDAV aus und klicken weiter.

Die Serveradresse im folgenden Dialogfenster ist die WebDAV URL die wir uns oben bei den Nextcloud Einstellungen kopiert haben. Dabei ist zu achten, dass am Ende der „/“ entfernt werden muss. Ansonsten gibt die App Cloudsync ein Authentifizierungsfehler aus.

Benutzerkonto und Kennwort sollten klar sein. Anschließend bestätigen wir mir Weiter.

Im Nachfolgenden Bild wählen wir noch einen passenden „lokalen Pfad“ aus. Da ich mit der App Cloudsync nur Dateien sichern und nicht den der Synology NAS zu Nextcloud hochladen möchte, wähle ich unter SynchronisierungrichtungNur Remote-Änderungen herunterladen“ aus.

Die nächsten Dialogfenster könnten dann in den Standardeinstellungen bestätigt werden.

Im Anschluß verrichtet Cloudsync seine Arbeit und lädt die Dateien herunter. Wer mag kann die Konfiguration nach Erstellung editieren und z.B. den Zeitplan bearbeiten wann Cloudsync aktiv sein soll.

Merker: acme.sh

Um Zertifikate für Dienste zu erstellen, die keinen Webserver mitbringen, kann man auch wie folgt erstellen. Dazu ist es nötig, dass der Domainprovider bzw. DNS Anbieter eine Schnittstelle für die DNS-Challenge mitbringt. INWX tut dies :-)

Die unterstützten Provider kann man auf Github nachlesen: https://github.com/acmesh-official/acme.sh/tree/master/dnsapi

Erstellen kann man dann ein Zertifikat wie folgt:
(Pfade sollten natürlich vorhanden sein)

acme.sh \
  --issue \
  --cert-home /Users/knut/Downloads/SSL \
  --dns dns_inwx \
  -d amsel.systemtechnics.de \
  -d drossel.systemtechnics.de

Erneuern mit folgendem Befehl:

acme.sh \
  --renew \
  --cert-home /Users/knut/Downloads/SSL \
  --dns dns_inwx \
  -d amsel.systemtechnics.de \
  -d drossel.systemtechnics.de

Alle bestehenden Zertifikate (die unter /Users/knut/Downloads/SSL existieren ) erneuern:

acme.sh \
  --renew-all \
  --cert-home /Users/knut/Downloads/SSL \
  --dns dns_inwx 

Linux – Meldung vor Passwort Prompt ausgeben

Man kann unter Linux die Datei /etc/issue.net dazu verwenden, vor dem eigentlichen Passwort Prompt, eine Meldung auszugeben. Diese kann z.B. Nutzer warnen ein Login durchzuführen sofern sie nicht dazu berechtigt sind.

Die Umsetzung ist denkbar einfach. Zuerst müssen wir uns natürlich korrekt auf dem System anmelden und im Anschluss die Datei /etc/issue.net editieren.

pico /etc/issue.net

Dort kann man die gewünschte Meldung eingeben und entsprechend speichern. Im Anschluss müssen die den SSH-Daemon dazu bringen diese auch zu verwenden. Dazu editieren wie die Datei /etc/ssh/sshd_config und suchen nach der Zeile Banner

pico /etc/ssh/sshd_config

Diese dann wie folgt einstellen. (In der Regel ist die Zeile auskommentiert)

# no default banner path

Banner /etc/issue.net

Nach dem Neustart des SSH-Daemon wird bei der Anmeldung vor dem Passwort Prompt die Meldung ausgegeben. (Siehe Bild oben)

service ssh restart

Bei der Authentifizierung mittels SSH-Keys (welches ich empfehle und bevorzuge), gibt es natürlich kein Passwort Prompt. Die Meldung wird dann aber trotzdem ausgegeben.

PGP Alternative age

Bei Twitter bin ich auf ein Verschlüsselungsprogramm (age) aufmerksam geworden. Verschlüsselt wird wie bei PGP auch über ein Public-/Secret- Key Verfahren.

Die Installation und Handhabung ist recht einfach. Ich möchte hier ein paar davon (für OSX) beschreiben. Wer es genauer nachlesen möchte kann dies gerne unter https://github.com/FiloSottile/age tun.

Die Installation mittels brew ist denkbar einfach. Mit folgendem Befehl wird age und age-keygen installiert.

brew install age

Zuerst muss ein geheimer und öffentlicher Schlüssel generiert werden. Dies funktioniert wie folgt:

age-keygen > key.txt

Wer seinen privaten Schlüssel mit einem Passwort versehen möchte kann dies mit folgenden Befehl tun. Der öffentliche Schlüssel der dabei angezeigt wird sollte man sich anschließend in einer Datei merken!

age-keygen | age -p > key.age

Nun hat man eigentlich schon alles was man benötigt, dass einem eine Verschlüsselte Datei zugesendet werden kann. Das Public-Key-Verfahren beruht ja darauf, dass jemand mit meinem öffentlichen Schlüssel für mich etwas verschlüsselt, was nur ich mit meinem privaten Schlüssel wieder entschlüsseln kann.

Wer selbst eine Domain betreibt und die dort Möglichkeit besitzt einen TXT Eintrag zu erstellen, der kann seinen öffentlichen Schlüssel auch dort ablegen. Mein aktueller Schlüssel liegt im TXT Eintrag zu knut.systemtechnics.de .

Diesen kann man mit dem Befehl dig auch ganz einfach aus der Konsole auslesen.

dig +short TXT knut.systemtechnics.de | tr -d \"

Kommen wir nun zum eigentlichen, dem verschlüsseln einer Datei. Die Einfachste Variante ist mit age eine Datei zu verschlüsseln und diese mit einem Passwort zu versehen. Dies funktioniert die folgt:

age -p meine-datei.txt > meine-datei.age

Nach der Eingabe des Passworts (zweimal) ist die Datei verschlüsselt.

Zum entschlüsselt (mit einem Passwort) kann folgender Befehl verwendet werden:

age -d meine-datei.age > neue-datei.txt

Nach Eingabe des Passwortes, welches beim Verschlüsseln verwendet wurde, ist die Datei wieder im Klartext. Im Beispiel auf dem Bild habe ich dieser einen anderen Dateinamen vergeben. (Ohne Umleitung in eine Datei wir der Standard Output verwendet)

Nun aber zum eigentlichen Public-Key Verfahren. Dazu muss derjenige meinen öffentlichen Schlüssel zum verschlüsseln verwenden. Entweder hat er diesen bei mir aus dem DNS ausgelesen (siehe oben dig) oder direkt übermittelt bekommen.

Verschlüsseln wir die Datei von oben nochmals mit meinem öffentlichen Schlüssel:

cat meine-datei.txt | age -a -e -r age1486ysemz2yg9zasd8wrdxz3kjpjv7jl7fdqpvgm3vag40jv0n5mskmcgwm > meine-datei.age 

Die Datei meine-datei.age ist nun verschlüsselt und kann mir gefahrlos übermittelt werden. Nur ich kann diese wieder entschlüsseln.

Das Entschlüsseln geht ebenfalls sehr einfach. Datei wird mein geheimer Schlüssel benötigt und funktioniert wie folgt:

age -i Keys/age-key.txt -d meine-datei.age > neue-datei.txt

Die Datei ist nun wieder entschlüsselt. Auf ein Passwort habe ich bei mir im geheimen Schlüssel verzichtet. Ich bin der Meinung, dass wenn jemand an diesem auf meinem verschlüsselten MacBook kommt, der kann auch jeweils die Originale auch direkt anschauen.

Wer mag kann öffentliche Schlüssel der „Verschlüsselungspartner“ natürlich auch in Umgebungsvariablen speichern um diese öfters zu verwenden.

echo "export Karsten_AGE_KEY=age1486ysemz2yg9zasd8wrdxz3kjpjv7jl7fdqpvgm3vag40jv0n5mskmcgwm" >> /Users/knut/.bashrc

Nutzen kann man dies dann z.B. wie folgt:

cat meine-datei.txt | age -a -e -r $Karsten_AGE_KEY > meine-datei.age 

Auch an mehrere „Verschlüsselungspartner“ gleichzeitig kann man Dateien verschlüsseln. In diesem Beispiel kann jeweils Karten, Martin und German mit den jeweiligen geheimen Schlüsseln diese entschlüsseln:

cat meine-datei.txt | age -a -e -r $Karsten_AGE_KEY -r $Martin_AGE_KEY -r $German_AGE_KEY > meine-datei.age 

Auch direkt meinen Key mittels dig auslesen und gleich verschlüsseln ist möglich:

cat meine-datei.txt | age -a -e -r $(dig +short TXT knut.systemtechnics.de | tr -d \") > meine-datei.age 

…und da ist sicherlich noch vieles mehr möglich.