Limitare l'accesso IP diretto al sito Web


13

Voglio limitare l'accesso IP diretto al mio sito Web. Ho trovato diverse soluzioni che coinvolgono .htaccess ma nessuna funziona. Ho anche trovato una soluzione tramite la configurazione degli host virtuali di Apache che funzionava bene fino a quando non ho installato un certificato SSL tramite CPanel. Non ho assolutamente idea di cosa sia stato modificato nel file httpd.conf ma ora l'impostazione di reindirizzamento non funziona anche se disinstallo il certificato SSL.

Ecco la mia attuale configurazione di host virtuali:

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 e nomi sono stati sostituiti con nomi generici. La parte "Reindirizzamento 403 /" non funziona dall'installazione del certificato SSL. Le sarei grato se qualcuno potesse far luce su cosa sto facendo di sbagliato qui. Grazie.


suppongo che non devi usare = ServerName 192.168.1.1
ADM il

Ho provato anche quello, non ha alcun effetto.
Ivan,

I VirtualHosts sono stati riordinati? Quello con l'errore 403 era il primo vhost (predefinito) prima?
Håkan Lindqvist,

No, l'ordine non è cambiato. Problema iniziato dopo l'aggiunta del certificato SSL, il che significa che l'ultimo è stato semplicemente aggiunto. Ora, anche se lo rimuovo completamente non funzionerà più, quindi anche qualcos'altro è stato sicuramente cambiato, ma non riesco a capire cosa.
Ivan,

ecco la soluzione tramite htaccess serverfault.com/a/171260/273980
jsHate

Risposte:


12

E voilà, la correzione:

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

La soluzione era semplicemente sostituire l'IP con il nome di dominio per tutte le impostazioni di virtualhost, ad eccezione di quello che deve reindirizzare / limitare l'accesso IP diretto.


Ciò causerà problemi con i client che eseguono IE6 e IE8. Se stai bene, allora va bene. Dovrebbero comunque aggiornare i loro browser antichi.
Vasili Syrakis,

6

La risposta potrebbe essere molto più semplice.

Basta copiarlo in fondo a httpd.conf (di solito si trova in / 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>

Quindi solo quando i visitatori accedono tramite www.example.com, possono accedere al server.


2

Non è possibile disabilitare l'accesso IP diretto al server su HTTPS perché il nome host per il tuo host virtuale è crittografato all'interno del certificato SSL.

I clienti devono connettersi al tuo indirizzo IP, scaricare il certificato, leggere i contenuti e quindi possono verificare che il nome host sia corretto.

L'unico altro modo è applicare SNI , ma causerai problemi agli utenti che navigano con versioni precedenti di Internet Explorer.


1
  1. Probabilmente il tuo certificato viene rilasciato a example.com, non a 192.168.1.1, né ad entrambi; Quindi, i visitatori che usanohttps://192.168.1.1 dovrebbero avere un errore SSL (perché l'URL differisce da quello del certificato).
  2. Non hai un sito Web "SSL predefinito" <VirtualHost *:443> SSLEngine on </VirtualHost>
  3. Dovresti usare apache con supporto SNI (ci sono alcuni requisiti di versione libSSL e Apache) per usare SSL-per-hostname (vedi Usare più certificati SSL in Apache con un indirizzo IP

0

Credo che questo sia ciò che stai cercando

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


1
No, questo non ha nulla a che fare con il mio problema. Voglio bloccare l'accesso al sito Web per coloro che accedono all'IP del mio sito Web anziché al suo DNS.
Ivan,

che fa esattamente questo ....
user155813

1
No, questo blocca l'accesso al sito tramite l'indirizzo IP del client. La domanda sta cercando un modo per bloccare l'accesso al sito usando il suo indirizzo IP.
DaveTheMinion,

0

Per aggiungere un'altra risposta, mod_security, se vale la pena configurarlo, ha delle regole per vietare l'accesso al server per indirizzo IP.


0

Questo può essere facile se non metti i tuoi file nella directory predefinita / var / www / html. Basta creare un'altra directory, diciamo ad esempio / web:

mkdir /web 
mkdir /web/example

copia i tuoi file e cambia il chown:

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

Quindi creare un host virtuale con la seguente configurazione:

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

Non dimenticare di abilitare il tuo host virtuale, ad esempio:

sudo a2ensite example.com.conf

0

In un'installazione Apcahe con più .conffile, la precedenza va al primo file caricato e poi al secondo ... allo stesso modo. Quindi, se sei su Ubuntu, i file vengono caricati in ordine lessicografico, quindi il "primo" .conffile che verrà caricato sarà il 000-default.conf( quindi il 000 in suo nome ) che risiede nella /etc/apache2/sites-available/directory.

Quindi, al fine di impedire l'applicazione di qualsiasi altra regola, dobbiamo portare la nostra regola in cima a quel primo file.

e puoi semplicemente anteporre la seguente regola a quel file.

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

Provato e testato su Ubuntu 16.4 x64 versione Apache > 2.4

Se stai eseguendo una versione precedente di Apache, prova a sostituire Require all denieddal codice precedente in ...

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

-3

Ho scritto questo semplice codice in PHP per limitare l'accesso diretto all'ip!

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

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

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

basta incollarlo nel tuo file php e divertiti!


1
Potresti spiegare i vantaggi di questo rispetto alle altre risposte?
030

questo è il metodo più semplice che puoi usare per limitare l'accesso ip diretto al tuo sito web, senza modificare le impostazioni di apache!
Max Marley,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.