Se encuentra usted aquí

Protección de sitios Web usando NGINX

Valoración: 
5

Este documento es muy breve y tiene el fin de mostrar un mecanismo de protección de sitios web bajo NGINX.

Lo único que necesitamos saber es como utilizar expresiones regulares dentro de directivas "location". A continuación se puede observar una regla de ejemplo que sirve para negar el acceso a archivos PHP en el directorio "uploads" de Wordpress y que pudieran haber sido cargados usando herramientas propias de Wordpress o mediante alguna vulnerabilidad.

location ~ /wp-content/uploads/.*\.(php|phps|inc)$ {
    deny all;
}

La directiva previa es ejecutada cuando se acierta en la expresión regular, la cual se puede descomponer de la siguiente forma:

~ significa que estamos usando una expresión regular
/wp-content/uploads/ es el directorio o ruta que estamos protegiendo
.* representa cualquier caracter cualquier número de veces
\. representa solo un carácter de punto
(php|phps|inc) son las extensiones que deseamos restringir separadas por |
$ representa el final de la url

Aunque NGINX cuenta con otras formas de uso de la directiva "location", esta junto con ~* (para expresiones regulares independientes de mayúsculas y minúsculas), son las mas comunes y efectivas para proteger directorios o rutas.

A continuación un ejemplo mas:

location ~ ^/(bin|logs|SQL|db|config|installer)/. {
    deny all;
}

Esta directiva es ideal para Roundcube y sirve para negar vía web todos los directorios "sensibles" de la aplicación.

Tal como en los ejemplos anteriores se pueden generar directivas "location" para situaciones especiales, ya sea con manejadores de contenidos, aplicaciones de crm, aplicaciones hechas a medida, etc; las posibilidades son infinitas.

Conclusión

Aunque NGINX no cuenta con un módulo enfocado en la seguridad como mod_security para Apache, un buen conjunto de directivas "location" pueden ayudarnos a prevenir una gran cantidad de problemas de seguridad en nuestros sitios.

Autor
Angel Gabriel León Rodríguez