Qnap System Reverse proxy für eigene Webservices nutzen

  • Hallo Zusammen,


    Ich war auf der Suche nach einem einfachen Weg um einige Webservices sicher per Qnap extern bereit zu stellen. Erst hatte ich an einen extra Reverse Proxy gedacht, aber das fühlte sich falsch an. hier eine kurze Beschreibung die anderen vielleicht hilft, wie ich es bei meiner TVS-471 aufgesetzt habe.


    Bevor wir starten ein kleiner Hinweis. Ich beschreibe hier meine Schritte nach bestem Wissen und Gewissen, aber jeder der es nachmachen will tut dies auf sein eigenes Risiko.


    Hier nun die Schritte:

    - Zuerst müssen wir auf dem NAS myqnapcloud mit allem drum und dran einrichten. Dazu hat Qnap schon einige Anleitungen geschrieben eine Internetsuche zum Beispiel nach "Zugriff via myQNAPcloud einrichten" sollte helfen.


    Jetzt wäre es super man könnte in QTS weitere Einträge für den Zugriff einrichten um zum Beispiel über das Unterverzeichnis /our_test/ per Passwort auf den http Server unter 192.168.2.4 Port 80 zugreifen zu können. Aber leider gibt es diese Option nicht. Aber mit der unteren Anleitung geht es doch und die Anpassungen überleben auch einen Systemneustart.


    Ein Risiko besteht natürlich, da wir dafür den System Proxy anpassen müssen. Daher ist es wichtig einen ssh Zugriff immer aktiv zu lassen damit man im Bedarfsfall per Kommandozeile die Änderungen einfach zurücknehmen kann. Mehr dazu am Ende dieser Anleitung.


    - Der System Webserver basiert auf Apache, daher müssen wir 2 zusätzliche config Files erstellen und auf dem NAS ablegen die auch nach einem Neustart noch vorhanden sind. Man kann dafür jedes Fileshare auf dem NAS nutzen. Ich habe dafür ein eigenes Fileshare mit dem Namen myApps angelegt.

    - Da wir unsere Zugriffe per Passwort schützen wollen, legen wir eine sogenannte htpasswd Datei an. Im Internet gibt es dafür tools - schaue einfach nach 'htpasswd generator'.

    - Danach benötigen wir noch ein Config File mit den Eintragungen für unseren Service. Für das Beispiel hier sagen wir wir speichern dieses File unter dem Namen apache-sys-proxy-ssl.conf

    - Der Inhalt muss der Notation für Apache Reverse Proxy Server entsprechen, hier ein Beispiel um wie oben als Beispiel gewählt einen http Webserver auf Port 80 und der ip Adresse 192.168.2.4 via Subdirectory 'our_test' bereit zu stellen:


    - Nun muss diese Konfigurationsdatei noch als neue Zeile in der Original Konfiguration eingefügt werden, dazu die Zeile


    Code
    Include /share/myApps/proxy-extension.conf

    ans Ende der Datei /etc/apache-sys-proxy-ssl.conf einfügen und der Server via des folgenden Kommandos neu starten. Das Neustarten geht mit dem Kommando


    Code
    /etc/init.d/Qthttpd.sh restart

    Das wars und man kann es wie folgt testen. Einfach die folgende Adresse aufrufen.


    Code
    https://your_name.myqnapcloud.com/our_test/

    - Allerdings würde diese Erweiterung bei jedem Neustart verloren gehen. Dazu lassen wir einen kleinen Cronjob alle 5 Minuten prüfen ob die Erweiterung noch ok ist. Falls nicht wird die Zeile wieder eingefügt und der Server neu gestartet.

    - Das dazugehörige Batch File ist



    - Mit dem Kommando


    Code
    chmod +x /share/myApps/check_extensions.sh

    machen wir das Batchfile ausführbar.


    Jetzt müssen wir nur noch folgende Zeile in die Crontab eintragen


    Code
    */5 * * * * /share/myApps/check_extensions.sh > /dev/null 2>/dev/null

    Wie man eigene Einträge permanent in die Qnap einträgt findet man im Internet.


    - Wie oben schon beschrieben sollte man einen shh Zugriff offen haben. Im Fall von Problemen geht man per SSH auf das NAS, löscht den Eintrag aus der Crontab und startet das NAS neu. Dann sollte alles wieder OK sein.


    Das war's gebt Bescheid ob die Beschreibung geholfen hat.

    3 Mal editiert, zuletzt von compoman () aus folgendem Grund: kleinere Korrekturen...

  • compoman

    Hat den Titel des Themas von „Use the Qnap System Reverse proxy to provide internal Webservices“ zu „Qnap System Reverse proxy für eigene Webservices nutzen“ geändert.
  • Mit der Vorletzten Firmware-Version (ich glaibe 4.5.1.1540) setzt der QNAP-HTTPD die Apache-Einstellungen immer wieder auf Default zurück, sobald man vhosts oder ReverseProxy definiert.


    Ich bin deshalb zu einem Container gewechselt (Nginx Proxy).

    Siehe meinen Thread zum Apache-Problem: ReverseProxy https=>http funktioniert nicht mehr seit letztem Firmware-/Apache-Update

    Bzw. direkt diese Anleitung: https://forum.qnap.com/viewtopic.php?t=155970


    Damit kann man ReverseProxys für beliebige SubDomains anlegen und für jede SubDomain ein eigenes LetsEncrypt-Zertifikat installieren lassen.

    Vielleicht wäre das ja auch eine Alternative für dich.

  • Hallo rws,


    Danke - ja habe ich natürlich auch gemerkt, schon ein wenig ärgerlich. Ich schließe daraus, dass man die Qnap Apps am besten einfach so läßt wie sie sind und es Qnap überlässt damit zu machen was sie wollen.


    Und richtig nginx ist eine Alternative. Allerdings habe ich mit nginx irgendwie Probleme gehabt auf das Qnap direkt zuzugreifen, daher habe ich es mit traefik gelöst, traefik gibt es als App für die Qnap, es kommt direkt mit Letsencrypt Verschlüsselung, hat ein nettes Dashboard und das ging gefühlt sogar noch besser und daher will ich es hier gerne teilen.


    Hier meine Anleitung...


    Wie immer zuerst der Disclaimer, wer die Anleitung nachmacht tut dies auf eigene Gefahr.


    Falls nicht schon vorhanden tragen wir uns Qnapclub.eu als weiteres Apparchiv ein. Eine Anleitung dazu findet man unter https://qnapclub.eu/de/howto/1 . Von dem Qnapclub App-archiv installieren wir uns die App Traefic (ich habe Traefic 2.3.1.0 installiert).


    Zuerst machen wir uns ein Verzeichnis für unsere Konfigurationsdateien, zum Beispiel mit dem Laufwerksnamen 'myApps' und dem Verzeichnis 'traefik'. Als Ports wählen wir 8500 bis 8502 und mit diesen Daten erzeugen wir die Datei 'traefik.toml' in dem Verzeichnis. Diese sieht wie folgt aus



    Wie man sieht nutzen wir auf der Qnap den Port 8501 für https Zugriffe. Dieser Port muss also im eigenen Router von aussen weiter geleitet werden. Im Detail den externen Port 443 auf 8501 und den Port 80 für die Letsencrypt Identifizierung auf 8500 auf der Qnap.


    Wie man an der letzten Zeile erkennt habe ich die Services selbst in eienr Extradatei 'traefik-dynamic.toml'. Hier ein Beispiel für den Qnap-Dienst. Weitere Dienste kann man einfach durch Hinzufügen erzeugen. Ein Service besteht immer aus 3 Teilen. Zuerst der 'http.services', dann optional die 'http.middleware' die z.B. Adressen verändern kann und zuletzt der 'http.router' der externe Anfragen an den lokalen Service umleitet.


    Hier das Beispiel für die 'traefik-dynamic.toml':


    Im oberen Beispiel muss man jetzt noch die lokale IP anpassen und den myQnapcloud Hostnamen anpassen.


    Das wars, jetzt startet man traefik mit ssh Befehl auf dem Qnap mit dem Befehl:

    Code
    /usr/bin/traefik --configFile=/share/myApps/traefik/traefik.toml >> /share/myApps/traefik/traefik.log &


    Und man kann ausprobieren, es sollte alles klappen. Das Dashboard erhält man unter http://IP_der_Qnap:8502


    Jetzt müssen wir schauen, dass traefic auch immer schön nach einem Neustart gestartet hat. Analog zu oben habe ich alle 5 min einen Job laufen der Überprüft, ob bestimmt Services laufen, und falls nicht diese zum Beispiel bei einem Neustart wieder startet. Die Zeilen in meinem Prüfskript für Trafik ist:


    Code
    if ( ps | grep "traefik" | grep -v grep )
    then
    echo "traefik is running..."
    else
    echo "traefik NOT running! Restarting..."
    /usr/bin/traefik --configFile=/share/myApps/traefik/traefik.toml >> /share/myApps/traefik/traefik.log &
    echo "traefik restarted"
    /sbin/write_log "traefik neu gestartet." 2
    fi

    Das war's. Viel Spaß damit.


    Ingo

  • Hi Ingo,

    sieht auch interessant aus. Vermutlich auch viel mächtiger als der kleine Nginx-Proxy. Danke für die Anleitung.

    Den Nginx als Container einzurichten war aber sehr einfach. Nur Docker mit Port-Parameter anlegen, dann über das Dashboard einrichten. Dann noch Portforwarding auf die Nginx-Ports aus der Container-Konfig, das wars eigentlich.

    Mal schauen, ob ich Traefik auch mal teste...

    Ronny


    Edit:

    Ich habe mir nochmal ein paar Beispiele angeschaut...

    Ist es tatsächlich so, dass man die gesamte Konfiguration des Routings in TOML-Dateien angeben muss? Oder kann man das auch über das Dashboard einstellen?

    Das schöne am NgingProxyManager ist die komplette Konfiguration über das Dashboard.

    Einmal editiert, zuletzt von rws ()

  • Meines Wissens geht es nur über die toml Dateien. Allerdings merkt traefik jede Änderung. Ein Neustart ist nicht erforderlich. Geht eigentlich sehr bequem.