Benutzer-Werkzeuge

Webseiten-Werkzeuge


hm:zusatz:apache:start

Apache Proxy als Zugriffsschutz für die CCU3

Einleitung

Zur Umsetzung solle ein Raspberry Pi 2/3 oder 3+ vorhanden sein. Desweiteren braucht man ein Image von Rasbian welches man hier runterladen kann. Dazu noch eine Micro-SD Karte, einen USB Micro-SD Kartenleser und je nach Geschmack einen USB WLAN Adapter falls man keinen Pi3b oder Pi3b+ nimmt.

Stückliste:

  1. Raspberry Pi3b+ (€40.-)
  2. Gehäuse (€10.-)
  3. Micro-SD Karte min 16GB (€10.-)
  4. USB Micro-SD Kartenleser (€10.-), falls nicht schon vorhanden
  5. USB WLAN Adpater (Für Pi3 und Pi2)

Eine sehr gutte Anleitung für Homematic Prxies aller Art, unter anderem für Mediola etc., gibt es hier. Daher habe ich unter anderem auch die Lets Encrypt Zertifikats Geschichte.

Installation Raspbian

Nach dem Download des Betriebssystem Images muss dieses auf eine Micro-SD-Karte kopiert werden. Dazu das heruntergeladene Archiv entpacken und, unter Windows per WinImage oder unter Linux per dd auf die SD-Karte kopieren.

Windows

Die SD-Karte per SD-Card Reader an den Rechner anschliessen und dann mit einem Tool wie dem Win32DiskImager das runtergeladene Raspian auf die SD-Karte kopieren. (Vorher natürlich das Archiv entpacken)

Dazu unter „1“ das Image auswählen, unter „2“ die SD-Karte bzw. deren Laufwerksbuchstaben und dann unter „3“ bzw. „Write“ das Kopieren starten.

Linux

fdisk -l (Herausfinden welchen Devicenamen die SD-Karte bekommen hat)
dd bs=4M if=2016-05-27-raspbian-jessie.img of=/dev/sdb (Name des Images und Name des SD-Karten Devices ersetzen)

Konfiguration Raspbian

Bevor man loslegen kann kann man noch den Start des ssh Dienstes aktivieren. Dazu muss in dem Image im Verzeichnis /boot eine Datei mit Namen „ssh“ angelegt werden. Geschieht dies unter Windows so ist drauf zu achten das die Datei keine automatische Endung wie .txt oder so erhaelt. Wenn man einen LC-Display am Raspberry betreiben will muss eventuell der Bildschirm gedreht werden da ansonsten das Bild auf dem Kopf steht. Dazu in der Datei /boot/config.txt die Zeile „lcd_rotate=2“ ergaenzen um den Bildschirminhalt um 180 Grad zu drehen.

Nach dem einlegen der SD-Karte in den Pi und dem Anschluss des Netzwerkkabels und anschliessend des Netzteils bootet der Pi und man kann auf dem Router, DHCP-Server, oder was auch immer bei euch die IP-Adressen vergibt, nachschauen welche sich der Pi geholt hat.

Danach kann man von Linux aus per SSH

ssh -l pi IP-ADRESSE

oder von Windows aus per Putty auf den Pi zugreifen.

Default Passwort für den User „pi“ ist „raspberry“.

Passwörter ändern

Als erstes werden die Passwörter für root und pi geändert, am Besten natürlich verschiedene Passwörter benutzen. Auch dran denken das die Tastatur eventuell noch auf Englisch eingestellt ist und daher „z“ und „y“ vertauscht sind und Sonderzeichen auch nicht da sind wo sie sein sollten. Am Besten vorher mal auf der Konsole ausprobieren..

pi@raspberrypi:~ $ sudo passwd root
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
pi@raspberrypi:~ $ passwd
Changing password for pi.
(current) UNIX password:                                                                                                      Enter new UNIX password:                                                                                                      Retype new UNIX password:                                                                                                      passwd: password updated successfully

IP-Adresse

Es sollte noch eine feste IP-Adresse für den Pi eingetragen werden, ansonsten würde der Proxy nur funktionieren bis der DHCP Server beim nächsten Mal eine neue IP-Adresse zuweisst.

Grafische Oberfläche

Oben rechts auf dem Desktop gibt es ein Netzwerksymbol, darauf mit echts klicken und den ersten Punkt „Eigenschaften“ auswählen. Dann im Dialog für die Netzerkschnittstellen wlan0 oder eth0, je nachdem welche man verwenden will die feste IPv4-Adresse eintragen in der Form 127.0.0.1/23, also die Netzmaske hinter dem Schrägstrich. Dann noch das Standardgateway und die Namesnserver (Meistens der Inetrnetrouter) eintragen und fertig…

Manuell

Die IP-Adresse wird in der Datei /etc/network/dhcpcd.conf eingetragen:

interface wlan0
inform 172.17.200.20/23
static routers=172.17.200.1
static domain_name_servers=172.17.200.1
static domain_search=n17.de

Ein bisschen Komfort

Wer will kann jetzt noch einige Komfortzusatzsoftware installieren. Ich benutze zum editieren gerne MC, den Midnight Commander, braucht man aber nicht unbedingt, VI tuts natürlich auch.

sudo apt-get install mc

Zur besseren Fehlersuche (falls man die man braucht) auch noch das Tool lsof installieren:

sudo apt-get install lsof

Falls Ihr euch nicht immer mit dem User pi anmelden wollt sondern auch aus der ferne per root arbeiten wollt so ist in der Datei /etc/ssh/sshd_config die Zeile

PermitRootLogin without-password

in

#PermitRootLogin without-password

zu ändern, d.h. auszukommentieren. Danach ssh neu starten mit:

sudo /etc/init.d/ssh restart

Installation/Konfiguration Apache

Dann per ssh auf dem Raspberry anmelden und erstmal Apache installieren (Wenn man sich direkt als User root und nicht als pi anmeldet braucht man das „sudo“ nicht):

sudo apt-get install apache2 apache2-utils libapache2-mod-rpaf apache2-utils  

Dann das Proxy Modul in Apache aktivieren und den Apache neu starten:

sudo a2enmod ssl headers rewrite proxy proxy_http; systemctl restart apache2

https Zertifikat erstellen

Programmsuite für die kostenlosen letsencrypt Zertifikate installieren:

sudo apt-get install python-acme
sudo apt-get install letsencrypt

Im Apache muss das Proxy-Modul aktiviert werden damit die Weiterleitung auf die Hoemmatic Zentrale funktioniert. Dazu muss man nur drei Links im Verzeichnis /etc/apache2/mods-enabled/ erstellen:

cd /ect/apache2/mods-enabled
ln -s ../mods-available/proxy.conf
ln -s ../mods-available/proxy_http.conf
ln -s ../mods-available/proxy.load

Dann die /etc/apache2/sites-available/default-ssl.conf editieren:

mcedit /etc/apache2/sites-available/default-ssl.conf

Darin unter ServerAdmin die neue Zeile ergänzen: (ddns.meinserver.de durch euren DNS Namen ersetzen)

ServerName ddns.meinserver.de

SSLEngine on
(Hier kommen die Einträge für das verwendete Zertifikat, die Dateioen dazu müssen in den entsprechenden Verzeichnissen abgelegt werden. cert.pem ist das Zertifikat, prickey.pem ist de private Schlüssel und chain.pem sind das Root und Intermediate-Zertifikat des Austellers letsencrypt oder andere)
SSLCertificateFile      /etc/apache2/ssl/cert.pem
SSLCertificateKeyFile /etc/apache2/ssl/privkey.pem
SSLCertificateChainFile /etc/apache2/ssl/chain.pem
Um den Zugriff nur für bestimmte Benutzer zu erlauben wird eine Datei konfiguriert in der Benutzer und Passwort stehen:
<Location />
  AuthType basic
  AuthName "home"
  AuthUserFile  /etc/apache2/datei_mit_benutzern
  Require valid-user
