INSTAR Deutschland GmbH

Motion unter Debian



Motion ist ein hochgradig konfigurierbares Programm, das Videosignale von verschiedenen Kameratypen (Netzwerkkameras über HTTP, RTSP und RTMP) überwacht. Richten Sie es ein, um mit Ihrer INSTAR IP-Kamera zu überwachen, Zeitraffervideos zu erstellen und vieles mehr.

motionEye ist ein Web-Frontend für den Motion-Dienst, geschrieben in Python.

Wir werden beides auf einem normalen Intel Core-Rechner installieren - wie einem Intel NUC, Asus P-Series oder Gigabyte Brix. Diese Entscheidung wurde aufgrund der hohen CPU-Anforderungen für das Arbeiten mit 1080p-Video getroffen.

Wir haben jedoch bereits ein Tutorial zur Installation von motionEye auf einem Raspberry Pi geschrieben falls diese Rechenleistung für Ihren Anwendungsfall ausreichend ist.

Debian Installation

Wir installieren Debian 9 Linux auf unserem Mini-PC - Sie können können einen Blick in das motionEye Wiki für weitere Linux Distros. Zur Erstellung des Installations-USB-Sticks haben wir das minimale amd64 Debian Image heruntergeladen und benutzte das Tool Etcher zur Vorbereitung des USB-Sticks. Wir haben den gleichen Ansatz verwendet, um eine SD-Karte mit dem openHABian-Image vorzubereiten - Sie können den gleichen Schritten folgen. Wenn der USB-Stick bereit ist, deaktivieren Sie den Secure Boot im BIOS Ihres Mini-PCs und booten Sie vom Stick aus. Wir werden keine Desktop-Umgebung brauchen. Stellen Sie jedoch sicher, dass Sie den SSH-Dienst installieren, da wir den SSH-Dienst zum Einrichten des Debian-Servers verwenden werden.

SSH Zugriff

Um die SSH-Anmeldung für einen Root-Benutzer auf einem Debian Linux-System zu aktivieren, müssen Sie zuerst den SSH-Server konfigurieren. Öffnen Sie /etc/ssh/sshd_config und ändern Sie die folgende Zeile:

FROM:
PermitRootLogin without-password
TO:
PermitRootLogin yes

Nachdem Sie die oben genannten Änderungen vorgenommen haben, starten Sie Ihren SSH-Server neu:

/etc/init.d/ssh restart
[ ok ] Restarting ssh (via systemctl): ssh.service.

Ab jetzt können Sie sich als root anmelden:

$ ssh root@192.168.2.111
root@192.168.2.111's password: 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Legen Sie eine statische IP-Adresse fest

Standardmäßig finden Sie die folgende Konfiguration in der Netzwerk-Konfigurationsdatei /etc/network/interfaces:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
      address 192.168.2.111
      netmask 255.255.255.0
      gateway 192.168.2.1

Beachten Sie:

In neueren Versionen von Debian wird die Ethernet-Schnittstelle nicht mehr eth0 genannt. Die Datei enthält die Zeile iface eth0 inet dhcp - die Bezeichnung zwischen iface und inet ist die ID Ihrer Ethernet-Schnittstelle (ändern Sie sie nicht in eth0!)

Konfigurieren Sie einen statischen DNS Server indem Sie die folgenden Datei bearbeiten /etc/resolv.conf. Geben Sie die IP-Adresse Ihres bevorzugten Nameservers an.

nameserver 8.8.8.8



motionEye Installation

Alle Befehle erfordern root Rechte. Verwenden Sie sudo vor jedem Befehl oder werden Sie root mit su.

  1. Installieren Sie motion, ffmpeg und v4l-utils:
 apt-get install motion ffmpeg v4l-utils
  1. Installieren Sie die Abhängigkeiten aus den Repositorys:
apt-get install python-pip python-dev python-setuptools curl libssl-dev libcurl4-openssl-dev libjpeg-dev libz-dev
  1. Installieren Sie motioneye, das automatisch alle Python-Abhängigkeiten mit installiert (tornado, jinja2, pillow and pycurl):
