Archiv der Kategorie: Technik

Domain-Zertifikat von Let’s Encrypt unter Plesk einrichten

Kostenloses Domain SSL-Zertifikat einrichten

Let’s Encrypt und Plesk

Die Zertifizierungsstelle Let’s Encrypt hat das Ziel auf sehr einfache Weise kostenlose Zertifikate für die Verschlüsselung von Verbindungen im Web zur Verfügung zu stellen.

Systeme mit Plesk 12.5 können diese Umgebung effizient nutzen. Der bisherige Aufwand bei der Erstellung, Validierung, Signierung, Einrichtung und Erneuerung von Zertifikaten für verschlüsselte Websites wird mit der hier gezeigten Methode drastisch vereinfacht.

Voraussetzung und Einrichtung

1. Extension Let’s Encrypt in Plesk hinzufügen

1.1 In Plesk zu Erweiterungen (Extensions) navigieren
1.2 Extension-Catalog auflisten
1.3 Let’s Encrypt installieren

2. Kostenloses Let’s Encript Domain SSL-Zertifikat hinzufügen

2.1 zur Domain wechseln und Let’s Encrypt aufrufen
2.2 Let’s Encrypt SSL-Zertifikat installieren
2.3 Erfreulich: Das Zertifikat wird jeden Monat automatisch verlängert!
2.4 Das Let’s Encrypt SSL-Zertifikat wurde erfolgreich für die Domain xyz.de installiert

3. Zertifikat ansehen (optional)

Diese Punkte 3.1 – 3.4 können Sie / kannst Du auch überspringen:
3.1 In der Domainverwaltung auf das Icon SSL-Certificates doppelklicken
3.2 Hier wird das installierte SSL-Zertifikat mit seinen Komponenten aufgelistet
3.3 Ein Doppelklick auf den Zertifikats-Namen …
3.4 … zeigt die Details des SSL-Zertifikats

4. Zertifikat in der Domain aktivieren

4.1 Unter Websites & Domains die Hosting Settings aufrufen
4.2 In den Hosting Settings im Abschnitt Security SSL Support anhaken und das eben installierte Zertifikat auswählen

5. Aufbau verschlüsselter Verbindungen prüfen

5.1 Die Anzeige im IE zeigt eine verschlüsselte Verbindung zur Domain
5.2 Die Anzeige im Firefox zeigt eine verschlüsselte Verbindung zur Domain
5.3 Aufbau SSL-verschlüsselter Verbindung nun im grünen Bereich
5.4 Zertifikat zum Beispiel im IE ansehen
5.5 Zertifizierungspfad zum Beispiel im IE ansehen

(siehe auch Screenshots in vorstehende Fotostrecke „Plesk Extension einrichten“ mit 21 Fotos)

6. Duplicate Content via Redirect vermeiden

6.1 Im Hauptverzeichnis der Website eine Weiterleitung von HTTP auf HTTPs einrichten. Das geht schnell und einfach mit der Datei .htaccess.

Füge folgende Codezeilen für das Reddirect in der .htaccess hinzu:

Damit werden alle Aufrufe von http auf https weitergeleitet und das Problem mit Duplicate Content besteht nicht mehr.

In gängigen WordPress-Installationen müssen meistens nur die Zeilen 9 und 10 ergänzt werden:

7. CMS für https:// optimieren

Wenn das SSL-Zertifikat, wie vorstehend beschrieben erfolgreich installiert wurde, ist unbedingt das CMS System für SSL zu optimieren.

7.1 im Dashboard von WordPress die Adressen von https:// auf https:// umstellen
7.2 Der Browser Google-Chrome leistet mit seinem Security Overview beim Aufspüren von Mixed-Content sehr gute Dienste.
(Menü: Weitere Tools\Entwicklertools oder [<strg><shift>+] und dann den Tab Security auswählen)
7.3 Weiteres:
Für das CMS WordPress gibt es hier und da um Thema „https://“ gute Tipps.
7.4 Ein SSL-Servertest kann die Umstellung von http auf https:// abrunden. Mein Tipp die freie Plattform von Qualys SSL LABS: ssllabs.com – liefert einen ausführlichen SSL Report für Ihre  / Deine Domain.

(siehe auch Screenshots in vorstehende Fotostrecke „Plesk Extension einrichten“ mit 21 Fotos)

Web-Zertifikat erstellen und installieren

Ziel dieses Beitrags: Mit Boardmitteln unter Debian eine eigene CA (Certificate Authority), also eine Zertifizierungsstelle erstellen sowie ein selbstzertifiziertes Serverzertifikat erstellen und einbinden.

Nachteil: Der einzige Unterschied zu einem von einer anerkannten Stelle signierten Zertifikat ist, dass der Client (Emailprogramm, Browser, etc.) eine Warnung ausgeben wird, dass er die CA nicht kennt. Der Benutzer muss dann einmal bestätigen und kann das Zertifikat trotzdem akzeptieren.

Alternative: Zertifikat von einer anerkannten Zertifizierungsstelle einsetzen. Ein Beitrag hierzu ist in Vorbereitung.

1. OpenSSL

Für die Verwaltung der Zertifikate und für die Verschlüsselung der Verbindungen mit SSL und TLS kommt unter Linux fast immer OpenSSL zum Einsatz. In der Regel ist openssl bereits installiert. Wenn nicht, muss das Paket openssl nachinstalliert werden. Aus diesem Paket wird der Kommandozeilenbefehl openssl benötigt.

2. Erstellen der CA

Verzeichnis für das Zertifikat anlegen. z.  B.  /root/ca:

2.1 Die CA enthält einen geheimen Schlüssel, welcher automatisch erzeugt und in der Datei cakey.pem abgelegt wird.

Die Laufzeit wird hier mit 10 Jahren (3650 Tagen) bewusst hoch gewählt.

