Au weia. Jetzt sehe ich was:
in der Zeile 44 ist nur ein Schreibfehler: in "ssl_certivicate_key" muss das „v“ durch ein „f“ ersetzt werden. Dann müsste es auch mit den einkommentierten Zeilen wieder weiter gehen.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Alexa4p3 für Dummies
Einklappen
X
-
Leider nicht. Die conf Dateien konfigurieren den nginx ja so, dass er vom Router her https erwartet (Port 443). Dazu benötigt er aber die Zertifikate und Schlüssel. Wenn die nicht da sind, geht dann gar nichts mehr. Die genauen Pfade, wo Deine Zertifikate und Schlüssel liegen, müssen daher in der https.conf eingetragenen werden.Zitat von 2malmama Beitrag anzeigenMüsste das nicht eigentlich sogar bedeuten, dass ich bei auskommentierten Zertifikaten Zugriff erhalten müsste?
Ein Script rufst Du mitauf.Code:bash <scriptname>
Gruß
Wolfram
Einen Kommentar schreiben:
-
Guten Morgen zusammen,
da bin ich wieder - neuer Tag, neues Glück...
Das klingt gerade wie Musik in meinen Ohren! Danke für diese ehrlichen Worte - da komm ich mir wenigstens nicht ganz sooo bescheuert vor....Zitat von Onkelandy Beitrag anzeigenAch neeee, das ganze nginx Setup ist echt eine pain in the ass. Ich bin nur megafroh, dass ich das dann irgendwie hinbekommen habe, gerade mit dem Appleproblem.
mmmh - den Hinweis habe ich so nirgends gesehen.Zitat von Onkelandy Beitrag anzeigenAm Raspi Image muss man ja eigentlich nur die zwei erwähnten Scripts ausführen
(btw: wie startet man die Ausführung von Skripten?)
Als ich mein Projekt gestartet habe, habe ich das Image installiert und die Anwenderdokumentation hergenommen. Hierbei musste ich schon feststellen, dass viele von den Befehlen, die ich dort gelesen hatte, schon ausgeführt waren. Ich hatte also schon das Problem, dass ich gar nicht wusste, an welchem Punkt ich einsetzen muss, wenn das Image verwendet wird. Ähnlich ging es mir ja später mit dem Einsatz von NGINX.
Das hatte ich mir zwar gedacht - aber nur wenn die Zeilen auskommentiert sind, bekomme ich keinen Fehler bei nginx -t.Zitat von Onkelandy Beitrag anzeigenAd "sed -i 's/#ssl_client_certificate/ssl_client_certificate/g'" -> Es werden einfach die Zeilen mit den Zertfikitaten ENTkommentiert. Wenn du sie wieder auskommentierst, funktioniert der Reverse Proxy mit Zertifikaten natürlich NICHT.
Auskommentiert - also inaktive Zertifikate ergibt:
Entkommentiert - also aktive SSL Zertifikate ergibt:sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
In Zeile 44 meiner https.conf ist der private Schlüssel angeführt (prevkey.pem). Gibt es dann nicht also doch ein Problem mit meinem Zertifikat?sudo nginx -t
nginx: [emerg] unknown directive "ssl_certivicate_key" in /etc/nginx/conf.d/https.conf:44
nginx: configuration file /etc/nginx/nginx.conf test failed
Müsste das nicht eigentlich sogar bedeuten, dass ich bei auskommentierten Zertifikaten Zugriff erhalten müsste?Zitat von Onkelandy Beitrag anzeigenAnsonsten sollte Port 80 NICHT am Router weitergeleitet werden, da dann ja jeder auch ohne Zertifikat auf deinen Webserver zugreifen kann.
Einen Kommentar schreiben:
-
Ich habe jetzt hier den Überblick ein bisschen verloren... Am Raspi Image muss man ja eigentlich nur die zwei erwähnten Scripts ausführen.
Ad ufw Fehler: Scheint ein Rechteproblem zu sein, ist aber eigentlich wurscht. Die Befehle würden nur dafür sorgen, dass die Firewall Port 80 freischaltet und danach wieder blockiert.
Ad "sed -i 's/#ssl_client_certificate/ssl_client_certificate/g'" -> Es werden einfach die Zeilen mit den Zertfikitaten ENTkommentiert. Wenn du sie wieder auskommentierst, funktioniert der Reverse Proxy mit Zertifikaten natürlich NICHT.
Ad "secret key" -> Ja, PW in clear text.
Ad Port 80 und 443 Weiterleitung. Port 80 muss für das Zertifikaterstellen mit letsencrypt offen und weitergeleitet werden. Ansonsten sollte Port 80 NICHT am Router weitergeleitet werden, da dann ja jeder auch ohne Zertifikat auf deinen Webserver zugreifen kann.
Ad yourIP: musst du nirgendy eingeben. Es ist nur der Hinweis, welche Ordner auf dem Webserver abgerufen können. Mit IP oder dyndns wie auch immer.
Einen Kommentar schreiben:
-
Ach neeee, das ganze nginx Setup ist echt eine pain in the ass. Ich bin nur megafroh, dass ich das dann irgendwie hinbekommen habe, gerade mit dem Appleproblem.Zitat von AndreK Beitrag anzeigen
Einen Kommentar schreiben:
-
naja - "ich guck mal grad durch" dauert wohl doch länger.
Ich melde mich erst morgen wieder
meine Kids sind jetzt endgültig genervt und Mama muss jetzt noch mal was anderes machen.... In dem ganzen Durcheinander kann ich kaum eine Zeile geradeaus lesen...
Ich guck morgen wieder rein
Danke soweit - und gute Nacht
ich nerv Euch dann morgen weiter
Einen Kommentar schreiben:
-
dankeschön - ich habs gerade auch gefundenZitat von wvhn Beitrag anzeigen/opt/setup/setup_certs.sh (siehe oben im Bash Skript)
Du musst schneller Antworten - dann find ich es bevor Du antwortest - schneller
Ich guck grad mal durch - melde mich gleich
Einen Kommentar schreiben:
-
Danke für Deine AnteilnahmeZitat von wvhn Beitrag anzeigenSorry, das wird noch mehr zur Ochsentour, als ich gedacht hatte.
Die Datei kannte ich bisher noch nicht - das geht (vermute ich) auch nicht automatisch und mache es per Hand? - Wo finde ich die Datei?Zitat von wvhn Beitrag anzeigenHast Du auch überprüft, ob alle Schritte in dem Script setup_certs.sh erledigt sind?
Einen Kommentar schreiben:
-
Sorry, das wird noch mehr zur Ochsentour, als ich gedacht hatte. Hast Du auch überprüft, ob alle Schritte in dem Script setup_certs.sh erledigt sind?Zitat von 2malmama Beitrag anzeigensource /opt/setup/setup_certs.sh
Danach kannst Du auf der Kommandozeile mitauslesen, was Du anstelle von DOMAIN_HERE eintragen musst (wenn nicht schon geschehen).Code:grep "EASYRSA_REQ_CN" $RSA_FOLDER/vars | cut -d'"' -f 2
Zuletzt geändert von wvhn; 17.10.2020, 18:35.
Einen Kommentar schreiben:
-
- wer gucken kann ist halt klar im Vorteil....Zitat von wvhn Beitrag anzeigenIm Kopf des Bash Scripts:
RSA_FOLDER=/etc/ssl/easy-rsa
KEY_FOLDER=/etc/ssl/ca/
danke. Allerdings musste ich im Nachgang feststellen, dass ich da ja eh nix eintragen soll - oder doch?
Ich seh den Wald vor lauter Bäumen schon wieder nicht mehr.... Ist schon doof gerade. (Persönliche Querelen beim Hocken vor der Kiste mit Kids und Partnern muss ich wohl keinem von Euch erklären...
)
Mein Kennwort - im Klartext (oh Schreck!) - hab ich in der hass_access.lua hinterlegt.
Die anderen Kommentare sind ok (?)
Prozess neu gestartet - keine Veränderung. Intern 404 und extern unerwartet geschlossen (beim Versuch die SmartVisu zu erreichen).