pip install motioneye
  1. Bereiten Sie das Konfigurationsverzeichnis vor:
 mkdir -p /etc/motioneye
 cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf
  1. Bereiten Sie das Medienverzeichnis vor:
 mkdir -p /var/lib/motioneye
  1. Fügen Sie ein Init-Skript hinzu, konfigurieren Sie es so, dass es beim Start ausgeführt wird, und starten Sie den motionEye-Server:
  cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
  systemctl daemon-reload
  systemctl enable motioneye
  systemctl start motioneye
  1. Um später auf die neueste Version von motioneye zu aktualisieren, geben Sie bitte Folgendes ein:
pip install motioneye --upgrade
systemctl restart motioneye



Hinzufügen Ihrer IP-Kamera

Öffnen Sie die MotionEye-Benutzeroberfläche mit Ihren Webbrowsern, indem Sie die IP-Adresse Ihres Raspberry Pi gefolgt von Port 8765 eingeben - z.B. http://192.168.2.115:8765. Das Standard-Login ist admin ohne Kennwort. Wir hatten uns bereits angesehen, wie man JPG, MJPEG und RTSP Kameras hinzufügt. Folgen Sie den Anweisungen dort und fügen Sie alle Ihre INSTAR VGA-, HD- und Full HD-Kameras hinzu.

Wir möchten jetzt einen Schritt weiter gehen und Schaltflächen hinzufügen, um die grundlegenden Kamerafunktionen zu steuern. MotionEye bietet eine Liste von Aktions-Schaltflächen, die wir mit den CGI-Befehlen unserer Kamera verwenden können. Sie werden automatisch Shell-Skripten zugeordnet, die wir im Verzeichnis /etc/motioneye ablegen müssen. Folgende Aktionen sind definiert:

  • lock
  • unlock
  • light_on
  • light_off
  • alarm_on
  • alarm_off
  • up
  • right
  • down
  • left
  • zoom_in
  • zoom_out
  • preset1 to preset9

Während die verfügbaren Aktionen auf den obigen Satz beschränkt sind, können die ausgeführten Befehle praktisch alles sein. Wir wählen HTTP-GET-Befehle aus, um CGI-Befehle an unsere Kameras zu senden.

Aktionen aktivieren

motionEye sucht in dem Konfigurationsordner /etc/motioneye nach ausführbaren Dateien mit dem Namen [action]_[cameraid], wobei action eine der oben aufgeführten verfügbaren Aktionen ist und cameraid die ID der Kamera, bei der die Aktionsschaltfläche angezeigt werden soll.

Das Vorhandensein der ausführbaren Datei /etc/motioneye/alarm_on_1 teilt MotionEye beispielsweise mit, dass ein Alarmglocken-Button für die Kamera Nummer Eins angezeigt werden soll. Die Datei wird beim Drücken des Buttons ausgeführt. Die alle so ausgewählten Schaltflächen enthalten markante Symbole, die dem Namen der Aktion entsprechen.

Beispiel für einen HTTP-Request

Angenommen, Sie möchten eine HTTP-Anfrage an Ihre INSTAR IP-Kamera senden, wenn Sie auf die Schaltfläche "Alarm einschalten" bei der Kamera mit der ID 1 klicken. Erstellen Sie das folgende Bash-Skript und machen Sie es ausführbar:

Alarm - Full HD Kameramodelle

Motion Eye and INSTAR IP Cameras

touch /etc/motioneye/alarm_on_1
chmod +x /etc/motioneye/alarm_on_1
nano /etc/motioneye/alarm_on_1

Geben Sie dann den folgenden Inhalt ein, speichern Sie und beenden Sie danach den nano Editor (Ctrl-O, Enter, Ctrl-X):

#!/bin/bash

URL="http://admin:instar@192.168.2.113/param.cgi?cmd=setscheduleex&-ename=md&-week0=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week1=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week2=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week3=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week4=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week5=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week6=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null

