¿Cómo puedo restringir el acceso a `/` y también a `/index.php` en mi servidor, pero no permitir nada más?

¿Cómo puedo restringir el acceso a `/` y también a `/index.php` en mi servidor, pero no permitir nada más?

Me gustaría permitir que los usuarios solo puedan visitar index.php(y también solo /) mi servidor, y nada más (devolviendo un 403 si es válido y un 404 si es un archivo no válido).

¿Cómo puedo hacer esto? He probado las siguientes soluciones Denegar el acceso a todos los archivos excepto index.html apache

Negar el acceso a todos los archivos excepto index.php pero permitir el acceso a través de "/" en el archivo htaccess

pero no parecen tener ningún efecto.

Mi archivo .htaccess es este, pero no tiene ningún efecto y aún puedo acceder a otros archivos en mi servidor:

Order allow,deny
Deny from all
<FilesMatch index\.php>
        Allow from all
</FilesMatch>

¿No estoy seguro de si necesito definir algo en mi configuración de virtualhosts también?

Mi archivo de hosts virtuales es:

ServerAdmin webmaster@localhost
ServerName server.mydomain.com
ServerAlias server.mydomain.com
DocumentRoot /var/www/server.mydomain.com
DirectoryIndex index.php
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLCertificateFile /etc/letsencrypt/live/server.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/server.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

La salida de apache2ctl -S es:

VirtualHost configuration:
*:443                  server.mydomain.com (/etc/apache2/sites-enabled/server.mydomain.com-le-ssl.conf:2)
*:80                   server.mydomain.com (/etc/apache2/sites-enabled/server.mydomain.com.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex ssl-stapling-refresh: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

Respuesta1

En mi humilde opinión, estás haciendo las cosas de manera incorrecta y estás tratando de resolver un problema que puede evitarse por completo:

Simplemente no almacene archivos y directorios que no pertenezcan a Internet en su DocumentRoot.

Limite el contenido del directorio /var/www/server.example.comsolo a ese index.phparchivo y no podrá equivocarse.


Esta pregunta está etiquetada con el histórico.La versión y la sintaxis no son adecuadas para la versión actual de Apache httpd 2.4. - Verhttps://httpd.apache.org/docs/2.4/upgrading.html


Cuando quieras publicar algo en http://www.example.com/some-path/ uso, elAliasdirectiva para exponer un directorio completamente diferente en lugar de crear un subdirectorio /var/www/server.example.com/some-path/ (por ejemplo, crear /var/www//some-path) y usar:

<VirtualHost *:80
    ServerAdmin webmaster@localhost
    ServerName server.mydomain.com
    ServerAlias server.mydomain.com
    DocumentRoot /var/www/server.example.com

    Alias /some-path "/var/www/some-path"

    <Directory "/var/www/some-path"> 
       # add settings here, for example
       Order deny,allow
       Deny from all
       Allow From 127.0.0.1
    </Directory>
</VirtualHost>

información relacionada