Fritzbox-Weboberfläche hinter Reverse-Proxy

leseratte10

Mitglied
Mitglied seit
23 Apr 2012
Beiträge
406
Punkte für Reaktionen
2
Punkte
18
Hallo zusammen,

ich möchte gerne die Weboberfläche(n) meiner Fritzbox(en) über einen Nginx-Reverseproxy erreichbar machen, bin dabei aber über ein paar Fallstricke gestolpert. Hat so eine Konstellation zufällig noch jemand im Einsatz?

Erster Fallstrick war, der Reverseproxy lief über HTTPS und hat die Anfrage per HTTP an die Fritzbox weitergeleitet. Damit konnte man allerdings Telefoniegeräte und SIP-Rufnummern nicht mehr bearbeiten (man wurde einfach wieder auf die Startseite umgeleitet). Habe dann rausgefunden dass die Fritzbox da einen Redirect auf eine HTTP-Seite schickt (was der Browser dann nicht mag), anstatt einen Protokollunabhängigen Redirect zu machen. Den habe ich dann im Reverseproxy repariert (siehe Spoiler) und seitdem scheint alles zu laufen.
Code:
map $upstream_http_location $m_replaceme {
    ""  "";
    "~^http(.*)$" "https$1";
}
...     
      proxy_hide_header Location;
      add_header Location  $m_replaceme;

Die zweite "Falle" auf die ich gerade gestoßen bin (und die weshalb ich hauptsächlich diesen Thread erstellt habe), ist, dass im Ereignislog der Fritzbox dann für jede Anmeldung nur noch die IP-Adresse des Reverse-Proxy drin steht. Eigentlich hatte ich erwartet, dass da die "üblichen" Header wie X-Real-IP oder X-Forwarded-For ausreichen, dass die Fritzbox die korrekte IP (oder zumindest beide, die vom Proxy und die im Header) im Ereignislog anzeigt - das ist offensichtlich nicht der Fall.

Google war auch keine große Hilfe, 99% der Treffer beziehen sich entweder auf die Frage, ob die Fritzbox einen Reverseproxy hat (damit mehrere Clients sich den Port 80/443 teilen können), oder wie man hinter der Fritzbox einen Reverseproxy für andere Dienste, nicht die Fritzbox betreibt.

Hat so eine Konstellation (Fritzbox-UI hinter Nginx) noch jemand im Einsatz und kennt zufällig irgendeinen Trick oder versteckten Parameter, mit der die Fritzbox die richtige IP anzeigt? In einem Einstellungs-Export im Bereich "webui" habe ich bisher nichts gefunden was danach aussieht. Oder muss ich mit der falschen IP-Adresse im Log leben? Wäre jetzt auch nicht sooo dramatisch, ich kann ja auch im Nginx dann loggen wann welche Zugriffe von welcher IP passieren.
 