Sieht jemand den Baum? Dann bitte eine rote Schleife drum machen, damit ich ihn finde, ja
Einen Kommentar schreiben:
-
Im Kopf des Bash Scripts:Zitat von 2malmama Beitrag anzeigen#wo zum Teufel (entschuldigt bitte) finde ich denn nun wieder den Ornder zu "$RSA_FOLDER"???
RSA_FOLDER=/etc/ssl/easy-rsa
KEY_FOLDER=/etc/ssl/ca/
ja.Zitat von 2malmama Beitrag anzeigen#Da noch immer "<SECRETKEY from OPENSSL>" in der Datei steht, gehe ich davon aus, dass das nicht geschehen ist. Muss das Kennwort denn im Klartext hier hinterlegt werden????
Einen Kommentar schreiben:
-
Mmmh ja, bin ich eher der Typ: lesen - wenigstens teilweise verstehen - trotzdem ausprobieren und keine Angst davor haben...
Nicht immer einfach und geradlinig, aber ich hab sicherlich auf dem ein oder anderen Umweg auch jede Menge dazugelernt. Und btw. sooo viele Linuxbefehle verschiedener Art hab ich vermutlich in den letzten 20 Jahren nicht benutzt...
Zunächst hatte ich noch mal auf den im https://www.smarthomeng.de/nginx-als-reverseproxy verlinkten Beitrag https://goneuland.de/debian-9-stretc...bot-erstellen/ geguckt.
Ich möchte nämlich auch gerne verstehen, was ich tue und nicht nur stumpf was dahinbasteln.
Ich habe mich ja - auch inkl. der persönlichen Config-Datei - an der nginx-als-reverseproxy Anleitung entlanggehangelt.
Nach einem Blick in die dort verlinkte Anleitung über die Zertifikatserstellung bin ich gleich eingangs an der Grafik mit der Erfolgsmeldung hängen geblieben. (Beide Dateien hänge ich mal mit an). Die beiden Fehler kurz vor meiner Erfolgsmeldung haben mich dazu bewogen, den Durchgang doch noch mal neu zu starten.
fehler certbot.PNG
Certbot gutes Beispiel.png
Zuerst habe ich geprüft, ob in meiner letsencrypt.conf auch der vorgegebene Code steht:
Das tut er, jedoch hat er in meiner conf - ohne "". Das habe ich mir vorsichtshalber gemerkt, es aber nicht geändert.echo "location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/letsencrypt;
}"
Dann habe ich geprüft, ob das Verzeichnis, in welchem die Zertifikats-Anfragen bearbeitet werden sollen vorhanden ist, musste aber feststellen, dass die Ordner .well-known/acme-challenge bei mir fehlen. Nach ein wenig Tüftelei konnte ich herausfinden, dass diese Ordner sehr wohl da, aber eben versteckt sind - der Grund warum ich ihn nicht finden konnte…
Dann habe ich geprüft, ob
in folgenden Dateien vorhanden ist (war jeweils schon enthalten):include /etc/nginx/snippets/letsencrypt.conf;
Nginx/sites-enabled/default
Nginx/sites-available/default
Dann habe ich folgenden Befehl personalisiert und
abgeschickt.Sudo certbot certonly – rsa-key-size 4096 – webroot -w /var/www/letsencrypt -d eureDomain.de -d www.eureDomain.de
Das brachte einen Fehler über die verwendeten Argumente zum Vorschein, deshalb habe ich den Befehl von der bisher altbekannten Beschreibung personalisiert und verwendet:
Der funktionierte und ich die Neuerstellung des Zertifkats begann. Und dann waren sie wieder da..... Fehler. Zwei an der Zahl mit dem Wortlaut:sudo certbot certonly --rsa-key-size 4096 --webroot -w /var/www/letsencrypt -d <mydomain>.<myds>.<me>
Error output from ufw:
WARN: uid is 0 but '/' is owned by 501
fehler certbot wieder.PNG
Ich konnte dazu auch keine passende Lösung für mich ergoogeln.....
daran hab ich mich auch gewagtZitat von wvhn Beitrag anzeigenBash-Skript /opt/setup/setup_nginx.sh zu analysieren und nur die Schritte nachzuholen, die Du noch nicht ausgeführt hast.
also - wenn ich alles richtig verstanden habe, wäre das wie folgt (entschuldigt bitte - bei mir sieht es VIEL bunter und schöner aus, aber ich hab Euch wenigstens meine Kommentare gemarktert - dann ists vielleicht nicht ganz so dröge...):
Code:#!/bin/bash RSA_FOLDER=/etc/ssl/easy-rsa KEY_FOLDER=/etc/ssl/ca/ source /opt/setup/setup_certs.sh nginx_config () { domain=$(grep "EASYRSA_REQ_CN" $RSA_FOLDER/vars | cut -d'"' -f 2) echo "" echo "Changing nginx config based on domain $domain" sudo sed -i 's/'DOMAIN_HERE'/'${domain}'/g' /etc/nginx/conf.d/https.conf 2>&1 [MARKIEREN]#in der https.conf gibt es 4 Stellen an denen DOMAIN_HERE durch die eigene Werte ersetzt werden müssten: #hier habe ich das gemacht[/MARKIEREN] server_name DOMAIN_HERE; [MARKIEREN]#in den folgenden 3 Fällen habe ich es gemacht, aber wieder auskommentiert, da es sonst zu den berichteten Fehlern kommt #ssl_certificate /etc/letsencrypt/live/DOMAIN_HERE/fullchain.pem; #ssl_certificate_key /etc/letsencrypt/live/DOMAIN_HERE/privkey.pem; #ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN_HERE/fullchain.pem; #[/MARKIEREN] sudo sed -i 's/'DOMAIN_HERE'/'${domain}'/g' /etc/nginx/sites-available/default 2>&1 [MARKIEREN]#in dieser Datei gibt es nur 1 Stelle, DIE FEHLTE!!! Allerdings diese Änderung hat noch keinen Erfolg gebracht. #[/MARKIEREN] sudo sed -i 's/#ssl_certificate/ssl_certificate/g' /etc/nginx/conf.d/https.conf 2>&1 sudo sed -i 's/#ssl_certificate_key/ssl_certificate_key/g' /etc/nginx/conf.d/https.conf 2>&1 sudo sed -i 's/#ssl_trusted_certificate/ssl_trusted_certificate/g' /etc/nginx/conf.d/https.conf 2>&1 sudo sed -i 's/#ssl_client_certificate/ssl_client_certificate/g' /etc/nginx/conf.d/https.conf 2>&1 [MARKIEREN]#ich bin mir nicht sicher, was genau die oberen Befehle bewirken - sie beziehen sich aber wieder auf die bereits oben genannten 3 Stellen, die Fehler nach sich ziehen, wenn ich sie entkommentiere # #Ich habe schon herausgefunden -- ungefähr zumindest -- wie der Befehl sed aussieht, auch dass das -i den Insert-Befehl darstellt. Aber 100% schlau geworden bin ich dadurch irgendwie noch nicht....: #Das würde heißen, dass die Zeilen in die Datein eingefügt wurden, richtig? #[/MARKIEREN] sudo sed -i 's/#ssl_crl/ssl_crl/g' /etc/nginx/conf.d/https.conf 2>&1 sudo sed -i 's/#ssl_verify_client/ssl_verify_client/g' /etc/nginx/conf.d/https.conf 2>&1 sudo sed -i 's/#ssl_dhparam/ssl_dhparam/g' /etc/nginx/conf.d/https.conf 2>&1 unset pw echo "" echo "You have to put your private key password in the lua script to make reverse proxy work correctly." echo "Either do it manually by changing first line in /etc/nginx/scripts/hass_access.lua." [MARKIEREN]#Das habe ich schon mal automatisch erledigen lassen, ich weiß nur nicht mehr, bei welcher meiner vielfachen Installationen #Da noch immer "<SECRETKEY from OPENSSL>" in der Datei steht, gehe ich davon aus, dass das nicht geschehen ist. Muss das Kennwort denn im Klartext hier hinterlegt werden????[/MARKIEREN] read -p "Or provide the password here and let me insert it automatically (Hit enter to skip): " pw if [ $pw ]; then sudo sed -i 's/'\<SECRETKEY' 'from' 'OPENSSL\>'/'$pw'/g' /etc/nginx/scripts/hass_access.lua 2>&1 fi IP=$(sudo ip addr list eth0 |grep 'inet ' |cut -d' ' -f6|cut -d/ -f1) echo "" echo "" echo "Creating Letsencrypt certificate" goencrypt=False if sudo [ -f /etc/letsencrypt/live/${domain}/fullchain.pem ]; then echo "" echo "An SSL certificate is already created in /etc/letsencrypt/live/${domain}." echo "Do you want to create a new one or keep the current?" select lets in "Create" "Keep" "Skip"; do case $lets in Create ) goencrypt=True; break;; Keep ) goencrypt=False; echo "Keeping current SSL fullchain."; break ;; Skip ) echo "Skipping"; break;; *) echo "Skipping"; break;; esac done else goencrypt=True fi if [ $goencrypt = True ]; then echo "IMPORTANT: You HAVE to forward port 80 to your Raspi on your router now before you advance." echo "Did you forward port 80 to this Raspberry Pi (IP: $IP)?" [MARKIEREN]#Das ist automatisch doch schon so, denn die 80 und die 443 musste ich ja freigeben, da der Proxy, wie auch der Rest auf einer Kiste laufen, nicht wie sinnvollerweise auf 2 getrennten.[/MARKIEREN] select port in "Yes" "No" "Skip"; do case $port in Yes ) echo "Going on with creating the SSL certificate"; break;; No ) echo "You need to create SSL certificates for this to work. Anyhow, skipping now."; break;; Skip ) echo "Skipping SSL certificate creation"; break;; *) echo "Skipping"; break;; esac done sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge 2>&1 echo "" echo "Please provide your mail address in the next step." sudo certbot certonly --rsa-key-size 4096 --webroot -w /var/www/letsencrypt -d ${domain} echo "" echo "Now change the port forwarding from 80 to 443 on your router! Restarting nginx now." [MARKIEREN]#Diesen Befehl und den Neustart hatte ich (beim zweiten Mal in der aktuellen Version ja auch wieder mit Fehlern)[/MARKIEREN] fi } reverseproxy () { if sudo [ -d "$RSA_FOLDER/pki" ]; then echo "There is already a keys directory in $RSA_FOLDER. Do you want to start certificate creation from scratch nevertheless?" echo "Important information: You can use the same certficates for openvpn, nginx reverse proxy and freeradius!" echo "" options=("Create new keys" "Show directory content" "Skip") select openvpn_keys in "${options[@]}"; do case $openvpn_keys in "Create new keys" ) create_servercerts; break;; "Show directory content" ) sudo ls $RSA_FOLDER/pki; echo ""; echo "Choose again: 1=Create new keys, 3=Skip" ;; "Skip" ) echo "Skipping"; break;; *) echo "Skipping"; break;; esac done else create_servercerts fi create_clientcerts echo "Finished certificate setup." nginx_config echo "" echo "Copy certificates to your client." echo "If you also want to use OpenVPN, just import the copied conf file to your favourite OpenVPN client (Tunnelblick, OpenVPN, etc.)" echo "Start and enable openvpn (later in the setup process)" [MARKIEREN]#wo zum Teufel (entschuldigt bitte) finde ich denn nun wieder den Ornder zu "$RSA_FOLDER"???[/MARKIEREN] } NGINX_e=$(systemctl is-enabled nginx 2>&1 | tail -n 1)&> /dev/null echo "" echo "nginx: Webserver, necessary for SmartVisu, Backend, etc. (currently $NGINX_e)" select nginx in "Enable" "Disable" "Skip"; do case $nginx in Enable ) sudo systemctl enable nginx; break;; Disable ) sudo systemctl disable nginx; break;; Skip) echo "Skipping"; break;; *) echo "Skipping"; break;; esac done NGINX_e=$(systemctl is-enabled nginx 2>&1 | tail -n 1)&> /dev/null echo "" echo "nginx Service is $NGINX_e." if [[ $NGINX_e == "enabled" ]]; then echo " The server is setup the following way to easily access your websites:" echo "http://<YOURIP>/smartvisu -> smartVISU 2.9" echo "http://<YOURIP>/smartvisu2.8 -> smartVISU 2.8" echo "http://<YOURIP>/backend-> SmarthomeNG Backend (if plugin is enabled in smarthome config)" echo "http://<YOURIP>/phpmyadmin -> Admin Tool to manage SQL database. Login is root/smarthome" echo "http://<YOURIP>/shnet -> SmarthomeNG Network Plugin. Port is configured to 8888. Change in /etc/nginx/sites-available/default" echo "http://<YOURIP>/monit -> If you enable monit (later) you can see the status of your services" echo "http://<YOURIP>/monitgraph -> If you enable monit (later) you can see graphs of your computer resources per service" echo "http://<YOURIP>/grafana -> If you enable influxdb and grafana (later) you can use time series databases" echo "http://<YOURIP>/red -> If you enable node-red (later)" echo "" echo "" IP=$(sudo ip addr list eth0 |grep 'inet ' |cut -d' ' -f6|cut -d/ -f1) echo "You can setup nginx as a Reverse Proxy to securely access the listed websites from outside your home network." echo "To work correctly you need to forward port 443 in your router to the internal IP of this Raspberry Pi ($IP)." echo "Furthermore you need to activate a Dynamic DNS service on your Router or other network device!" select reverse in "Enable" "Disable" "Skip"; do case $reverse in "Enable" ) reverseproxy; break;; "Disable" ) echo "Please disable Port Forwarding on your router to disable reverse proxy functionality"; break;; "Skip" ) echo "Skipping"; break;; *) echo "Skipping"; break;; esac done sudo systemctl restart nginx [MARKIEREN]#Ich finde die passende Datei nicht, in der ich "YOURIP" ersetzen müsse :([/MARKIEREN] FAIL2BAN_e=$(systemctl is-enabled fail2ban 2>&1)&> /dev/null echo "" echo "fail2ban: bans IP addresses that tried to access nginx webserver unsuccessfully (currently $FAIL2BAN_e)" select fail in "Enable" "Disable" "Skip"; do case $fail in Enable ) sudo systemctl enable fail2ban; break;; Disable ) sudo systemctl disable fail2ban; break;; Skip) echo "Skipping"; break;; *) echo "Skipping"; break;; esac done FAIL2BAN_e=$(systemctl is-enabled fail2ban 2>&1)&> /dev/null echo "" echo "fail2ban Service is $FAIL2BAN_e." fi
Einen Kommentar schreiben:
-
komme gerade erst wieder nach Hause. Im Wiki auf github zu suchen, wäre auch mein nächster Schritt gewesen. Aus meiner Sicht sollte es aber auch ausreichen, einfach das Bash-Skript /opt/setup/setup_nginx.sh zu analysieren und nur die Schritte nachzuholen, die Du noch nicht ausgeführt hast. Ich gehe davon aus, dass Du ganz nah dran bist und nur ein paar Platzhalter / Variablennamen in den conf-Dateien noch durch Deine eigenen Angaben ersetzten musst.
Für den Zugriff auf smartvisu brauchst Du zwingend http (Port 80) intern, da der Websocket sonst klemmt. Außerdem muss in den confs noch der Standard-Pfad für den Webserver auf /var/www/html gesetzt werden.
Gruß
Wolfram
Einen Kommentar schreiben:
-
ok - dann klemme ich mich da noch mal hinter.
aber dann hat ja wenigstens einer was zum LachenZitat von AndreK Beitrag anzeigenOnkelandy sitzt sicherlich "vor" dem "Arlberg" und lacht sich tot.

Zuletzt geändert von 2malmama; 17.10.2020, 14:55.
Einen Kommentar schreiben:


Einen Kommentar schreiben: