Proteger su servidor web contra diferentes tipos de ataques es una responsabilidad crucial para cualquier administrador de sistemas. ModEvasive es un módulo de servidor web Apache que lo ayuda a proteger su servidor web en caso de ataques DoS, DDoS y de fuerza bruta. Estos tipos de ataques provocan que el servidor se quede sin memoria y bloquee su sitio web.
El módulo mod_evasive funciona mediante la creación de una tabla hash de direcciones IP y URI y la supervisión de solicitudes de servidor entrantes sospechosas, como:
- Hacer más de 100 conexiones simultáneas por segundo.
- Solicitar la misma página varias veces por segundo.
Si se produce una solicitud tan sospechosa, el módulo mod_evasive envía un error 403 y bloquea la dirección IP.
En este tutorial, le mostraremos cómo instalar y configurar mod_evasive con Apache en un servidor Ubuntu 18.04.
Requisitos
- Un Ubuntu 18.04 VPS nuevo en Atlantic.Net Cloud Platform.
- Una dirección IP estática configurada en su servidor.
Paso 1:crear el servidor en la nube de Atlantic.Net
Primero, inicie sesión en su servidor en la nube de Atlantic.Net. Cree un nuevo servidor, eligiendo Ubuntu 18.04 como sistema operativo con al menos 1 GB de RAM. Conéctese a su servidor en la nube a través de SSH e inicie sesión con las credenciales resaltadas en la parte superior de la página.
Una vez que haya iniciado sesión en su servidor Ubuntu 18.04, ejecute el siguiente comando para actualizar su sistema base con los últimos paquetes disponibles.
apt-get update -y
Paso 2:instala mod_evasive
Antes de comenzar, el servidor web Apache debe estar instalado en su servidor. Si no está instalado, puede instalarlo con el siguiente comando:
apt-get install apache2 apache2-utils -y
Una vez que el servidor web Apache está instalado, puede instalar mod_evasive con el siguiente comando:
apt-get install libapache2-mod-evasive -y
Durante la instalación, se le pedirá que configure un servidor de correo Postfix para recibir notificaciones por correo electrónico. Puede elegir la opción que desee para completar la instalación. Si no está seguro, elija solo local o sin configuración .
Después de instalar mod_evasive, puede verificar si el módulo mod_evasive está habilitado ejecutando el siguiente comando:
apachectl -M | grep evasive
Deberías obtener el siguiente resultado:
[Mon Jan 27 13:55:35.707317 2020] [so:warn] [pid 29031] AH01574: module dav_module is already loaded, skipping evasive20_module (shared)
En este punto, el módulo mod_evasive está instalado y habilitado. Ahora puede continuar con el siguiente paso.
Paso 3:configurar mod_evasive
El archivo de configuración predeterminado de mod_evasive se encuentra en /etc/apache2/mods-enabled/evasive.conf. Deberá configurar este archivo según sus requisitos.
Puede abrir este archivo usando el editor nano como se muestra a continuación:
nano /etc/apache2/mods-enabled/evasive.conf
Cambie el archivo como se muestra a continuación. Recomendamos modificar DOSEmailNotify a la dirección a la que desea que se envíe el correo electrónico (si está configurado) y DOSSystemCommand, por ejemplo, "su - richard -c '/sbin... %s...'"
<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 100 DOSEmailNotify [email protected] DOSSystemCommand "su - someuser -c '/sbin/... %s ...'" DOSLogDir "/var/log/mod_evasive" </IfModule>
Guarde y cierre el archivo cuando haya terminado.
A continuación se muestra una breve explicación de cada opción:
- DOSHashTableSize :mod_evasive usa esta opción para controlar el tamaño de la tabla hash. Se recomienda aumentar esto si tiene un servidor web ocupado.
- Recuento de páginas de DOS :esta opción especifica el límite de umbral para la cantidad de solicitudes permitidas al mismo URI por segundo. Una vez que se supere el límite del umbral, la dirección IP del cliente se incluirá en la lista negra.
- DossiteCount :esta opción especifica el límite en el número total de solicitudes permitidas a la misma dirección IP.
- Intervalo de página de DOS :esta opción especifica el intervalo de recuento de páginas.
- DOSSiteInterval :esta opción especifica el intervalo de recuento de sitios.
- DOSBlockingPeriod :Esta opción define la cantidad de tiempo en segundos que un cliente será bloqueado.
- DOSEmailNotificar :esta opción envía un correo electrónico a la dirección especificada cuando una dirección IP ha sido incluida en la lista negra.
- Comando del sistema DOS :siempre que una dirección IP se haya incluido en la lista negra, se ejecutará el comando del sistema especificado.
- Dir de registro de DOS :esta opción define el directorio de registro mod_evasive.
A continuación, cree un directorio para almacenar el registro mod_evasive y cambie su propiedad a www-data con el siguiente comando:
mkdir /var/log/mod_evasive chown -R www-data:www-data /var/log/mod_evasive
Finalmente, reinicie el servicio Apache para implementar los cambios:
systemctl restart apache2
Paso 4:prueba mod_evasive
En este punto, el módulo mod_evasive está instalado y configurado. Es hora de probar si el módulo funciona correctamente.
Vaya al sistema remoto y envíe una solicitud de página masiva al servidor usando el comando ab:
ab -n 1000 -c 20 http://your-server-ip/
Este comando provocará el equivalente a un ataque DoS al enviar 1000 solicitudes de página en 10 conexiones simultáneas.
En el servidor, verifique el registro de correo ejecutando el siguiente comando:
tail -15 /var/mail/root
Debería ver que la dirección IP del cliente ha sido incluida en la lista negra por mod_evasive:
Received: by ubuntu1804 (Postfix, from userid 33) id B0C3EC1753; Mon, 27 Jan 2020 14:15:09 +0000 (UTC) To: [email protected] MIME-Version: 1.0 Content-Type: text/plain; charset="ANSI_X3.4-1968" Content-Transfer-Encoding: 8bit Message-Id: <[email protected]> Date: Mon, 27 Jan 2020 14:15:09 +0000 (UTC) From: www-data <[email protected]> To: [email protected] Subject: HTTP BLACKLIST 103.250.161.100 mod_evasive HTTP Blacklisted 103.250.161.100
También puede probar mod_evasive usando el script integrado test.pl. Deberá modificar este script para que funcione.
Puede editar el script como se muestra a continuación:
nano /usr/share/doc/libapache2-mod-evasive/examples/test.pl
Busque la siguiente línea:
print $SOCKET "GET /?$_ HTTP/1.0\n\n";
Reemplácelo con lo siguiente:
print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n";
Guarde y cierre el archivo cuando haya terminado. Luego, ejecute el script usando el comando perl:
perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
Si todo funciona correctamente, debería obtener el siguiente resultado:
HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden
Conclusión
¡Felicidades! El módulo mod_evasive ahora está configurado para proteger su servidor contra ataques DDoS y de fuerza bruta.