Tausch einer defekten Festplatte in einer Synology NAS

Wie so häufig in letzter Zeit, saß ich diese Woche im Homeoffice und arbeitete vor mich hin. Plötzlich ertönte ein lauter Signalton. Ich war zunächst erschrocken und stellte dann fest, das dieser von meinem NAS (Network Attached Storage) kam. Mein NAS ist eine Disk Station DS416play von der Firma Synology, die ich vor drei Jahren gekauft habe. Dies ist ein NAS mit 4 Festplatten, dass genug Performance für das Abspielen eines 4k Videos bietet. Es gibt von Synology aber auch noch diverse andere Disk Stations, die sich alle ähnlich bedienen lassen. Hier mal ein Link zu einigen Modellen bei Amazon.

Ein Blick auf den DSM (DiskStation Manager) meiner Disk Station zeigte mir, dass eine der vier Festplatten des Gerätes ausgefallen ist.

Zum Glück habe ich auf der Disk Station ein SHR eingerichtet. SHR ist die Abkürzung für „Synology Hybrid RAID“ und ist ein spezielles, von der Firma Synology entwickeltes RAID (redundant array of independent disks). SHR speichert die Daten redundant. Bei dem Ausfall einer Platte kann diese somit ohne Datenverlust ersetzt werden. Zudem bietet SHR im Gegensatz zu herkömmlichen RAID-Systemen die Möglichkeit Platten mit unterschiedlicher Größe zu verbauen.

Da meine Disk Station schon recht voll ist, habe ich mir nicht nur eine neue, sondern auch gleich eine größere Festplatte gekauft. Diese habe ich dann während dem laufenden Betrieb einfach in die Disk Station eingebaut und hinterher im Speicher-Manager des DSM hinzugefügt. Das ganze hat problemlos funktioniert und ich habe jetzt eine instand gesetzte und größere NAS. Mein Fazit: SHR von Synology funktioniert und ist eine super Sache

Die einzelnen Schritte für die Einbindung der Platte habe ich auch ein einem YouTube Video festgehalten, welches ich hier auch mal verlinke.

Meinen Testbericht zu der DS416play findet ihr in diesem Blog-Artikel: Test einer Synology DS416play mit DSM 6.1

Installation einer neueren PHP-Version auf einem älteren Ubuntu

Es kommt gerade bei den LTS-Versionen von Ubuntu immer häufiger vor, dass eine Software zwingend eine neuere PHP-Version voraussetzt, als auf einem Server mit einem Ubuntu Betriebssystem gerade installiert ist. Wie kann ein solche Herausforderung lösen?

Eine Möglichkeit diese Anforderung zu erfüllen ist ein Upgrade des Ubuntu auf ein neues Release. Oft möchte man dies aber nicht, da es andere Abhängigkeiten gibt, oder weil man nicht jeden Releasewechsel mitmachen möchte. Auch kann es vorkommen, dass selbst das neuste LTS Release ein zu alte Version von PHP beinhaltet. Somit stellt sich die Frage, nach einer Alternative zu einem Releasewechsel.

Dank dem offiziellen Repository für PHP von Ondřej Surý auf Launchpad gibt es eine weitere Lösung. Wenn man dieses Repository einbindet, wird es auch auf eine älteren Release von Ubuntu möglich neuere PHP Versionen zu installieren. Man kann z.B. auch auf einem Ubuntu 16.04 oder 18.04 problemlos ein ganz aktuelles PHP 7.4 installieren.

Um das Repository für PHP von Ondřej Surý bei einem Ubuntu 16.04 einzubinden, gibt man den folgenden Befehl in der Kommandozeile ein.

sudo add-apt-repository ppa:ondrej/php

Danach kann man ein PHP 7.4 mit den folgenden Zeilen installieren.

sudo apt-get update
sudo apt-get install php7.4

Im Anschluss sollte man noch einige Komponenten von PHP 7.4 installieren, welche meistens benötigt werden.