Das CA-Zertifikat wird nach cacert.pem geschrieben. Der vorstehende Befehl erzeugt einen Schlüssel für das Zertifikat mit einer Länge von 2048 Bit. Wer den geheimen Schlüssel der CA kennt, kann damit beliebige Serverzertifikate signieren. Deshalb wird diese Schlüsseldatei nicht im Klartext auf der Festplatte abgelegt, sondern mit einer Passphrase verschlüsselt. Die Passphrase, welche beim Erstellen abgefragt wird sollte daher sehr sicher gewählt werden. Bei jedem Signieren eines anderen Zertifikats wird diese Passphrase benötigt. Es sollte sichergestellt werden, dass der Private-Key (ENCRYPTED PRIVATE KEY) cakey.pem ausschließlich zum Signieren anderer Zertifikate verwendet wird. Dieser Key ist der sensibelste Teil einer CA-Infrastruktur.
Das Root-CA Zertifikat wird ausschlieslich zum Signieren von anderen Zertifikaten benötigt! Als nächstes Daten eingeben, welche die CA identifizieren. Diese werden dem Client angezeigt, wenn er aufgefordert wird, das Zertifikat zu akzeptieren oder abzulehnen. Der Code für Deutschland ist DE. Wenn ein Feld leer bleiben soll, bitte einen Punkt eingeben. Ansonsten wird der in eckigen Klammern stehende Defaultwert eingetragen. Das Feld Common Name (CN) ist hier der offizielle Name der Zertifizierungsstelle. Für die eigene CA einfach eigenen Namen eintragen. Prüfen, ob die die beiden Dateien cacert.pem und cakey.pem im gewählten Verzeichnis /root/ca entstanden sind.

2.2 Die Rechte aus Sicherheitsgründen so setzen, dass die Schlüsseldatei nur für root lesbar ist:

2.3 Testen, ob der Schlüssel mit der Passphrase wieder geöffnet werden kann.

3. Schlüssel für das Serverzertifikat erzeugen

Nachdem die eigene CA steht, kann diese für den Server ein Zertifikat herausgeben. Dazu erzeugt man/frau zunächst einen 2048 Bit langen RSA Schlüssel serverkey.pem (RSA PRIVATE KEY), der mit AES 128 verschlüsselt auf der Platte abgelegt wird (auch hier wieder ein verschlüsselter Schlüssel). Die Passphrase muss diesmal nicht sonderlich geheim sein, da wir sie ohnehin im Anschluss wieder entfernen werden. OpenSSL lässt allerdings keine leere Phrase zu:

Diese Passphrase wird wieder entfernt, damit der Serverdienst (z. B. Apache) den Schlüssel bei jedem Booten des Servers ohne Passworteingabe verarbeiten kann.

 4. Certificate Signing Request erzeugen

Der nächste Schritt zum eigenen Zertifikat ist ein CSR. Dies muss dann nur noch von der CA signiert werden. Hier sind wieder Eingaben nötig, die genau wie zum Erstellen der CA benötigt werden.

Beim Serverzertifikat ist der Common Name von entscheidender Bedeutung. Hier muss der DNS-Name stehen, unter dem der Client den Server anspricht! Wird das Zertifikat für eine HTTPS-Verbindung zu z. B. sommer-wg.de verwendet, so muss der Common Name eben genau sommer-wg.de heißen. Andernfalls wird der Browser das Zertifikat nicht akzeptieren.

Die Option A challenge password kann man/frau leer lassen. Es sind nuch in /root/ca/ inzwischn 4 Dateien vorhanden. Der CSR (Zertifikats-Request) liegt jetzt in der Datei req.pem und kann von der CA anschliessend signiert werden.

5. OpenSSL-Konfiguration anpassen

Weitere Einstellungen muss man in der Datei /etc/ssl/openssl.cnf ändern, bevor man signieren kann. Datei openssl.cnf öffnen und folgende Zeilen in der Sektion [CA_default ] anpassen:

Das Feld default_days ist auf 365 Tage voreingestellt und gibt die Gültigkeit des Zertifikates an.

Nun muss man/frau noch einige Dateien anlegen:

Zertifikat7-serial-index.jpg

6. Serverzertifikat signieren

Endspurt: Eigene CA signiert das gewünschte Server-Zertifikat:

7. Zertifikatsdaten anzeigen

7.1 Die Details eines Zertifikates können mit Hilfe des folgenden Befehls angezeigt werden:


7.2 Zertifikat in PKCS#12 (pfx) konvertieren:

8. Zertifikate installieren
Web-Server, Vorbemerkung: Einen VirtualHost für den Port 443 darf es aus technischen Gründen nur einmal geben, da z. B. Apache für diesen Port nur ein einziges SSL-Zertifikat ausliefern kann. Es ist also nicht möglich, die Adressen https://www.meinepage1.de und https://www.meinepage2.de über den selben Apache ausliefern zu lassen. Nur unter Verwendung einer zusätzlichen IP-Nummer (und anschließender Anpassung der Listen-Direktiven) ist sowas u. U, möglich.

8.1 Publikation des Root-CA Zertifikats

Vorstehend wurde ein Zertifikat mit einem zugehörigen Private-Key erzeugt. Das Zertifikat ist für den Zeitraum von 10 Jahren gültig. Nochmal: Es sollte sichergestellt werden, dass der Private-Key ausschließlich zum Signieren anderer Zertifikate verwendet wird. Dieser Key ist der sensibelste Teil einer CA-Infrastruktur. Der Zertifikatteil (public Key) dieses Paares wird den Clients (Browsern) zur Verfügung gestellt. Die Clients können die Gültigkeit von Zertifikaten, die mit diesem Private-Key signiert wurden, mit Hilfe des Root-CA Zertifikats (cacert.pem) verifizieren.
Zuerst müssen alle für die Verifizierung durch Browser unnötigen Informationen aus dem Zertifikat entfernt werden:

Dieses Zertifikat kann auf der Website publiziert werden. Der Webserver sollte einen MIME Eintrag für .crt Files konfiguriert haben. Das Modul mod_ssl in Apache, erwartet, dass das conf-Verzeichnis eine zusätzliche Konfigurationsdatei namens ssl.conf enthält …

