nginx mit php für tabletUI

Begonnen von derHeimwerker, 18 Oktober 2017, 15:42:16

Vorheriges Thema - Nächstes Thema

derHeimwerker

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.

eisi

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
3 x Rasp mit fhem 5.8 | 1 Rasp mit Kodi |1x Cube | 15 x MaxLan Thermostate und 18 Fensterschalter | 30 WLAN Schalter Sonoff | Diverse Sensoren mit Arduino | Tablet mit FTUI 2.6

derHeimwerker

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.

eisi

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>

3 x Rasp mit fhem 5.8 | 1 Rasp mit Kodi |1x Cube | 15 x MaxLan Thermostate und 18 Fensterschalter | 30 WLAN Schalter Sonoff | Diverse Sensoren mit Arduino | Tablet mit FTUI 2.6

fiedel

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...  ;)
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

setstate

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/

eisi

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.



3 x Rasp mit fhem 5.8 | 1 Rasp mit Kodi |1x Cube | 15 x MaxLan Thermostate und 18 Fensterschalter | 30 WLAN Schalter Sonoff | Diverse Sensoren mit Arduino | Tablet mit FTUI 2.6

fiedel

#7
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...  ;)
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

eisi

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.
3 x Rasp mit fhem 5.8 | 1 Rasp mit Kodi |1x Cube | 15 x MaxLan Thermostate und 18 Fensterschalter | 30 WLAN Schalter Sonoff | Diverse Sensoren mit Arduino | Tablet mit FTUI 2.6

moonsorrox

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 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.?
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

eisi

3 x Rasp mit fhem 5.8 | 1 Rasp mit Kodi |1x Cube | 15 x MaxLan Thermostate und 18 Fensterschalter | 30 WLAN Schalter Sonoff | Diverse Sensoren mit Arduino | Tablet mit FTUI 2.6

Wernieman

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 ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

moonsorrox

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
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

mani

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
RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

eisi

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.
3 x Rasp mit fhem 5.8 | 1 Rasp mit Kodi |1x Cube | 15 x MaxLan Thermostate und 18 Fensterschalter | 30 WLAN Schalter Sonoff | Diverse Sensoren mit Arduino | Tablet mit FTUI 2.6