sudo apt-get install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache

Sobald das durch ist, kann man die Standard PHP-Version innerhalb des Betriebssystem mit den folgende Befehlen festlegen.

sudo update-alternatives --config php
sudo update-alternatives --config php-cgi

Und schon kann man auch Software installieren, die das aktuelle PHP 7.4 voraussetzt …

Ubiquiti Unifi: Releaseupgrade eines Ubuntu 16.04 auf 18.04 mit einer Mongodb

Mehrere Installationen der Software Unifi von Ubiquiti liefen bei mir noch auf einem Ubuntu 16.04 LTS. Da die kostenlosen Sicherheitsupdates für dieses Ubuntu nur noch ein halbes Jahr erscheinen, war es Zeit für ein Releaseupgrade auf Ubuntu 18.04. Gesagt, getan… Nach einem Backup eines der Controller führte ich kurzerhand ein Releaseupgrade durch.

Das eigentliche Releaseupgrade lief ohne Probleme durch. Überraschender Weise startete die Unifi Software aber nicht mehr. Ein Blick in das Logfile /var/log/unifi/server.log der Unifi Software offenbarte, dass die MongoDB nicht mehr erreichbar war.

[2020-08-12 17:40:59,094] <db-server> ERROR system - [exec] error, rc=100
[2020-08-12 17:40:59,095] <db-server> INFO db - DbServer stopped

Ein weiterer Blick in das Logfile /var/log/unifi/mongod.log der MongoDB zeigte, dass der Grund ein zu großer Versionssprung von der vorherigen Version 2.6 der MongoDB war.

2020-08-25T16:44:07.964-0400 F CONTROL  [initandlisten] ** IMPORTANT: UPGRADE PROBLEM: The data files need to be fully upgraded to version 3.4 before attempting an upgrade to 3.6; see http://dochub.mongodb.org/core/3.6-upgrade-fcv for more details.
2020-08-25T16:44:07.964-0400 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2020-08-25T16:44:07.964-0400 I NETWORK  [initandlisten] removing socket file: /usr/lib/unifi/run/mongodb-27117.sock
2020-08-25T16:44:07.964-0400 I REPL     [initandlisten] shutdown: removing all drop-pending collections...
2020-08-25T16:44:07.964-0400 I REPL     [initandlisten] shutdown: removing checkpointTimestamp collection...
2020-08-25T16:44:07.964-0400 I STORAGE  [initandlisten] shutdown: waiting for fs preallocator...
2020-08-25T16:44:07.964-0400 I STORAGE  [initandlisten] shutdown: final commit...
2020-08-25T16:44:07.964-0400 I JOURNAL  [initandlisten] journalCleanup...
2020-08-25T16:44:07.964-0400 I JOURNAL  [initandlisten] removeJournalFiles
2020-08-25T16:44:07.970-0400 I JOURNAL  [initandlisten] old journal file /usr/lib/unifi/data/db/journal/j._0 will be reused as /usr/lib/unifi/data/db/journal/prealloc.0
2020-08-25T16:44:07.976-0400 I JOURNAL  [initandlisten] Terminating durability thread ...
2020-08-25T16:44:08.067-0400 I JOURNAL  [journal writer] Journal writer thread stopped
2020-08-25T16:44:08.067-0400 I JOURNAL  [durability] Durability thread stopped
2020-08-25T16:44:08.067-0400 I STORAGE  [initandlisten] shutdown: closing all files...
2020-08-25T16:44:08.070-0400 I STORAGE  [initandlisten] closeAllFiles() finished
2020-08-25T16:44:08.070-0400 I STORAGE  [initandlisten] shutdown: removing fs lock...
2020-08-25T16:44:08.070-0400 I CONTROL  [initandlisten] now exiting
2020-08-25T16:44:08.070-0400 I CONTROL  [initandlisten] shutting down with code:62

