En esta página:
Demo Github
En algunas ocasiones necesitas restringir el acceso a uno o varios archivos de tu proyecto alojado en un servidor Nginx sea por temas de privacidad o por Seguridad, en la actualidad conocer como hacer esto es imprescindible si quieres evitar ser atacado por usuarios con malas intenciones, en este Post te voy a enseñar a trabajar en la seguridad de los archivos de un servidor Nginx.
Antes de continuar te recomiendo leer el artículo Que es Nginx y otros Detalles para que este Familiarizado con este Post, si ya sabes que es Nginx puedes continuar no hay problema.
Como puedes leer en el título de este Post voy a compartirte como restringir el acceso en diferentes situaciones o casos de uso a continuación.
Archivo de Configuración Nginx
En la mayoría de casos un servidor Nginx cuenta con un archivo llamado nginx.conf en donde se especifican las directivas y políticas para el servidor, este archivo puede estar en diferentes ubicaciones ya que cada servidor o proovedor de Servidor maneja un orden diferente de archivos y directorios.
En mi servidor tengo el archivo nginx.conf alojado en el directorio conf, a continuación puedes ver la estructura con los archivos y directorios de mi servidor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/server ├── /bin ├── /conf ├── /domains ├── /opensslCA ├── mongod.conf ├── msmtp.ini ├── mysql.ini ├── nginx.conf // Abre este Archivo ├── nginx.fastcgi.conf ├── nginx.mimetypes.conf ├── nginx.mimetypes.conf.bkp ├── nginx.phpfarm.conf ├── nginx.redis.conf ├── openssl.conf ├── php.ini ├── redis.conf ├── nginx.redis.conf ├── /data ├── /include ├── /log ├── /src ├── /tmp ├── /www ... ... (Otros archivos) ... |
Conociendo esto entonces todas las directivas y políticas de seguridad que aplicare para proteger los archivos en mi servidor las especificaré en el archivo llamado nginx.conf
Restringir el acceso a un Archivo
Hay diferentes formas de impedir que los usuarios accedan a un archivo de tu servidor Nginx esto depende de lo que necesites hacer, a continuación voy a presentarte algunos casos de uso.
Bloqueo de archivo con retorno 404 Not Found
Por ejemplo si tengo un archivo llamado logo.png, entonces puedo restringir el acceso a este archivo en mi servidor Nginx especificando el nombre del archivo que no quiero que vean los usuarios, de la siguiente manera
1 2 3 4 5 6 |
location = /proyecto/img/logo.png { deny all; return 404; } |
Puedes ver que estoy colocando primero el nombre del directorio en donde se encuentra alojado el archivo logo.png y luego el nombre del archivo, debajo le deniego el acceso con la regla deny all y le arrojo un error 404, en mi Navegador debería ver lo siguiente si intento acceder a la página logo.png
Sabiendo esto podemos proteger cualquier archivo de nuestro servidor y cuando el usuario intente ingresar al archivo se le retorna un error 404 Page Not Found
Bloqueo de Archivo por Contraseña
Otra forma en que podemos proteger un archivo es por medio de un Password o Contraseña, para esto debemos crear un archivo con el nombre .htpasswd en el mismo directorio en donde se encuentra el archivo nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/server ├── /bin ├── /conf ├── /domains ├── /opensslCA ├── .htpasswd // Crea y Abre este Archivo ├── mongod.conf ├── msmtp.ini ├── mysql.ini ├── nginx.conf ├── nginx.fastcgi.conf ├── nginx.mimetypes.conf ├── nginx.mimetypes.conf.bkp ├── nginx.phpfarm.conf ├── nginx.redis.conf ├── openssl.conf ├── php.ini ├── redis.conf ├── nginx.redis.conf ├── /data ├── /include ├── /log ├── /src ├── /tmp ├── /www ... ... (Otros archivos) ... |
Abre el archivo .htpasswd y dentro de el debemos de colocar el nombre de usuario y la contraseña divididos entre 2 puntos es decir usuario:contraseña por ejemplo a continuación el usuario es admin y la contraseña es 123456
1 2 3 |
admin:123456 |
Luego en mi archivo nginx.conf debo especificar la siguiente regla
1 2 3 4 5 6 |
location ^~ /proyecto/img/logo.png { auth_basic_user_file .htpasswd; auth_basic "Restricted"; } |
En la regla estoy especificando la ruta del archivo que deseo bloquear con Password, luego llamo al archivo .htpasswd que contiene las credenciales con el nombre usuario y la contraseña que el usuario debe de escribir para poder ver la imagen, si intento acceder al archivo logo.png en el navegador me debe de aparecer una ventana para ingresar el usuario y la contraseña
Una vez que el usuario logro acceder a la imagen con el usuario y contraseña es probable que pueda ver la imagen muchas veces, así que debes de tener cuidado y no dar acceso a usuarios indeseados.
Bloqueo de Archivo y Redireccionar
También podemos hacer que la ruta del archivo redireccione a una página específica del servidor, para esto agrego la siguiente regla
1 2 3 4 5 |
location = /proyecto/img/logo.png { return 301 /proyecto/index.php; } |
Lo que hago es especificar la ruta del archivo logo.png y cuando el usuario intente acceder a esta imagen, pues lo redirecciono a la página index.php que es la página principal de mi Sitio Web, también puedo escribir solo el nombre directorio principal y el servidor por defecto sabe que el archivo index.php es el archivo de la página principal del Sitio Web
1 2 3 4 5 |
location = /proyecto/img/logo.png { return 301 /proyecto/; } |
Si intento acceder a la imagen en el navegador, este se redirecciona a la Página principal del Sitio web
Entendiendo esto puedes hacer una redirección a la página o el archivo que desees.
Bloqueo de Archivo por IP
Si necesitas que un usuario con una dirección IP especifica no tenga acceso a un archivo puedes aplicar la siguiente regla
1 2 3 4 5 6 |
location /proyecto/img/logo.png { allow 111.222.333.44; deny all; } |
Lo que hago es indicar la ruta del archivo que quiero restringir acceso es decir el archivo logo.png y luego especifico la IP que desea bloquear, termino aplicando la regla deny all para denegarle el acceso a dicha IP.
Si accedo a mi navegador debo de ver lo siguiente
Conclusión
Hay muchas situaciones en las que necesites bloquear un archivo en un servidor Nginx, en este Post te compartimos las mas comunes para que puedas tener una idea de como se restringe el acceso a los archivos en Nginx.
En algunos casos puede que necesites de herramientas adicionales para llevar acabo una restricción más especifica a un archivo o directorios en tu servidor Nginx.
Nota(s)
- Algunos de los pasos y reglas mencionadas pueden variar en el futuro, esto no depende de Nosotros si no de los desarrolladores que dan soporte a Nginx o las nuevas reglas que se asignen a los Navegadores.
- Algunas reglas mencionadas pueden no funcionar en el futuro, esto no depende de Nosotros si no de las Empresas que dan Soporte a los Navegadores como Google Chrome, Mozilla Firefox, Microsoft Edge, etc. Estas suelen aplicar nuevas reglas de seguridad a sus Navegadores.
Síguenos en las Redes Sociales para que no te pierdas nuestros próximos contenidos.