Ich hab kürzlich mal mit dem Reverse-Proxy auf meinem Synology-NAS rumgespielt (auch nginx) und einen der DNS-Namen (https://fb.examle.com) testweise auf die Oberfläche meiner Fritzbox um- bzw. zurück zuleiten, u.a. auch um zu sehen, wie sich das bei den Zertifikaten verhält, abhängig davon, ob intern auf https oder http weitergeleitet wird.

Ergebnis: Nach außen sehe ich das Zertifikat meines Proxies, egal ob es intern per http oder https weitergeht. Im Log der Fritzbox steht dann ein Login von meinem NAS. Dieses Verhalten hatte ich auch so erwartet. Ich habe aber auch nicht Menü-Punkte durchprobiert.

Deine Problem/Frage verstehe ich noch nicht so ganz, aber ich vermute mal, du würdest im Log der Fritzbox lieber die IP des wirklich zugreifenden sehen.

Damit das Ganze auch mit http klappt, hätte es wohl einem Eintrag
Code:
server {
        listen 80;
        server_name fb.example.com;

        return 301 https://$host$request_uri;
}
auf dem Proxy bedurft, um http auf https umzuleiten. So mache ich das sonst als.
 
Zuletzt bearbeitet von einem Moderator:
Genau das war meine Frage, ich würde gerne im Fritzbox-Log die "echte" IP des zugreifenden Benutzers sehen und nicht die des Proxys. Normale "Webanwendungen" (wo es zu erwarten ist dass die hinter einem Reverse-Proxy laufen) haben da oft ne Einstellung für, dass die IP aus einem HTTP-Header gelesen wird statt direkt aus der IP-Verbindung. Sowas suche ich für die Fritzbox (auch wenn ich befürchte, dass es das nicht gibt). Also sowas wie wgUseCdn/wgCdnServersNoPurge in MediaWiki oder mod_remoteip im Apache, suche ich für die Fritzbox.

Den Port 80 auf dem Proxy auch anzuwenden hat / hätte nichts gebracht. Der Browser hat sich schon geweigert den Request überhaupt durchzuführen, weil ihm nicht gefällt, dass eine HTTPS-Seite per Javascript einen Request auf die HTTP-Version durchführt. Also musste ich den Proxy dazu bringen, die Seite zu patchen, dass der Browser erst gar nicht auf HTTP zugreifen will.
Das war aber eher nur als "Info" gedacht falls jemand anderes auf diesen Thread stößt mit ähnlichem Problem, weil ich dazu bisher nichts gefunden habe.
Wenn du den Reverse-Proxy noch aufgebaut hast kannst du ja mal testen, ob du unter "Telefonie -> Telefoniegeräte" oder unter "Telefonie -> Eigene Rufnummern" die Einträge bearbeiten kannst oder nicht. Bei mir ging das - ohne die erwähnte Config-Anpassung - nicht.
 
So, ich hab's nochmal probiert, so wie in #2 beschrieben. Im Proxy habe ich https eingehend auf http der Fritzbox umgeleitet. Ich komme dann problemlos sowohl per http als auch per https auf die Fritzbox. Bei http werde ich auf https umgeleitet. Soweit so gut.

Aber: Du hast Recht. An den verschiedensten Stellen, nicht nur bei "Telefonie -> Telefoniegeräte" oder unter "Telefonie -> Eigene Rufnummern" lande ich wieder bei der Anmeldung. Manchmal geht es aber auch. Bei den Ereignissen steht dann was von ungültiger Sitzungskennung. Vielleicht hat es auch was mit IPv4/IPv6 zu tun. Oder noch wahrscheinlicher: Mein NAS (Proxy) hängt mit 2 Füßen im LAN, einmal über Bond und einmal über einen 2,5GBit-USB-NIC. Im Log der FB tauchen die IPv6-Adressen der beiden wild gemischt auf, so dass die beiden sich wohl gegenseitig rauskegeln.

Edit: Ich hab's jetzt nochmal mit der IPv4 der Fritte im Proxy probiert anstatt des Namens, also nicht mehr https://fb.example.com -> http://FB7590-1 (löst die IPv4 und die IPv6 auf), sondern -> http://192.168.0.1. Dieser Effekt scheint nun weg zu sein, und ich lande nicht mehr ab und zu auf der Anmeldung.
 
Zuletzt bearbeitet von einem Moderator:
Ungültige Sitzungskennung hatte ich tatsächlich nicht. Interessant. Ich habe meinen Reverse-Proxy so eingestellt dass er auf die ULA der Fritzbox weiterleitet, evtl. hat das auch noch Probleme verursacht. Bei mir gab es keinerlei Logs in der Fritzbox, sondern nur Fehler vom Browser. Und ich bin auch nicht wieder auf der Loginseite gelandet, sondern halt wieder auf der "Telefoniegeräte"-Übersicht.

Die Fritzbox ist also wohl einfach nicht so 100% für den Betrieb hinter einem Reverseproxy ausgelegt.
 
Wieso? Bei mir klappt es inzwischen. Probier's halt nochmal.
 
Eigentlich hatte ich erwartet, dass da die "üblichen" Header wie X-Real-IP oder X-Forwarded-For ausreichen, dass die Fritzbox die korrekte IP (oder zumindest beide, die vom Proxy und die im Header) im Ereignislog anzeigt - das ist offensichtlich nicht der Fall.
[...]
Sowas suche ich für die Fritzbox (auch wenn ich befürchte, dass es das nicht gibt).
Das wäre ja auch für 99% der anderen Fälle (wo die Verbindung NICHT über einen Proxy erfolgt) kontraproduktiv. Denn NICHTS hindert irgendeinen beliebigen Client aus dem Internet (und natürlich auch aus dem (W)LAN - wobei DAS bei einem Router ja tatsächlich noch zu erkennen wäre, aber dann wäre die Kombination mit einem Reverse-Proxy wieder "ungewöhnlich") daran, auch in entsprechende Requests, die DIREKT an die FRITZ!Box gerichtet sind, ebenfalls solche Header-Zeilen einzubauen, die ihrerseits dem FRITZ!OS "vorgaukeln", der Request käme von einer anderen Adresse.

Wenn das FRITZ!OS dann seine Protokollierung automatisch auf diese "Falschinformationen" stützen würde, wäre das vermutlich nicht wirklich "im Sinne des Erfinders".
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.