… in Bearbeitung
Jetzt können sich die Clients das Zertifikat herunterladen und im Browser installieren. Wenn dieses erfolgt ist, akzeptiert der Browser alle Zertifikate, die mit dem zugehörigen Root-CA Key signiert wurden.

Quellen:  openssl.orgWikipedia, Sascha Kersten, Christian Piazzi,
Debian GNU/Linux Anwenderhandbuch von Frank Ronneburg 
(CC BY-NC-ND 3.0 DE)

Neuen vServer von Server4You auf aktuellen Debian- und Plesk-Stand updaten

vServer vom Discounter sind extrem preiswert geworden, z. B. kostet der vServer Pro X5 von Server4You für das erste Jahr schlappe 82,18 €.  Das sind somit nur 6,85 € pro Monat und das ist meiner Meinung für einen quasi dedizierten Server sehr preiswert.

Die Hardwareausstattung kann man/frau hier nachlesen. Zahlreiche Features wie z. B. Reverse DNS, Backup, Snapshot, Firewall, 3 feste IPs, Plesk bis 10 Domains etc. sind bereits enthalten. Überbuchungen konnte ich in diesen ersten Wochen nicht beobachten oder feststellen. Meine Erfahrungen mit dem Ticket-Support sind überwiegend sehr gut. Nervig bei S4Y ist allerdings das sehr oft zickige Powerpanel.

Solche vServer haben aber oft den Nachteil, dass meistens veraltete Templates seitens des Discounters zum Einsatz kommen. So hatte mein im April 2014 erstinstallierter vServer noch Debian 6.0x squeeze und Plesk 11.0x drauf.

Die aktuelle Debian Version ist 7.5 wheezy und die aktuelle Panelversion von Plesk ist zz. 11.5.30 Mit wenigen Stunden Zeit und Geduld kann man den vServer jedoch auf den neusten Debian und Plesk-Stand korrigieren.

Nachfolgend möchte ich an einem Beispiel die mögliche Vorgehensweise exemplarisch für einen frischen und leeren vServer von z. B. S4Y beschreiben.

1. Restore

Bitte beachten Sie das bei einem Restore eine auswählbare Neuinstallation des vSERVERs stattfindet und alle Daten verloren gehen. Bitte Plesk-Lizenz vorher über PowerPanel Software sichern.

1.1 Im Powerpanel von S4Y einen Restore anfordern
1.2 man/frau erhält dann einen Restore Code per Mail
1.3 Über das Powerpanel die Minimale Debian Installation ausführen
1.4 Über Putty und ssh als root anmelden
1.5 ggf. den Midnight Commander (mc) installieren und konfigurieren
apt-get install mc
1.7  Update und Upgrade durchführen
> apt-get update
> apt-get upgrade
1.8 z.B. mc als Editor wählen
1.9 Debian Version anzeigen
> cat /etc/issue
> Debian GNU/Linux 6.0 \n \l

2. Debian Upgrade

2.1 Über Putty und ssh als root anmelden
2.2 z. B. über mc -x navigieren
> etc/apt/sources.list
2.3 Editiere source.list
Ersetze squeeze durch wheezy und speichern!


2.4  Update und Upgrade durchführen
> apt-get update
> apt-get upgrade
2.4 Kernel Upgrade
Für amd64-based (64 bit) systems:
> apt-get install linux-image-2.6-amd64
ODER i686 (32 bit) systems:
> apt-get install linux-image-2.6-686
Bitte nur das eine ODER das andere ausführen!
2.5 ggf. udev installieren
> apt-get install udev
2.6 Reboot auslösen
2.7  Über Putty und ssh als root anmelden
2.8  distupgrade
> apt-get dist-upgrade
Das dauert etwas … 😉
Fragen beantworten mit Default-Werten!
2.9 Reboot auslösen
2.10  Über Putty und ssh als root anmelden
2.11  Update und Upgrade durchführen
> apt-get update
> apt-get upgrade
2.12 Reboot
2.13 Über Putty und ssh als root anmelden
2.14 Debian Version anzeigen
> cat /etc/issue
> Debian GNU/Linux 7 \n \l

3. Plesk Upgrade

Voraussetzungen: Linux muss/darf nur mit einer Minimalinstallation vorhanden sein!

3.1 Über Putty und smcsh als root anmelden
3.2 z. B. über mc -x navigieren
> etc/apt/sources.list
3.3 Editiere source.list
Füge folgenden Eintrag hinzu
https://ftp.de.debian.org/debian wheezy main non-free


3.4 Update und Upgrade durchführen
> apt-get update
> apt-get upgrade
Falls Fehlermeldung auftreten, diese zwingend korrigieren
3.6 Anlegen eines Installationsverzeichnisse /var/install/plesk z. B. via mc -x und MKDIR
/var/install/plesk
3.7 Mit cd zum gerade angelegten Installationsverzeichnis navigieren
> cd /var/install/plesk
3.8 Autoinstaller von Parallels herunterladen
> wget https://autoinstall.plesk.com/plesk-installer
3.9 Rechte anpassen
> chmod +x plesk-installer
3.10 Plesk Installation starten
> ./plesk-installer
Das dauert etwas … 😉
Fragen beantwortemc -xn Default-Werten!
3.11 Reboot auslösen
3.12  Über Putty und ssh als root anmelden
3.13  Update und Upgrade durchführen
> apt-get update
> apt-get upgrade
3.14 Reboot
3.15 Im Browser an Plesk anmelden
https://servername:8443
Login: root
Kennwort rootpassword
Fragen beantworten!
Im Zweifels erst denken, dann antworten 😉
3.16 Plesk-Lizenz einspielen (siehe Punkt 1.)
Plesk-Lizenz für 10 Domainen bei Server4You ggf. anfordern
3.17 Firewall härten
Härtung in Abhängigkeit und Wechselwirkung von Punkt 4 vornehmen.

4. Grundabsicherung, Härtung

Eins der ersten Dinge, die man bei einem Rootserver machen sollte ist, dem User root das einloggen über SSH zu verbieten.

