Andi: .htacces - Nur bestimmte IP zulassen

Hi

Aufgrund von Wartungsarbeiten an einem bestimmten Segment einer Website würde ich gerne vorübergehend alle Anfragen an eine bestimmte Adresse umleiten, mit Ausnahme einer einzigen spezifischen IP.

Ich habe mir dazu einige Beispiele angesehen und nehme an, dass ich das ganze am besten über Rewrite oder einfach Allow,Deny lösen sollte - leider funktioniert bei mir keiner der beiden Ansätze. Was ich bis jetzt probiert habe sieht so aus:

RewriteCond %{REMOTE_ADDR} !^192.168.123.10$
RewriteRule ^(.*)$ umleitung.html

und alternativ

Order allow,deny
Allow from 192.168.123.10
Deny from all

Das ganze steht in einer .htaccess Datei dich ich im betroffenen Verzeichnis auf dem Server abgelegt habe.

Im Fall von Rewrite werde ich von egal wo jedesmal zur Umleitung weitergeleitet, auch vom Rechner mit der dort eingetragenen IP -
und bei allow,deny erhalte ich jedesmal einen "Forbidden" Fehler, das "Allow from" wird also scheinbar gar nicht berücksichtigt.

Habe ich an der ganzen Sache vielleicht etwas grundlegendes falsch verstanden? Das Prinzip scheint ja zu funktionieren da - wie gesagt - die Weiterleitung bzw das Blockieren funktioniert, während die Ausnahmeregel für die IP nicht berücksichtigt wird.

  1. Yerf!

    Allow from 192.168.123.10

    Ist das wirklich ein Webserver im lokalen Netz oder müsste hier evtl. deine öffentliche IP stehen, anstatt der aus dem lokalen Netz?

    Gruß,

    Harlequin

    --
    RIP --- XHTML 2
    nur die Besten sterben jung
    1. Yerf!

      Allow from 192.168.123.10

      Ist das wirklich ein Webserver im lokalen Netz oder müsste hier evtl. deine öffentliche IP stehen, anstatt der aus dem lokalen Netz?

      Gruß,

      Harlequin

      Der Server ist im lokalen Netz. Ich habe es auch schon mit der öffentlichen IP probiert, allerdings leider mit dem gleichen Ergebnis.

  2. Moin!

    RewriteCond %{REMOTE_ADDR} !^192.168.123.10$
    RewriteRule ^(.*)$ umleitung.html

    und alternativ

    Order allow,deny
    Allow from 192.168.123.10
    Deny from all

    1. Die Dokumentation besagt:

    "Ordering is one of:

    Allow,Deny
        First, all Allow directives are evaluated; at least one must match, or the request is rejected. Next, all Deny directives are evaluated. If any matches, the request is rejected."

    Zuerst werden alle Allow-Anweisungen abgearbeitet, es muss eine übereinstimmen, sonst wird die Abfrage abgewiesen. Danach werden die Deny-Anweisungen abgearbeitet, stimmt der Request mit einer überein, wird die Abfrage abgewiesen.

    Satz 2 trifft bei Dir zu. Du lässt alle Anfragen zurück weisen.

    1. Deine RewriteRule bewirkt auch nicht, dass nach der Umleitung die Zugriffsbeschränkungen nicht abgearbeitet werden. Das ist eine Konfigurationsdatei und kein Programm!

    Folgende drei Zeilen würden also genügen:

    Order allow,deny
    Allow from 192.168.123.10
    RewriteRule ^(.*)$ umleitung.html

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    1. Moin!

      1. Die Dokumentation besagt:

      "Ordering is one of:

      Allow,Deny
          First, all Allow directives are evaluated; at least one must match, or the request is rejected. Next, all Deny directives are evaluated. If any matches, the request is rejected."

      Zuerst werden alle Allow-Anweisungen abgearbeitet, es muss eine übereinstimmen, sonst wird die Abfrage abgewiesen. Danach werden die Deny-Anweisungen abgearbeitet, stimmt der Request mit einer überein, wird die Abfrage abgewiesen.

      Satz 2 trifft bei Dir zu. Du lässt alle Anfragen zurück weisen.

      1. Deine RewriteRule bewirkt auch nicht, dass nach der Umleitung die Zugriffsbeschränkungen nicht abgearbeitet werden. Das ist eine Konfigurationsdatei und kein Programm!

      Folgende drei Zeilen würden also genügen:

      Order allow,deny
      Allow from 192.168.123.10
      RewriteRule ^(.*)$ umleitung.html

      Die 3 Zeilen führen auch nur zu einem Forbidden error.
      Ich habe auch nicht versucht, die Rewrite Regel zusammen mit den Zugriffsbeschränkungen in eine einzige .htaccess zu packen, dies waren nur 2 Unterschiedliche Ansätze die ich nacheinander ausprobiert habe.

      1. Hi,

        bitte zitiere sinnvoll - das, worauf du dich konkret beziehst, und nicht einfach alles.

        Folgende drei Zeilen würden also genügen:

        Order allow,deny
        Allow from 192.168.123.10
        RewriteRule ^(.*)$ umleitung.html

        Die 3 Zeilen führen auch nur zu einem Forbidden error.

        Lautet die Adresse des Clients, mit dem du den Request machst, aus Sicht des Servers *definitiv* 192.168.123.10?

        Ich habe auch nicht versucht, die Rewrite Regel zusammen mit den Zugriffsbeschränkungen in eine einzige .htaccess zu packen

        Beides zusammen, zumindest in der Form, die fastix gerade gezeigt hat, ist auch weniger sinnvoll.
        Zum Umschreiben kommt es ja gar nicht, wenn Allow/Deny gar nicht erst den Zugriff erlauben.

        Entweder nimmst du Allow/Deny, um wirklich den Zugriff zu verweigern - dann wird das 403-ErrorDocument angezeigt. Bzw. die Default-403-Meldung nebst einem entsprechenden Hinweis, wenn das ErrorDocument nicht selbst außerhalb des "verbotenen" Bereiches liegt.
        Oder die Kombination aus RewriteCond und -Rule.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. Moin!

        Die 3 Zeilen führen auch nur zu einem Forbidden error.

        Prüfe:

        • Logfiles
        • Browsercache
        • evtl. Proxy?

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix

    2. Moin!

      Order allow,deny
      Allow from 192.168.123.10
      Deny from all

      1. Die Dokumentation besagt:

      "Ordering is one of:

      Allow,Deny
          First, all Allow directives are evaluated; at least one must match, or the request is rejected. Next, all Deny directives are evaluated. If any matches, the request is rejected."

      Zuerst werden alle Allow-Anweisungen abgearbeitet, es muss eine übereinstimmen, sonst wird die Abfrage abgewiesen. Danach werden die Deny-Anweisungen abgearbeitet, stimmt der Request mit einer überein, wird die Abfrage abgewiesen.

      Du lässt einen wichtigen Aspekt aus: Das Default-Verhalten von Order ist das letztgenannte Wort der Anweisung, welches auch dann wirkt, wenn keinerlei Allow oder Deny angegeben ist.

      Bei "Order Allow,Deny" gilt also pauschal für alle IPs deny, man kann für einige Bereiche Ausnahmen mit "Allow" formulieren, und innerhalb dieser Bereiche wieder Ausnahmen von der Ausnahme mit "Deny" - so jedenfalls die Theorie. Dass man das explizite "Deny" auch größer machen kann, als den Bereich für "Allow", wäre dann im strengen Sinne ein Konfigurationsfehler der Marke "selber doof".

      Dummerweise "funzt es", wenn man das "Order" umdreht: Order Deny,Allow erlaubt pauschal erstmal alles, dann kommt als Ausnahme davon das Verbot mit "Deny" (bei "Deny from all" wird die Pauschalerlaubnis also komplett aufgehoben), und Ausnahmen von der (global wirkenden) Ausnahme sind dann mit "Allow" wirksam.

      Ich hab bei sowas allerdings leichte Bauchschmerzen, denn Fakt ist, dass man hier erstmal eine globale Erlaubnis konfiguriert - wenn man das Deny falsch einstellt und unwirksam macht, gilt die Pauschalerlaubnis (ggf. ergänzt durch die explizite Erlaubnis mit "Allow"), man kann sich hierbei also potentiell auf der unsicheren Seite irren und bemerkt es ggf. nicht, weil man sich selbst ja in der Regel Zugriff konfigurieren wird. Umgekehrt wäre besser.

      1. Deine RewriteRule bewirkt auch nicht, dass nach der Umleitung die Zugriffsbeschränkungen nicht abgearbeitet werden. Das ist eine Konfigurationsdatei und kein Programm!

      Die RewriteRule und die RewriteCond sind insbesondere reguläre Ausdrücke, bei denen Punkte Sonderbedeutung haben und escaped werden müssen.

      - Sven Rautenberg

      1. Moin!

        Die RewriteRule und die RewriteCond sind insbesondere reguläre Ausdrücke, bei denen Punkte Sonderbedeutung haben und escaped werden müssen.

        Das käme noch hinzu.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix