Docker Container mit Synology DSM

Docker mit Synology DSM nutzen

Synology ab DSM 6.0 kommt mit der Docker Engine. Zu finden ist die Docker App im Paket-Zentrum mit Eingabe docker im Suchfeld.

Docker ist eine schlanke Virtualisierungsanwendung, Tausende von Container erstellt von Entwickler aus der ganzen Welt, können ausgeführt werden und sind auf dem bekannten Image-Repository, Docker Hub publiziert. Container Images können aus der Synology integrierten Docker App geladen und ausgeführt werden.

  Wenn die Docker App im Paketzentrum nicht erscheint, wird die Synology DSM Version höchstwahrscheinlich nicht unterstützt.

  Aufgrund der Hardware-Anforderungen wird Docker nur für Modelle mit Virtualisierungstechnik (VT-x) angeboten. Die in dieser Anleitung verwendeten Modelle sind RS818RP+, RS4018xs+ und DS218+ auf diesen Docker ausführbar ist.

Wie nutzt man Docker

Mit dem öffnen des Hauptmenu Symbol aus DSM findet sich das Icon für die Docker Engine die jetzt gestartet werden kann.

Docker öffnet den Überblick, hier sind die laufenden Container aufgeführt, die Anwendungen einschließlich zugewiesenem Speicher und CPU-Ressourcen, es ist jetzt noch kein Container gestartet.

Abbildung: Synology DSM Docker Ueberblick

Zusätzlich wird hier im folgenden die Docker Befehlszeile erläutert, diese alternativ für die Docker Console.

CLI   Docker Command Running Container auflisten:

docker ps

Im Abschnitt Registrierung kann nach neuen Images gesucht werden (wie auf der offiziellen Website). Es können auch neue Repositories (zusätzlich zu den offiziellen) unter Einstellungen hinzugefügt werden.

Abbildung: Synology DSM Docker Registrierung

CLI   Das original Docker Command ist:

docker search ubuntu-sshd

Nachdem ein passendes Image (Abbild) gefunden wurde, in diesem Fall ein kleines Ubuntu 18.04 Dockerized SSH service Image, wird es mit einem Rechtsklick auf das Synology NAS herunterladen, am besten immer latest wählen. Alle Images sind schreibgeschützt und können mehrfach für weitere Container verwenden werden.

Das herunterladen kann einige Minuten in Anspruch nehmen, je nach grösse und download Bandbreite. Der Status beim herunterladen wird mit einem animierten Symbol dargestellt.

CLI   Das Docker Command ist:

docker pull rastasheep/ubuntu-sshd

Unter Abbild befinden sich die heruntergeladenen Images die auf dem Synology NAS verfügbar sind. Es können neue Container mit dem Assistenten Angedockt, gestartet werden. Hinweis: über das Link Symbol öffnet sich die Docker Hub Seite zum Container mit nützlichen Informationen.

Abbildung: Synology DSM Docker Abbild

CLI   Das Docker Command ist:

docker images -a

Nun auf Starten gehen um den Assistenten zu öffnen.

Abbildung: Synology DSM Docker Container Starten

Auf Weiter um den Assistenten abzuschließen, und mit übernehmen den Container starten.

Abbildung: Synology DSM Docker erstellen

CLI   Das Docker Command ist:

docker run -d -P --name ubuntu rastasheep/ubuntu-sshd

Der laufende Container ist jetzt im Abschnitt Container zu finden.

CLI   Die vollständige Docker Ausgabe wie folgt:

$ docker pull rastasheep/ubuntu-sshd
Using default tag: latest
latest: Pulling from rastasheep/ubuntu-sshd
a48c500ed24e: Pull complete
Digest: sha256:1a4010f95f6b3292f95fb26e442f85885d523f9a0bb82027b718df62fdd0d9e9
Status: Downloaded newer image for rastasheep/ubuntu-sshd:latest
$ docker run -d -P --name ubuntu rastasheep/ubuntu-sshd
2f96bba413755a843c2758f818dbec56f0e163a232e1cb7c7c971034c62a8c98

Zurück in der Docker Übersicht sehen wir nun die Resourcen der gestarteten Container.

Abbildung: Synology DSM Docker Überblick

CLI   Das Docker Command ist:

docker ps -a

Nun versuchen wir ein SSH-Terminal zum Container herzustellen. Dazu sehen wir im Abschnitt Container mit klick auf Details, auf welchem Port der SSH-Dienst horcht.

Abbildung: Synology DSM Docker Container