4.1 SSH verbieten
4.11 Editiere sshd_config
> /etc/ssh/sshd_config
Port 22 ändern auf z. B. 22922
4.12   SSH-Dienst neu starten
> /etc/init.d/ssh restart
4.2 SSH sicherer einrichten
4.21 Einen neuen User erstellt man/frau mit folgendem Befehl:
> useradd -g users -d /home/user4711 -s /bin/bash user4711
Hier wird ein User namens user4711 in der Gruppe users mit der Bash als Standartshell angelegt. Das Homeverzeichnis des Users liegt in /home/user4711
(Dieses Verzeichnis muss z. B. über mc -x und MKDIR manuell angelegt werden!)
4.22 Der User hat bis jetzt aber noch kein Passwort.
Das Passwort kann man mit dem „passwd“ Befehl ändern.
Als root kann man auch das Passwort für andere User ändern:
> passwd user4711
> Enter new Password:#!pwR§4711!#
Hier sollte man/frau auch darauf achten, das man kein zu einfaches Passwort wählt. Also es sollte mindestens 8 Zeichen haben, Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen beinhalten.
4.23 Den neuen User mit einem weiteren Putty Login in einem zweiten Fenster testen.
4.3 root login sperren
4.31 root das einloggen verbieten
zur Datei sshd_Config navigieren
/etc/ssh/sshd_config
4.32 Zeile wie folgt ändern
von
PermitRootLogin yes
auf
PermitRootLogin no
4.33 SSH Daemon Config neu laden:
> /etc/init.d/ssh reload
4.34 Danach sollte man/frau sich mit root nichtmehr einloggen können.
4.35 Switch User  su
Ab jetzt loggt man/frau sich einfach mit dem angelegten User ein und loggt sich über den Switch User Befehl als root ein:
> su

5. Benachrichtigung bei SSH Login

5.1 Login-Script erstellen
Mit folgendem Skript erhält man eine E-Mail, sobald sich ein Benutzer per SSH einloggt. Erstelle dazu ein ausführbares Shell Skript  /opt/shell-login.sh  mit folgendem Inhalt:

Damit die Mails beim Login versendet werden, muss folgende Zeile

in der Datei  /etc/profile  eingetragen werden.

Die Datei /opt/shell-login.sh muss die Rechte 755 besitzen:
> chmod 755 /opt/shell-login.sh

Die Mail wird nun automatisch versendet, sobald sich ein Benutzer per SSH einloggt. Der User bekommt davon nichts mit.

5.2 Das Programm finger ggf. nachinstallieren und testen
> apt-get install finger
> apt-get update
> apt-get upgrade
> finger

5.3 Brute Force Attacken abwehren
5.31 auth.log
In der Log-Datei /var/log/auth.log kann man möglicherweise fehlgeschlagene Loginversuche mit dem Protokoll SSH auf spüren, die nicht von Ihnen stammen.
5.32  fail2ban ist ein in Python geschriebenes Programm, welches verschiedene Serverdienste gegen unbefugten Zugriff absichern kann. Zur Abwehr also auf Debian das Programm fail2ban installieren:
> apt-get install fail2ban
> apt-get update
> apt-get upgrade
5.33 fail2ban konfigurieren
Editiere /etc/fail2ban/jail.conf wie folgt
ignoreip = 127.0.0.1
bantime  = 3600
maxretry = 3
Erforderlichen Parameter um den SSH Dämon zu überwachen:
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 4
In vorstehende Konfiguration für Fail2Ban wird eine IP Adresse für 1 Stunde gesperrt, nachdem von dieser 4 fehlgeschlagene Anmeldeversuche für SSH stattgefunden haben. 
5.34
Restart fail2ban
/etc/init.d/fail2ban restart

5.4 Weitere Sicherheitshinweise,  Artikel, Tutorials …
Rootkits mit rkhunter aufspüren
ssh-Zertifikate
etc.

 

Datensicherung einer MySQL-Datenbank via MySQL Dumper

Sinn und Zweck

MySQLDumper ist ein Sicherungsprogramm für MySQL-Datenbanken von Daniel Schlichtholz und weiteren Autoren .  Aus dem einfachen und eigenständig laufenden Werkzeug von 2004 ist im Laufe der Zeit ein leistungsfähiges und bewährtes Projekt geworden, dass mit bestehenden Standards gut zusammen wirkt.
Sie können jederzeit per Knopfdruck Backups Ihrer MySQL-Datenbanken anlegen, oder die Datenbanken automatisiert via Cronjob sichern lassen und per Mail oder FTP in einen anderen Brandabschnitt sichern.

1. Installation und Einrichtung von MySQL-Dumper

1.1 Download der aktuellen Version von mysqldumper.de
1.2 Entpacken des zip-Files auf lokalem PC
1.3 Anlegen eines Unterordners zB MSD auf dem Webspace
1.4 FTP-Upload vom lokalen PC zum Unterordner zum Webspace
1.5 Starten der Installation https://meinwebspace.de/MSD
1.6 Eingabe der Datenbankparameter
1.7 Verbinden mit der zu sichernden Datenbank
1.8 Speichern und Installation fortsetzen
1.9 Verzeichnisschutz erstellen und anmelden

2. Datensicherung manuell erstellen

2.1 Anmelden https://meinwebspace.de/MSD
2.2 Menü: Backup | Neues Backup starten
2.3 Backup Datensicherung  in anderen Brandabschnitt zB via FTP downladen

3. Datensicherung automatisieren

Viele WEB-Server haben ein cgi-bin Verzeichnis in dem Perl-Scripte ausgeführt werden können. In diesem Fall können Sie wie folgt vorgehen:

