Ocultar tu servidor web Nginx de ojos ajenos

Uno de los riesgos más fáciles de evitar, consiste en ocultar la versión y servidor web que estamos usando para dar nuestros servicios. Eso nos evita que si el atacante conoce una vulnerabilidad en X versión de nuestro servidor no sepa si nuestro servidor es vulnerable o no.

Por otro lado aclarar que todo esto no imposibilita saberlo pero si dificulta al máximo posible esto.

Requisitos

  • Saber usar la prompt shell de tú servidor.
  • Un servidor web que ejecute Nginx ya que esta explicación es para ese servidor.
  • Tener Nginx instalado.
  • Suponemos que usa una distribución basada en [Debian], en caso contrario la instalación de paquetes con el gestor aptitude (apt ó apt-get) puede funcionar o no. En CentOS por ejemplo se usa yum en vez de apt.

Ocultar la versión

Para ocultar la versión en nuestro archivo /etc/nginx/nginx.conf hay una variable comentada que se llama server_tokens, tan solo debemos descomentarla y ponerle el valor off esto evita que el servidor diga que versión se está ejecutando.

Ocultar Expressjs

Si estas ejecutando Node con un framework como ExpressJS y como es mi caso en un contenedor puede que configurar la aplicación para que oculte la versión y/o servidor sea un poco tedioso por lo que puedes hacer que nginx filtre esas cabeceras http que manda la aplicación a la que se conecta.

proxy_hide_header x-powered-by;  
proxy_hide_header server;  

Puedes hacerte un snippet y añadirlo. Si quisierais capar cabeceras de PHP o cualquier otra aplicación fastcgi, debéis cambiar los parámetros donde dice “proxy” y poner “fastcgi”.

Ocultar Nginx

Para ocultar Nginx es un poco más complejo ya que debemos instalar el módulo headers more. Este módulo se instalar (junto a otros) con el paquete nginx-extras. Este módulo ocultará todas las cabeceras tanto del propio servidor (solo se puede ocultar la versión sin este módulo) como de las aplicaciones proxy o fastcgi a las que se conecte Nginx.

Instalación

$ apt-get install nginx-extras

Configuración

Creamos un archivo con el nombre que prefiramos, en mi caso /etc/nginx/conf.d/hide-headers.conf con la siguiente configuración:

server_tokens off;  
more_clear_headers 'x-powered-by';  
more_clear_headers 'server';  

Esto lo que hará es quitar todas las cabeceras que coincidan con esos valores.

Conclusión

No es un gran esfuerzo y merece la pena configurar nuestro servidor para que no de pistas. Por otro lado el módulo headers more tiene más opciones que podéis explorar en su web oficial.