Wie deaktiviere ich in Apache den Zugriff auf eine Website, wenn jemand nur die IP-Adresse in einem Webbrowser verwendet?

8

Ich verwende einen Apache-Webserver unter CentOS und muss die Möglichkeit für Benutzer deaktivieren, auf die Website zuzugreifen, indem die IP-Adresse des Servers in einem Webbrowser verwendet wird. Ich möchte, dass jemand, der versucht, zur IP-Adresse zu navigieren, eine verbotene Fehlermeldung erhält.

Welche Konfigurationen wären dazu notwendig?

Amr Elkhedewy
quelle

Antworten:

10

Richten Sie einfach den virtuellen Standardhost ein. Es gibt ein kommentiertes Beispiel in httpd.confoder etwas Triviales wie:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>
Michael Hampton
quelle
Nun, das hat mein Problem gelöst. Vielen Dank für euch alle :)
Amr Elkhedewy
7

Sie können dies mit mod_rewrite erreichen (entweder in der .htaccessDatei oder im Standardserverkontext oder in einem separaten VirtualHost, in dem ServerNamedie IP-Adresse des Hosts angegeben ist):

RewriteEngine On
RewriteCond %{HTTP_HOST} 1.2.3.4 # Replace with your own IP address
RewriteRule .* - [F]

Dies bedeutet, dass, wenn der HTTP_HOST-Header mit der IP-Adresse 1.2.3.4 übereinstimmt, jede Anforderung mit a beantwortet werden sollte 403 Forbidden. Eine Anforderung mit einem anderen HTTP_HOST-Header (z. B. einer mit dem tatsächlichen Domänennamen anstelle der IP-Adresse) sollte nicht betroffen sein.

Jenny D.
quelle
Es hat nicht funktioniert in httpd.conf
Amr Elkhedewy
Es hat die .htaccess-Datei durchgearbeitet. Ich muss sie aus Apache-Konfigurationen heraus ausführen.
Amr Elkhedewy
2
Haben Sie Apache nach dem Bearbeiten von httpd.conf neu gestartet? Andernfalls weiß Apache nichts über die neue Konfiguration. Dies unterscheidet sich von .htaccess, das auch analysiert wird, ohne Apache neu zu starten.
Etagenklo
Sicher, aber nichts hat sich geändert
Amr Elkhedewy
1

Sie können den direkten Zugriff per IP nicht blockieren. Sie müssen die Verbindung zulassen, dann aber entscheiden, was damit geschehen soll. Dies kann ein 403, ein 404 sein oder sie auf die gewünschte Seite umleiten. Sie können dies mit mod_rewrite tun.

 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
 RewriteRule ^(.*)$ - [F,L]

Dies entspricht dem vom Webclient übergebenen HTTP-HOST-Header. Alle anderen Anfragen würden durchgehen.

Möglicherweise möchten Sie jedoch Ihre URLs für SEO-Zwecke normalisieren.

Mit diesem Ansatz schreiben Sie alles neu, was nicht zum gewünschten Ergebnis passt.

RewriteCond %{HTTP_HOST}   !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]

Referenz: https://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl

Referenz: http://en.wikipedia.org/wiki/URL_normalization

jeffatrackaid
quelle
Es hat nicht funktioniert in httpd.conf
Amr Elkhedewy
Es hat die .htaccess-Datei durchgearbeitet. Ich muss sie aus Apache-Konfigurationen heraus ausführen.
Amr Elkhedewy
Es funktioniert in httpd.conf, aber stellen Sie sicher, dass Sie die Rewrite-Engine aktivieren und in Ihre virtuellen Host-Anweisungen einfügen. Andernfalls gilt dies nur für Ihren Standardserver. Siehe: httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
jeffatrackaid
1

Diese Lösung deckt nicht alle Fälle ab.

Ersetzen Sie eine beliebige Zahl oder einen Punkt in der IP-URL durch% ##, z. B. 1 durch% 31 ... 8 durch% 38, und Sie gelangen auf die IP, nicht auf die Domain-URL.

Angenommen, diese schlechte IP wird verwendet, um die Erklärung zu vereinfachen: 123.45.6.789

Sie müssen die 2 Alternativen für alle Ziffern und Punkte verwenden: Punkt ist% 2E und 0..9 sind% 30 ..% 39

RewriteEngine on
RewriteCond %{HTTP_HOST} (1|%31)(2|%32)(3|%33)(\.|%2E)(4|%34)(5%35)(\.|%2E)(6|%36)(\.|%2E)(7|%37)(8|%38)(9|%39)
RewriteRule . - [F]

Hässlich, es kann mit {1,3} reduziert und auf eine gültige IP beschränkt werden, aber wie es für Ihre IP ist, ist dies nicht erforderlich.

Vergessen Sie nicht die Ports wie ": 80". HTTP_HOST enthält es und SERVER_NAME ist nicht zuverlässig.

shijie-hk
quelle