SSL mit haproxy und eigenen domains über no-ip

  • Liebe Kollegen!

    Ich hatte (und habe noch immer) seit 2 Jahren einen Raspi mit OctoPrint im Einsatz, darauf läuft auch ein Webserver der auf das XS1 und etliche Wetterdaten zugreifen kann.
    Dieser hat auch eine Kamera und kann mir ein mail mit einem Foto schicken wenn der Print fertig ist.

    Egal, das ist nur die Vorgeschichte da ich die Daten nie wirklich über normales Port-Forwarding in die weite Welt schicken will hab ich mir vorgenommen dies über einen SSL-Zugriff einzurichten, damit nicht jeder gleich Passwörter oder sonstiges erschnüffeln kann.

    Nun, ich hab mir letztes Jahr auch zwei Domain-Namen reserviert und eine davon mit Office 365 für meine Frau und mich verwendet, als Selbständiger und privat.
    Seit einiger Zeit hab ich auch eine no-ip-Adresse über meine Fritz-Box eingerichtet aber all das noch nicht richtig genutzt (außer für VPN).

    Da ich aber meinen Raspi überall mit Handy's oder Webbrowsern steuern will und mir einen neuen 3er zugelegt hab der zur Alarmanlage und Haussteuerung mutieren soll fing ich an mir verschiedene Möglichkeiten anzusehen wie ich das Netzwerk ausschließlich über https von außen betreten kann aber intern am Raspi verschiedene Services leider auch ohne SSL nutzen kann.

    Von Octoprint kannte ich haproxy, eigentlich ein load-balancer für Server-Farmen der sehr klein ist und seit der Version 1.5.x (jetzt mit apt-get auf 1.5.8) auch SSL kann, und hab mal 'nen Versuch gestartet mit ihm ein SSL-Frontend zu generieren welches alle meine jetzigen Services (auch auch auf anderen Raspi's oder Services wie meinen NAS-Server) über's Web per SSL zu steuern.
    Natürlich wollte ich auch offizielle SSL-Zertifikate damit sich die verschiedenen Web-Browser nicht aufregen wenn selbst kreierte verwendet werden.

    Warum ich mich für haproxy entschieden habe kann im einem weiteren Eintrag gelesen werden den ich später anfügen werde wenn ich erkläre wie ich die verschiedenen Hauptseiten trennen kann.

    Also hab ich losgelegt und mich zuerst bei StartSSL(startssl.com) einen account kreiert und mir das Zertifikat in den Browser installiert mit dem ich dann bei StartSSL selbst (GRATIS) SSL-Zertifikate ausstellen kann.
    Für meine 2 Domains (nennen wir sich mein.com und dein.com) hab ich dann dort die Zertifikate generiert. Das geht für max 5 sub-domains ("http://www.mein.com", "blog.mein.com", "nas.mein.com", ...) wobei die erste die Hauptdomäne ist. Ich verwendete das von Startcomtool um den request und key zu generieren, den key bitte als mein.com.key abspeichern!

    Man bekommt dann eine Zip-Datei mit Zertifikaten von StartSSL, http://www.mein.com.zip wo weitere Zip's enthalten sind ( für Apache, IIS, NGinx) eines als OtherServer.zip.
    In diesem befinden sich

    • 1_Intermediate.crt
    • 2_www.mein.com.crt
    • root.crt

    die ersten beiden hab ich dann auf den Raspi in ein temporäres Verzeichnis kopiert (hab auch Samba am Raspi) und auch das main.com.key vom vorigen Schritt mit dem Smartcomm-Tool.

    Auf dem Raspi hab ich dann

    Code
    cd temp
    
    
    cat 2_www.mein.com.crt 1_Intermediate.crt mein.com.key > www.mein.com.pem2



    ausgeführt. Wichtig ist die Reihenfolge, hab lange gebraucht um nach der Ursache zu Googeln da haproxy das PAM-file sonst nicht akzeptiert hatte.

    Danach hab ich mit

    Code
    sudo mkdir /etc/ssl/haproxy
    
    
    sudo cp www.mein.com.pem2 /etc/ssl/haproxy

    Mit der 2. Domain ebenso verfahren und das pem2 (ich hab's so genannt damit ich weiß dass ich es selbst durch cat generiert habe und es nicht eines von sonstwem ist) auch in den /etc/ssl/haproxy folder kopieren. Damit kann mann auch mehrere Sites mit einem Proxy abdecken.

    Auf rem Router (für mich die Fritzbox) sollte eine Portfreigabe von 443-443 auf 443 vom Raspi eingerichtet werden, natürlich könnten die Ports auch geändert werden aber ich hab's so gelassen da meine links dann intern und extern funktionieren.

    So, jetzt wird haproxy installiert und konfiguriert:

    Code
    sudo apt-get haproxy
    sudo nano /etc/haproxy/haproxy.cfg
    sudo service haproxy restart


    In die cfg-Datei hab ich am Ende (noch in der default-Sektion) folgendes angefügt:


    So, das wars :)
    Nach dem Ändern der cfg-Datei halt wieser

    Code
    sudo service haproxy restart

    Wenn was im CFG-file nicht stimmt dann startet er eh nicht.

    In der gezeigten Konfiguration kann ich intern über normales http und extern nur über ssl (da ich nur portforwarding für ssl eingerichtet habe) auf die services zugreifen.

    Da ich kein Spezialist von SSL oder hproxy bin kann ich euch nur bitten zu Googeln um mehr zu erfahren, ich hab mir das aus 10 verschiedenen Anleitungen zusammengetragen bis es funktionierte.

    Viel Spaß
    Frank

    Frank

    Nach 35 Jahren im IT business hab ich mit Raspi mal selbst zum Programmieren begonnen...
    Habe auch einen 3D-Drucker, eine CNC-Fräse und etwas Elektronik-Bastelei als Hobby

    Einmal editiert, zuletzt von fjoke (15. Mai 2016 um 10:32)

  • Warum ich mich für haproxy entschieden habe kann im einem weiteren Eintrag gelesen werden den ich später anfügen werde wenn ich erkläre wie ich die verschiedenen Hauptseiten trennen kann.

    Also, wie schon oben gemeldet hab ich 5 sub-domains pro domain-Zertifikat.
    In meinem Falle z.b. ein

    Code
    www, blog, test, api, info

    .

    Wie schon erwähnt können die verschiedenen Services auf verschiedenen Rechnern laufen, das Meiste erledigt aber der Raspi auf dem haproxy auch selbst läuft (Ausnahme der OctoPrint Raspi und XS1).

    Mein eigenes Beispiel:

    • Ich habe motion installiert welches permanent die Kamera auf Veränderungen überwacht und auf port 8081 einen life-stream zur Verfügung stellt. Es kreiert automatisch ein Video mit der Bewegung und ein Bild.
    • Auf port 8080 kann motion in real-time konfiguriert werden, so Z.B. dass es ausgeschaltet wird wenn wir im Haus sind und nu läuft wenn wir weg sind.
    • Auf port 1880 hab ich node-red laufen. Dort läuft 'ne kleine Logik die schaut ob mein oder meiner Frau Handy da ist (es testet mit ping auf die Wlan-MAC der Geräte und auch auf den Bluetooth-id). Da beide Geräte immer Bluetooth und Wlan an haben erkennt das System dadurch unsere Präsenz und kann motion ein/ausschalten.
      Weiters kann mir node-red auch das bild schicken welches motion aufnimmt wenn es eine Bewegung gab, dazu auch ein SMS wenn ich will.


    So, all diese services will ich natürlich nicht im Netz verfügbar machen, die sollen möglichst sicher laufen. Deshalb hab ich sie so installiert dass sie nicht einmal im wlan dirket sichtbar sind sonern nur of dem Rasi selbst auf 127.0.0.1. Damit kann ich ausschließlich über den haproxy darauf zugreifen da dieser auf dem Raspi läuft und die Services verteilt.

    In der obigen Anleitung habt ihr die Konfig gesehen:


    Nun habe ich auch einen Blog als service dazugegeben, er läft auf port 3333. Übrigens, der Webserver, Node-Red und der Blog und laufen alle auf node.js.
    Außerdem will ich den webserver nur auf http://www.mein.com laufen haben, alle anderen Zugriffe sollen ins nirvana gehen.

    Somit muss ich meine haproxy.cfg abändern:

    Die obige Änderung bewirkt außerdem:

    • auf motion und node-red kann nur über iot.mein.com zugegriffen werden
    • der Blog wird über blog.mein.com adressiert
    • der normale Webserver über http://www.mein.com
    • den Backend mein lösche ich da ich nun gezielt zugreife


    Also versucht es mal
    Frank

    Frank

    Nach 35 Jahren im IT business hab ich mit Raspi mal selbst zum Programmieren begonnen...
    Habe auch einen 3D-Drucker, eine CNC-Fräse und etwas Elektronik-Bastelei als Hobby

    Einmal editiert, zuletzt von fjoke (15. Mai 2016 um 12:55)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!