Software
LINUX
MotionEye
- Debian Installation
- motionEye Installation
- Hinzufügen Ihrer IP-Kamera
- MotionEye Konfigurieren
- HTTPS Zugriff auf MotionEye
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
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.
- Installieren Sie motion, ffmpeg und v4l-utils:
apt-get install motion ffmpeg v4l-utils
- 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
- Installieren Sie motioneye, das automatisch alle Python-Abhängigkeiten mit installiert (tornado, jinja2, pillow and pycurl):
pip install motioneye
- Bereiten Sie das Konfigurationsverzeichnis vor:
mkdir -p /etc/motioneye
cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf
- Bereiten Sie das Medienverzeichnis vor:
mkdir -p /var/lib/motioneye
- 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
- 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
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
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.
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
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:
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:
- Schließen Sie alle nicht benötigten Ports mit einer Firewall
- 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
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
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
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
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:
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
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;
}
}
Stellen Sie sicher, dass Ihre NGINX-Konfiguration den Test besteht und laden Sie den Dienst erneut:
nginx -t
service nginx reload
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.
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.
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 ssl_certificate auf unsere Zertifikatdatei und den ssl_certificate_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;
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
# 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
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;
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;
}
}
Jetzt können wir Nginx neu starten, um unsere neuen Änderungen zu übernehmen:
nginx -t
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
Diskutieren Sie diesen Artikel im INSTAR Forum !