Motion Eye and INSTAR IP Cameras

Wir werden den Alarm Zeitplan CGI Befehl für unsere INSTAR Full HD-Kamera in diesem Beispiel verwenden - aber die URL kann auf jeden CGI Befehl gelegt werden!

Beachten Sie, dass der Befehl die Bewegungsalarmerkennung Ihrer Kamera rund um die Uhr aktiviert. Wenn Sie bereits einen Alarmzeitplan verwenden, der den Kameraalarm zu bestimmten Zeiten deaktiviert, ersetzen Sie einfach einige dieser P s durch N s, um Ihren persönlichen Zeitplan wiederzugeben, und lassen Sie MotionEye damit zwischen Alarm Immer AN / Ihr Alarm Zeitplan schalten.

Um den Alarm auszuschalten, wiederholen wir diese Schritte für:

touch /etc/motioneye/alarm_off_1
chmod +x /etc/motioneye/alarm_off_1
nano /etc/motioneye/alarm_off_1

Geben Sie dann den folgenden Inhalt ein, speichern Sie und beenden Sie danach den nano Editor (Ctrl-O, Enter, Ctrl-X):

#!/bin/bash

URL="http://admin:instar@192.168.2.113/param.cgi?cmd=setscheduleex&-ename=md&-week0=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week1=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week2=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week3=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week4=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week5=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week6=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null

Laden Sie die MotionEye-Benutzeroberfläche neu. Die Schaltflächen sollten jetzt im Ansichtsport der Kamera 1 sichtbar sein (möglicherweise müssen Sie das Video einmal anklicken, damit sie angezeigt werden). Wenn die Schaltflächen nicht angezeigt werden, stellen Sie sicher, dass Sie die Shell-Skripts ausführbar gemacht haben.


Motion Eye and INSTAR IP Cameras

Alarm - VGA Modelle
touch /etc/motioneye/alarm_on_3
chmod +x /etc/motioneye/alarm_on_3
nano /etc/motioneye/alarm_on_3

Geben Sie dann den folgenden Inhalt ein, speichern Sie und beenden Sie danach den nano Editor (Ctrl-O, Enter, Ctrl-X):

#!/bin/bash

URL="http://admin:instar@192.168.2.117/set_alarm.cgi?motion_armed=1"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null
touch /etc/motioneye/alarm_off_3
chmod +x /etc/motioneye/alarm_off_3
nano /etc/motioneye/alarm_off_3

Geben Sie dann den folgenden Inhalt ein, speichern Sie und beenden Sie danach den nano Editor (Ctrl-O, Enter, Ctrl-X):

#!/bin/bash

URL="http://admin:instar@192.168.2.117/set_alarm.cgi?motion_armed=0"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null
PTZ - Full HD Modelle
touch /etc/motioneye/left_2 /etc/motioneye/right_2 /etc/motioneye/down_2 /etc/motioneye/up_2
chmod +x /etc/motioneye/left_2 /etc/motioneye/right_2 /etc/motioneye/down_2 /etc/motioneye/up_2

Schritt nach Links

left_2

#!/bin/bash

URL="http://admin:instar@192.168.2.116/ptzctrl.cgi?-step=&-act=left"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null

Schritt nach Rechts

right_2

#!/bin/bash

URL="http://admin:instar@192.168.2.116/ptzctrl.cgi?-step=&-act=right"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null

Schritt nach Unten

down_2

#!/bin/bash

URL="http://admin:instar@192.168.2.116/ptzctrl.cgi?-step=&-act=down"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null

Schritt nach Oben

up_2

#!/bin/bash

URL="http://admin:instar@192.168.2.116/ptzctrl.cgi?-step=&-act=up"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null
Voreingestellte Positionen - Full HD Modelle
touch /etc/motioneye/preset1_2 /etc/motioneye/preset2_2
chmod +x /etc/motioneye/preset1_2 /etc/motioneye/preset2_2

Gehe auf Preset 1

