In Apache, come posso disabilitare l'accesso a un sito Web quando qualcuno utilizza solo l'indirizzo IP in un browser Web?


8

Sto usando il web server apache su CentOS e devo disabilitare la possibilità per le persone di accedere al sito web usando l'indirizzo IP del server in un browser web. Lo voglio in modo che quando qualcuno tenta di navigare verso l'indirizzo IP riceva un messaggio di errore proibito.

Quali configurazioni sarebbero necessarie per farlo?

Risposte:


10

Basta impostare l'host virtuale predefinito. C'è un esempio commentato in httpd.confo fai qualcosa di banale come:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>

Bene, questo ha risolto il mio problema .. molte grazie per tutti :)
Amr Elkhedewy,

7

Puoi farlo con mod_rewrite (nel .htaccessfile, o nel contesto del server predefinito, o in un VirtualHost separato dove ServerNameè l'indirizzo IP dell'host):

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

Questo dice che se l'intestazione HTTP_HOST corrisponde all'indirizzo IP 1.2.3.4, allora ogni richiesta dovrebbe essere soddisfatta con un 403 Forbidden. Qualsiasi richiesta che ha un'altra intestazione HTTP_HOST (ad esempio una con il nome di dominio effettivo anziché l'indirizzo IP) non dovrebbe essere interessata.


Non ha funzionato in httpd.conf
Amr Elkhedewy

ha funzionato attraverso il file .htaccess, ne ho bisogno dalle configurazioni di Apache.
Amr Elkhedewy,

2
Hai riavviato apache dopo aver modificato httpd.conf? Altrimenti apache non saprà della nuova configurazione. Questo è diverso da .htaccess, che viene anche analizzato senza riavviare apache.
etagenklo,

Certo ma nulla è cambiato
Amr Elkhedewy

1

Non è possibile bloccare l'accesso diretto tramite IP. Devi consentire la connessione ma poi decidere cosa farne. Questo potrebbe essere restituire un 403, un 404 o reindirizzarli alla pagina desiderata. Puoi farlo con mod_rewrite.

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

Ciò corrisponderà all'intestazione HOST HTTP passata dal client Web. Tutte le altre richieste passerebbero.

Tuttavia, potresti voler normalizzare i tuoi URL per scopi SEO.

Con questo approccio riscrivi tutto ciò che non corrisponde al risultato desiderato.

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]

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

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


Non ha funzionato in httpd.conf
Amr Elkhedewy

ha funzionato attraverso il file .htaccess, ne ho bisogno dalle configurazioni di Apache.
Amr Elkhedewy,

Funzionerà in httpd.conf, ma assicurati di accendere il motore di riscrittura e inserirlo nelle direttive dell'host virtuale. Altrimenti si applicherà solo al tuo server predefinito. Vedi: httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
jeffatrackaid

1

Questa soluzione non copre tutti i casi.

Sostituisci qualsiasi numero o punto nell'URL IP con il suo% ## per esempio 1 con% 31 ... 8 con% 38 e arriverai sull'IP, non sull'URL del dominio.

Supponiamo che questo IP errato, usato per facilitare la spiegazione: 123.45.6.789

È necessario utilizzare le 2 alternative per tutte le cifre e i punti: il punto è% 2E e 0..9 sono% 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]

Brutto, può essere ridotto con {1,3} e limitato a un IP valido ma come per il tuo IP, non è necessario farlo.

Non dimenticare le porte come ": 80". HTTP_HOST lo contiene e SERVER_NAME non è affidabile.

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.