Um das Releaseupgrade erfolgreich durchzuführen, muss man also erst die MongoDB auf Version 3.4 aktualisieren und danach das Releaseupgrade starten. Ein Upgrade der MongoDB macht man am besten mit den Softwarepaketen von MongoDB.org und das geht wie folgt:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
sudo echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo systemctl unmask mongodb
sudo systemctl restart mongodb

Jetzt sollte die MongoDB auf Version 3.4 aktualisiert sein und man kann gefahrlos das Releaseupgrade auf Ubuntu 18.04 starten. Ein Backup sollte man natürlich dennoch vorsichtshalber machen.

Nach dem Upgrade auf Ubuntu 18.04 ist noch zu empfehlen die MongoDB ein weiteres mal auf die Version 3.6 zu aktualisieren, da es für die Version 3.4 nur bis Januar 2020 Support und Sicherheitsupdates gab. Für die Version 3.6 gibt es selbiges bis April 2021 und diese wird seit der Unifi Version 5.13.10 unterstützt. Das Upgrade geschieht mit den folgenden Befehlen.

wget -qO - https://www.mongodb.org/static/pgp/server-3.6.asc | sudo apt-key add -
echo "deb https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
apt update
apt upgrade
systemctl restart mongodb

Dell OpenNetwork Switches mit OS10

Dell hat im Jahre 2011 die Firma Force10 Networks übernommen. Seit dieser Zeit sind im Portfolio von Dell auch Enterprise Switches zu finden. Seit 2016 laufen einige dieser Switches mit dem auf Debian Linux basierenden OS10.

Das OS10 verwendet einen Standard-Linux-Kernel und bietet Zugriff auf die Netzwerkhardware über das Switch Abstraction Interface (SAI) des Open Compute Project. Ein Projekt das neben Dell von Microsoft, Facebook, Broadcom, Intel und Mellanox unterstützt und verwendet wird. Damit müssen sich Entwickler nicht mehr um die tatsächlich verwendete Switching-Hardware kümmern und können auf offene Standards aufsetzen.

Das OS10 System ist inzwischen sehr ausgereift und bietet nahezu den gleichen Funktionsumfang wie das vorherige OS9. Grund genug für mich mir die OS10 Switches in den letzten Monaten näher anzusehen und bei ersten Projekten einzusetzen. Zumal diese Geräte preislich sehr attraktiv sind.

Meine Erfahrungen in der Praxis mit den Switches sind sehr positiv und ich kann sie durchweg empfehlen. Allerdings sind die Dokumentationen und Updates bei Dell etwas schwierig zu finden. Deshalb schreibe ich mir hier einige wichtige Informationen und Links mal zusammen, um diese immer griffbereit zu haben.

Downloads der Updates für OS10 und Firmware

Über die Dell Webseite sind die Updates und die Firmware nur schwer zu finden. Leichter findet man die Updates in dem sogenannten Dell Digital Locker. Wenn man sich dort mit seinem Benutzer anmeldet, finden man dort die Updates von OS10, sofern man Produkte mit einem laufenden Wartungsvertrag hat, auf denen OS10 läuft.

Eine aktuellere Firmware oder ein aktuelleres BIOS findet man wiederum am einfachsten in der Rubrik Treiber und Downloads auf der Dell Webseite über den Service-Tag oder die genaue Modellbezeichnung des Switches.

Zugriff auf die Konsole

Die Standardeinstellungen bei dem Zugriff auf die Konsole sind wie folgt:

  • 115200 baud rate
  • No parity
  • 8 data bits
  • 1 stop bit
  • No flow control

Sichern der Konfiguration des Switches

Die Konfiguration des Switches kann mit copy über diverse Protokolle gesichert werden. Ich bevorzuge scp. Wichtig ist, dass der Pfad absolut angegeben wird. Bei einem Mac mit der IP-Adresse 192.168.140.157, dem User kristian und dem Passwort test muss man dann den folgenden Befehl eingeben.

copy running-configuration scp://kristian:test@192.168.140.157/Users/kristian/switch-maschen-23

Update des OS10

