Redes y Sistemas

8 Consejos para Securizar Nginx

Conoce los mejores consejos para securizar Nginx y no tener problemas en tu infraestructura.

Publicado el 01 de Marzo de 2016
Compartir

Dentro de muy poco dará comienzo el curso de configuración de servidores web en OpenWebinars , donde Nginx formará parte del temario. Para aquellos que ya conocéis o tenéis alguna instalación de Nginx previa, aquí van unos cuantos consejos para securizar y optimizar los recursos con los que contéis.

1. Mantener Nginx actualizado

Nginx como toda paquetería open source, podemos instalarlo bien desde los repositorios o bien descargando el código fuente y compilándolo en nuestra máquina.

Esta última opción tiene como ventajas sobre la primera el poder activar módulos adicionales que por defecto no se instalarían, o desactivar otros módulos que no nos vayan a ser de utilidad; además de poder obtener la última versión liberada por los desarrolladores que no siempre es la existente en los repositorios

Instalación desde consola

sudo apt-get install nginx

sudo pacman -S nginx sudo yum install nginx

 

Descarga del código fuente

 

Visitaremos este enlace y seleccionaremos el paquete a descargar. Ésto lo haremos mediante wget , por ejemplo:

sudo wget http://nginx.org/download/nginx-1.9.12.tar.gz

Descomprimimos el paquete y ejecutamos los siguientes comandos:

make
make install
./configure

 

2. Eliminar módulos innecesarios

Como hemos podido ver en el primer punto, el compilar nuestra propia instalación de Nginx, nos permitirá activar o desactivar los módulos que necesitemos de más o de menos, personalizando así nuestra instalación y optimizándola en función de lo que necesitemos en cada caso.

./configure –without-modulo01 –without-modulo02
./configure – without-http_dav_module – without-http_spdy_module

 

3. Desactivar server_tokens

Los token de servidor se encargan de mostrar la versión de la instalación de Nginx en caso de error. Hoy día esta información puede sugerir nuevas vías de ataque a nuestro servidor, por lo que será recomendable desactivarlo para evitar situaciones indeseadas.

Esto lo haremos especificando la siguiente directiva dentro del bloque de servidor en el archivo de configuración.

 

server_tokens off;

 

4. Desactivar métodos HTTP no deseados

La mayoría de webs y aplicaciones web no suelen usar más allá de los métodos GET, POST y HEAD, por lo que en nuestro servidor web, deberíamos desactivar todos los otros métodos HTTP evitando así solicitudes no deseadas y optimizando el tráfico de datos.

Para hacer esto añadiremos las siguientes líneas a nuestro bloque del servidor en el archivo de configuración.

If ($request_method !~ ^(GET|HEAD|POST)$) {
Return 444;
}

Una respuesta a HTTP 444 significa una respuesta vacía a la petición de un servicio distinto de los especificados. Para comprobar si funciona de forma correcta haremos una petición usando curl enviando un método DELETE y otra enviando uno de los admitidos.

curl –X DELETE http://nuestradireccionIP/index.html
curl –X POST http://nuestradireccionIP/index.html

5. Establecer Límites para Buffer

Para evitar ataques mediante de desbordamiento de Buffer (buffer overflow), deberemos establecer las siguientes directrices en un nuevo fichero que colocaremos en la siguiente ruta con el nombre ‘buffer.conf’.

cd /etc/Nginx/conf.d
nano buffer.conf
client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

Una vez creado el fichero, deberemos incluirlo en el archivo de configuración añadiendo esta línea:

 

include /etc/Nginx/conf.d/*.conf;

 

6. Limitar el número de conexiones por IP

Una medida de seguridad más que recomendada si apreciamos los recursos y ancho de banda de los que disponemos. Aunque algo importante a recordar es que no todas las conexiones que se realizan a nuestro sitio web serán tenidas en cuenta, sólo aquellas cuyas solicitudes procese el servidor y cuya cabecera haya sido leída.

Para esto, haremos uso de la línea con el parámetro ‘limit_conn_zone’ (fuera del bloque de servidor del archivo de configuración) o la que contiene ‘limit_conn’ (dentro del bloque servidor en el archivo de configuración).

limit_conn_zone $binary_remote_addr zone=addr:5m
limit_conn addr 1;

En este caso hemos establecido que no se podrá hacer más de una conexión por IP, cosa exagerada por supuesto que nos sirve para este ejemplo.

7. Redireccionar HTTP a HTTPS

Añadiremos al inicio del bloque servidor del archivo de configuración la siguiente línea:

return 301 https://$server_name$request_uri;

Permitir sólo TLS (Desactivar SSL).

La siguiente configuración podrá aplicarse dentro del bloque ‘server’ del archivo de configuración o bien crear un fichero aparte (suelen llamarlo ‘ssl.conf’) en el que incluir el parámetro.

 

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Con esta línea evitaremos el uso de SSL y aplicaremos que únicamente se haga uso de las versiones TLS que queramos emplear.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8. Configurar Logs

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Establecer una vía para monitorizar los eventos sucedidos en nuestro servidor es fundamental en caso de error o posible ataque, para diagnosticar problemas, ip’s de origen, etc…

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

En Nginx, añadiremos una línea dentro del bloque ‘server’ del archivo de configuración donde especificaremos la ruta a la que mandaremos los registros.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

error_log /var/www/logs/nginxserver.log error;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Con estas directivas aplicadas obtendremos un servidor web protegido ante ataques HTTP, evita desbordamientos de buffer, encontrar vulnerabilidades por versión etc…

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Esta configuración además de otros aspectos de un servidor web, podréis encontrarlas en el curso de configuración de servidores que da comienzo en breve y en el que esperamos veros. Un saludo!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Compartir este post

También te puede interesar...

Tecnología

Qué es un Servidor Proxy

28 Julio 2019 Angel Robledano
Artículos
Ver todos