alex@root:~$

Hardening A Servidor Nginx

En esta sección vamos a dedicarnos a securizar nuestro servidor para que algún Haxxor no logre piratearnos, vamos a comenzar tocando el fichero de configuración de Nginx /etc/nginx/nginx.conf y vamos a cambiar el nombre de nuestro servidor en la cabecera

Vamos a empezar con los 3 principios importantes dentro del Hardening de sistemas:

  • Mínimo punto de Exposición: Mante instalado solo el Software necesario y trata de no brindar mucha información de tu servidor.

  • Mínimo privilegio posible: Nuestro servidor no debe nunca correr como Root, esto hará que ante un compromiso de nuestro sistema el atacante podrá fácilmente pivotear o instalar software para moverse sobre nuestra infraestructura.

  • Defensa en profundidad: Se debe implementar todas la medidas de seguridad necesarias, teniendo en cuanto 2 factores:

    1) Una medida de seguridad no debe anular a otra 2) Las medida de protección no deben dañar la disponibilidad del sistema o causar problemas en ciertos servicios.

HTTP/1.1 200 OK
Date: Tue, 05 Dec 2023 19:21:13 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Server: Nginx

Vamos realizar la instalación de nginx-extras

sudo apt install -y nginx-extras

Una vez instalado proseguimos a editar el fichero de configuración nginx.conf he ingresamos las siguientes líneas

# /etc/nginx/nginx.conf 
http { 
	# Basic Settings 
	more_set_headers 'Server: Server Onion';
...

Mitigar ataques de DDoS / DoS

Uno de los ataques mas frecuentes dentro de la red Tor son los ataques DDos y por lo tanto tenemos que estar preparados para que nuestro servidor reciba una buena cantidad de consultas.

Vamos a añadir las siguientes configuraciones…

Limitar la tasa de solicitudes

Utiliza la directiva limit_req para limitar el número de solicitudes por segundo desde una IP específica. Esto ayuda a mitigar ataques DDoS al limitar la cantidad de solicitudes que un atacante puede realizar desde una sola dirección IP.

Ejemplo de configuración en el bloque http de Nginx:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
    # Otras configuraciones
    location / {
        limit_req zone=one burst=5;
        # Resto de configuración
    }
}

Esto limitará las solicitudes a 1 por segundo por dirección IP, con una capacidad de ráfaga de 5 solicitudes.

Limitar conexiones simultáneas

Utiliza la directiva limit_conn para limitar el número de conexiones simultáneas desde una dirección IP específica.

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    # Otras configuraciones
    location / {
        limit_conn addr 10;
        # Resto de configuración
    }
}

Esto limitará a 10 conexiones simultáneas desde una dirección IP.

Contrarrestando ataques de DoS

##buffer policy 
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k; 
##end buffer policy

Deshabilitando métodos inseguros

Los métodos habituales en un servidor son: GET, POST, HEAD si tu Server tiene métodos como TRACE, PUT, DELETE entre otros, tu servidor puede ser vulnerable a ciertos ataques como ser cross-site tracking.

Vamos a añadir la siguiente linea en nuestro fichero nginx.conf en la cual le estamos diciendo a Nginx que devuelva un error 405 a ante la consulta a esos métodos.

	if ($request_method !~ ^(GET|HEAD|POST)$ ) {
		return 405;
	}

Restringir acceso por contraseña

Si deseamos que usuarios ingresen a un sector de nuestra pagina usando contraseña, podemos hacerlo de la siguiente manera…

location /wp-admin {
    auth_basic "Admin Area";
    auth_basic_user_file /path/to/.htpasswd;
}

Las contraseñas se almacenaran en **/

Consejos finales

  • Mantener monitoreado los logs: /etc/logs/errors.log para ver errores del servidor, /etc/log/access.log para ver datos de los usuarios.

  • Mantener actualizado Nginx y tu sistema en general

Recursos: https://medium.com/guayoyo/hardening-asegurando-nginx-e295f4850562