Im Überblick unter Port-Einstellungen finden wir bei Lokaler Port den gesuchten Wert, in diesem Fall ist es der Port 32789, die Port Adresse wird automatisch zugewiesen.

CLI   Ermitteln der Port Adresse

$ docker port ubuntu 22
0.0.0.0:32789

Jetzt können wir PuTTY oder KiTTY öffnen und Verbinden uns mit der IP des Synology NAS und dem Port 32789 zum Container, für CLI   Das Command wie folgt:

$ ssh -p 32789 root@10.127.52.77
The authenticity of host '[10.127.52.77]:32789 ([10.127.52.77]:32789)' can't be established.
ECDSA key fingerprint is SHA256:YtTfuoRRR4qStSVA5UuxnGamA/dvf+djbIT2Y48IYD0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[10.127.52.77]:32789' (ECDSA) to the list of known hosts.
root@10.127.52.77's password:
Last login: Thu Sep 19 15:00:25 2018 from 172.18.0.1
root@rastasheep-ubuntu-sshd1:~#
Abbildung: KiTTY Session

Anmelden mit root und dem Passwort root.

Die Docker Engine kann auch aus der Console genutzt werden, sofern das SSH Terminal unter DSM Systemsteuerung – SSH-Dienst aktiviert wurde.

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.

Die in diesem Artikel gezeigte Anwendung von Docker soll als einfaches Beispiel zeigen wie Docker auf einem Synology NAS anwendbar ist, natürlich gibt es nützlichere Container Anwendungen, wie Websever für das Entwickeln von Webanwendungen bis hin zu kompletten Entwicklungsumgebungen, es existieren bereits unzählige Docker Images auf Docker Hub https://hub.docker.com, und weiteren Docker Registraren. Dabei fragt mach sich schon, ob der Aufwand zur Installation seiner Entwicklerumgebung wie Xamp oder LAMP überhaupt noch zweckmäßig ist. An dieser stelle sein noch erwähnt, das alle Daten die im Container gespeichert werden, auf einem persistenten Volumen gespeichert werden müssen, denn mit beenden des Containers gehen sämtliche arbeiten verloren.

Auch gibt es weitere Artikel zur Anwendung von Docker hier in diesem Blog, am besten einfach docker ins Suchfeld oben eingeben.

Windows Blickpunkt Reparieren

Windows Blickpunkt zeigt keine neuen Bilder

Windows Blickpunkt ist eine in Windows 10 enthaltene Funktion, die Bing das automatische Herunterladen von Hintergrundbilder verwendet, damit hat man gelegentlich bei der Anmeldung ein neues Hintergrundbild beim Sperrbildschirm.

Der einzige Nachteil von Microsoft Windows Blickpunkt besteht darin, dass es manchmal nicht mehr funktioniert, oder man konnte feststellen, dass es auf demselben Bild stehen bleibt. Leider enthält Windows 10 keine Option zum Zurücksetzen dieser Funktion. Es ist jedoch möglich, die Windows Blickpunkt-Einstellungen mit dieser einfachen Problemumgehung zu beheben.

Dazu die Einstellungen öffnen, klicke auf -> Personalisierung und -> Sperrbildschirm, hier Hintergrund auf Bild umstellen.

Dann mit Rechtsklick auf Desktop  -> Neu -> Textdokument und den folgenden Inhalt einfügen:

@ECHO OFF
IF EXIST "%LOCALAPPDATA%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\Settings\settings.dat" (
    DEL /F /S /Q /A "%LOCALAPPDATA%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets"
    DEL /F /S /Q /A "%LOCALAPPDATA%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\Settings"
 ) ELSE (
    Echo The file settings.dat was not found.
)
PowerShell -ExecutionPolicy Unrestricted -Command "& {$manifest = (Get-AppxPackage *ContentDeliveryManager*).InstallLocation + '\AppxManifest.xml' ; Add-AppxPackage -DisableDevelopmentMode -Register $manifest}"

Auf Datei -> Speichern unter, und als Dateiname Blickpunkt.bat Speichern.

Mit der Maus über der Datei Blickpunkt.bat ein Rechtsklick, es öffnet sich das Kontextmenü, hier als Administrator ausführen wählen.

Nun den Computer neu Starten. Danach wieder die Einstellungen öffnen und unter Personalisierung -> Sperrbildschirm auf Windows-Blickpunkt umstellen.

Sobald diese Schritte ausgeführt sind, kann man den Computer über die Tasten Win+L sperren, jetzt sollte der Sperrbildschirm neue Bing-Bilder anzeigen.

  Damit Windows-Blickpunkt funktioniert, muss die Einstellung – Datenschutz – Hintergrund-Apps aktiviert sein.

