Ankündigung

Einklappen
Keine Ankündigung bisher.

Zugriff über ReverseProxy ohne Anmeldung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Zugriff über ReverseProxy ohne Anmeldung

    Hallo,

    Ich habe gestern den Internetprovider gewechselt und kann nun endlich auch innerhalb
    meines Heimnetzes mit https://meine.domain/smartVISU drauf zugreifen. Allerdings nur
    mit Authentifizierung. (Nur mit http geht´s nicht. Da kommt von nginx 403 Forbidden)

    Wie müsste ich nginx umkonfigurieren um entweder über https ohne Authentifizierung(wenn aus Heimnetz),
    oder über http ohne Authentifizierung drauf zu kommen??

    Code:
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
            
    
            return 403;
        include /etc/nginx/snippets/letsencrypt.conf;
    }
    
    server {
        server_tokens off;
    
        ## Blocken, wenn Zugriff aus einem nicht erlaubten Land erfolgt ##
        if ($allowed_country = no) {
            return 403;
        }    
        
        # https://www.cyberciti.biz/tips/linux-unix-bsd-nginx-webserver-security.html
        ## Block download agents ##
        if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
            return 403;
        }
    
        ## Block some robots ##
        if ($http_user_agent ~* msnbot|scrapbot) {
            return 403;
        }
    
        ## Deny certain Referers ##
        if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) )
        {
            return 403;
        }
    
        listen 443 ssl default_server;
        server_name xy.z.org;
    
        ##
        # SSL
        ##
    
        ssl on;
        ssl_certificate /etc/letsencrypt/live/xy.z/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/xy.z/privkey.pem;
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_ciphers    HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!RC4;
    
        add_header Strict-Transport-Security "max-age 31536000; includeSubDomains";
    
        ##
        # global
        ##
    
        root /var/www/html/xy.z;
        index index.php index.htm index.html;
    
      location / {
            
        auth_basic "Restricted Area: smartVISU";
            auth_basic_user_file /etc/nginx/htpasswd.smartvisu;
    
        # Zugreifendes Land erlaubt?
            if ($allowed_country = no) {
                    return 403;
            }
            
            # Nur Websocket Verbindungen gegen "/" durchlassen!
            if ($http_upgrade = websocket) {
                    proxy_pass http://192.168.1.13:2424;
            }
            if ($http_upgrade != websocket) {
                    return 403;
            }
        }
    
      location /smartVISU {
    
                
        auth_basic "Restricted Area: smartVISU";
            auth_basic_user_file /etc/nginx/htpasswd.smartvisu;
    
        # Zugreifendes Land erlaubt?
            if ($allowed_country = no) {
                    return 403;
            }
                
        proxy_pass http://192.168.1.13/smartVISU;
            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;
        }
    
     
      location /alexa {
            auth_basic "Restricted Area: Alexa";
            auth_basic_user_file /etc/nginx/htpasswd.alexa;
    
        # Zugreifendes Land erlaubt?
            if ($allowed_country = no) {
                    return 403;
            }
    
            proxy_pass http://192.168.1.13:9000/;
            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;
        }  
    
      location /shng {
            auth_basic "Restricted Area: SmartHomeNG";
            auth_basic_user_file /etc/nginx/htpasswd.shng;
    
            if ($allowed_country = no) {
                    return 403;
                    break;
            }
            proxy_pass http://192.168.1.13:8888/;
            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;
        }
    
    
    }
    Ich hab's schon mit
    Code:
    satisfy any;
    allow 192.168.1.x;
    deny all;
    im location smartVISU Teil versucht.
    Das geht natürlich nicht, weil ich ja über https nicht mit meiner inernen IP (192.168.1.x) komme.

    Kann mir hier jemand helfen??

    Gruß, Max

    #2
    Zum Verständnis: der Proxy steht im lokalen Netzwerk, und im Router ist eine Port-Weiterleitung für 80 und 443 definiert, richtig? Rufst du ihn dann über die interne oder die öffentliche IP auf?

    Kommentar


      #3

      ​Zum Verständnis: der Proxy steht im lokalen Netzwerk, und im Router ist eine Port-Weiterleitung für 80 und 443 definiert, richtig? ​​​​​​
      Ja, richtig

      Rufst du ihn dann über die interne oder die öffentliche IP auf?​​​​​​
      Wie meinst du das?
      Ich rufe die Visu von außerhalb des Heimnetzes über https://meine.domain/smartVISU auf. Da kommt dann die Passwortabfrage. Was ja auch so sein soll.

      Mein Ziel wäre, dass ich auch im Heimnetz über https://meine.domain/smartVISU ohne Passwortabfrage zur Visu gelange.

      Ist das irgendwie möglich??

      Kommentar


        #4
        Hinter "meine.domain" steht die öffentliche IP deines Routers, zum Beispiel per DynDNS, richtig?

        Dann ist das Problem eventuell, dass deine IP vom Router maskiert wird, der Server also gar nicht deine 192er-IP sieht, sondern die aktuelle öffentliche IP des Routers. Dafür würde sprechen, wenn du im Rahmen des Providerwechsels auch einen neuen Router bekommen hast, weil der alte das Routing möglicherweise anders realisiert hat.

        Das kannst du aber einfach testen, in dem du den Server nicht über "https://meine.domain", sondern über "https://192.168.1.x" aufrufst. Wenn dann immer noch die Passwortabfrage kommt, liegt das Problem woanders. Alternativ schaust du nach einem Aufruf aus dem Heimnnetz ins Log deines nginx nach, welche IP-Adresse dort aufgezeichnet wurde.
        Zuletzt geändert von Cybso; 25.10.2018, 13:32.

        Kommentar


          #5
          Wenn dein Server tatsächlich nur die öffentliche IP deines Routers zu sehen bekommt (und diese nicht statisch ist), dann ist dein Vorhaben allerdings gar nicht so trivial umzusetzen. Der üblichen Ansatz wäre, im DNS-Server des Routers "meine.domain" lokal zu überschreiben und auf die interne IP deines nginx-Servers zu setzen. Das geht aber bei vielen Routern gar nicht ohne weiteres, meistens kann man nur lokale Hostname (also ohne Punkt) fest definieren.

          Eine Lösungsvariante wäre, auf dem Server einen eigenen Caching-DNS-Server wie dnsmasq zu installieren und dort "meine.domain" zu überschreiben. Anschließend muss der DHCP-Dienst im Router so konfiguriert werden, dass er diesen Server als Nameserver anbietet. Das ist allerdings schon recht aufwendig, und wenn dein Server ausfällt, dann funktioniert das DNS bei dir im Netzwerk erst einmal gar nicht mehr.

          Kommentar


            #6
            Danke für die Erklärung. Ich werde mir morgen mal den Router genauer ansehen, was es da für Möglichkeiten gibt. (Fritzbox 7490)

            Ansonsten ist's ja kein dringendes Problem. Kann auch so gut damit leben. Hab halt gehofft, dass es eine “einfache“ Lösung gibt.

            Kommentar


              #7
              Grundsätzlich löst man das mit Split-DNS oder bei unterschiedlichen Domains mit CNAME im lokalen DNS. So mache ich es in meinem System auch.

              Beispiel:
              Öffentlicher DNS: meine.domain.de IP :öffentliche IP
              Über die öffentliche IP wird eine Verbindung zum Reverse-Proxy aufgebaut

              Beispiel Interner DNS Eintrag
              A-record
              Hostname:visu
              Domain: domain.local
              IP: 10.1.1.25
              CNAME
              alias: meine.domain.de
              fqdn:visu.domain.local

              Also im einfachsten Fall einfach nur nen CNAME im DNS setzen. Ob die Fritzbox das kann weiss ich nicht. Wenn es sonst keinen lokalen DNS Server gibt
              mit nem Editor in die lokalen Host Dateien im Windows, MAc oder Linux editieren.


              Meine Installation: VM Debian Jessie SH NG 1.4, SmartVISU 2.9, KNX, DMX, 1-wire, Cisco ASA 5512X IPS, VMware vSphere 6

              Kommentar


                #8
                Zitat von Max2612 Beitrag anzeigen
                Wie müsste ich nginx umkonfigurieren um entweder über https ohne Authentifizierung(wenn aus Heimnetz),
                oder über http ohne Authentifizierung drauf zu kommen??
                Kannst Du denn nicht lokal direkt über die IP-Adresse zugreifen, also ohne NGINX? Würde das icht eher Sinn machen?

                Dann habe ich noch eine Frage: Bei mir funktioniert die Weiterleitung nur dann, wenn ich in der Fritz!Box einen anderen Port nehme und weiterleite. Geht es bei dir mit Port 443 direkt?

                Kommentar


                  #9
                  Zitat von Cannon Beitrag anzeigen
                  Kannst Du denn nicht lokal direkt über die IP-Adresse zugreifen, also ohne NGINX? Würde das icht eher Sinn machen?
                  Ich denke, es geht dem OP darum, sowohl intern wie auch extern über den gleichen Link auf seine Seite zu kommen, wobei die interne Anmeldung dann ohne Authentifizierung funktionieren soll. Der saubere Weg ist allerdings ein eigener DNS-Server, der bei Anfragen aus dem internen Netz die interne IP-Adresse statt der DynDNS-Adresse zurückmeldet.

                  Kommentar


                    #10
                    Zitat von Cybso Beitrag anzeigen

                    Ich denke, es geht dem OP darum, sowohl intern wie auch extern über den gleichen Link auf seine Seite zu kommen, wobei die interne Anmeldung dann ohne Authentifizierung funktionieren soll.
                    Ja genau.
                    Da ich jetzt eine fixe IP bekommen habe, geht das mit "allow" und "deny" perfekt.

                    Kommentar


                      #11
                      Zitat von Cannon Beitrag anzeigen

                      Dann habe ich noch eine Frage: Bei mir funktioniert die Weiterleitung nur dann, wenn ich in der Fritz!Box einen anderen Port nehme und weiterleite. Geht es bei dir mit Port 443 direkt?
                      Ja, bei mir geht's mit Port 443 direkt.

                      Kommentar


                        #12
                        Hallo

                        Ich hab noch eine Frage zu nginx...

                        Ich habe eine 2. Visu erstellt. Zu Testzwecken. (im Verzeichnis var/www/html/smartVISU2)
                        Wie müsste hier nginx angepasst werden, dass ich auch smartVISU2 über https erreichen kann?

                        Einfach nur eine neue location erstellen funktioniert bei mir nicht. (403 Forbidden)
                        Code:
                        location /smartVISU {
                        
                            
                                    
                            auth_basic "Restricted Area: smartVISU";
                            auth_basic_user_file /etc/nginx/htpasswd.smartvisu;
                        
                            # Zugreifendes Land erlaubt?
                                if ($allowed_country = no) {
                                        return 403;
                                }
                                    
                            proxy_pass http://192.168.1.13/smartVISU;
                                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;
                            }
                        
                          location /smartVISU2 {
                        
                            
                                    
                            auth_basic "Restricted Area: smartVISU";
                            auth_basic_user_file /etc/nginx/htpasswd.smartvisu;
                        
                            # Zugreifendes Land erlaubt?
                                if ($allowed_country = no) {
                                        return 403;
                                }
                                    
                            proxy_pass http://192.168.1.13/smartVISU2;
                                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;
                            }
                        Was mache ich hier falsch?

                        Gruß,
                        Max

                        Kommentar


                          #13
                          Zitat von Max2612 Beitrag anzeigen
                          Was mache ich hier falsch?
                          Funktioniert denn der Zugriff schon lokal, also ohne NGINGX über die IP-Adresse?

                          Wichtig ist auch darauf zu achten, ob die Adresse im Browser am Ende mit / oder ohne eingegeben wird. Das macht einen Unterschied. Und schau dir die Zeileneinzüge an, ob das alles richtig ist.

                          Also Tipp würde ich den Zugriff fürs Land nicht in jedem einzelnen Bereich, sondern global, weiter oben, festlegen.

                          Kommentar


                            #14
                            Danke schon mal für die Tipps!

                            Lokal geht´s ohne Probleme.
                            Die Einrückungen sollten eigentlich auch passen. Das schaut nur hier so verschoben aus.

                            Ob mit / oder ohne / ergibt den gleichen Fehler (403)

                            Kommentar


                              #15
                              Ich denke, es wird an der GeoIP-Abfrage liegen, falls du aus deinem lokalen Netzwerk kommst. 192.168.* etc. werden da vermutlich nicht mit drin stehen. Ich würde drauf verzichten, ein sicheres Passwort für den Benutzer und ein letsencrypt-Zertifikat für den Zugriff von außen sind sinnvoller. Wenn du Brute-Force-Angriffe abwehren willst, konfigurier dir noch fail2ban und lass das nginx-Log auf 403 prüfen.

                              Wenn es auch ohne Geo-Abfrage nicht funktioniert, prüf einmal, ob dein Auth-File tatsächlich für den nginx-User (z.B. "www-data") lesbar ist:

                              Code:
                              sudo -u www-data cat /etc/nginx/htpasswd.smartvisu

                              Kommentar

                              Lädt...
                              X