Restringir acceso a una URL en NGINX

Esta configuración nos permitirá el acceso a recursos en un directorio especifico del servidor, el acceso sera limitado a cierto rango de IPs o redes confiables y por ultimo tendrá una autenticación básica HTTP.

La utilidad htpasswd nos permite manejar los accesos de usuario para la autenticación básica por HTTP, esto en CentOS se encuentra en el paquete httpd-tools.

Instalamos el paquete httpd-tools.

$ yum install httpd-tools

Agregamos el usuario, usando la opción -c para crear el archivo de base de datos y este se alojara en el directorio /etc/nginx/htpasswd, con la opción -s habilitamos que la contraseña sea cifrada en SHA.

$ htpasswd -s -c /etc/nginx/htpasswd [mi usuario]

Asignamos como propietario al usuario y grupo NGINX.

$ chown nginx:nginx /etc/nginx/htpasswd

Asignamos acceso de solo lectura a usuario y grupo.

$ chmod 440 /etc/nginx/htpasswd

Seguimos con la configuración del servicio NGINX, dentro del bloque server usamos el bloque location donde describimos el acceso a nuestro recurso /manager/, con las directivas allow y deny restringimos el acceso vía IP ó subred.

Con el modulo ngx_http_auth_basic_module solicitamos acceso vía usuario-contraseña, esta se activa con la directiva auth_basic y con la directiva auth_basic_user_file especificamos el directorio donde se encuentra nuestro base de datos de usuarios generado con htpasswd anteriormente.

La directiva alias describimos el directorio en el servidor.

$ vim /etc/nginx/sites-available/my_site.conf
server {
[...]
	location /manager/ {
		alias /www/data/;
		allow 127.0.0.1;
		allow 192.168.X.0/24;
		deny all;
		auth_basic "Acceso restringido";
		auth_basic_user_file /etc/nginx/htpasswd;
	}
[...]
}

Recargamos el servicio NGINX para aplicar los cambios.

$ service nginx reload

Armando Uch

An Accidental Engineer
• Lazy #Programmer • #TacOps 🌮 • #BOFH
🎸⚾️🍺☕️


2018-09-06