Einstellung: Ausführung von Apps im Hintergrund zulassen.
Windows 10 Blickpunkt Reparieren

Bing Hintergrundbilder behalten

Möchte man weiterhin die von Bing heruntergeladenen Hintergrundbilder behalten und als Desktop Hintergrund verwenden, kann man die Bilder in einen Ordner kopieren, dazu öffnet man Ausführen mit drücken der Taste Win+R und fügt folgende Zeile ein, mit klick auf OK ist man im Ordner Assets:

%USERPROFILE%\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets

Den Inhalt in ein zuvor erstellten Ordner kopieren, beispielsweise unter:

%USERPROFILE%\Pictures\Hintergrundbilder

Die von Bing heruntergeladenen Dateien haben kryptische Namen und bestehen aus Zahlen und Buchstaben (Hexadezimal), diese Dateien werden umbenannt, in dem wir eine Eingabeaufforderung öffnen durch drücken der Taste Win+R und cmd eingeben und mit OK bestätigen, dann im Ordner mit den kopierten Dateien folgenden Befehl ausführen:

ren *.* *.jpg

Jetzt haben die Dateien .jpg als Endung, und können somit in der Windows-Explorer vorschau betrachtet werden, unter Einstellungen -> Personalisierung -> Hintergrund lassen sich nun diese Bilder aus dem Ordner Hintergrundbilder wählen, oder als Diashow automatisch anzeigen lassen.

Eine weitere Anleitung gibt es hier unter dem Titel „Windows 10 Hintegrundbilder“, mit einem Script zur extraktion der Bing Bilder.

Nagios Monitoring mit Raspberry Pi

Nagios Installation auf Raspberry Pi

Nagios Open Source Monitoring für die Überwachung komplexer IT-Infrastrukturen.

Nagios besteht aus einer Sammlung von Modulen zur Überwachung von Netzwerken, von Hosts und deren spezifischen Diensten, sowie ein Webinterface um Abfragen der gesammelten Daten darzustellen. Nagios steht unter der GNU GPL, ist also freie Software und läuft unter zahlreicher Unixoiden Betriebssysteme. Nagios ist wegen seiner großen Verbreitung auch im professionellen Einsatz ein Quasi-Standard geworden.

Nagios-Überwachung mit Raspberry

Raspberry Pi mit seinem lüfterlosen Design, den minimalen Ausmaßen und seinem geringen Stromverbrauch eignet sich der Raspberry Pi als Einplatinen-Computer hervorragend für einen Nagios-Monitoring-Server, der sich sogar selbst überwachen kann.

INSTALLATION

Die Installation von Nagios Core 4 auf dem Raspberry eigenen OS Raspbian, welches auf Debian basiert, ist unspektakulär. Hier in dieser Anleitung wird die Vorgehensweise für ein Raspberry Pi 3 Model B aufgezeigt, auf einer 32 GB microSD Card Typ Class 10, eine 16 GB microSD Card würde ebenfalls genügen.

SanDisk Ultra SDHC I 16 GB bis zu 80 /Sek, Class 10 Speicherkarte.

Zur Bereitstellung von Raspbian auf einer microSD Card wird hier nicht näher eingegangen. Nach boot eines Raspbian Desktop Image, wird das LXTerminal auf dem Raspbian X-Desktop geöffnet und die root shell gestartet, bei Headless Betrieb kann mit VNCViewer eine VNC Session gestartet werden, mit der Anmeldung als Benutzer pi und dem default Passwort raspberry. Möchte man das Raspbian Minimal Image einsetzen, bietet sich die Authentifizierung über SSH zum Raspberry Pi an.

Nach der Anmeldung als User pi wollen wir root werden.

pi@raspberrypi:~ $ sudo su

Zunächst werden alle benötigten Pakete als Voraussetzung aus dem Repository installiert.

$ apt-get update
$ apt-get install -y autoconf gcc libc6 make wget unzip apache2 apache2-utils php5 libgd2-xpm-dev

Herunterladen und entpacken der Nagios Core 4 Source Pakete. Hier findet man das letzte Release, auf Github steht das Core Release sowie die Agenten und Plugins zur Verfügung.

$ cd /tmp
$ wget -O nagioscore.tar.gz https://github.com/NagiosEnterprises/nagioscore/archive/nagios-4.4.3.tar.gz
$ tar xzf nagioscore.tar.gz

Compilieren

$ cd /tmp/nagioscore-nagios-4.4.3
$ ./configure --with-httpd-conf=/etc/apache2/sites-enabled
$ make all

