Beschränken Sie den direkten IP-Zugriff auf die Website


13

Ich möchte den direkten IP-Zugriff auf meine Website einschränken. Ich fand mehrere Lösungen mit .htaccess, aber keine Arbeit. Ich habe auch eine Lösung über die Konfiguration der virtuellen Apache-Hosts gefunden, die einwandfrei funktioniert hat, bis ich ein SSL-Zertifikat über CPanel installiert habe. Ich habe absolut keine Ahnung, was in der Datei httpd.conf geändert wurde, aber jetzt funktioniert die Umleitungseinstellung nicht, auch wenn ich das SSL-Zertifikat deinstalliere.

Hier ist mein aktuelles Setup für virtuelle Hosts:

NameVirtualHost 192.168.1.1:80 NameVirtualHost *

<VirtualHost 192.168.1.1:80>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off

    ## User rotate # Needed for Cpanel::ApacheConf
    UserDir disabled
    UserDir enabled rotate
    ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
</VirtualHost>

<VirtualHost 192.168.1.1:80>
    ServerName 192.168.1.1
    Redirect 403 /
    ErrorDocument 403 "Sorry, direct IP access not allowed."
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UseCanonicalName Off
    UserDir disabled
</VirtualHost>

<VirtualHost *>
    ServerName server.mysite.com
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UserDir disabled
</VirtualHost>

NameVirtualHost 192.168.1.1:443
<VirtualHost 192.168.1.1:443>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off

    UserDir disabled
    UserDir enabled rotate

    ScriptAlias /cgi-bin/ /home/rotate/public_html/cgi-bin/
    SSLEngine on
    #SSL stuff here
</VirtualHost>

IP und Namen wurden durch generische ersetzt. Der Teil "Redirect 403 /" funktioniert nicht, seit das SSL-Zertifikat installiert wurde. Ich wäre dankbar, wenn jemand etwas Licht darauf werfen könnte, was ich hier falsch mache. Vielen Dank.


Ich denke, Sie müssen nicht verwenden = ServerName 192.168.1.1
ADM

Versuchte das auch, hat keine Wirkung.
Ivan

Wurden die VirtualHosts neu angeordnet? War der mit dem Fehler 403 der erste (Standard) vhost vorher?
Håkan Lindqvist

Nein, die Reihenfolge hat sich nicht geändert. Das Problem begann nach dem Hinzufügen des SSL-Zertifikats, dh das letzte wurde einfach hinzugefügt. Wenn ich es jetzt sogar komplett entferne, funktioniert es nicht mehr, also wurde definitiv auch etwas anderes geändert, aber ich kann nicht herausfinden, was.
Ivan

hier ist die lösung via htaccess serverfault.com/a/171260/273980
jsHate

Antworten:


12

Und voila, das Update:

<VirtualHost mysite.com:80>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off
</VirtualHost>

NameVirtualHost mysite.com:80
<VirtualHost 192.168.1.1:80>
    ServerName 192.168.1.1
    Redirect 403 /
    ErrorDocument 403 "Sorry, direct IP access not allowed."
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UseCanonicalName Off
    UserDir disabled
</VirtualHost>

<VirtualHost *>
    ServerName server.mysite.com
    DocumentRoot /usr/local/apache/htdocs
    ServerAdmin me@mysite.com
    UserDir disabled
</VirtualHost>

NameVirtualHost mysite.com:443
<VirtualHost mysite.com:443>
    ServerName mysite.com
    ServerAlias www.mysite.com
    DocumentRoot /home/rotate/public_html
    ServerAdmin me@mysite.com
    UseCanonicalName Off
</VirtualHost>

Die Lösung bestand darin, die IP-Adresse für alle Einstellungen von virtualhost einfach durch den Domänennamen zu ersetzen, mit Ausnahme derjenigen, die den direkten IP-Zugriff umleiten / beschränken muss.


Dies führt zu Problemen mit Clients, auf denen IE6 und IE8 ausgeführt werden. Wenn Sie damit einverstanden sind, ist das in Ordnung. Sie sollten sowieso ihre alten Browser aktualisieren.
Vasili Syrakis

6

Die Antwort könnte viel einfacher sein.

Kopieren Sie dies einfach in das Ende der Datei httpd.conf (normalerweise unter / etc / httpd / conf).

<VirtualHost *:80>
ServerName localhost
Redirect 403 /
UseCanonicalName Off
UserDir disabled
</VirtualHost>

<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
</VirtualHost>

Nur wenn Besucher über www.example.com zugreifen, kann er auf den Server zugreifen.


2

Sie können den direkten IP-Zugriff auf Ihren Server nicht über HTTPS deaktivieren, da der Hostname für Ihren virtuellen Host im SSL-Zertifikat verschlüsselt ist.

Clients müssen eine Verbindung zu Ihrer IP-Adresse herstellen, das Zertifikat herunterladen, den Inhalt lesen und dann überprüfen, ob der Hostname korrekt ist.