preset1_2

#!/bin/bash

URL="http://admin:instar@192.168.2.116/param.cgi?cmd=preset&-act=goto&-number=0"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null

Gehe auf Preset 2

preset2_2

#!/bin/bash

URL="http://admin:instar@192.168.2.116/param.cgi?cmd=preset&-act=goto&-number=1"
METHOD="GET"
TIMEOUT="5"
curl -X $METHOD --connect-timeout $TIMEOUT "$URL" > /dev/null

Motion Eye and INSTAR IP Cameras



MotionEye Konfigurieren

Öffnen Sie das Seitenmenü und wählen Sie die Kamera, die Sie bearbeiten möchten, aus dem Dropdown-Menü 1 - aktivieren Sie die Advanced Settings 2. Der folgende Screenshot zeigt einige interessante Menüpunkte die MotionEye anbietet:


Motion Eye and INSTAR IP Cameras

3 MotionEye bietet Ihnen ein Administrator- und ein reguläres Benutzerkonto. Sie sollten hier ein Passwort für das Administratorkonto hinzufügen. Der reguläre Benutzer hat keinen Zugriff auf diesen Teil des Menüs.

4 Wir richten MotionEye so ein, dass der 1080p RTSP-Stream von unserer Kamera aufgenommen wird. Hier können Sie die Auflösung herabsetzen, um Speicherplatz zu sparen und - von besonderem Interesse, wenn Sie einen Raspberry Pi zum Ausführen von MotionEye verwenden -, um die CPU-Auslastung zu reduzieren. Die Framerate ist hier standardmäßig auf 2 Bilder pro Sekunde eingestellt - das bedeutet, dass Sie ein sehr abgehacktes Video erhalten. Es hängt von Ihrer CPU und der Anzahl der Kameras ab, die Sie hinzufügen möchten, ob Sie mit einer höheren Einstellung arbeiten können. Sie können Ihr Videobild auch in 90-Grad-Schritten drehen.

5 Legen Sie einen oberen und unteren Erkennungsschwellenwert für die integrierte Bewegungserkennung fest. Wie viel Prozent des Bildes muss sich ändern, um sich als Alarm registrieren zu können. Und möchten Sie den Alarm verwerfen, wenn sich mehr als ein bestimmter Prozentwert des Bildes ändert - da es sich wahrscheinlich nur um ein Licht handelt, das eingeschaltet ist und Sie nicht interessiert.

6 Haben Sie eine ständige Bewegung im Hintergrund Ihres Bildes, die den Alarm auslöst? Verwenden Sie die Maskenfunktion, damit MotionEye automatisch erkennt, welcher Teil des Bildes für die Bewegungserkennung nicht verwendet werden soll.

7 Lassen Sie MotionEye eine Box um die Änderung zeichnen, die innerhalb des Bildes erkannt wird. Dies ist nützlich, um falsche Alarme zu debuggen. Sieht auch sehr schick aus.

8 Die Email Benachrichtigung ist sicher selbsterklärend - die hier auszufüllenden Felder sind indentisch mit der SMTP Server Konfiguration ihrer INSTAR IP Kamera. Interessanter ist die Web-Hook-Funktion darunter, die identisch mit dem Alarmserver Ihrer INSTAR Kamera ist - wir haben diese Funktion bereits in einem Node-RED Projekt verwendet.

9 Stellen Sie sicher, dass die Videoaufnahme auf h.264 (.mp4) eingestellt ist, wenn Sie das aufgezeichnete Video in der MotionEye-Benutzeroberfläche anzeigen lassen möchten! Ansonsten können Sie mit HEVC (.mp4) die stärkere h.265-Komprimierung anwenden und Ihre Videos so klein wie möglich machen.

10 Wählen Sie zwischen einer kontinuierlichen Aufnahme und einer durch Bewegungserkennung ausgelösten Aufnahme. Alarmvideos werden solange aufgenommen, wie die Bewegung andauert. Es ist sinnvoll, die maximale Dateigröße zu begrenzen. Dadurch werden mehr kleine Videos erstellt anstatt einer riesigen Datei, die schwer zu handhaben ist. Sie können auch festlegen, dass Dateien nach einer festgelegten Zeit automatisch wieder gelöscht werden.