Erstellen des Benutzer nagios und der Gruppe. Der Apache-Benutzer www-data wird auch der nagios-Gruppe hinzugefügt.

$ useradd nagios
$ usermod -a -G nagios www-data

Die Binaries Installieren.

$ make install

Das Installieren der Service-Daemon-Dateien und das konfigurieren für den Bootvorgang.

$ make install-init
$ systemctl enable nagios.service

Installiert und konfiguriert die externe Befehlsdatei.

$ make install-commandmode

Nun werden die * SAMPLE * Konfigurationsdateien installiert. Diese sind erforderlich, da Nagios um zu starten einige Konfigurationsdateien benötigt.

$ make install-config

Es werden die Apache-Webserver-Konfigurationsdateien installiert und die Apache-Einstellungen für Nagios konfiguriert.

$ make install-webconf
$ a2enmod rewrite
$ a2enmod cgi

Es muss Port 80 für den eingehenden Datenverkehr auf der lokalen Firewall zugelassen werden, damit die Webschnittstelle von Nagios Core erreicht werden kann.

$ iptables -I INPUT -p tcp --destination-port 80 -j ACCEPT
$ apt-get install -y iptables-persistent

Antworte mit ja, um die bestehenden Regeln zu speichern.

Es wird ein Apache-Benutzerkonto erstellt, damit es diesem ermöglicht wird sich bei Nagios anmelden zu können.

Der folgende Befehl erstellt ein Benutzerkonto namens nagiosadmin und es wird ein Passwort für das Konto erstellt, dieses Passwort jetzt sich merken.

$ htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Es muss der Apache Webserver neu gestartet werden.

$ systemctl restart apache2.service

Nun wird Nagios Core gestartet.

$ systemctl start nagios.service

Nagios ist jetzt bereit und kann getestet werden.

https://10.10.10.84/nagios/

Es kommt die Aufforderung sich mit Benutzernamen und Passwort anzumelden. Der Benutzername ist nagiosadmin (du hast ihn in einem vorherigen Schritt erstellt) und das Passwort ist das, was du zuvor angegeben hast.

Nach erfolgreicher Anmeldung erscheint die Nagios Core Web-Oberfläche. Herzlichen Glückwunsch, Du hast es geschafft.

