Hola amigos. En este post continuaremos con algunos trucos para Nginx. Entonces, hoy aprenderá cómo restringir el acceso al directorio y subdirectorios en Nginx. Vamos a por ello.
Primero, ¿debemos hacer esto?
La respuesta corta es sí. Definitivamente. Porque en una aplicación o sitio web, hay muchas carpetas que contienen archivos confidenciales para que funcione.
Por lo anterior, es recomendable establecer reglas para prohibir el acceso a estas carpetas y así mejorar la seguridad del sitio.
Estas restricciones se pueden aplicar por dirección IP, lo que nos permite tener la flexibilidad de aplicar las configuraciones que necesitamos.
Es sin esfuerzo. Vamos a por ello.
Requisitos
Antes de continuar, tenemos que asegurarnos de que cumplimos con los requisitos para completar la publicación sin problemas
- Necesita tener Nginx instalado y configurado. Así que asegúrese de tenerlo usando los repositorios oficiales de su distribución de Linux.
- La versión de Nginx debe ser superior a 1.9.5 No debería tener problemas para tenerla porque la mayoría de las distribuciones incluyen versiones recientes.
- Tener conocimientos básicos sobre el uso del terminal.
- Un usuario con acceso sudo o root.
Vamos a por ello.
Cómo restringir el acceso a directorios y subdirectorios en Nginx
Es normal tener varios bloques de servidor en el servidor. Pero si quieres aplicar la configuración globalmente, o no tienes ninguna creada, tienes que modificar el /etc/nginx/nginx.conf
– De lo contrario, debe editar el archivo de configuración de cada bloque de servidor. Por ejemplo,
sudo nano /etc/nginx/sites-enabled/domain.conf
Para esta publicación, trabajaré con una carpeta llamada data
en la raíz del sitio web. Por lo tanto, la ruta relativa sería /data
.
La directiva de Nginx que realiza la denegación de acceso es Deny
pero tenemos que especificarlo dentro de un script que haga referencia al directorio.
Si desea restringir el acceso a ese directorio, debe incluirlo en el archivo de configuración
location /data {
...
deny all;
...
}
También puede restringir el acceso a una dirección IP específica. Por ejemplo:
location /data {
...
deny 192.168.2.5;
...
}
Si hay varias direcciones IP, puede especificarlas así
location /data {
...
deny 192.168.2.5;
deny 192.168.2.9;
...
}
También puede usar rangos de direcciones IP
location /data {
...
Deny 192.168.1.0/24;
...
}
Guarde los cambios y cierre el editor. Para aplicar los cambios, reinicie Nginx.
sudo systemctl restart nginx
Y listo.
Directorio protegido con contraseña en Nginx
Otra opción útil es agregar una contraseña. Este método es muy seguro y también te da más control sobre quién puede acceder a él.
Para hacer esto, instale apache2-utils
paquete en Debian, Ubuntu y derivados; y httpd-tools
en RHEL, Rocky Linux y derivados.
Luego, cree el archivo donde se alojará la contraseña seguida por el usuario. Por ejemplo:
sudo htpasswd -c /home/username/.htpasswd user
Cuando lo ejecute, se le pedirá que ingrese una nueva contraseña para el usuario.
Editamos el archivo de configuración de Nginx o ServerBlocks
sudo nano /etc/nginx/sites-enabled/domain.conf
Y agrega algo como esto
location /data {
auth_basic "Restricted";
auth_basic_user_file /home/username/.htpasswd;
}
Guarde sus cambios, cierre el editor y reinicie Nginx.
sudo systemctl restart nginx
Ahora, cuando desee acceder a la carpeta, se le solicitará una contraseña.
Conclusión
En este breve y sencillo post hemos explicado algo tan importante como la restricción de acceso a las carpetas de nuestro servidor web.
Documentación de Nginx