3.1 Rufen Sie im MySQLDumper die Seite Backup auf und klicken Sie auf „Backup Perl“.
3.2 Kopieren Sie den  den Pfad, der hinter Eintrag in crondump.pl für $absolute_path_of_configdir: steht.
3.3 Öffnen Sie die Datei „crondump.pl“ im Editor.
3.4 Tragen Sie den kopierten Pfad dort bei absolute_path_of_configdir ein (keine Leerzeichen).
3.5 Speicheren Sie crondump.pl .
3.6 Kopiere crondump.pl, sowie perltest.pl und simpletest.pl ins cgi-bin-Verzeichnis (Text- oder ASCII-Modus im FTP).
3.7 Geben Sie den Dateien die Rechte 755.
3.8 Wenn die Endung cgi gewünscht ist, änderen Sie bei allen 3 Dateien die Endung von pl -> cgi (umbenennen).
3.9 Rufen Sie die Konfiguration im MySQLDumper auf.
3.10 Wählen die Seite Cronscript.
3.11 Ändern Sie den Perl Ausführungspfad in /cgi-bin/ .
3.12 Änderen Sie die Dateiendung auf .cgi .
3.13 Speichere Sie die Konfiguration.
3.14 Fertig, die Skripte lassen sich nun von der Backupseite aufrufen.

4. Mailversand der Sicherung

Optional bietet sich der Mailversand des SQL-Dump an. Dabei können Sie wie folgt vorgehen:

4.1 Download: MIME/Lite.pm
4.2 FTP Upload des Ordners MIME samt Inhalt aus dem Unterverzeichnis lib nach cgi-bin (MIME/Lite.pm)
4.3 Konfiguration im MySQLDumper aufrufen und Email-Benachrichtigung konfigurieren
4.4 MySQLDumper aufrufen und Perl-Script testen
4.5 Fertig, die Skripte lassen sich nun von der Backupseite aufrufen und der Mailversand kann überprüft werden.
4.6 Das Backupfile liegt nun zusätzlich auch zB in httpdocs/MSD/work/backup

5. Cronjob auf Webspace einrichten

Die mitgeliefertes Perl-Skripts lassen sich in Verbindung mit einem eingerichteten Cronjob Backupvorgänge automatisieren.  Erkundigen Sie sich, ob und  wie auf Ihrem Webspace eine geplante Aufgabe (cronjob) eingerichtet wird. Nachstehende zeige ich dies exemplarisch für Parallels Plesk

5.1 Melden Sie sic an der GUI (Parallels Plesk Panel) Ihres Webspaces an
5.2 Navigieren Sie in der Serverwaltung zu Tools und Einstellungen und zu geplante Aufgaben
5.3 Wählen Sie einen berechtigten Systembenutzer (www-data) aus
5.4 Legen Sie unter Einstellungen fest ob und welche Mailadresse Sie Benachrichtigungen zur geplanten Aufgabe wünschen
5.5 Konfigurieren Sie die geplante Aufgabe
5.6 Den Befehl, der zum gewünschten Zeitpunktausgeführt werden soll, können Sie vom MySQLDumper Backup Perl dem Eintrag „Aufruf in der Shell oder für die Crontab“ übernehmen.

5.7 Das Backupfile liegt nach Ausführung des cronjob zB in httpdocs/MSD/work/backup
5.8 Überprüfen Sie das erwartete Ergebnis
5.9 Bis auf den Mailversand des Backupfiles sollte alles klappen.
Die nach Methode  Punkt 4.1 bis 4.3 vereinfachte Installation der Mail Library kann durch den cronjob allerdings nicht geladen werden.
Von hier aus (httpdocs/MSD/work/backup) kann die automatische Datenbank Sicherung via FTP manuell in einen anderen Brandabschnitt geladen werden.
Alternativ könnte die Einrichtung des  Mailversand angepasst oder der FTP-Versand automatisiert werden.

6. Alternative Einrichtung des  Mailversand

folgt …

7.  FTP-Versand automatisieren

7.1 Rufen Sie die Konfiguration im MySQLDumper auf.
7.2 Navigieren Sie zu FTP
7.3 Konfigurieren Sie die Einstellungen zu Ihrem FTP-Server
7.4 Testen Sie die Verbindung
7.5 Fertig, führen Sie ein manuelles Backup aus
7.6 Prüfen Sie das erwartete Ergebnis
7.7 Richten Sie ggf. einen cronjob ein (siehe Punkt 5)

8. Forum

Weitere Hilfe und Anregen finden Sie hier und hier.

PowerShell Script zur Ermittlung der Festplatten-Kapazitäten

Dieses PowerShell Script kann mehr oder weniger automatisch die Festplattengrößen und deren Belegung von mehreren Server ermitteln. Die Ergebnisse werden in eine Exceltabelle geschrieben. Dazu wird eine auf die jeweilige Umgebung leicht anpassbare Excel-Vorlage benötigt. Die Excelvorlage können Sie am Ende dieses Beitrags herunterladen. Zunächst definieren wir unser Umgebung:

$server1 = &quot;P804VOE010&quot;
# Array der zu untersuchenden server
$server = 0..14
$Filepath =&quot;D:\temp\Excel\&quot;
$ExcelFile =$Filepath + &quot;PlattenKapazitaet1.xlsx&quot;
$TableName1 = $server1

In Zeile 1 geben wir den Namen des Servers an auf dem das Script läuft oder getestet wird. Zeile 3 belegt die Array-Variable $server mit Dummy-Inhalten. In den Zeilen 4 und 5 benennen wir die zuvor angelegten und mit entsprechenden Rechten ausgestatteten Speicherorte unseres Scripts sowie der Excel-Definitions- und Ergebnisdatei.

Als erstes werden mit der nachstehenden Funktion die gewünschten Server aus der Excelvorlage ausgelesen.

function ServerListeAusTab {
# Beteilgte Server aus Tab Server auslesen
# Variable
$TableName=&quot;Server&quot;
[int]$Zeile = 1
[int]$Spalte = 1
#Instanzieren eines COM-Objektes für Excel
$Excel = New-Object -ComObject excel.application
#Excel-Sheet sichtbar machen, heißt, ob es im Vordergrund oder im Hintergrund geschehen soll.
$Excel.Visible = $false
# Arbeitsmappe laden
$Workbook = $Excel.Workbooks.Open($ExcelFile)
$Table =$workbook.Worksheets.Item($TableName)
# Datei auslesen und zu untersuchende Server ermitteln und in das Array $server[x] schreiben

do { $Data = $Table.Cells.Item($Zeile,$Spalte).Text
$server[$Zeile-1]=$Data
echo $server[$Zeile-1] $Zeile++ }
while($Table.Cells.Item ($Zeile,$Spalte).Text.Length -gt 0)

echo &quot;Speichern und Schliessen Serverliste&quot;
$Excel.DisplayAlerts=$False
$Workbook.SaveAs($ExcelFile)
#COM-Objektes beenden
$Excel.Quit()
#COM-Objektes aus dem Speicher entfernen
[System.Runtime.Interopservices.Marshal]::Release
ComObject($excel)
# Ende der Funktion Server-Liste aus Tab
} 

