Ogranicz bezpośredni dostęp IP do strony internetowej


13

Chcę ograniczyć bezpośredni dostęp IP do mojej witryny. Znalazłem kilka rozwiązań obejmujących .htaccess, ale żadne z nich nie działa. Znalazłem również jedno rozwiązanie poprzez konfigurację wirtualnych hostów Apache, które działało dobrze, dopóki nie zainstalowałem certyfikatu SSL przez CPanel. Absolutnie nie mam pojęcia, co zostało zmienione w pliku httpd.conf, ale teraz ustawienie przekierowania nie działa, nawet jeśli odinstaluję certyfikat SSL.

Oto moja obecna konfiguracja hostów wirtualnych:

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>

Adres IP i nazwy zostały zastąpione ogólnymi. Część „Przekierowanie 403 /” nie działa od momentu zainstalowania certyfikatu SSL. Byłbym wdzięczny, gdyby ktoś mógł rzucić nieco światła na to, co robię tutaj źle. Dzięki.


chyba nie musisz używać = nazwa_serwera 192.168.1.1
ADM

Próbowałem też, że nie ma żadnego efektu.
Ivan

Czy zmieniono kolejność VirtualHosts? Czy ten z błędem 403 był pierwszym (domyślnym) vhostem wcześniej?
Håkan Lindqvist

Nie, zamówienie się nie zmieniło. Problem zaczął się po dodaniu certyfikatu SSL, co oznacza, że ​​ostatni został po prostu dodany. Teraz, jeśli nawet go całkowicie usunę, nie będzie już działać, więc coś innego zostało zdecydowanie zmienione, ale wydaje się, że nie wiem, co.
Ivan

oto rozwiązanie za pośrednictwem htaccess serverfault.com/a/171260/273980
jsHate

Odpowiedzi:


12

I voila, poprawka:

<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>

Rozwiązaniem było po prostu zastąpienie adresu IP nazwą domeny dla wszystkich ustawień wirtualnego hosta, z wyjątkiem tego, który musi przekierować / ograniczyć bezpośredni dostęp do adresu IP.


Spowoduje to problemy z klientami z IE6 i IE8. Jeśli nie masz nic przeciwko, to jest w porządku. W każdym razie powinni zaktualizować swoje starożytne przeglądarki.
Vasili Syrakis

6

Odpowiedź może być znacznie prostsza.

Po prostu skopiuj to na dół strony httpd.conf (zwykle znajduje się w / 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>

Tylko wtedy, gdy odwiedzający wejdą na www.example.com, może uzyskać dostęp do serwera.


2

Nie można wyłączyć bezpośredniego dostępu IP do serwera przez HTTPS, ponieważ nazwa hosta wirtualnego hosta jest zaszyfrowana w certyfikacie SSL.

Klienci muszą połączyć się z twoim adresem IP, pobrać certyfikat, przeczytać zawartość, a następnie mogą sprawdzić, czy nazwa hosta jest poprawna.

Jedynym innym sposobem jest wymuszanie SNI , ale będziesz powodować problemy dla użytkowników, którzy przeglądają starsze wersje Internet Explorera.


1
  1. Prawdopodobnie twój certyfikat jest wystawiony na example.com, a nie 192.168.1.1, ani na oba; Dlatego użytkownicy, którzy korzystają, https://192.168.1.1powinni mieć błąd SSL (ponieważ URL różni się od adresu certyfikatu).
  2. Nie masz witryny z domyślnym protokołem SSL <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. Powinieneś używać Apache z obsługą SNI (istnieją pewne wymagania wersji libSSL i Apache), aby używać SSL na nazwę hosta (patrz Używanie wielu certyfikatów SSL w Apache z jednym adresem IP


0

Aby dodać kolejną odpowiedź, mod_security, jeśli warto go skonfigurować, ma reguły zabraniające dostępu do serwera przez adres IP.


0

Może to być łatwe, jeśli nie umieścisz swoich plików w domyślnym katalogu / var / www / html. Wystarczy utworzyć inny katalog, powiedzmy na przykład / web:

mkdir /web 
mkdir /web/example

skopiuj swoje pliki i zmień chown:

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

Następnie utwórz wirtualny host z następującą konfiguracją:

<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>

Nie zapomnij włączyć wirtualnego hosta, na przykład:

sudo a2ensite example.com.conf

0

W konfiguracji Apcahe zawierającej wiele .confplików pierwszeństwo ma pierwszy załadowany plik, a następnie drugi ... podobny. Jeśli więc korzystasz z systemu Ubuntu, pliki są ładowane w kolejności leksykograficznej, więc „pierwszym” .confplikiem, który zostanie załadowany, będzie 000-default.conf( stąd nazwa 000 ) rezydujący w /etc/apache2/sites-available/katalogu.

Aby więc nie zastosować żadnej innej reguły, musimy umieścić naszą regułę na początku pierwszego pliku.

i możesz po prostu dołączyć do tego pliku następującą regułę.

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

Wypróbowany i przetestowany na wersji Apache Ubuntu 16.4 x64 > 2.4

Jeśli korzystasz z niższej wersji Apache, spróbuj zastąpić Require all deniedpowyższy kod na ...

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

-3

Napisałem ten prosty kod w PHP, aby ograniczyć bezpośredni dostęp do ip!

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

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

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

po prostu wklej do pliku php i ciesz się!


1
Czy możesz wyjaśnić zalety tego rozwiązania w porównaniu z innymi odpowiedziami?
030

jest to najprostsza metoda, której możesz użyć, aby ograniczyć bezpośredni dostęp ip do swojej witryny, bez edytowania ustawień apache!
Max Marley,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.