Nginx Reverse Proxy: Kein Zugriff auf /admin aus lokalem Netzwerk hinter FritzBox (kein Hairpinning?)

Hellmann

Newbie
Registriert
Mai 2024
Beiträge
4
Moin zusammen,

ich habe ein Netzwerkproblem mit meinem Nginx Reverse Proxy und einer FritzBox und hoffe, jemand hat einen Tipp.

Netzwerksetup:​

  • Aktuelle FritzBox (IPv4 only, es wird kein IPv6 genutzt und auch nicht vergeben)
  • DDNS-Integration zu Ionos (die öffentliche IP wird synchronisiert zum Domainnamen)
  • Ein Nginx Reverse Proxy im lokalen Netzwerk (mit fester IP)
  • Der Reverse Proxy hört auf den Ports 80 und 443, die in der FritzBox freigegeben sind
  • Die Domain my.domain.de ist von außen erreichbar (ohne Probleme)

Ziel:​

Der Bereich my.domain.de/admin soll nur aus dem lokalen Netzwerk zugänglich sein.

Nginx Konfiguration:​

In der Nginx-Konfiguration habe ich folgende Einstellungen vorgenommen, um den Zugriff nur aus dem lokalen Netzwerk zu ermöglichen:

nginx.conf:
Code:
set_real_ip_from 172.25.20.0/24;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
my.domain.de.conf
Code:
location /admin {
    allow 172.25.20.0/24;
    deny all;
    error_page 403 =404 /404.html;
    limit_req zone=my.domain.de_rateLimit_zone burst=20 nodelay;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    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_pass http://my.domain.de-default;
}

FritzBox-Konfiguration:
Ich habe die Domain my.domain.de im DNS-Rebind-Schutz der FritzBox eingetragen.

Output error.log Nginx:
Code:
2025/02/23 16:51:20 [error] 459#459: *480 access forbidden by rule, client: my.public.ip, server: my.domain.de, request: "GET /admin HTTP/2.0", host: "my.domain.de"

Problem:​

Leider kann ich aus dem lokalen Netzwerk nicht auf my.domain.de/admin zugreifen. Es scheint, als würde Nginx den Header nicht korrekt erkennen. Möglicherweise hat die FritzBox kein Hairpinning aktiviert oder blockiert diesen Zugriff?

Ich habe die gleiche Konfiguration erfolgreich hinter mehreren Opnsense- und Pfsense-Firewalls umgesetzt, daher denke ich, dass es an den FritzBox-Einstellungen liegen könnte. Hat jemand eine Idee, woran es liegen könnte oder wie ich das Problem lösen kann?

Danke und noch einen schönen Sonntag!
 
  • Gefällt mir
Reaktionen: |Moppel|
Das Problem ist, dass die Anfrage trotzdem über das öffentliche interface der fritzbox läuft.
Durch das Masquerading der fritzbox sind dann Ziel und Quelle gleich.

Zumindest solange du beim Client die Domain nicht zusammen mit der lokalen Server IP in der hosts Datei einträgst.

Ich selbst habe das gleiche Problem gelöst, indem ich beim IP Wechsel auf dem nginx Server in eine Datei

allow <public ip>

eintragen lasse und diese mittels include in die nginx config einbinde. Nginx noch automatisch reloaden lassen bei Änderung.


Code:
#!/bin/bash

checksum=$(md5sum /etc/nginx/local_allow_ip.conf)




myip4=$(dig @resolver4.opendns.com myip.opendns.com +short)


echo "allow $myip4;" > /etc/nginx/local_allow_ip.conf

checksum2=$(md5sum /etc/nginx/local_allow_ip.conf)

if [ "$checksum" != "$checksum2" ];
then                                                      
systemctl restart nginx                                                          
fi
 
Zuletzt bearbeitet:
Moin,

Danke für deine Antwort. Das hatte ich auch schon als Ausweg in Erwägung gezogen. Gut zu hören, dass es noch jemanden gibt der es macht. Dein Script gefällt mir. Man könnte noch überlegen statt "restart" "reload" zu verwenden.
Es ist und bleibt aber irgendwie kein sauberer Weg. Vermutlich müsste ich aber in dem Netzwerk dann auch auf etwas größeres als eine FritzBox setzen.

Gruß!
 
Hellmann schrieb:
Leider kann ich aus dem lokalen Netzwerk nicht auf my.domain.de/admin zugreifen.
Ich würde zum testen einfach mal die hosts Datei (falls Windows Client) manipulieren und my.domain.de direkt auf die lokale IP des npm umleiten.
Wenn es dann auf Anhieb geht, weißt du dass es ein DNS Problem mit der Fritzbox ist.

In dem Fall würde ich pihole mit unbound (oder alternativ adguard mit unbound) betreiben und dort die DNS Umbiegung fürs gesamte Netzwerk machen.
 
Zurück
Oben