In der vorstehenden Funktion werden aus der Excel-Vorlage aus dem Tab Server und von dort aus der ersten Spalte die Namen der zu untersuchenden Server ausgelesen. Ab Zeile 9 werden die Variable für Namen des Tabs sowie die Startpunkte für Zeile und Spalte definiert. Ab Zeile 13 wird die Arbeitsmappe im Hintergrund geöffnet. Ab Zeile 20 werden in einer do/while-Schleife die Servernamen aus dem Tab Server ausgelesen und in das Array $server[0] bis [$Zeile-1] geschrieben. Und das solange die Länge des Servernamens  > 0 ist. Die echo-Ausgaben dienen lediglich dem besseren Verständnis und Kontrollzwecken. Ab Zeile 27 wird die Excel-Arbeitsmappe wieder geschlossen.

Damit alles wie geplant funktioniert, ist die Excel-Vorlage so zu bearbeiten, dass Sie für jeden Server ein eigener vorformatierter Tab mit dem gleichem Namen des jeweiligen Servers enthalten ist.
Nachstehende Bilder soll dies verdeutlichen.

Die folgende  Funktion ermittelt die Plattengrößen, sowie den freien Speicherbereich pro Festplatte und schreibt die Ergebnisse pro Server in den gleichnamigen Tab der Excelvorlage.


# Freie Zeile im Tab $server1 ermitteln
echo $ExcelFile
# Variablen
[int]$Zeile = 2
# ab 2, da in Zeile 1 die Titel stehen
[int]$Spalte = 1
$TableName1 = $server1

#Instanzieren eines COM-Objektes für Excel
$Excel = New-Object -ComObject excel.application
#Excel-Sheet sichtbar machen, heißt, ob es im Vordergrund oder im Hintergrund geschehen soll.
$Excel.Visible = $false
#Arbeitsmappe laden
$Workbook = $Excel.Workbooks.Open($ExcelFile)
$Table =$workbook.Worksheets.Item($TableName1)

# Datei auslesen und erste Freie Zelle in Spalte 1 ermitteln
do {
$Data = $Table.Cells.Item($Zeile,$Spalte).Text
$Zeile++
}
while($Table.Cells.Item($Zeile,$Spalte).Text.Length -gt 0)

echo (&amp;quot;Tabelle &amp;quot; + $TableName1)
echo (&amp;quot;Spalte &amp;quot;+ $Spalte)
echo (&amp;quot;Freie Zeile &amp;quot; + $Zeile)

$Inhalt1 = &amp;quot;Festplatten auf Server &amp;quot;
$Inhalt1 = $Inhalt1 + $server1
$Inhalt1 = $Inhalt1 + $date1 + &amp;quot;<code>r</code>n&amp;quot;
$i=0

$datum1 = (Get-Date).ToShortDateString()
$zeit1 = (Get-Date).ToShortTimeString()
$date1 = &amp;quot; Datum: &amp;quot; + $datum1 + &amp;quot; Zeit: &amp;quot; + $zeit1 + &amp;quot; Uhr&amp;quot;
# echo $date1

#$frei1 = Get-WmiObject -Class Win32_LogicalDisk -computer $server1 -Filter &amp;quot;DriveType=3&amp;quot; | Format-Table @{Label=&amp;quot;Drive&amp;quot;; Expression={$_.DeviceID}; width=8}, @{Label=&amp;quot;Size&amp;quot;; Expression={$_.Size / 1GB}; Format=&amp;quot;000.0&amp;quot;; width=8}, @{Label=&amp;quot;GB Free&amp;quot; ; Expression={$_.FreeSpace/1GB} ; Format=&amp;quot;000.0&amp;quot; ; width=8} , @{Label=&amp;quot;% Free&amp;quot; ; Expression={$_.FreeSpace * 100 /$_.Size}; Format=&amp;quot;00.0&amp;quot; ; width=10}
$frei1 = Get-WmiObject -Class Win32_LogicalDisk -computer $server1 -Filter &amp;quot;DriveType=3&amp;quot;

# Festplatten pro Server
ForEach($frei1 in $frei1) {
$Inhalt1 = $Inhalt1 + &amp;quot;Device &amp;quot; + $frei1.DeviceID + &amp;quot; - Size &amp;quot; + (&amp;quot;{0:N2}&amp;quot; -f ($frei1.Size / 1GB )) + &amp;quot; GB - Free &amp;quot; + (&amp;quot;{0:N2}&amp;quot; -f ($frei1.FreeSpace / 1GB)) + &amp;quot; GB&amp;quot; + &amp;quot;<code>r</code>n&amp;quot;

$Table.Cells.Item($Zeile,1) = $server1
$Table.Cells.Item($Zeile,2) = $datum1
$Table.Cells.Item($Zeile,3) = $Zeit1

$Table.Cells.Item($Zeile,4+$i) = $frei1.DeviceID
$Table.Cells.Item($Zeile,5+$i) = (&amp;quot;{0:N2}&amp;quot; -f ($frei1.Size / 1GB ))
$Table.Cells.Item($Zeile,6+$i) = (&amp;quot;{0:N2}&amp;quot; -f ($frei1.FreeSpace / 1GB))
$i=$i+4
}

echo &amp;quot;Speichern und Schliessen&amp;quot;
$Excel.DisplayAlerts=$False
$Workbook.SaveAs($ExcelFile)
#COM-Objektes beenden
$Excel.Quit()
#COM-Objektes aus dem Speicher entfernen
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

