In Apache, come faccio a distriggersre l'accesso a un sito web quando qualcuno utilizza solo l'indirizzo IP in un browser web?

Sto utilizzando il server Web apache su CentOS e devo distriggersre la possibilità per le persone di accedere al sito web utilizzando l'indirizzo IP del server in un browser web. Lo voglio in modo che quando qualcuno tenta di navigare all'indirizzo IP, ottengono un messaggio di errore proibito.

Quali configurazioni sarebbero necessarie per farlo?

4 Solutions collect form web for “In Apache, come faccio a distriggersre l'accesso a un sito web quando qualcuno utilizza solo l'indirizzo IP in un browser web?”

Basta impostare l'host virtuale predefinito. Esiste un esempio commentato in httpd.conf o fa qualcosa di banale come:

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

È ansible get questo con mod_rewrite (nel file .htaccess o nel context predefinito del server o in un VirtualHost separato in cui il nome di server è l'indirizzo IP dell'host):

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

Ciò spiega che se l'intestazione HTTP_HOST corrisponde all'indirizzo ip 1.2.3.4, allora qualsiasi richiesta deve essere soddisfatta con un 403 Forbidden . Qualsiasi richiesta che abbia un'altra intestazione HTTP_HOST (ad esempio una con il nome di dominio effettivo piuttosto che l'indirizzo IP) non dovrebbe essere compromise.

Non è ansible bloccare l'accesso diretto tramite IP. È necessario consentire la connessione, ma decidere cosa fare con esso. Questo potrebbe essere restituito 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] 

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

Tuttavia, si potrebbe desiderare di normalizzare i tuoi URL per scopi SEO.

Con questo approccio si riscrive 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

Questa soluzione non copre tutti i casi.

Sostituisci un numero o un punto nell'URL IP per il relativo% ## per esempio 1 per% 31 … 8 per% 38 e arriverai all'ID, non sull'URL del dominio.

Supponiamo che questo IP difettoso, utilizzato per facilitare la spiegazione: 123.45.6.789

È necessario utilizzare le 2 alternative per tutte le cifre e 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] 

Ugly, può essere ridotto con {1,3} e limitato a IP valido ma come è per il tuo IP, non c'è bisogno di farlo.

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

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.