Permitir el acceso a un host virtual de Apache solo desde la red local

19

Tengo una página web en un servidor Linux que administro, que ejecuta Apache 2.2. Este servidor es visible para el mundo exterior para algunos otros servicios.

Me gustaría configurar Apache para que un host virtual determinado solo sea visible desde el interior de la red local, de modo que pueda implementar una aplicación web para obtener comentarios de otras personas de mi organización. Creo que esto tiene que ver con la directiva Allow, pero mis experimentos no van bien.

¿Cómo puedo alterar mi archivo de configuración para lograr eso? ¿Debo cambiar también la configuración del firewall?

Btz
fuente
¿Está utilizando una dirección IP privada (no enrutable) como 10.0.0.100 o una dirección IP pública (enrutable) para su servidor?
closetnoc
El servidor tiene una dirección IP pública, y puedo conectarme a él desde fuera de la red de trabajo, desde casa, por ejemplo. Todas las computadoras de los colegas tienen direcciones IP locales del tipo 10. *. *. *.
Btz

Respuestas:

12

Fácil. Simplemente configure algo como esto dentro de su configuración principal o su configuración virtual:

<Directory /var/www/path/to/your/web/documents>

  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1 ::1
  Allow from localhost
  Allow from 192.168
  Allow from 10
  Satisfy Any

</Directory>

La <Directory></Directory>declaración básicamente dice: "Use estas reglas para cualquier cosa en este directorio. Y por "este directorio" que se refiere a lo /var/www/path/to/your/web/documentsque he establecido en este ejemplo, pero debe cambiarse para que coincida con la ruta del directorio local de su sitio.

A continuación, dentro del <Directory></Directory>área, está cambiando el comportamiento predeterminado de Apache, que Allowes todo por defecto Order Deny,Allow. A continuación, establece Deny from alldesde niega el acceso de todos. Follwing que son las Allow fromdeclaraciones que permiten el acceso desde 127.0.0.1 ::1(dirección IP localhost), localhost(el propio host local). Eso es todo lo estándar. Dado que el acceso desde localhostes necesario para muchos procesos internos del sistema.

Lo que sigue es lo que te importa.

Tanto Allow frompara permitir 192.168como 10para permitir el acceso desde cualquiera / todas las direcciones de red dentro del rango de red prefijado por esos números.

Entonces, al indicar 192.168eso, básicamente significa si un usuario tiene una dirección como 192.168.59.27o 192.168.1.123podrá ver el sitio web.

Y de manera similar, usar el prefijo Allow fromfor 10garantiza que si alguien tiene una dirección IP 10.0.1.2o incluso 10.90.2.3podrá ver el contenido.

Casi todas las redes internas en el mundo usan el 192.168rango o algo en el 10rango. Nada externo Por lo tanto, usar este combo logrará su objetivo de bloquear el acceso al mundo exterior, pero solo permitirá el acceso desde su red local.

JakeGould
fuente
¿Qué se Satisfy Anysupone que debe hacer en este caso? No sé nada de todo esto, pero cuando estaba presente en mi escenario, podía acceder a la página (que usé <Location /path>) desde una red externa. Sin embargo, eliminarlo solucionó mis problemas. Sería bueno entender por qué este fue el caso, ya que estaba un poco preocupado de que pudiera acceder a la página incluso con las reglas vigentes.
liamnichols
@liamnichols Como se explica aquí : "Permite la solicitud si se cumple algún requisito (autenticación O acceso)".
JakeGould
14

Las personas que llegan a esta respuesta, tenga en cuenta que esto es específico para Apache 2.2.

Apache 2.4 ha desaprobado estas directivas.

La nueva forma es usar el módulo mod_authz_hosty las Requiredirectivas. ( enlace )

En Apache 2.4 deberías hacer

<Directory /var/www/ncp-web/>
  Require host localhost
  Require ip 127.0.0.1
  Require ip 192.168
  Require ip 10
</Directory>

y elimine todas las directivas Permitir.

nachoparker
fuente
5

Agregue esta sección dentro de su directiva de host virtual:

<Location /mypathurl>
    Order deny,allow
    Deny from all
    Allow from 192.168.1.10
</Location>

Reemplace su IP arriba. Esto no debe usarse para la seguridad del nivel financiero, para su información.

Chloe
fuente
-1

No sé cómo tiene su configuración de red, sin embargo, supongo que hay algo para tratar de dar una mejor respuesta.

Supongamos que tiene una pequeña oficina con una conexión DSL. Tendría una dirección IP pública estática o un bloque de direcciones asignado a su línea, un módem DSL y un firewall. Sin entrar en los detalles de cómo sucede esto, llegaré a la parte importante.

Debería estar utilizando NAT (traducción de direcciones de red). Esto permite que las direcciones IP públicas residan en el lado WAN (Internet) de su red y usen direcciones IP privadas (como 10.0.0.100) dentro de la red en el lado LAN. Este es un procedimiento de operación estándar. Si aloja un servidor web dentro de su red, entonces usaría el reenvío de puertos u otro mecanismo similar) para dirigir cualquier tráfico web a su servidor web.

En este escenario estándar, todas sus computadoras internas usarían las direcciones IP privadas.

Suponiendo que tiene una configuración de red estándar similar, cambiaría la dirección IP de su computadora de una dirección IP pública a una dirección IP privada. Su red puede tener una configuración de DHCP donde su computadora puede solicitar una dirección IP disponible. Esto significa que en lugar de especificar una dirección IP, selecciona usar DHCP y se le asignará una dirección IP. Si DHCP no está disponible, entonces deberá verificar en otras computadoras un espacio de dirección IP privada que pueda usarse y seleccionar una dirección IP dentro del espacio que no se usa. Puede especificar esta dirección IP no utilizada en la configuración de su red. Esto debería evitar que su sistema sea visto en Internet.

closetnoc
fuente
Lo pensé, pero no es una solución práctica. Hay servicios en esa máquina que deben permanecer visibles desde el exterior, y en cualquier caso planeo hacer que la aplicación web vuelva a ser visible en unos pocos días; no tiene sentido revolucionar el diseño de la red solo por unos días. Sin embargo, en lo que puedo trabajar es en cosas como la configuración de Apache.
Btz
Si tiene un firewall, puede cerrar algunos puertos a esa dirección IP.
closetnoc
Se podría usar la configuración de firewall, pero eso es realmente exagerado. Apache ha incorporado una funcionalidad para negar o permitir según la dirección IP y otros criterios relacionados. Vea mi respuesta para más detalles.
JakeGould
Los firewalls de @JakeGould no son necesariamente una solución exagerada. Conozco a Apache muy, muy bien. Sin embargo, hay opciones de filtrado HTTP en la mayoría de los firewalls buenos que ayudan sin poner una carga en el servidor. Además, si bien Apache es excelente, no está exento de falta. Además, los accesos a puertos, incluidos los accesos a puertos alternativos, pueden manipularse utilizando un firewall para que algunos servicios web sigan siendo públicos y otros solo sean accesibles dentro de la LAN.
closetnoc