echo $Inhalt1
# Ende Funktion PlattenSize
} 

Ab der Zeile 37 werden die Variablen definiert und ab der Zeile 45 wird die Excel Arbeitsmappe im Hintergrund geöffnet.  Ab Zeile 53 wird die erste freie Zeile in der do/while-Schleife ermittelt. Die Zeilen 60 bis 67 dienen lediglich Verständnis und Kontrollzwecken bei der manuellen Ausführung des PowerShell Scripts. Ab der Zeile 69 wird das Datum zur Ausführungzeit ermittelt und formatiert der Variablen $datei1 zugewiesen. Zeile 75 bedient sich zum Ermitteln der interessierenden Festplatten dem Befehl Get-WmiObject. Dabei werden als Parameter der Servername und der Festplattentyp übergeben. Die Ergebnisse stehen dann im Array ab $frei1[0] zur Verfügung und werden in ForEach-Schleife Zeile 78 bis 89 pro Festplatte des Servers abgefragt.  Zeile 79 dient wieder zu Kontrollzwecken. Die Zeilen 81 bis 88 beschrieben den Tab des jeweiligen Servers $server1. Ab Zeile 91 wird die Excel Arbeitsmappe wieder geschlossen.

Das Main Programm ruft die Funktionen  ServerListeAusTab als erstes in Zeile 103 auf. Danach wird die Funktion PlattenSize in der do/while-Schleife solange  auf gerufen, bis alle erreichbaren Server (Zeile 108) abgearbeitet sind.

 echo &quot;main&quot;
ServerListeAusTab
$j=0
do {
$server1 = $server[$j]
echo $server1
$ServerErreichbar = Test-Connection -computername $server1 -quiet
if ($ServerErreichbar) {
	PlattenSize
	}
	else {
	#nix
}
echo (&quot;Zähler &quot; + $j)
echo (&quot;Länge Servername &quot; + $server[$j].Length)
$j++
}
while($server[$j].Length -gt 0)
echo &quot;ende main&quot;
# ******************** 

Über die Aufgabenplanung kann das Script regelmäßig aufgerufen werden und damit die Festplattenkapazitäten regelmäßig protokolliert werden.

Folgende anpassbare Excel-Vorlage wird benötigt und kann hier heruntergeladen werden. 

Das Password kann beim Autor hier angefordert werden.

Der zweite Download enthält die Excel-Vorlage und das PowerShell Script aus einem angepasstem Projekt in gezippter Form.

Das Password kann beim Autor hier angefordert werden.

Internen Relayserver in Exchange 2013 einrichten

Für Anwendungen, wie Alarmanlagen (mail2alarm) , Scannen an E-Mailempfänger (scan2mail) oder Mails aus Scripten, Kopierern, CRM-Tools, ERP-Tools, Serverraumüberwachung etc. ist in Firmen oft der Mailversand ohne Authentifizierung gewünscht. Neuere Applikationen und Geräte sollten diese Funktion allerdings beherrschen und die Möglichkeit zur Eingabe von Credentials bieten. Falls nicht, muss man/frau zum Beispiel auf dem Exchange ein sicheres anonymes SMTP-Relay einrichten.

Um einen Internen offenen SMTP Relayserver (open relay) in Exchange 2013 einzurichten, erstellt man/frau einen weiteren Empfangsconnector (Receive Connector) und konfiguriert in diesem ausschließlich die IP-Adressen oder Adressbereiche der Absender, die über den Exchange E-Mails versenden dürfen ohne sich authentifizieren zu müssen.

1.  Exchange 2013  Verwaltungskonsole öffnen und zu Nachrichtenfluss/Empfangsconnector navigieren sowie neuen Connector erstellen, Namen ( hier „alarm2mail“ ) zuweisen  und benutzerdefiniert konfigurieren.

2.  Auf der folgende Einstellungsseite alle IP-Adressen entfernen und IP-Adresse des Exchange Servers eintragen und mit ok bestätigen.

3. In den Bereichsdefinitionen nur die Adressen der Geräte/Server zulassen, die zu diesem Connector Mails senden sollen: alarm2mail

 4. In der Registerkarte Sicherheit Häkchen bei „Anonyme Benutzer“ setzen.

5. In der ExchangeVerwaltungsShell ist zum Schluss noch folgender Befehl nötig um ein internes offenes Relay benutzen zu können:

Get-ReceiveConnector "alarm2mail" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"

Get-ReceiveConnector „alarm2mail“ | Add-ADPermission -User „NT AUTHORITY\ANONYMOUS LOGON“ -ExtendedRights „Ms-Exch-SMTP-Accept-Any-Recipient“

Sicherheitshinweis: Nur die interne IP oder die internen IP-Bereiche freigeben, sonst besteht die Gefahr, dass binnen kurzer Zeit über den Exchange massiv Spams versendet werden und dieser auch in kürzester Zeit geblockt wird!

Wie man/frau solch ein Relay in der Praxis mit PowerShell einsetzen kann, zeige ich hier.

Mit PowerShell Mails über internes Relay versenden

Mailversand zum Beispiel bei erfolgreicher Windows Server Sicherung.

Der nachstehende Beispielcode setzt einen internen Relayserver zum Mailversand voraus, um die Authentifizierung gegenüber dem Mailserver zu sparen.

Wie man/frau einen internen Relayserver unter Exchange 2013 einrichtet zeige ich in einem anderen Blogbeitrag.

#Mailversand via PowerShell
$Server =&quot;S861NIE01HV&quot;
$Absender=&quot;S861NIE01HV-WSS@abc.de&quot;
$Betreff=&quot;Erfolgreich Windows Server Sicherung&quot;
$PSEmailserver = &quot;S861NIE023EX&quot;
$Empfaenger=&quot;backup@xyz.de&quot;

# ab hier nichts mehr ändern ***************************************************
$date1 = Get-Date -Format dd.MM.yyyy
$date1 = $date1 + &quot; &quot; + (Get-Date).ToShortTimeString() + &quot; Uhr - &quot;
$body = &quot;Datum &quot; + $date1 + &quot; Server &quot; + $Server + &quot;  -   <code>r</code>n&quot;
$body = $body + &quot;Windows Server Sicherung erfolgreich!&quot;

