Haga que apache solo sea accesible a través de 127.0.0.1, ¿es esto posible?

19

¡He configurado mi servidor Apache y el PHP / MySQL funciona bien!

Pero el problema es, ¿cómo mantengo esto privado, ya que es un servidor solo de desarrollo ? La única razón para mantener el contenido privado es si un script salió mal, no quiero que aparezcan errores de Apache si se convirtió en un sitio público (¡y el hecho de que otros también comparten la misma red!), Y yo soy menos es probable que use mi PC como un servidor web: es más probable que deje de usar la ruta del proveedor de alojamiento web para un sitio en vivo real.

Actualmente puedo acceder a él de tres maneras:

  • http: // localhost (o http://127.0.0.1 , la forma alternativa y la IP de localhost, ¡pero cualquier forma es aceptable conmigo!)

  • http 192.168.0.1 (IP de mi enrutador)

  • http pc-name-here (nombre de mi PC, ¡obviamente esto varía entre las PC con Windows!)

[nota, no se pueden publicar enlaces, por lo que para los otros dos tendría que insertar los dos puntos / barra diagonal como en el primero].

Sin embargo, solo quiero acceder a través del primero. Está escuchando en el puerto 80 (y no quiero cambiar eso). ¿No es esto posible o me equivoco? Sé un poco más sobre PHP / diseño web que el lado de la red de las cosas, ¡así que esta es la primera vez para mí!

Básicamente, quiero que solo sea accesible a través de localhost en esa máquina, y no a la dirección IP externa, o 192.168.0.1.

¿Necesitaría editar httpd.conf y usar denegar en cada sitio de banco de pruebas, o hay alguna otra solución?

Ejemplo:

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    order allow,deny
    allow from 127.0.0.1
            deny from 192.168.0.1
            deny from my-pc-name
</Directory>
  • ese es un ejemplo, pero no estoy seguro de lo que está bien o mal aquí.

Mi sistema operativo es Windows 7 Ultimate.

Eché un vistazo a la red, pero algo me pareció un poco técnico.

¿Qué recomendarías?

linthurst53
fuente

Respuestas:

34

La forma más fácil de hacerlo es a través de la Listendirectiva. Por defecto, hay una línea en nuestro httpd.conf que dice:

Listen *:80

Lo que significa que responderá a las solicitudes de ro en el puerto 80 en todas las direcciones de red de su computadora. Cambiándolo a:

Listen 127.0.0.1:80

Le indicará a apache que solo responda a las solicitudes en el adaptador local, ignorando así cualquier otra cosa.

SmallClanger
fuente
12

La opción de escuchar es probablemente la mejor, pero solo como FYI, puede hacerlo usando allow / deny como este

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Directory>

Order deny,allowle dice a Apache que "Denegar todas las solicitudes a menos que se permita específicamente" ( Order allow,denyes lo contrario, IE permite todas las solicitudes a menos que se bloquee específicamente)
Deny from allhace algo similar al Order deny,allowbloquear todas las solicitudes de todas las IP a menos que las abra específicamente. Parece ser práctica general utilizar tanto Order deny,allowy Deny from allpero no estoy 100% seguro de eso, cuando ambos hacen lo mismo que
Allow from 127.0.0.1dice "Permitir todas las peticiones de 127.0.0.1". 127.0.0.1 se asignará a localhost para que pueda usar http://127.0.0.1/ o http: // localhost / y se permitirá

Eso servirá un error 403 (Prohibido) a cualquiera que solicite el sitio no en localhost

Algunas otras cosas útiles;
Allow from 192.168.0.permitirá la solicitud de cualquier persona en su red (siempre que su red sea 192.168.0.0-192.168.0.255) Las
reglas de permiso / denegación se procesan en orden, por lo que

Deny from 192.168.0.2
Allow from 192.168.0.2

permitiría solicitudes y

Allow from 192.168.0.2
Deny from 192.168.0.2

negaría las solicitudes de 192.168.0.2

Entonces

Deny from 192.168.0.2
Allow from all

Permitiría solicitudes de 192.168.0.2, incluso si se hubiera denegado específicamente.

También puede usar las reglas Permitir / Denegar en archivos .htaccess o por directorio

Mancha
fuente
Asegúrese de que sea "Orden denegar, permitir", no "Orden de permitir, denegar". Un pequeño error frecuente que la gente comete constantemente.
Scott Chu
3

Realicé cambios en ports.conf en / etc / apache2 para que cada referencia a Escuchar un puerto solo escuchara localhost. Ningún otro archivo parece tener el comando de escucha. Después de reiniciar apache, estos cambios parecen tener el efecto deseado.

/etc/apache2/ports.conf

NameVirtualHost *:80
########################## Listen 80
Listen 127.0.0.1:80

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
###############################Listen 443
Listen 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls.c>
##################################Listen 443
Listen 127.0.0.1:443
</IfModule>
Mathew Peet
fuente