En Apache, ¿cómo desactivo el acceso a un sitio web cuando alguien solo usa la dirección IP en un navegador web?

8

Estoy usando el servidor web Apache en CentOS y necesito deshabilitar la capacidad de las personas para acceder al sitio web mediante el uso de la dirección IP del servidor en un navegador web. Lo quiero para que cuando alguien intente buscar la dirección IP reciba un mensaje de error prohibido.

¿Qué configuraciones serían necesarias para hacer eso?

Amr Elkhedewy
fuente

Respuestas:

10

Simplemente configure el host virtual predeterminado. Hay un ejemplo comentado en httpd.confo hacer algo trivial como:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>
Michael Hampton
fuente
Bueno, esto resolvió mi problema ... muchas gracias a todos :)
Amr Elkhedewy
7

Puede lograr esto con mod_rewrite (ya sea en el .htaccessarchivo, o en el contexto predeterminado del servidor, o en un VirtualHost separado donde ServerNameestá la dirección IP del host):

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

Esto dice que si el encabezado HTTP_HOST coincide con la dirección IP 1.2.3.4, entonces cualquier solicitud debe cumplirse con a 403 Forbidden. Cualquier solicitud que tenga otro encabezado HTTP_HOST (por ejemplo, uno con el nombre de dominio real en lugar de la dirección IP) no debería verse afectada.

Jenny D
fuente
No funcionó en httpd.conf
Amr Elkhedewy
funcionó a través del archivo .htaccess, necesito hacerlo desde las configuraciones de Apache.
Amr Elkhedewy
2
¿Reinició Apache después de editar httpd.conf? De lo contrario, Apache no sabrá sobre la nueva configuración. Esto es diferente de .htaccess, que también se analiza sin reiniciar apache.
etagenklo
Claro, pero nada cambió
Amr Elkhedewy
1

No puede bloquear el acceso directo por IP. Debe permitir la conexión pero luego decidir qué hacer con ella. Esto podría ser devolver un 403, un 404 o redirigirlos a la página deseada. Puedes hacer esto con mod_rewrite.

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

Esto coincidirá con el encabezado HTTP HOST pasado por el cliente web. Todas las demás solicitudes pasarían.

Sin embargo, es posible que desee normalizar sus URL para fines de SEO.

Con este enfoque, reescribirá todo lo que no coincida con el resultado deseado.

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]

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

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

jeffatrackaid
fuente
No funcionó en httpd.conf
Amr Elkhedewy
funcionó a través del archivo .htaccess, necesito hacerlo desde las configuraciones de Apache.
Amr Elkhedewy
Funcionará en httpd.conf, pero asegúrese de encender el motor de reescritura y ponerlo dentro de sus directivas de host virtual. De lo contrario, solo se aplicará a su servidor predeterminado. Ver: httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
jeffatrackaid
1

Esta solución no cubre todos los casos.

Reemplace cualquier número o punto en la URL de IP por su% ## por ejemplo 1 por% 31 ... 8 por% 38 y llegará a la IP, no a la url del dominio.

Supongamos que esta IP incorrecta, utilizada para facilitar la explicación: 123.45.6.789

Debe usar las 2 alternativas para todos los dígitos y puntos: el punto es% 2E y 0..9 son% 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]

Feo, puede reducirse con {1,3} y restringirse a una IP válida, pero como lo es para su IP, no es necesario que lo haga.

No olvide los puertos como ": 80". HTTP_HOST lo contiene y SERVER_NAME no es confiable.

shijie-hk
fuente