</Location>
Dann noch der wichtigste Teil, die Konfiguration der Weiterleitung auf die CCU2/3, damit wird bewirkt das jeder Aufruf von /ccu auf die CCU2/3 weitergeleitet wird.:
<IfModule mod_proxy.c>
      ProxyRequests off
      RewriteEngine On
      redirectmatch ^/ccu$ /ccu/
      rewritecond %{REQUEST_URI} ^/ccu/
      rewriterule (.*) $1 [PT]
      rewritecond %{HTTP_REFERER} https://mn.p7.de:83/ccu/ [OR]
      rewritecond %{HTTP_REFERER} https://mn.p7.de:83/webui/ [OR]
      rewritecond %{HTTP_REFERER} https://mn.p7.de:83/webui/js/extern [OR]
      rewritecond %{HTTP_REFERER} https://mn.p7.de:83/pda/ [OR]
      rewritecond %{HTTP_REFERER} https://mn.p7.de:83/api/ [OR]
      rewritecond %{HTTP_REFERER} https://mn.p7.de:83/addons/xmlapi/ [OR]
      rewritecond %{HTTP_REFERER} https://mn.p7.de:83/addons/cuxd/ [OR]
      rewritecond %{HTTP_REFERER} https://mn.p7.de:83/addons/cuxchart/ [OR]
      rewritecond %{HTTP_REFERER} https://mn.p7.de:83/ise/ [OR]
      rewritecond %{HTTP_REFERER} \?sid\=\@.+\@ [OR]
      rewritecond %{THE_REQUEST} \?sid\=\@.+\@
      rewriterule ^/(.*) /ccu/$1 [PT]
      rewriterule ^/pda/(.*) /ccu/pda/$1
      rewriterule ^/webui/(.*) /ccu/webui/$1
      rewriterule ^/webui/js/extern/(.*) /ccu/webui/js/extern/$1
      rewriterule ^/addons/db/(.*) /ccu/addons/db/$1
      rewriterule ^/addons/xmlapi/(.*) /ccu/addons/xmlapi/$1
      rewriterule ^/addons/cuxd/(.*) /ccu/addons/cuxd/$1
      rewriterule ^/addons/cuxchart/(.*) /ccu/addons/cuxchart/$1
      rewriterule ^/ise/(.*) /ccu/ise/$1
      ProxyPass /ccu/ http://172.17.200.14/ timeout=1200
      ProxyPassReverse /ccu/ http://172.17.200.14/ timeout=1200
  </IfModule>

Danach muss der apache2 neu gestartet werden:

/etc/init.d/apache2 restart

Alternativer Apache Port

Ein bisschen mehr Sicherheit, vor allem gegen Skript-Kiddies bekommt man indem man die Freigabe ins Internet (auf dem DSL-Router) nicht auf die Standardports 80 (http) oder 443 (https) konfiguriert.

Tinymatic Konfiguration

Um die Tinymatic App so einzurichten das diese sich uber den oben eingerichteteten Apache Proxya synchronisiert brauchen wir jetzt folgende Daten:

  • Offizielle Serveradresse (DynDNS Name oder aehnliches)
  • den eventuell abweichenden Port (Nicht 80 oder 443). Im unteren Beispiel habe ich 455 als Port genommen.
  • User und Passwort des oben eingerichteten Users

Um jetzt per Tinymatic auf die CCU zuzugreifen muss Tinymatic folgendermasssen konfiguriert werden:

Die Einstellungen aufrufen:

dann die Serveradresse editieren und die offizielle DNS Namen eingeben (Also z.B. https://meinname.hm.de/ccu oder https://meinname.hm.de:455/ccu) und mit OK bestaetigen:

Dann auf „Netzwerkeinstellungen“ gehen und dort Haken bei „Fernzugriff aktivieren“ und „HTTPS verwenden“ setzen und dann auf „Entfernte CCU Adresse“ tippen:

Dort dann nochmal die o.a. Serveradresse eingeben, allerdings ohne das /ccu am Ende (Also z.B. https://meinname.hm.de oder https://meinname.hm.de:455):

Dann runterscrollen:

Dort dann den Haken bei „HTTP Authentifizierung“ setzen und nacheinander Benutzername und Passwort editieren und eingeben:

Dann wieder in die Einstellungen zurueckgehen und einmal „Vollständige Synchronisierung“ anklicken.

hm/zusatz/apache/start.txt · Zuletzt geändert: 2022/10/25 18:42 (Externe Bearbeitung)