Nagios Core ist nun installiert, zum Betrieb werden noch die Nagios Plugins benötigt. Es erscheint die Fehler Meldung: (No output on stdout) stderr: execvp(/usr/local/nagios/libexec/check_load .. das ist normal, in den folgenden Schritten werden die Standard Plugins installiert.

Plugin Installation

Zur Voraussetzung der Installation der Plugins werden folgende Pakete aus dem Repository installiert.

$ apt-get install -y autoconf gcc libc6 libmcrypt-dev make libssl-dev wget bc gawk dc build-essential snmp libnet-snmp-perl gettext

Die Source Pakete herunterladen und entpacken. Auf nagios-plugins.org sind die letzten Plugin Release.

$ cd /tmp
$ wget --no-check-certificate -O nagios-plugins.tar.gz https://github.com/nagios-plugins/nagios-plugins/archive/release-2.2.1.tar.gz
$ tar zxf nagios-plugins.tar.gz

Pakete compilieren und installieren.

$ cd /tmp/nagios-plugins-release-2.2.1/
$ ./tools/setup
$ ./configure
$ make
$ make install

Gehe zu einem Host- oder Service Objekt und „Re-schedule the next check“ im Menü Commands. Der Fehler der zuvor erschien, sollte nun verschwinden und die korrekte Ausgabe wird auf dem Bildschirm angezeigt.

Die Daemon Kommandos für start / stop / restart / status.

$ systemctl start nagios.service
$ systemctl stop nagios.service
$ systemctl restart nagios.service
$ systemctl status nagios.service

Nagios Konfiguration

Nachdem nun der Nagios Core Server betriebsbereit ist, geht es an das erstellen der Konfiguration der Host und Services die Überwacht werden sollen. Unter /usr/local/nagios/etc ist die Hauptkonfiguration nagios.cfg, hier werden mit cfg_file die Pfade zu den Konfigurationsdateien definiert, in einer Datei hosts.cfg können die zu überwachenden hosts eingetragen werden.

## Default Linux Host Template ##
define host{
name                            linux-box               ; Name of this template
use                             generic-host            ; Inherit default values
check_period                    24x7
check_interval                  5
retry_interval                  1
max_check_attempts              10
check_command                   check-host-alive
notification_period             24x7
notification_interval           30
notification_options            d,r
contact_groups                  admins
register                        0                       ; DONT REGISTER THIS - ITS A TEMPLATE
}
## Default
define host{
use                             linux-box               ; Inherit default values from a template
host_name                       Diskstation             ; The name we're giving to this server
alias                           Synology                ; A longer name for the server
address                         10.10.10.88             ; IP address of Remote Linux host
}

Soll es mehr strukturiert sein bietet sich die Möglichkeit die Host und Service Konfiguration in die Verzeichnisse printers, routers, servers, switches zu speichern, hierzu wird die Datei nagios.cfg editiert und die Kommentar Zeichen # (hash) entsprechend bei cfg_dir= entfernt.

$ vi /usr/local/nagios/etc/nagios.cfg
..
# Definitions for monitoring a Windows machine
cfg_file=/usr/local/nagios/etc/objects/windows.cfg

Es werden die in den Verzeichnissen angelegten .cfg Dateien ausgelesen.

Beispiel für ein Mail und Webserver bei diesem IMAP und HTTPS überprüft wird.

define host {
        use                             linux-server
        host_name                       mailserver
        alias                           Exchange
        address                         10.10.10.15
        max_check_attempts              5
        check_period                    24x7
        notification_interval           30
        notification_period             24x7
}

define service {
        use                             generic-service
        host_name                       mailserver
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
}

define service {
        use                             generic-service
        host_name                       mailserver
        service_description             HTTPS
        check_command                   check_tcp!443 -H 10.10.10.15 -u https://owa.banana.org
        notifications_enabled           0
}

define service {
        use                             generic-service
        host_name                       mailserver
        service_description             IMAP
        check_command                   check_imap
        notifications_enabled           0
}

Nach jeder Änderung wird der Nagios Server neu gestartet.

$ systemctl restart nagios.service

Ein blick in die Nagios-Log Datei kann sich lohnen.

$ tail -30 /usr/local/nagios/var/nagios.log

Unter dem Verzeichnis objects findet man weitere Konfigurationsbeispiele für Linux, Windows, Printer Router und Switch.

Beispiel: Nagios Service Konfiguration

Mit Remote Agenten wie NCPA können Active Checks auf Windows und Linux Hosts ausgeführt werden, über NRDP und NRPE sind Passive Checks möglich, die werte über CPU last, Memory Nutzung, Prozesse, User und Disk Nutzung geben.

Nagios Notification

In der Datei nagios.cfg und in der Datei objects/contacts.cfg wird als Email Empfänger bei email hier in diesem Beispiel root@localhost belassen.

$ vi /usr/local/nagios/etc/objects/contacts.cfg

define contact{
        contact_name                    nagiosadmin             ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact$
        alias                           Nagios Admin            ; Full name of user

        email                           root@localhost          ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS *$
        }

In der Datei nagios.cfg bei admin_email.

$ vi /usr/local/nagios/etc/nagios.cfg
..
admin_email=root@localhost

Für die Nagios Email Notification wird hier Postfix als Mail Transport Agent verwendet. Dies wie folgt installiert und konfiguriert wird.

$ sudo apt-get -y install postfix

Während der Installation wird man zur Auswahl einer MailServer Konfiguration gefragt, hier wählen wir Internet Site.

Um das senden von Email später testen zu können, wird das Paket mailutils installiert.

$ sudo apt-get -y install mailutils

Die Postfix Hauptkonfiguration main.cf wird angepasst.

$ vi /etc/postfix/main.cf
..
relayhost = mailserver.banana.org

Bei relayhost wird der MailServer eingetragen dieser von Raspberry Pi erlaubt Emails zu empfangen, ist das Raspberry hinter einer Firewall mit NAT, muss beim MailServer die öffentliche IP Adresse für den Empfang berechtigt werden.

Eine Email Adresse für root einrichten, dazu wird die Datei aliases editiert.

$ vi /etc/aliases
..
root:  helpdesk@banana.org

Es wird am ende eine gültige Email Adresse eingetragen, damit Mails von diesem Host zugestellt werden, hier als Beispiel ist es helpdesk@banana.org, der Doppelpunkt bei root: ist zwingend.

Die Änderungen in der Datei aliases müssen noch die Datei aliases.db erzeugen.

$ newaliases

Auch die Postfix Konfiguration muss noch eingelesen und aktiviert werden.

$ postfix reload

jetzt den Email Versand von Raspberry Pi testen, dies lässt sich wie folgt ausführen.

$ echo "hello from raspberry pi" | mail -s hello root

Das Email sollte nun im Posteingang von helpdesk@banana.org ankommen sein.

Hier kann auch das Email Log-Protokoll weiter Aufschluss geben.

$ tail /var/log/mail.log

Gibt der Sendeversuch den status=bounced zurück, ist der Empfang auf dem Mailer noch nicht berechtigt. Bei Exchange muss die IP Adresse des Raspberry Pi beim Empfangsconnector im FrontendTransport unter Bereichsdefinition bei E-Mail von Servern mit diesen Remote-IP-Adressen empfangen, eingetragen sein. Für Postfix muss in main.cf eine smtpd_client_restrictions direktive existieren.

smtpd_client_restrictions =
smtpd_recipient_restrictions =
        check_client_access hash:/etc/postfix/client_access,

Die Datei client_access beinhaltet die IP Adresse des Raspberry Pi.

# Raspberry Pi Nagios
10.10.10.84    ok

Die Postfix Datenbank muss noch generiert werden.

$ postmap /etc/postfix/client_access

Werden die SMTP Anfragen vom Mailer akzeptiert, kann der Queue Prozess und die Zustellung erfolgen.

Windows Netzwerk­adapter in Registry finden

Windows Netzwerk­adapter GUID ausgeben und in der Registry finden

Windows weist jedem Netzwerk­adapter eine GUID zu, dabei verfügen alle Netzwerk­adapter, wie der Ethernet Adapter, Wireless Adapter oder die virtuellen Adapter und auch der Bluetooth Device über eine eigene GUID. Sollen Parameter an einem Netzwerk­adapter verändert werden, für die es beispielsweise keine Option in den Netzwerk Einstellungen gibt, muss man den betreffenden Netzwerk­adapter erst finden, da sie nicht unter dem physischen Adapter Typ oder der Namensbezeichnung in der Registry zu finden sind.

Eine relativ simple Methode ist die folgende Vorgehensweise. Als erstes muss die Dienste-Konsole geöffnet werden, mit den Tasten Win+R und der Eingabe services.msc

In der geöffneten Windows-Dienste-Konsole startet man den Dienst Automatische Konfiguration (verkabelt), falls dieser nicht bereits läuft.

Der nächste Schritt ist das öffnen einer Eingabeaufforderung, mit drücken der Tasten Win+Rcmd.

In der Eingabeaufforderung folgende Befehlszeile mit copy & paste einfügen und mit drücken der Enter Taste ausführen.

netsh lan show interfaces
netsh wlan show interfaces

Um die GUID der Wireless Adapter zu erhalten, muss der Dienst Automatische WLAN-Konfiguration gestartet sein.

Es erscheint die Ausgabe ähnlich wie die folgende, die Anzahl der Schnittstellen kann variieren, je nachdem welche Hardware und Software-Komponenten das System verfügt.

C:\>netsh lan show interfaces

Im System sind 4 Schnittstellen vorhanden:

    Name             : Ethernet
    Beschreibung     : Intel(R) Ethernet Connection (4) I219-V
    GUID             : a1cd571b-e351-4b07-9255-9a5ca910db88
    Physisch. Adresse: 80-E8-2C-BA-71-32
    Status           : Netzwerkkabel wurde entfernt

    Name             : OpenVPN TAP-Windows6
    Beschreibung     : TAP-Windows Adapter V9
    GUID             : 46bf86bd-82f1-4c70-af76-8c3bb253d76f
    Physisch. Adresse: 00-FF-44-FF-56-CD

C:\>netsh wlan show interfaces

Es ist 1 Schnittstelle auf dem System vorhanden:

    Name                   : WLAN
    Beschreibung           : Intel(R) Dual Band Wireless-AC 8265
    GUID                   : 7b4b5ecc-77b4-4f4e-b95a-09dcd3cba30d
    Physische Adresse      : d0:ab:d5:8c:71:1a
    Status                 : Verbunden
    SSID                   : NET0Hotspot
    BSSID                  : 08:60:6e:ca:c7:c4
    Netzwerktyp            : Infrastruktur
    Funktyp                : 802.11n
    Authentifizierung      : WPA2-Personal
    Verschlüsselung        : CCMP

Es werden wie hier alle Netzwerkadapter angezeigt, über die Namen oder Beschreibung ist der betreffende Netzwerkadapter leicht abzuleiten, dabei ist die GUID direkt unterhalb der Beschreibung.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces

Mit der nun gefundenen GUID lässt sich der entsprechende Netzwerkadapter im Registrierungs Editor finden.

SSH mit Zwei-Faktor-Authentifizierung für Debian

SSH-Server mit Zwei-Faktor-Authentifizierung (2FA) auf Debian einrichten

Die Zwei-Faktor-Authentifizierung für den SSH Login bietet eine zusätzliche Sicherheitsebene. Bei der Zwei-Faktor-Authentifizierung wird zum Systembenutzerkennwort ein weiteres Kennwort erforderlich, ein PIN oder das sogenannte One-Time-Password (OTP), ein sechsstelliger Code der auf einem Mobilgerät angezeigt wird. Dadurch wird eine stärkere Authentifizierungsmethode für den Zugang zum Server erreicht.

In diesem Tutorial wird gezeigt, wie der SSH-Server mit Zwei-Faktor-Authentifizierung (2FA) abgesichert wird, für SSH Schlüsselbasierte Authentifizierung bei der SSH Keys verwendet werden.

Systemvoraussetzung

  • Debian 10 (buster), Ubuntu 20.04 (Focal Fossa), Linux Mint 20
  • Ein sudo privilegierter User Account mit $home Verzeichnis
  • Authentifizierung mittels SSH Key (publickey) ~/.ssh/authorized_keys

  Wichtig! es wird empfohlen, sich während der Konfiguration der Authentifizierungseinstellungen eine zweite Terminalsitzung offen zu halten. Auf diese Weise wird man vom System nicht ausgesperrt, wenn die Verbindung beim Testen getrennt wird, weil etwa die Konfiguration noch nicht vollständig ist.

  Im weiteren Verlauf werden wir nicht mehr root sein, sondern als Voraussetzung im Rahmen dieses Tutorials weiter nur noch sudo verwenden. Bei Debian muss möglicherweise das sudo Paket erst installiert werden.

Falls sudo nicht vorliegt, wird das sudo Paket als root installiert.

$ su -
Password:
apt install sudo

Jetzt unserem Benutzer „john“ die sudo-Berechtigungen erteilen.

$ usermod -aG sudo john

Google Authenticator PAM-Modul Installation

Um den SSH-Server für die Zwei-Faktor-Authentifizierung einzurichten, wird das Google Authenticator PAM-Modul auf dem Debian System installiert. Wir sind als nicht-root, mit john eingeloggt dieser nun Mitglied der Gruppe sudo ist.

$ sudo apt install -y libpam-google-authenticator

Führe nach der Installation des Google Authenticator den folgenden Befehl aus.

$ google-authenticator

Während der Ausführung müssen einige Fragen wie unten gezeigt beantwortet werden.

$ Do you want authentication tokens to be time-based (y/n) y
Warning: pasting the following URL into your browser exposes the OTP secret to Google:
  https://www.google.com/chart?XYZl=otpauth://totp/root@debian%3Fsecret%34YNE6ZI3XCLUQLBD862UR6NAL2A%36ixxuer%3Ddebian

Drücke y und die Enter Taste um fortzufahren. Im folgenden wird im Terminal ein QR-Code angezeigt werden.

Öffne als nächstes die Google Authenticator App auf dem Handy und scanne den QR-Code im Terminal, mit dem + unten rechts. Alternativ kann man über den Link oben den QR-Sicherheitscode im Browser öffnen.

Sobald der QR-Code gescannt ist, erscheint auf dem Handy das sechsstellige Einmalpasswort. Es dauert 30 Sekunden bis der Token ändert, mit diesem wir uns später per SSH beim Debian Server anmelden.

In der Ausgabe oben ist auch der geheime TOTP Schlüssel, den Bestätigungscode und die Notrufcodes zu sehen. Es wird empfohlen, diese für die spätere Verwendung an einem sicheren Ort aufzubewahren.

Beantworte als nächstes alle Fragen mit y um die Google Authenticator-Konfigurationsdatei wie unten gezeigt zu aktualisieren.

Do you want me to update your "/home/john/.google_authenticator" file? (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) y

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y

  Die Datei .google_authenticator im $home Verzeichnis ist für die 2FA Authentifizierung erforderlich, fehlt die Datei wird die 2FA Authentifizierung ignoriert und die Token Eingabe wird übersprungen.

SSH für die Verwendung von Google Authenticator Konfigurieren

Als nächstes muss der SSH-Server für die Verwendung von Google Authenticator konfiguriert werden, in dem wir sshd_config bearbeiten.

$ sudo vi /etc/ssh/sshd_config

Für die 2FA Authentifizierung werden folgende Zeilen benötigt.

PermitRootLogin prohibit-password
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes
UseDNS no
AuthenticationMethods publickey,keyboard-interactive password,keyboard-interactive

Die geänderte SSH-Dienst Konfiguration übernehmen.

$ sudo systemctl restart sshd

SSH Schlüsselbasierte Authentifizierung

Insbesondere Linux-Systemadministratoren sollten statt Passwörter SSH-Keys als Authentifizierungsmethode verwenden, wie es in obiger sshd_config konfiguriert ist. Eine Anleitung für die SSH-Public-Key-Authentifizierung gibt es hier. In unserem Beispiel soll der User john sich mit SSH-Key und 2FA anmelden.

Als nächstes müssen die PAM-Regeln für den SSH-Dienst in der Datei /etc/pam.d/sshd definiert werden.

$ sudo vi /etc/pam.d/sshd

Die Zeile @include common-auth mit # auskommentieren und nachfolgend zwei PAM-Regeln hinzufügen.

# Standard Un*x authentication.
#@include common-auth
auth  required  pam_google_authenticator.so nullok
auth  required  pam_permit.so

  Das Wort nullok am Ende der Zeile teilt PAM mit, dass diese Authentifizierungsmethode optional ist. Dadurch können sich Benutzer ohne OATH-TOTP-Token weiterhin mit nur dem SSH-Key anmelden. Sobald alle Benutzer über ein OATH-TOTP-Token verfügen, kann man nullok aus dieser Zeile entfernen, um 2FA obligatorisch zu machen. Die zweite Zeile mit pam_permit.so ist erforderlich, um die Authentifizierung zu ermöglichen, auch wenn ein Benutzer kein 2FA-Token verwendet.

Bei der Anmeldung benötigt jede Methode ein SUCCESS, um die Authentifizierung zu ermöglichen. Wenn ein Benutzer das 2FA-Authentifizierungstool nicht verwendet, gibt die Verwendung der Option nullok ein IGNORE für die interaktive Tastaturauthentifizierung zurück. pam_permit.so gibt dann SUCCESS zurück und ermöglicht die Fortsetzung der Authentifizierung.

SSH Login mit Zwei-Faktor-Authentifizierung Testen

Der SSH-Server ist jetzt mit Zwei-Faktor-Authentifizierung konfiguriert, damit ist nun die Gelegenheit gekommen es mit john zu testen.

$ ssh -v john@10.0.0.7
...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: C:\\Users\\john/.ssh/debian ECDSA SHA256:cxoaQ9ccAAqS563BnOnFf2Ru6I3dc5uAeblO/8ua5Md explicit
debug1: Server accepts key: C:\\Users\\john/.ssh/debian ECDSA SHA256:cxoaQ9ccAAqS563BnOnFf2Ru6I3dc5uAeblO/8ua5Md explicit
Authenticated with partial success.
debug1: Authentications that can continue: keyboard-interactive
Verification code:

Troubleshooting

Gibt es Fehler bei der Authentifizierung mit 2FA, kann für des PAM-Modul die debug Funktion aktiviert werden.

auth required pam_google_authenticator.so debug nullok

Anschliessend öffnet man die Logdatei auth.log

$ sudo less /var/log/auth.log

Mit debug werden Fehler in der Authentifizierung rasch erkannt.

Oct 22 17:59:32 debian sshd(pam_google_authenticator)[3938]: debug: shared secret in "/home/john/.google_authenticator" processed
Oct 22 17:59:32 debian sshd(pam_google_authenticator)[3938]: Invalid verification code for john
Oct 22 17:59:32 debian sshd(pam_google_authenticator)[3938]: debug: "/home/john/.google_authenticator" written
Oct 22 17:59:32 debian sshd[3938]: Failed password for john from 10.0.0.8 port 55673 ssh2

Hier versuchte john sich ohne SSH-Key zu Authentifizieren.

  Existiert im user home ~/.google_authenticator, so erwartet der Google Authenticator ein SUCCESS von der SSH-Key (publickey) Authentifizierungsmethode.

Wichtig ist eine korrekte Zeit, damit die TOTP-Token synchron sind, bei grösserer Abweichung kann es zu abgelaufenen OATH-TOTP-Token kommen. Der NTP-Dienst sollte daher auf dem Server entsprechend eingerichtet und konfiguriert sein, für eine präzise Zeitsynchronisation. Das Tutorial zu Linux Systemzeit Synchronisation mit Network Time Protocol (NTP) gibt es hier.

Zum Schluss

Gratulation! Du hast eben den SSH-Server mit Zwei-Faktor-Authentifizierung für Debian oder Ubuntu erfolgreich eingerichtet. Wir hoffen, wir konnten die nötigen Grundlagen Kenntnisse vermitteln, um den SSH-Server mit Google Authenticator zu schützen.

Weblinks

GitHub google/google-authenticator-libpam

Die mobile Version verlassen