Der einzige andere Weg ist das Erzwingen von SNI. Sie können jedoch Probleme für Benutzer verursachen, die mit älteren Versionen von Internet Explorer surfen.


1
  1. Wahrscheinlich ist Ihr Zertifikat für example.com ausgestellt, nicht für 192.168.1.1 oder für beide. Daher https://192.168.1.1sollten Benutzer einen SSL-Fehler haben (da sich die URL von der des Zertifikats unterscheidet).
  2. Sie haben keine Standard-SSL-Website <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. Sie sollten Apache mit SNI-Unterstützung verwenden (es gibt einige libSSL- und Apache-Versionsanforderungen), um SSL-pro-Hostnamen zu verwenden (siehe Verwenden mehrerer SSL-Zertifikate in Apache mit einer IP-Adresse

0

Ich glaube, das ist, wonach du suchst

http://www.htaccess-guide.com/deny-visitors-by-ip-address/


1
Nein, das hat nichts mit meinem Problem zu tun. Ich möchte den Zugriff auf die Website für diejenigen blockieren, die auf die IP-Adresse meiner Website anstelle von DNS zugreifen.
Ivan

das macht genau das ....
user155813

1
Nein, dies blockiert den Site-Zugriff über die IP-Adresse des Clients. Die Frage sucht nach einer Möglichkeit, den Zugriff auf die Site mithilfe ihrer IP-Adresse zu blockieren.
DaveTheMinion

0

Um eine weitere Antwort hinzuzufügen, hat mod_security, wenn es sich für Sie lohnt, sie einzurichten, Regeln, die den Zugriff auf den Server über die IP-Adresse verbieten.


0

Dies kann einfach sein, wenn Sie Ihre Dateien nicht im Standardverzeichnis / var / www / html ablegen. Erstellen Sie einfach ein anderes Verzeichnis, zum Beispiel / web:

mkdir /web 
mkdir /web/example

kopiere deine dateien und ändere den chown:

sudo chown -R www-data:www-data /web

Erstellen Sie dann einen virtuellen Host mit der folgenden Konfiguration:

<Directory /web/example>
  Require all granted
</Directory>

<VirtualHost *:80>

    DocumentRoot /web/example
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@example.com

    # Force SSL, you can remove this line
    Redirect permanent / https://example.com/

    ServerAdmin webmaster@example.com

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

# If you use SSL
<IfModule mod_ssl.c>
    <VirtualHost *:443>
        DocumentRoot /web/example
        ServerName example.com
        ServerAlias www.example.com
        ServerAdmin webmaster@example.com

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # adapt this to your paths
        SSLEngine on
        SSLCertificateFile /etc/ssl/example/example_com.crt
        SSLCertificateKeyFile /etc/ssl/example/example.key
        SSLCertificateChainFile /etc/ssl/example/example_com.ca-bundle

    </VirtualHost>
</IfModule>

Vergessen Sie nicht, Ihren virtuellen Host zu aktivieren. Beispiel:

sudo a2ensite example.com.conf

0

In einem Apcahe-Setup mit mehreren .confDateien wird die Priorität auf die erste geladene und dann auf die zweite Datei angewendet. Wenn Sie mit Ubuntu arbeiten, werden Dateien in lexikografischer Reihenfolge geladen, sodass die allererste .confDatei, die geladen wird, die 000-default.conf( daher die 000 in ihrem Namen ) ist, die sich unter der befindet/etc/apache2/sites-available/ Verzeichnis befindet.

Um zu verhindern, dass eine andere Regel angewendet wird, müssen wir unsere Regel an den Anfang dieser ersten Datei setzen.

und Sie können dieser Datei einfach die folgende Regel voranstellen.

<VirtualHost *:80>
    ServerName default
    DocumentRoot /var/www/html
    #This part here, is crucial.
    <Location />
        Require all denied
    </Location>
</VirtualHost>

Bewährt auf Ubuntu 16.4 x64 Apache-Version > 2.4

Wenn Sie eine niedrigere Version von Apache verwenden, ersetzen Sie Require all deniedden obigen Code durch ...

<Location />
    Order deny,allow
    Deny from all
</Location>

-3

Ich habe diesen einfachen Code in PHP geschrieben, um den direkten IP-Zugriff einzuschränken!

$servername =  $_SERVER['SERVER_NAME'];
if($servername == 'your-domain.com'){

}elseif($servername == 'your-domain-with-www.com'){

}else{
    die("Direct ip access not allowed!");
}

Einfach in deine PHP-Datei einfügen und genießen!


1
Können Sie die Vorteile gegenüber den anderen Antworten erläutern?
030

Dies ist die einfachste Methode, mit der Sie den direkten IP-Zugriff auf Ihre Website einschränken können, ohne die Apache-Einstellungen zu ändern!
Max Marley
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.