11 Laden Sie Ihre Alarmvideos auf einen FTP- oder SFTP-Server hoch. Oder spiegeln Sie sie in Dropbox oder auf Google Drive.

12 MotionEye überträgt alle Videostreams Ihrer Kamera in einem Browser-kompatiblen Format. Wir haben diese Funktion bereits verwendet, um ein Video in das ioBroker-Dashboard einzubetten. Sie sollten diese Funktion deaktivieren, wenn Sie nur die MotionEye-Oberfläche verwenden möchten.

13 Wenn Sie Manual Capture aktivieren, wird in der Kamera ein Fotokamerasymbol angezeigt, mit dem Sie einen schnellen Schnappschuss aufnehmen können.



HTTPS Zugriff auf MotionEye

Wenn Sie über das Internet auf die MotionEye-Oberfläche zugreifen möchten, müssen Sie zunächst Ihren Server schützen. Im Folgenden wollen wir zwei Dinge tun:

  1. Schließen Sie alle nicht benötigten Ports mit einer Firewall
  2. Installieren Sie einen Web-Proxy, mit dem wir die SSL-Verschlüsselung hinzufügen können

Wir werden FirewallD als Firewall und NGINX als Web Proxy nutzen. Das Betreiben hinter dem Nginx-Webserver (mit Nginx als Reverse-Proxy) kann hilfreich sein, wenn:

  • Sie möchten motionEye mit HTTPS verwenden
  • Sie möchten mehrere Websites (einschließlich MotionEye) auf demselben Webserver bereitstellen (über Port 80 unter derselben IP-Adresse erreichbar).
  • Sie möchten verschiedene Nginx-Module (z. B. Ratenbegrenzung oder HTTP-Authentifizierung) nutzen.

Installation von FirewallD unter Debian

Installieren Sie FirewallD, indem Sie die folgenden Befehle ausführen:

apt-get update
apt-get install firewalld

Motion Eye and INSTAR IP Cameras

Führen Sie die folgenden Befehle aus, um die Standardports für http und https zu öffnen:

firewall-cmd --permanent --zone=public --add-service=https --add-service=http
firewall-cmd --reload
firewall-cmd --list-all

Motion Eye and INSTAR IP Cameras

Wenn Sie jetzt versuchen, auf die MotionEye-Schnittstelle an Port 8765 zuzugreifen, werden Sie eine Zeitüberschreitung erhalten, da die Anforderung von FirewallD blockiert wird. Alle von MotionEye verwendeten Ports können geöffnet werden. In diesem Fall handelt es sich um den Standardport für die Benutzeroberfläche 8765 und die Streaming-Ports für drei Kameras 8081, 8082, 8083.

firewall-cmd --permanent --zone=public --add-port=8765/tcp --add-port=8081-8083/tcp
firewall-cmd --reload
firewall-cmd --list-all

Motion Eye and INSTAR IP Cameras

Sie sollten jetzt wieder in der Lage sein, auf die MotionEye-Benutzeroberfläche zuzugreifen. Beachten Sie, dass dieser Befehl die Option -- permanent verwendet hat. Das bedeutet, wenn Sie Ihren Server neu starten oder die Firewall neu laden, werden diese Regeln nicht verworfen.

Installation of NGINX on Debian

apt-get install nginx

Motion Eye and INSTAR IP Cameras

Am Ende des Installationsvorgangs startet Debian 9 den Nginx Webproxy. Der Webserver sollte bereits betriebsbereit sein. Wir können mit dem systemd init-System überprüfen, ob der Dienst ausgeführt wird, indem Sie Folgendes eingeben:

systemctl status nginx

Wenn Sie die IP-Adresse Ihres Servers haben, geben Sie sie in die Adressleiste Ihres Browsers ein. Sie sollten die standardmäßige Nginx-Zielseite sehen:


Motion Eye and INSTAR IP Cameras

Richten Sie einen virtuellen Host für MotionEye ein

Hier ist der Inhalt einer virtuellen Beispielhostdatei, die verwendet wird /etc/nginx/sites-enabled/motioneye.local:

touch /etc/nginx/sites-enabled/motioneye.local
nano /etc/nginx/sites-enabled/motioneye.local

Motion Eye and INSTAR IP Cameras

motioneye.local

server {
    listen 80;
    listen [::]:80;
    location /dashboard/ {
        proxy_pass            http://127.0.0.1:8765/;
        proxy_read_timeout    1800;
        proxy_connect_timeout 1800;
        access_log off;
    }
}

Motion Eye and INSTAR IP Cameras

Stellen Sie sicher, dass Ihre NGINX-Konfiguration den Test besteht und laden Sie den Dienst erneut:

nginx -t
service nginx reload

Motion Eye and INSTAR IP Cameras

Ihre MotionEye-Benutzeroberfläche wird jetzt unter http://192.168.2.111/dashboard/ berteit stehen. (Sie müssen die IP 192.168.2.111 in die Adresse Ihres MotionEye-Servers ändern!). Es ist wichtig, die nachstehenden Schrägstriche am Ende der URL zu beachten http: //127.0.0.1:8765/. Sie stellen sicher, dass Pfade korrekt weitergeleitet werden, wenn die HTTP-Anforderungen an motionEye gesendet werden.

Erstellen Sie das SSL-Zertifikat

Wir können mit OpenSSL in einem einzigen Befehl ein selbstsigniertes Schlüssel- und Zertifikatpaar erstellen:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Diese Optionen erstellen sowohl eine Schlüsseldatei als auch ein Zertifikat. Wir werden ein paar Fragen zu unserem Server gestellt, um die Informationen korrekt in das Zertifikat einzubetten.


Motion Eye and INSTAR IP Cameras

Beide von Ihnen erstellten Dateien werden in den entsprechenden Unterverzeichnissen des Verzeichnisses /etc/ssl abgelegt.

Während wir OpenSSL verwenden, sollten wir auch eine starke Diffie-Hellman-Gruppe erstellen, die bei der Aushandlung von Perfect Forward Secrecy mit dem Client verwendet wird.

Wir können dies tun, indem Sie Folgendes eingeben:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Dies kann einige Minuten dauern, aber wenn Sie fertig sind, finden Sie die Datei unter /etc/ssl/certs/dhparam.pem, die wir in unserer Konfiguration verwenden können.


Motion Eye and INSTAR IP Cameras

Konfigurieren Sie Nginx für die Verwendung von SSL

Wir haben unsere Schlüssel- und Zertifikatsdateien im Verzeichnis /etc/ssl erstellt. Jetzt müssen wir nur noch unsere Nginx-Konfiguration ändern, um diese zu nutzen.

Wir werden die folgenden Änderungen an unserer Konfiguration vornehmen:

  • Wir werden ein Konfigurations-Snippet erstellen, das unseren SSL-Schlüssel und die Speicherorte der Zertifikatsdateien enthält.
  • Wir werden ein Konfigurations-Snippet erstellen, das starke SSL-Einstellungen enthält, die in der Zukunft mit beliebigen Zertifikaten verwendet werden können.
  • Wir werden unsere Nginx-Serverblöcke für die Bearbeitung von SSL-Anforderungen anpassen und die beiden obigen Ausschnitte verwenden.

Zuerst erstellen wir ein neues Nginx-Konfigurations-Snippet im Verzeichnis /etc/nginx/snippets:

nano /etc/nginx/snippets/self-signed.conf

In dieser Datei müssen wir lediglich die Direktive sslcertificate auf unsere Zertifikatdatei und den sslcertificate_key auf den zugehörigen Schlüssel setzen. In unserem Fall sieht das so aus:

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

Motion Eye and INSTAR IP Cameras

Als Nächstes erstellen wir ein weiteres Snippet, das einige SSL-Einstellungen definiert. Dadurch wird Nginx mit einer starken SSL-Verschlüsselungssuite ausgestattet und einige erweiterte Funktionen aktiviert, die zur Sicherung unseres Servers beitragen.

Die Parameter, die wir einstellen, können in zukünftigen Nginx-Konfigurationen wiederverwendet werden. Daher geben wir der Datei einen generischen Namen:

nano /etc/nginx/snippets/ssl-params.conf

Motion Eye and INSTAR IP Cameras

# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Da wir ein selbstsigniertes Zertifikat verwenden, wird die SSL-Stapling nicht verwendet. Nginx gibt einfach eine Warnung aus, und deaktiviert das Stapling für unser selbstsigniertes Zertifikat und arbeitet weiterhin ordnungsgemäß.

Passen Sie die Nginx-Konfiguration an, um SSL zu verwenden

Jetzt, da wir unsere Snippets haben, können wir unsere Nginx-Konfiguration anpassen, um SSL zu aktivieren.

In diesem Handbuch verwenden wir die Standardserverblockdatei im Verzeichnis /etc/nginx/sites-available. Wenn Sie eine andere Server-Blockdatei verwenden, ersetzen Sie sie in den folgenden Befehlen. Bevor wir weiter gehen, sichern wir aber zuerst unsere aktuelle Server-Blockdatei:

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

Öffnen Sie nun die Server-Blockdatei, um Anpassungen vorzunehmen:

nano /etc/nginx/sites-available/default

Motion Eye and INSTAR IP Cameras

Wir werden diese Konfiguration so ändern, dass unverschlüsselte HTTP-Anforderungen automatisch auf verschlüsselte HTTPS umgeleitet werden. Dies bietet die beste Sicherheit für unsere Websites. Wenn Sie sowohl HTTP- als auch HTTPS-Verkehr zulassen möchten, verwenden Sie die folgende alternative Konfiguration.

Als nächstes müssen wir einen neuen Serverblock direkt darunter anlegen. Wir können die beiden Listen-Direktiven, die Port 443 verwenden, auskommentieren und dieser Zeile http2 hinzufügen, um HTTP/2 in diesem Block zu aktivieren. Danach müssen wir nur noch die zwei von uns eingerichteten Snippet-Dateien einfügen:

server {
	listen 80 default_server;
  listen [::]:80 default_server;
	return 301 https://$server_name$request_uri;

	# SSL configuration
	#
	listen 443 ssl http2 default_server;
	listen [::]:443 ssl http2 default_server;
	include snippets/self-signed.conf;
	include snippets/ssl-params.conf;

Motion Eye and INSTAR IP Cameras

Nun müssen wir die SSL-Konfiguration unserem MotionEye-Serverblock in hinzufügen /etc/nginx/sites-enabled/motioneye.local:

server {
    listen 80;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
	  server_name 192.168.2.111;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;
    location /dashboard/ {
        proxy_pass            http://127.0.0.1:8765/;
        proxy_read_timeout    1800;
        proxy_connect_timeout 1800;
        access_log off;
    }
}

Motion Eye and INSTAR IP Cameras

Jetzt können wir Nginx neu starten, um unsere neuen Änderungen zu übernehmen:

nginx -t

Motion Eye and INSTAR IP Cameras

Beachten Sie die Warnung am Anfang. Wie bereits erwähnt, gibt diese Einstellung eine Warnung aus, da unser selbstsigniertes Zertifikat SSL-Stapling nicht verwenden kann. Dies wird erwartet und unser Server kann Verbindungen immer noch korrekt verschlüsseln.

Wenn Ihre Ausgabe mit den oben genannten übereinstimmt, enthält Ihre Konfigurationsdatei keine Syntaxfehler. Wir können Nginx sicher neu starten, um unsere Änderungen zu implementieren:

service nginx reload

Motion Eye and INSTAR IP Cameras