Send-MailMessage -to $Empfaenger -from $Absender -subject $Betreff -body $body -smtpserver $PSEmailServer -encoding ([System.Text.Encoding]::UTF8)
Write-Host $body
Write-Host $Betreff

Die Zeilen 1-6 dienen zur Definition der projektspezifischen Variablen und können an das  jeweilige Projekt angepasst werden.

Die Zeilen bis 9 bis 12 setzen den Inhalt der Mail (Body) zusammen.

In der Zeile 14 steht der PowerShell-Aufruf Send-MailMessage, der den Mailversand bewerkstelligt. Das Cmdlets Send-MailMessage der PowerShell ist ein spracheigenes Mittel zum Versenden von E-Mails. Weitere Details zum Syntax finden man hier.

Die Zeilen 15 und 16 dienen zur Kontrolle während der Inbetriebnahme und können später entfallen.

Ein weitere Beitrag zum Mailversand über einen externen Mailserver mit Authentifizierung aus einem PowerShell Script folgt in diesem Blog.

Anleitung Windows Server-Sicherung mit mehreren Festplatten

Das Feature Windows Server-Sicherung (ab Windows Server 2008) besteht aus einer GUI (Bild1) sowie dem Befehlszeilentools (wbadmin).  Beide zusammen bieten einen  Baustein für die Lösung der tägliche Sicherungs- und Wiederherstellungsaufgaben.

Die Software ermöglicht die vollständige Sicherung des Systems auf einen externen Datenträger (bspw. eine USB-Festplatte) oder einer Freigabe im Netzwerk. Bandlaufwerke werden nicht unterstützt. Für die Wiederherstellung einzelner Dateien ist zwar die Windows Server-Sicherung nur suboptimal jedoch im Disaster-Recovery-Zwecke kann es aber nahezu perfekt sein. Vertiefende Aspekte dazu finden Sie u.a. in Bents Blog.

GUI Windows Server-Sicherung
Bild1 GUI

Hinweise zur Erstellung und Bearbeitung des Windows Sicherungszeitplans über die GUI findet man bei Microsoft hier.

Ab Windows Server 2012 können Sie auch ein weiteres Back-up Ziel in der GUI hinzufügen . Wählen Sie dazu auf der Seite Zieldatenträger auswählen die Datenträger aus, die Sie zum Speichern der Sicherungen verwenden möchten, und klicken Sie dann auf Weiter.

GUI2
Bild2 GUI 2 Backup Datenträger hinzufügen

In der Standardeinstellung werden die infrage kommenden Datenträger in der Liste angezeigt. Bei diesen Datenträgern handelt es sich um externe Datenträger, auf die Sicherungen für Notfälle außerhalb des Brandabschnittes in dem die zu sichernde Maschine steht – aufbewahrt werden können. Wenn die Liste leer ist oder die gewünschten Datenträger nicht aufgeführt sind, klicken Sie auf Alle verfügbaren Datenträger anzeigen. Aktivieren Sie in Alle verfügbaren Datenträger anzeigen die Kontrollkästchen neben den Datenträgern, die Sie zum Speichern der Sicherungen verwenden möchten, und klicken Sie auf OK. Aktivieren Sie dann unter Zieldatenträger auswählen erneut die Kontrollkästchen für die Backup-Datenträger.

GUI3
Bild3 GUI3

Die betreffenden Datenträger werden im Windows-Explorer nicht mehr angezeigt, um zu verhindern, dass Daten versehentlich auf den Datenträgern gespeichert und später überschrieben werden und um versehentliche Datenverluste zu vermeiden.

GUI4
Bild4 GUI4

Bewährte Praxis ist die Bezeichnungen der GUI (Beschriftungsinformationen) zu notieren und an jedem externen BackUp-Datenträger physikalisch anzubringen.

Für ältere Systeme kann man sich wie folgt helfen: Wenn man mehrere (Wechsel-)Festplatten für die Datensicherung nutzen möchte, ist die Konfiguration jedoch unter Umständen nicht über die GUI möglich, sondern muss über die Konsole (cmd oder Power Shell) erfolgen.

Windows Server-Sicherung – Wechsel-Festplatten hinzufügen

a. Zuerst die Sicherung via GUI mit dem ersten Sicherungsziel erstellen
b. Jetzt das erste Sicherungsziel (erster Backup-Datenträger) entfernen und den zweiten Backup-Datenträger (zB USB-Festplatte) anschließen.
c. Konsole (PowerShell) als Administrator ausführen
d. Jetzt folgenden Befehl gemäß Bild2 eingeben:

> wbadmin get disks
Bild2 wbadmin
Bild3 wbadmin

Nach einer kurzen Zeit wird eine Liste mit allen Datenträgern angezeigt.

e. Merke oder notiere dir nun die Datenträger-ID der externen Festplattee

f. Nun wird die externe HDD als Sicherungsziel hinzugefügt:

>wbadmin enable backup -addtarget:{0005f107-0000-0000-0000-000000000000}

Die nun folgenden Abfragen mit Ja oder Nein beantworten.

Die Schritte b-f muss man nun für alle Backup-Datenträger durchführen.

Mein Fazit
Auf Grund der Möglichkeit der Sicherung eines Systems zur Laufzeit und der Integration im Betriebssystem (Sicherung und Wiederherstellung) begeistert das quasi kostenlose Produkt. Die sinnvolle Integration in ein mehrstufiges Sicherungskonzept ist leicht möglich.

Typischerweise sichert man Serversysteme immer mehrfach: mit Hilfe der Windows Server-Sicherung zu Recovery-Zwecken und zusätzlich auf Mail-,  Datenbank- und Datei-Ebene mit weiteren Technologien und Backup-Produkten. Man/frau sollte immer bedenken: Eine Wiederherstellung kann immer nur dann zügig funktionieren, wenn bereits im Vorfeld verschiedenste Aspekte bedacht und Rücksicherungen auch erprobt wurden.

Ende!