Apache 2.4 beschränkt URLs auf bestimmte IPs

Apache 2.4 beschränkt URLs auf bestimmte IPs

Ich versuche, eine bestimmte URL so einzuschränken, dass sie außerhalb des Netzwerks nur für bestimmte IP-Adressen verfügbar ist. Wenn ein Benutzer außerhalb des Netzwerks versucht, auf diese URL zuzugreifen und nicht über die IP-Liste, sollte er auf die Homepage umgeleitet werden.

Das habe ich bisher ohne Erfolg versucht. Der letzte Teil leitet alle unabhängig von der IP auf die Homepage um.

<Location "/secret">
#    <If "%{REMOTE_ADDR} != -ipmatch '123.123.123.123/255.255.255.255'">
#    Redirect 303 "/secret" /
#    </If>

RewriteCond "%{REMOTE_ADDR}" "!123\.123\.123\.123"
RewriteRule .* / [R,L]

LogLevel debug rewrite:trace6
</Location>

PS: Die /secret-URL ist tatsächlich eine virtuelle URL und existiert nicht physisch auf dem Laufwerk.

Antwort1

Verwenden Sie Require [ip|host|env]dies, um anzugeben, wer Zugriff auf Ihren virtuellen Host oder Standort hat.

    <Directory "/docroot">
        Require ip 10.10.11.12
    </Directory>   

Wenn es um die Umleitung geht, denken Sie an einebenutzerdefinierte FehlerseiteDies ist viel allgemeiner gehalten, da jeder unberechtigte Zugriff einen 403-Fehler hervorrufen sollte und somit leicht ausgewertet werden kann.

Ich habe das nie mit Apache gemacht, verwende diese Strategie aber mit Nginx. Für Apache sollte so etwas funktionieren:

ErrorDocument 403 http://homepage.example.com

Benutzerdefinierte Fehlerdokumente werden mithilfe der ErrorDocument-Direktive konfiguriert, die im globalen, virtuellen Host- oder Verzeichniskontext verwendet werden kann. Sie kann in .htaccess-Dateien verwendet werden, wenn AllowOverride auf FileInfo eingestellt ist. (aus den Apache-Dokumenten)

Antwort2

Die Optionen Order, Deny und Allow wurden in Apache 2.4 ersetzt durch

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
</Directory>

Sie können Adressen explizit einschränken, indem Sie Folgendes verwenden:

<Directory /var/www/mysite.com/htdocs/public>
    Require all granted
    Require not ip 192.168.0.1
</Directory>

Das genaue Gegenteil ist auch wahr. Um alles einzuschränken und nur eine Teilmenge zuzulassen, verwenden Sie Folgendes:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
</Directory>

Weitere Informationen finden Sie auf derDokumentation zur Zugriffskontrolle für Apache 2.4.

Bezüglich Ihrer Frage (ich habe meine eigene bearbeitet, da mir die Punkte für einen Kommentar fehlten) sollten Sie einfach ein ErrorDocument mit dem Index als URL-Pfad festlegen können:

<Directory /var/www/mysite.com/htdocs/public>
    Require host example.com
    Require ip 192.168.0.1
    ErrorDocument 401 /index.html
</Directory>

Hoffe das hilft!

Antwort3

Für Apache 2.4 können Sie <RequireAny> verwenden. Sie können dies in einem vhost oder einer .htaccess-Datei tun....

SetEnvIF IP xxx.xxx.xxx.xxx AllowThisIP  # Or X-Real-IP
SetEnvIF IP yyy.yyy.yyy.yyy AllowThisIP
<RequireAny>
  Require env AllowThisIP
  Require host example.com
</RequireAny>

Apache-Dokumentehttps://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#requireany

verwandte Informationen