Instalación simple de mod_security en Plesk 10 para Ubuntu
Uno de los sistemas para minimizar las posibilidades de éxito de los intentos de ataque a los servidores, a nivel de aplicación, es ModSecurity. Con él podemos dormir un poquito más tranquilos, sabiendo que vamos a estar más protegidos de los ataques de inyección SQL, fuerza bruta o vulnerabilidades conocidas.
Lamentablemente, parece que por cuestiones de licencia, ya no se siguen generando los binarios en paquetes Debian, por lo que el método recomendado de instalación es compilar a partir del código fuente, pero esto necesita un cambio en el servidor Apache que viene con Plesk 10 para Ubuntu, así que mejor dejamos la última versión disponible instalable con apt, y procedemos con:
apt-get install libapache-mod-security
Esto nos dejará instalados y activados los módulos mod_security2 y mod_unique_id, con sus enlaces en /etc/apache2/mods-enabled. Ahora necesitamos un conjunto de reglas para ModSecurity, y las que vamos a utilizar son las gratuitas de Atomicorp, los editores de ASL, que las ofrecen con un retraso de 90 días sobre las de pago, disponibles en http://updates.atomicorp.com/channels/rules/delayed/. Las descargamos y descomprimimos en /etc/apache2/modsecurity.d:
mkdir /etc/apache2/modsecurity.d
wget http://updates.atomicorp.com/channels/rules/delayed/modsec-2.5-free-latest.tar.gz
tar xvf modsec-2.5-free-latest.tar.gz
Ahora creamos un fichero de configuración, también en /etc/apache2/modsecurity.d, llamado modsecurity_crs_10_config.conf, con el siguiente contenido:
SecRuleEngine On SecRequestBodyAccess On SecResponseBodyAccess On SecResponseBodyMimeType (null) text/html text/plain text/xml SecResponseBodyLimit 2621440 SecServerSignature Apache SecComponentSignature 200911012341 SecUploadDir /var/asl/data/suspicious SecUploadKeepFiles Off SecAuditEngine RelevantOnly SecAuditLogRelevantStatus "^(?:5|4(?!04))" SecAuditLogType Concurrent SecAuditLog /var/log/apache2/modsecurity/audit_log SecAuditLogParts ABIFHZ SecArgumentSeparator "&" SecCookieFormat 0 SecRequestBodyInMemoryLimit 131072 SecDataDir /var/asl/data/msa SecTmpDir /tmp SecAuditLogStorageDir /var/asl/data/audit SecResponseBodyLimitAction ProcessPartial #SecPcreMatchLimit 100000 #SecPcreMatchLimitRecursion 100000 SecDebugLog /var/log/apache2/modsecurity/modsec_debug_log SecDebugLogLevel 3
Atención a las carpetas especificadas para las estructuras de datos necesarias para ModSecurity, que deben existir y Apache tener permiso sobre ellas, por lo que ejecutamos:
mkdir /var/asl /var/asl/data /var/asl/data/audit /var/asl/data/msa /var/asl/data/security
chown -R www-data:www-data /var/asl/data/
Por último, creamos un fichero 00_modsecurity.conf en /etc/apache2/conf/, con ese nombre para que cargue el primero, activando las reglas que deseemos, que en nuestro caso son las siguientes:
LoadModule security2_module modules/mod_security2.so LoadModule unique_id_module modules/mod_unique_id.so # Todas + exclusiones personalizadas: Include /etc/apache2/modsecurity.d/00_asl_0_global.conf Include /etc/apache2/modsecurity.d/00_asl_custom_exclude.conf # Quitamos RBL porque coge las IPs incorrectamente, como desordenadas #Include /etc/apache2/modsecurity.d/00_asl_rbl.conf #Include /etc/apache2/modsecurity.d/00_asl_whitelist.conf # Esta sólo funciona con ModSecurity > 2.6.1 #Include /etc/apache2/modsecurity.d/00_asl_z_antievasion.conf Include /etc/apache2/modsecurity.d/00_asl_zz_strict.conf Include /etc/apache2/modsecurity.d/05_asl_exclude.conf # No tenemos el CLAM antivirus instalado #Include /etc/apache2/modsecurity.d/05_asl_scanner.conf Include /etc/apache2/modsecurity.d/09_asl_rules.conf Include /etc/apache2/modsecurity.d/09_asl_rules_antievasion.conf Include /etc/apache2/modsecurity.d/10_asl_antimalware.conf Include /etc/apache2/modsecurity.d/10_asl_antimalware_output.conf Include /etc/apache2/modsecurity.d/10_asl_rules.conf Include /etc/apache2/modsecurity.d/11_asl_data_loss.conf Include /etc/apache2/modsecurity.d/12_asl_brute.conf Include /etc/apache2/modsecurity.d/20_asl_useragents.conf Include /etc/apache2/modsecurity.d/30_asl_antimalware.conf Include /etc/apache2/modsecurity.d/30_asl_antispam.conf Include /etc/apache2/modsecurity.d/30_asl_antispam_referrer.conf Include /etc/apache2/modsecurity.d/40_asl_apache2-rules.conf Include /etc/apache2/modsecurity.d/50_asl_rootkits.conf Include /etc/apache2/modsecurity.d/60_asl_recons.conf Include /etc/apache2/modsecurity.d/61_asl_recons_dlp.conf Include /etc/apache2/modsecurity.d/98_asl_jitp.conf Include /etc/apache2/modsecurity.d/99_asl_exclude.conf Include /etc/apache2/modsecurity.d/99_asl_jitp.conf Include /etc/apache2/modsecurity.d/99_asl_redactor.conf # No tenemos el CLAM antivirus instalado #Include /etc/apache2/modsecurity.d/99_asl_scanner.conf
Vamos, prácticamente todas, menos la que da problemas por la versión de ModSecurity, que no es la 2.6.1 o superior, las de listas negras y las del antivirus CLAM.
Ya está todo listo. Comprobamos que la configuración de Apache es correcta con
apache2ctl configtest
Y si lo es, reiniciamos apache con
apache2ctl graceful
Hale, ya podemos empezar a ver correr en /var/log/apache2/modsecurity/audit_log la lista de peticiones bloqueadas.
Actualización: Cómo desactivar reglas
Es muy posible que tengamos que desactivar algunas reglas al encontrarnos con falsos positivos, mostrando errores 403 cuando los permisos y el código están perfectamente. En nuestro caso, al alojar tiendas, algunos TPVs virtuales dan problemas, así que decidimos desactivar globalmente. Para esto, se modifica el fichero /etc/apache2/modsecurity.d/00_asl_custom_exclude.conf
, añadiendo el siguiente contenido:
<LocationMatch .*> <IfModule mod_security2.c> SecRuleRemoveById 350147 SecRuleRemoveById 350148 </IfModule> </LocationMatch>
Al modificar el fichero de configuración global y utilizar .*
como patrón, indicamos que para cualquier dominio y URL alojada en el servidor no queremos que se tengan en cosideración esas reglas. También podemos modificar una regla para un dominio en particular, modificando el fichero vhost.conf
que Plesk utiliza para este menester, y regenerando la configuración, por supuesto.
Buenas. Un gran artículo pero, podrías actualizarlo para Plesk 11.5?
Gracias.
Un saludo.
Hola, Sergio.
Lo lamento, pero después de la versión 10 dejamos de utilizar Plesk en nuestros servidores, así que no tengo mucho conocimiento sobre las nuevas versiones y cómo puede afectar.
Un saludo.