Ein Update des OS10 kann mit dem Befehl „image download“ durchgeführt werden. Wenn das Update von dem zuvor beschriebenen MacBook aus geladen werden soll und das Image des OS10 den Namen „PKGS_OS10-Enterprise-10.5.0.1P1.433stretch-installer-x86_64.bin“ hat, benötigt man den folgenden Befehl.

image download scp://kristian:test@192.168.140.157/Users/kristian/Downloads/PKGS_OS10-Enterprise-10.5.0.1P1.433stretch-installer-x86_64.bin

Um den Downloadstatus anzuzeigen, folgenden Befehl ausführen.

show image status

Um die heruntergeladene Images anzuzeigen, folgenden Befehl ausführen.

dir image

Zur Installation des heruntergeladenen Images, den folgenden Befehl benutzen.

image install image://PKGS_OS10-Enterprise-10.5.0.1P1.433stretch-installer-x86_64.bin

Der Fortschritt der Installation kann wieder mit folgendem Befehl „show image status“ kontrolliert werden. Nach erfolgreicher Installation muss die Boot Partition geändert werden.

boot system standby

Der Status des Bootimages kann mit folgendem Befehl abgefragt werden.

show boot detail

Sobald das Update erfolgreich ausgeführt wurde, muss der Switch zum Schluss noch einem neu gestartet werden. Dies geschieht mit dem Befehl „reload“. Nach dem Neustart sollte dann die neue OS10 Version gebootet sein. Dies kann mit dem Befehl „show version“ überprüft werden.

Einrichtung einer vlt Domain

Um eine vlt Domain 2 auf einem Switch mit der IP-Adresse „192.168.140.83 einzurichten, der über das Interface „ethernet1/1/1“ und „ethernet1/1/2 mit einem Switch mit der IP-Adresse „192.168.140.84“ verbunden ist, benötigt man die folgenden Konfigurationszeilen.

vlt-domain 2
 backup destination 192.168.140.84
 discovery-interface ethernet1/1/1-1/1/2

Um ein vlt mit dem vlt-port-channel 3 für einen Trunk einzurichten gibt man den folgenden Befehle ein.

interface port-channel3
 description "Name des vlt"
 no shutdown
 switchport mode trunk
 switchport access vlan 3002
 mtu 9216
 vlt-port-channel 3

Um z.B. das Interface „ethernet1/1/3“ diesem vlt hinzuzufügen benötigt man die folgenden Befehle.

interface ethernet1/1/3
 no shutdown
 channel-group 3 mode active
 no switchport
 flowcontrol receive off

Auf dem zweiten Switch muss im Anschluss natürlich die gleiche Konfiguration gemacht werden, wobei die IP-Adresse in der vlt Domain entsprechend angepasst werden muss.

Um im Anschluss die eingerichtete vlt 2 Domain anzuzeigen und den Erfolg zu kontrollieren gibt man den folgenden Befehl ein.

show vlt 2 vlt-port-detail

Mit macOS 10.15 Geräte von Cisco konfigurieren oder aktualisieren

Um von einem Rechner mit macOS 10.15 über die Konsole Cisco Geräte (wie ASA Firewall, Router, Switch, usw.) zu konfigurieren oder die Firmware zu aktualisieren sind ein paar Kniffe notwendig. Ich habe mir hier mal die beiden wichtigsten aufgeschrieben. Vielleicht nützen diese ja noch mal jemand anderem.

Kopieren von Firmware oder Software von einem Rechner mit macOS 10.15 auf ein Cisco Gerät

Auf die meisten Geräten von Cisco wird eine neue Firmware mit dem Befehl „copy“ übertragen. Um eine Datei aus dem Downloadordner des Users kristian von einem Mac Rechner mit der IP-Adresse 172.30.25.201 zu kopieren, würde man den folgen copy Befehl eingeben:

copy scp://kristian@172.30.25.201:Downloads/asdm-openjre-7131.bin disk0:

Damit das Gerät von Cisco die Datei von dem Rechner mit macOS runterladen kann, muss die „Dateifreigabe“ und die „Entfernte Anmeldung“ aktiviert sein. Diese findet man in den Systemeinstellungen und Freigaben.

Konfiguration des Cisco Gerätes über die Konsole

Man kann die meisten Geräte von Cisco über die Konsole konfigurieren. Diese funktioniert über ein mitgeliefertes USB-Kabel auch dann, wenn die Netzwerkkonfiguration nicht funktioniert oder nicht vorhanden ist.

Da ein man auf einem aktuellen Mac keinen USB-Anschluss mehr hat, benötigt man einen Adapter. Wenn man das USB-Kabel an diesem Adapter anschließt, taucht das Cisco Gerät als USB-Gerät im Ordner /dev auf. Mit dem folgenden Befehl kann man den Namen der USB-Gerätes identifizieren:

ls /dev/*usb*

Bei mir heißt das USB-Gerät z.B. “ /dev/cu.usbmodem142101″. Um mit dem Terminal auf diese Konsole zu kommen, muss ich dann nur den folgenden Befehl eingeben:

screen /dev/cu.usbmodem142101 -f 9600,cs8,-parenb,-cstopb,-hupcl

Installation von Ansible auf einem Windows System

Was ist Ansible? Dies war die Frage, die mir meine Windows-Administratoren stellten, als ich mit der Idee einer Automatisierung von Windows mit Ansible um die Ecke kam. Eine durchaus berechtigte Frage, zumal die Automatisierung und Provisionierung von Windows durch Scripts aktuell noch nicht sehr verbreitet ist. Vielmehr gibt es hier eher grafisch gesteuerte Software wie den System Center Configuration Manager oder Windows Server Update Services.

Ansible ist ein Open-Source Automatisierungs-Werkzeug zur Orchestrierung und allgemeinen Konfiguration und Administration von Computern. Mit der Hilfe von Ansible kann man wiederkehrende Aufgaben bequem simultan auf mehreren System ausführen, ohne dass auf dem jeweiligen System eine zusätzliche Software verwendet wird. Dazu logt sich Ansible via SSH oder RPC auf dem zu administrierenden System ein und führt  vorher definierte Aufgaben aus. Diese Aufgaben werden in sog. Playbooks gespeichert. Playbooks werden im YAML-Format erstellt, erkennbar durch die Endung .yaml. Weitere Infos zur Syntax und Notation von YAML sind in der Ansible-Dokumentation zu finden.

Verwendung von Ansible unter Windows

Ansible basiert auf Python. Dabei erfolgt der eigentliche Zugriff auf das Windows Zielsystem dann ausschließlich über RPC. Ein Zugriff auf UNIX oder Linux erfolgt ausschließlich über SSH. Somit muss auf einem Windows, Linux oder Unix Zielsystem keinerlei zusätzliche Software installiert werden.

Für das Ausführen der Ansible-Skripte auf dem Quellsystem wird logischer Weise Python benötigt. Unter Linux wird ein Python eigentlich immer mitgeliefert. Deshalb kann dort Ansible einfach installiert und gestartet werden. Bei einem Windows System muss zunächst Python installiert werden, bevor man Ansible installiert. Ansonsten läßt sich Ansible nicht starten.

Da ich meinen Windows-Administratoren nicht zumuten wollte mit Linux zu arbeiten, habe ich mich dafür entschieden eine Administrations-Maschine mit Windows aufzusetzen, auf der man die Ansible Skripte direkt starten kann. Hier folgt die Anleitung für die Installation.

Anleitung für die Installation von Ansible unter Windows

Für die Installation der benötigten Software öffnet man unter Windows als Administrator die PowerShell. Hierfür drückt man einfach die Windowstaste, gibt „PowerShell“ ein und wählt nach einem Rechtsklick auf „Windows PowerShell“ den Menüpunkt „Als Adminsitrator ausführen“ aus. Anschließend gibt man in dem Fester mit der PowerShell den folgenden Befehl ein:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Nach der Eingabe möchte der Rechner neu starten. Nach einem Neustart kann man sich bei Windows 10 im Store ein Linux Distribution aussuchen und diese installieren. Dazu öffnen man den Windows Store (dazu wieder einfach die Windows Taste drücken und „Store“ eingeben). Anschließend kann man im Windows Store entweder nach Linux, oder direkt nach der gewünschten Distro suchen und diese installieren.

Bei Windows 2019 Server gibt es leider keinen Store. Hier muss die Linux Distribution von Hand bei Microsoft runtergeladen und installiert werden. Eine Anleitung für die Installationen und eine Liste der Linux Distributionen findet man bei Microsoft auf der Seite https://docs.microsoft.com/en-us/windows/wsl/install-manual. Um die Debian Distribution per PowerShell runterladen und entpacken zu lassen, kann man z.B. die folgenden drei Befehl in einer als „Administrator“ gestarteten PowerShell eingeben:

Invoke-WebRequest -Uri https://aka.ms/wsl-debian-gnulinux -OutFile C:/Debian.appx -UseBasicParsing
Rename-Item C:/Debian.appx C:/Debian.zip
Expand-Archive C:/Debian.zip C:/Debian

Wenn die Befehle ausgeführt wurden, befinden sich die Installationsdaten von Debian Linux in dem Verzeichnis c:\Debian. Die eigentliche Installation startet man dann durch das ausführen der Datei Debian.exe in diesem Verzeichnis als Administrator. Es öffnet sich ein Fenster, in welchem die Installation durchläuft. Nach Abschluss der Installation wird man aufgefordert einen Benutzernamen für den Standardbenutzer und ein dazugehöriges Passwort einzugeben. Danach ist man in einer BASH Shell und kann das Debian Linux Benutzen.

Damit Linux von überall aufrufbar ist, sollte die Umgebungsvariable PATH noch entsprechend erweitert werden. Dies kann man mit den folgenden beiden PowerShell Befehlen machen:

$userenv = [System.Environment]::GetEnvironmentVariable("Path", "User")
[System.Environment]::SetEnvironmentVariable("PATH", $userenv + "C:\Debian;", "User")

Danach kann man sich in einer Kommandozeile die als Administrator gestaltet wurde jeder Zeit durch die Eingabe von „debian.exe“ eine Linux Bash starten.

Als erstes sollte man das installierte Debian auf den aktuellen Stand bringen. Dazu gibt man den Befehl „sudo -s“ ein und man wird um eine erneute eingäbe des Benutzerpasswortes gebeten. Nach der Eingabe erhält man eine root-shell. Wenn man in diese den folgenden eingibt, wird das Debian aktualisiert:

sudo apt update && sudo apt upgrade

Danach wird Python benötigt, da es die Grundlage von Ansible ist. Um Python zu installieren muss der folgende Befehle in eine root-Shell des Linux eigegeben werden:

apt-get -y install python-pip python-dev libffi-dev libssl-dev

Zum Schluss kommt dann die Installation von Ansible. Um immer die neuste Version von Ansible zu installieren, empfehle ich diese über das Python Paketverwaltungsprogramm (kurz Pip) zu machen. Dies geschieht durch die eingäbe des folgenden Befehlt in einer root-shell den Linux:

pip install ansible

Nachdem die Installation durchgelaufen ist, sollte Ansible funktionieren. Für alle weiteren Informationen empfiehlt sich ein Blick in die Ansible Dokumentation.

Let’s Encrypt Zertifikate für Postfix und Dovecot einrichten

In letzter Zeit wird die Verwendung der kostenlosen Zertifikate von Let’s Encrypt immer beliebter. Deshalb ist es naheliegend, diese auch für Verschlüsselung der Mails bei Postfix zu verwenden. Im folgenden sind die wenigen Schritte für die Einrichtung erklärt, die bei einem Ubuntu 18.04 notwendig sind.

Installation

Let’s Encrypt können mit dem certbot erzeugt werden. Die Installation des Programms bei Ubuntu 18.04 erfolgt mit den folgendenBefehlen.

sudo apt update
sudo apt install python-certbot-apache

Erzeugung eines Zertifikates

Das Zertifikat wir mit dem Programm certbot erzeugt. Da die Verifizierung des Host über den Webauftritt erfolgt. Ist es zwingend erforderlich, dass ein Apache auf dem Server installiert ist. Das Programm certbot macht dann die notwendigen Anpassungen an der Konfiguration des Apache Webservers. Mit der Option -d werden die Hostnamen angegeben, für welche das Zertifikat ausgestellt werden soll. Dabei ist es möglich das Zertifikat gleich für mehrere Hostnamen auszustellen. Nach dem ausführen des Programms certbot werden zudem einige Fragen gestellt, deren Beantwortung für das anpassen der Konfiguration des Apache Webservers notwendigen sind. Mit dem folgenden Befehl testet man z.B. das Ausstellen eines Zertifikates für die Hostnamen www.purrucker.de, purrucker.de imap.purrucker.de und smtp.purrucker.de. 

sudo certbot --apache --staging -d www.purrucker.de -d purrucker.de -d imap.purrucker.de -d smtp.purrucker.de

Wenn alles funktioniert, kann man das Kommando ohne die Option „–staging“ ausführen. Dann fordert certbot beim Let’s-Encrypt-Projekt die generierten Zertifikate an, lädt diese herunter, installiert alle erforderlichen Dateien in das Verzeichnis /etc/letsencrypt, verändert die Apache-Konfiguration und startet Apache schließlich neu.

Einbindung des Zertifikates

Die Einbindung des Zertifikates in den Apache Webserver hat das Programm certbot erledigt. Bei Postfix und Dovecot muss die Einbindung jedoch von Hand erfolgen. Bei Postfix fügt man dazu die beiden folgenden Zeilen in die Datei /etc/postfix/main.cf ein.

smtpd_tls_cert_file= /etc/letsencrypt/live/www.purrucker.de/fullchain.pem
smtpd_tls_key_file= /etc/letsencrypt/live/www.purrucker.de/privkey.pem

Bei Dovecot benötigt man die drei folgenden Zeilen in der Datei /etc/dovecot/conf.d/10-ssl.conf.

ssl = yes
ssl_cert = </etc/letsencrypt/live/www.purrucker.de/fullchain.pem
ssl_key  = </etc/letsencrypt/live/www.purrucker.de/privkey.pem

Danach müssen beide Programme einmal neu gestartet werden.

service postfix restart
service dovecot restart

Automatische Erneuerung des Zertifikates

Das Let’s Encrypt Zertifikat ist grundsätzlich immer nur drei Monate gültig. Deshalb ist es notwendig, dieses regelmäßig zu erneuern. Um dies nicht immer von Hand machen zu müssen, sollte man sich dazu einen wöchentlichen Cronjob anlegen. Dazu einfach die Datei /etc/cron.weekly/letsencrypt mit folgendem Inhalt anlegen und ausführbar machen.

#!/bin/sh
# Datei /etc/cron.weekly/letsencrypt
certbot renew
result=$(find /etc/letsencrypt/live/ -type l -mtime -1 )
if [ -n "$result" ]; then
  systemctl restart postfix
  systemctl restart dovecot
fi

Debug einer IPSec Anbindung auf einer Cisco ASA

Die ASA (Adaptive Security Appliance) Firewalls von Cisco zeigen in der Standardeinstellung nur wenige Meldungen zu einem Aufbau eines IPSec VPN-Tunnels an. Wenn eine solche Verbindung nach der Einrichtung nicht funktioniert, kann es jedoch sinnvoll sein den Loglevel zu erhöhen und alle Meldungen anzuzeigen. Damit im Anschluss nicht zu viele Meldungen angezeigt werden, sollten die Meldungen vorher aber auf einen bestimmten IPSec VPN-Tunnel beschränkt werden. 

Beispiel

Gehen wir zum Beispiel mal davon aus, dass die Phase 1 bei einer IPSec Verbindung nicht aufgebaut wird und bei dieser das Protokoll IKEv2 verwendet wird.

Mit den folgenden drei Befehlen bringt man die Konsole der Cisco ASA dazu nur noch die Meldungen für den VPN-Tunnel zu der angegebenen IP-Adresse anzuzeigen und schaltet das höchste Loglevel für IKEv2 ein. Danach werden alle Meldungen zu dem Aufbau der Phase 1 des IPSec Tunnels zu der angegebenen IP-Adresse auf der Konsole angezeigt.

debug crypto condition peer <ip adresse>
debug crypto ikev2 protocol 255
debug crypto ikev2 platform 255

Ausstellen von Zertifikaten mit einer Gültigkeit von mehr als zwei Jahren bei Microsofts interner Zertifizierungsstelle

Warum können länger gültige Zertifikate sinnvoll sein?

Viele aktuelle Serversysteme von Microsoft und Drittanbietern benötigen Zertifikate. Dadurch wird der Einsatz einer internen Zertifizierungsstelle in einem Active Directory nahezu unerlässlich. Microsoft hat für diesen Zweck die „Active Directory-Zertifikatsdienste“ entwickelt, die man bei den Windows-Servern als Rolle hinzufügen kann.

Bei den Active Directory-Zertifikatsdiensten ist die maximale Gültigkeit eines Zertifikates auf 2 Jahre beschränkt. Dies kann sehr arbeitsaufwändig werden, wenn man viele Server betreibt, welche die Zertifikate manuell eingespielt bekommen. Deshalb kann es sinnvoll sein, die maximale Gültigkeit zu erhöhen.

Wodurch wird die maximale Gültigkeit eines Zertifikates beschränk?

Die Beschränkung der maximalen Gültigkeit eines Zertifikates bei den Active Directory-Zertifikatsdiensten wird durch den Parameter mit dem Namen ValidityPeriodunits in der Registry auf dem Server mit der Zertifizierungsstelle gesteuert. Dieser Parameter enthält die Anzahl von Jahren, die ein ausgestelltes Zertifikat maximal gültig sein darf und hat bei einer normalen Installation den Wert 2.

Wie kann ich die maximale Anzahl von Jahren erhöhen, die ein Zertifikat gültig sein darf?

Der Wert der Parameters ValidityPeriodunits kann mit der Hilfe des Kommandozeilentools certutil angezeigt oder geändert werden.

Um sich den aktuellen Wert des Parameters ValidityPeriodunits anzeigen zu lassen, gibt man in einer Kommandozeile mit Administrationsrechten den folgenden Befehl ein.

certutil -getreg ca\ValidityPeriodunits

Wenn man den Wert des Parameters ValidityPeriodunits auf zehn Jahre erhöhen möchte, gibt man den folgenden Befehl ein.

certutil -setreg ca\validityperiodunits 10

Wenn der Wert geändert wurde, müssen die Active Directory-Zertifikatsdienste neu gestartet werden, um die Änderungen zu aktivieren. Dies kann man durch die eingäbe der beiden folgenden Befehle in einer Kommandozeile mit Administrationsrechten erreichen.

net stop certsvc
net start certsvc

IPv6 auf einem Ubuntu 18.04 Server deaktivieren

Selbst in der heutigen Zeit bereiten Server die sowohl eine IPv4 als auch eine IPv6 Adresse haben manchmal Probleme. Deshalb kann es nützlich sein, wenn man die IPv6 Adressen eines Server komplett deaktiviert. Bei Ubuntu 18.04 LTS geht das wie folgt.

Man legt die Datei /etc/sysctl.d/01-disable-ipv6.conf mit dem folgenden Inhalt an und startet den Server hinterher neu.

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1