Hallo zusammen,
in meine tabletUI Darstellung möchte ich nun doch ein wenig PHP einbauen. Dafür habe ich nginx und php-fastcgi installiert. Fhem und nginx laufen beide zusammen auf einem RasPi2. Ein Test mit phpinfo () zeigt mir, dass grundsätzlich der Webserver funktioniert.
Nun habe ich in Verbindung mit nginx hier sehr viel über den Einsatz als Reverse-Proxy gelesen und wie ich fhem per SSL und HTTPS sicherer aus dem Internet erreichen kann, allerdings will ich mein Steuerung vorerst gar nicht aus dem Internet heraus aufrufen können. Das könnte evtl. eine Ausbaustufe sein.
Mir geht es vorerst nur darum, PHP nutzen zu können.
Was muss ich denn dafür tun ?
Vielen Dank schon einmal für die Unterstützung.
Hallo,
also ich habe das per Apache gelöst.
Einfach als reverse Proxy eingerichtet und er macht automatisch mit dem libapachephp5 Modul PHP.
Nginx ist zwar schneller und "leichter" als Apache, dafür ist der Apache aber sicherer.
Wenn du es als Ausbaustufe in Betracht ziehen möchtest, kann ich dir wirklich nur Apache empfehlen.
Reversproxy:
Der Apache macht eigentlich nichts anderes als die Aufrufe auf seinem Port (meistens 80 oder 443 https) an den FHEM auf 8083 weiter zu leiten.
Die Antwort schickt er dann dem Client, also dir.
Wenn du dazu noch Fragen hast, schreib ruhig. Ich kann dir dann meine Config geben (aber eben Apache)
LG,
Ingo
Hallo eisi,
vielen Dank für die Antwort, aber die Apache Einstellungen werden mir wohl nicht weiter helfen.
Ich habe es bisher geschafft, eine Portweiterleitung von Port 80 auf Port 443 einzurichten und durch eine SSL Verschlüsselung abzusichern. Klappt auch mit websockets.
PHP ist installiert und kann auch im normalen webserver genutzt werden.
Bei fhem funktioniert das aber nicht. Hier einmal meine nginx Einstellungen :
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name 192.168.178.35;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/jenkins.access.log;
location / {
set $my_http_upgrade "";
set $my_connection "Connection";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
if ($http_upgrade = "websocket") {
set $my_http_upgrade $http_upgrade;
set $my_connection "upgrade";
}
proxy_set_header Upgrade $my_http_upgrade;
proxy_set_header Connection $my_connection;
proxy_pass http://localhost:8083;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
#fastcgi_param HTTP_PROXY "";
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Vielleicht kann ja jemand helfen.
Also:
FHEM läuft auf 192.168.0.200:8083
Hier die Apacheconfig.
Mehr ist nicht nötig.
<VirtualHost 192.168.0.200:80>
ServerAdmin webmaster@localhost
DocumentRoot /opt/fhem/www/tablet
<Directory /opt/fhem/www/tablet>
Order allow,deny
Allow from all
Require all granted
Options +Indexes
</Directory>
LogLevel alert rewrite:trace2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location /fhem>
RewriteEngine On
ProxyPass http://localhost:8083/fhem
ProxyPassReverse http://localhost:8083/fhem
</Location>
</VirtualHost>
Zitat von: eisi am 18 Oktober 2017, 16:00:01
Nginx ist zwar schneller und "leichter" als Apache, dafür ist der Apache aber sicherer.
Auf die Begründung wär ich mal gespannt... ;)
Ich habe zwar beide privat nicht im Einsatz, aber schon der zweite Google Fund sagt das gleiche: https://www.google.de/amp/t3n.de/news/nginx-vs-apache-814684/amp/
Der Nginx ist für statische Inhalte deutlich schneller, aber leider dadurch, dass er PHP nur im CGI ausführt anfälliger für Schwachstellen.
CGIs muss man manche Sachen halt verbieten, die beim Apache überhaupt nicht erst erlaubt werden.
Gerade hier in der Haussteuerung mit gewünschtem Zugriff von Aussen, sollte hier peinlichst genau konfiguriert werden.
Da entsteht das Probem. Da viele Leute hier einfach nur ein "Spielzeug" sehen, geht es auf Kosten der Sicherheit,
wenn man nicht weiß, was man da genau konfiguriert und damit frei gibt.
Zusammengefasst:
Der Apache ist sicherer für Anfänger, auch wenn er nicht das tut, was er machen soll.
Der Nginx ist einfacher, tut was er soll, aber leider auf Kosten der Sicherheit.
Noch etwas zum Thema Sicherheit:
Die NO-GO-Konfig:
Von Aussen per Handy direkt über einen Tunnel durch den Router (freigegebener Port) auf FHEM zuzugreifen!!
Die bessere Konfiguration wäre folgende:
Handy legt die Befehle für die Haussteuerung auf einem Server ab. (Natürlich USER/PW/HTTPS geschützt)
Haussteuerung holt sich über den Server (USER/PW/HTTPS mit anderen Usernnamen und PWs!!) die Befehle ab und führt diese Zuhause aus.
Vielen Dank für die gute Erklärung! So einen tiefen Einblick habe ich schon mal garnicht. Aber das mit der Sicherheit bezogen auf unerfahrene Hobbyadmins verstehe ich.
Und ich habe auch die "No-Go- Konfig" im Einsatz: FHEM <-> NGINX (TLS+ starkes PW) <-> Fritzboxfreigabe <-> Außenwelt.
Auch wenn es sicher sicherer und professioneller geht, fühle ich mich damit recht sicher.
Z.B. gibt "https://www.ssllabs.com/ssltest/" das Ergebnis im Anhang aus. Aber das ist ja nur ein kleiner Teil der Sicherheit...
Wenn das Zert. nicht lokal erzeugt wäre, hätte ich wohl ein "A" bekommen... ;)
Naja, es ist mein Beruf (System und Netzwerkadmin) solche Sachen wissen :-)
Es gibt halt Schwachstellen im Netzwerk und ein Portforwarding ist eine solche Stelle.
Ein guter Schutz wäre es, wenn du sicherstellst, dass nur du von deinem Gerät (IPV4 oder IPV6) Zugrif auf dieses Forwarding hast.
Es nützt natürlich was, wenn du HTTPS und starke PWs benutzt. Leider gibt es aber auch immer Sicherheitsupdates für Nginx und Apache.
Wenn du die dann nicht machst, kann man auch so von aussen reinkommen :-)
Wenn man als Hacker erstmal in einem System ist, kann man ja auch andere Rechner im selben Netz dazu bringen, Verbindungen nach aussen zu öffnen.
Klar bleibt es jedem selber überlassen, wie er sein Netz sichert, aber man sollte auch immer daran denken, was man in seiner Haussteuerung so betreibt.
Wenn einer von ausserhalb das Licht an und aus machen kann ist das ja noch "lustig".
Wenn auch die Heizung dran hängt, wird das vieleicht etwas teurer, wenn man von ausserhalb die Heizung auf 30 Grad hochdreht.
Nur: Wenn Sicherheitsrelevante Sachen wie Jalousien oder Haustüröffnung dran hängen, dann wird es halt ernst und man sollte sich genau überlegen, was man da macht.
Zitat von: eisi am 20 Oktober 2017, 23:55:19
Die bessere Konfiguration wäre folgende:
Handy legt die Befehle für die Haussteuerung auf einem Server ab. (Natürlich USER/PW/HTTPS geschützt)
Haussteuerung holt sich über den Server (USER/PW/HTTPS mit anderen Usernnamen und PWs!!) die Befehle ab und führt diese Zuhause aus.
dazu kannst du gerne mal an anderer Stelle etwas schreiben ist sicher eine ganz interessante Geschichte.
Ich würde es begrüßen, denn ich beiße mir gerade die Zähne aus an einem Beispiel welches hier (https://haus-automatisierung.com/hardware/fhem/2016/12/30/fhem-tutorial-reihe-part-21-zugriff-auf-fhem-ueber-das-internet.html) weiter unten beschrieben ist und ich bekomme da leider keine Antwort auf meine Frage.
Die Einrichtung habe ich mit einer zusätzlichen DDNS Domain gemacht und auch den Apache2 konfiguriert nur liefert der mir einige Fehler wo ich Hilfe zu brauche...!
Du kannst mir auch gerne eine PN schreiben, wenn du dazu einen Ansatz hast. Vielen Dank
ZitatIch habe heute nochmals eine Installation auf meinem Proxmox Server in einem Container gemacht.
Ich komme bis zu dem Punkt und habe hier 2 Fehler, einmal in der apache2.conf Datei und dann mit dem include Pfad, diese Datei gibt es dort gar nicht.
Hier mal die Fehler:
root@FHEM-Server:/etc/apache2/sites-enabled# apachectl configtest
apache2: Syntax error on line 219 of /etc/apache2/apache2.conf:
an der Stelle steht im Original:
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
hier habe ich einfach meine Seite eingetragen, aber in beiden Fällen meckert er rum- was steht da bei euch drin
Syntax error on line 14 of /etc/apache2/sites-enabled/fhem.resse-hausautomation.de.conf: Could not open configuration file /etc/letsencrypt/options-ssl-apache.conf: No such file or directory
Action 'configtest' failed.
The Apache error log may have more information.
Wo befindet sich eigentlich die Apache error log Datei.?
Hast PN :-)
Wobei ein Portforwarding jetzt auch nicht sooo das Problem ist, wenn die Software dahinter sicher. Also der Direkte Zugriff (ohne Passwort) auf fhem (damit meine ich NICHT den Fhem-Passwortschutz), wäre z.B. für mich so einer.
Da ist meistens die Interne-Config das Größere Problem (z.B. Pi mit ssh und Standardpasswörtern), da ein Angriff über bande, d.h. Browser auf einem anderen PC, heute DER Hit bei den "Bösen" ist ...
Zitat von: eisi am 21 Oktober 2017, 16:46:40
Hast PN :-)
vielen Dank, wenn ich etwas mehr Zeit habe schaue ich mir das an.
Ich habe dazu einen neuen Beitrag eröffnet... damit man die Problematik dort klären kann und es hilft bestimmt auch andren Usern
https://forum.fhem.de/index.php?topic=78308.new#new (https://forum.fhem.de/index.php?topic=78308.new#new)
Hallo eisi,
möchte deine Configuration von Apache verwenden, nur funktioniert bei mir nicht....
Habe in die Apache2.Conf die fhem Ordner strucktur hinzugefügt, und
Schreibe den Apache Inhalt in die 000-default.conf damit lässt sich mein Apache Server nicht aktivieren.
Was mach ich da falsch?
Mfg Mani
Hallo Mani,
die Apacheconfig gehört nicht unter die Struktur FHEM, sondern unter /etc/apache2/sites-available.
Dann wird ein Symlink von dieser Datei in /etc/apache2/sites-enabled angelegt und der Apache neugestartet.
Hallo eisi danke für die schnelle Antwort, das hab ich alles so gemacht jedoch lässt sich der Indianer nicht mehr aktivieren.
Muss ich noch Rechte vergeben?
Mfg Mani
Ist schwer aus der Ferne :-)
Poste mal genau deine Config.
So so hab ich das gemacht zuerst,
cd /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /opt/fhem/www/tablet
<Directory /opt/fhem/www/tablet>
Order allow,deny
Allow from all
Require all granted
Options +Indexes
</Directory>
LogLevel alert rewrite:trace2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location /fhem>
RewriteEngine On
ProxyPass http://localhost:8083/fhem
ProxyPassReverse http://localhost:8083/fhem
</Location>
</VirtualHost>
anschliessend..
sudo a2ensite 000-default.conf
sudo service apache2 start
ergibt:
Warning: Unit file of apache2.service changed on disk, 'systemctl daemon-reload' recommended.
Job for apache2.service failed. See 'systemctl status apache2.service' and 'journalctl -xn' for details
sudo service apache2 status
● apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2)
Drop-In: /lib/systemd/system/apache2.service.d
└─forking.conf
Active: failed (Result: exit-code) since Son 2018-01-07 18:49:47 CET; 42s ago
Process: 2326 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)
Jän 07 18:49:47 Home apache2[2326]: Starting web server: apache2 failed!
Jän 07 18:49:47 Home apache2[2326]: The apache2 configtest failed. ... (wa...).
Jän 07 18:49:47 Home apache2[2326]: Output of config test was:
Jän 07 18:49:47 Home apache2[2326]: AH00526: Syntax error on line 13 of /e...f:
Jän 07 18:49:47 Home apache2[2326]: Cannot find module rewrite
Jän 07 18:49:47 Home apache2[2326]: Action 'configtest' failed.
Jän 07 18:49:47 Home apache2[2326]: The Apache error log may have more inf...n.
Jän 07 18:49:47 Home systemd[1]: apache2.service: control process exited, ...=1
Jän 07 18:49:47 Home systemd[1]: Failed to start LSB: Apache2 web server.
Jän 07 18:49:47 Home systemd[1]: Unit apache2.service entered failed state.
Warning: Unit file changed on disk, 'systemctl daemon-reload' recommended.
Hint: Some lines were ellipsized, use -l to show in full.
zusätzlich hab ich versucht die apache2.conf anzupassen wobei ich nicht sicher bin ob das notwendig ist..
<Directory /opt/fhem/www/tablet>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
MfgMani
Cannot find module rewrite.
Du musst erst das Mod-Rewrite aktivieren.
sudo a2enmod rewrite
Jop Danke jetzt startet der Apache mal aber sollte eigentlich nur mit Angabe der IP-Adresse erreichbar sein oder? Ich muss den ganzen Pfad angeben um zum Tablet UI zu kommen.....und sollte longpoll auch funktionieren?
Mfg
Ja, bei mir brauche ich nur die IP eingeben. Das sollte auch so bei dir gehen. Der Pfad stimmt ja.
Was kommt denn, wenn du nur die IP eingibst?
Longpoll sollte gehen.
so ip geht schon musste mal die cookies löschen.....aber Longpoll hinkt noch :-[ wie hast du das in der index.html eingestellt?
Mfg
Garnicht.
Longpoll hab ich in FHEM eingestellt.
attr WEB longpoll 1
Es wäre besser, wenn der Apache richtig läuft, auf eine index.php umzusteigen.
so bei mir ist Websocket eingestellt aber auch auf 1 geht nix....
Jop möchte ich eh machen das ist der eigentliche Grund für den Umstieg da ich auch eine .PHP einbinden möchte.
Mfg
Schau mal bitte hier:
https://wiki.fhem.de/wiki/FHEM_Tablet_UI_FAQ
Hallo eisi, danke CORS auf 1 und Änderung in index.php nun läufts. Mfg
Wie könnte ich das im #6 Beitrag betreffend Zugriff von Aussen umsetzen? Mfg
Was genau meinst du?
Die Backlinks?
Jop nennt man das so du sagst da das man die Befehle auf einen server ablegt und fhem sich die dan abholt....
Nee :-)
Das geht aber nur über einen freien Server.
Der darf nicht bei dir im Haussteuerungnetz sein.
Prinzip:
Fhem - Freier Server - Handy
Handy schreibt einen Befehl auf den freien Server. (User/Pass gesichert)
Fhem fragt minütlich (oder in welchem Zeitabstand auch immer) den freien Server ab (User/Pass gesichert) und
führt dann den abgelegten Befehl aus.
Damit ist gewährleistet, dass keiner von Aussen in dein Netzwerk kommt.
Okey hört sich gut aber schwierig an.....
Wie komm ich zu einen freien Server mfg
Ich würde erstmal überlegen, ob du das wirklich brauchst.
Ein Webspace mieten kann man für 5 Euro / Monat.
Es gibt halt auch viele Sachen, die man über Timer regeln kann.
Nur muss es dann halt noch programmiert werden, falls es noch keine Lösung gibt.