Mod_Security es un Firewall de Aplicaciones Web (WAF) que se ejecuta como un modulo en un servidor web y proporciona protección contra diversos ataques a nuestras aplicaciones web.
Nos permite supervisar el tráfico HTTP y realizar un análisis en tiempo real de los request que se realizan a nuestras aplicaciones, está disponible bajo la licencia GNU y su implementación se puede realizar en Apache, Nginx e IIS. Se puede desplegar e integrar en nuestra infraestructura de servidores web, lo que significa que no tenemos que modificar nuestra red interna.
Para utilizar mod_security, se debe activar el repositorio EPEL en CentOS/RHEL Linux, y ejecutar la siguiente secuencia:
[root@localhost ~]# yum install mod_security
Salida:
Running transaction check Running transaction test Transaction test succeeded Running transaction Instalando : apr-1.4.8-3.el7.x86_64 Instalando : apr-util-1.5.2-6.el7.x86_64 Instalando : httpd-tools-2.4.6-45.el7.centos.4.x86_64 Instalando : mailcap-2.1.41-2.el7.noarch Instalando : httpd-2.4.6-45.el7.centos.4.x86_64 Instalando : mod_security-2.7.3-5.el7.x86_64 Comprobando : apr-1.4.8-3.el7.x86_64 Comprobando : mailcap-2.1.41-2.el7.noarch Comprobando : mod_security-2.7.3-5.el7.x86_64 Comprobando : apr-util-1.5.2-6.el7.x86_64 Comprobando : httpd-tools-2.4.6-45.el7.centos.4.x86_64 Comprobando : httpd-2.4.6-45.el7.centos.4.x86_64 Instalado: mod_security.x86_64 0:2.7.3-5.el7 Dependencia(s) instalada(s): apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7 httpd.x86_64 0:2.4.6-45.el7.centos.4 httpd-tools.x86_64 0:2.4.6-45.el7.centos.4 mailcap.noar ¡Listo!
Archivos de configuración de mod_Security
- /etc/httpd/conf.d/mod_security.conf – Archivo de configuración principal para el módulo de apache mod_security.
- /etc/httpd/modsecurity.d/ – Todos los demás archivos de configuración de la mod_security
- /etc/httpd/modsecurity.d/activated_rules/ – Directorio donde se crean los archivos con los enlaces simbólicos para las reglas a implementar
- /var/log/httpd/modsec_audit.log – Archivo donde se almacenan todos los request que activan eventos ModSecurity (como se detectaron) o un error de servidor se registran (“Relevant Only”) se registran en este archivo.
- /var/log/httpd/modsec_debug.log – Archivo donde se almacenan mensajes de depuración de mod_security.
Activación del modulo
En el archivo /etc/httpd/conf.d/mod_security.conf tener en consideración las siguientes directivas:
- On – Reglas activadas
- Off – reglas desactivadas
- DetectionOnly – Detecta y registra transacciones
SecRuleEngine on
<IfModule mod_security2.c> # ModSecurity Core Rules Set configuration IncludeOptional modsecurity.d/*.conf IncludeOptional modsecurity.d/activated_rules/*.conf # Default recommended configuration SecRuleEngine On SecRequestBodyAccess On SecRule REQUEST_HEADERS:Content-Type "text/xml" \ "id:'200000',phase:1,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=XML" SecRequestBodyLimit 13107200 SecRequestBodyNoFilesLimit 131072 SecRequestBodyInMemoryLimit 131072 SecRequestBodyLimitAction Reject SecRule REQBODY_ERROR "!@eq 0" \ "id:'200001', phase:2,t:none,log,deny,status:400,msg:'Failed to parse request body.',logdata:'%{reqbody_error_msg}',severity:2" SecRule MULTIPART_STRICT_ERROR "!@eq 0" \ "id:'200002',phase:2,t:none,log,deny,status:44,msg:'Multipart request body \ failed strict validation: \ PE %{REQBODY_PROCESSOR_ERROR}, \ BQ %{MULTIPART_BOUNDARY_QUOTED}, \ BW %{MULTIPART_BOUNDARY_WHITESPACE}, \ DB %{MULTIPART_DATA_BEFORE}, \ DA %{MULTIPART_DATA_AFTER}, \ HF %{MULTIPART_HEADER_FOLDING}, \ LF %{MULTIPART_LF_LINE}, \ SM %{MULTIPART_MISSING_SEMICOLON}, \ IQ %{MULTIPART_INVALID_QUOTING}, \ IP %{MULTIPART_INVALID_PART}, \ IH %{MULTIPART_INVALID_HEADER_FOLDING}, \ FL %{MULTIPART_FILE_LIMIT_EXCEEDED}'" SecRule MULTIPART_UNMATCHED_BOUNDARY "!@eq 0" \ "id:'200003',phase:2,t:none,log,deny,status:44,msg:'Multipart parser detected a possible unmatched boundary.'" SecPcreMatchLimit 1000 SecPcreMatchLimitRecursion 1000 SecRule TX:/^MSC_/ "!@streq 0" \ "id:'200004',phase:2,t:none,deny,msg:'ModSecurity internal error flagged: %{MATCHED_VAR_NAME}'" SecResponseBodyAccess Off SecDebugLog /var/log/httpd/modsec_debug.log SecDebugLogLevel 0 SecAuditEngine RelevantOnly SecAuditLogRelevantStatus "^(?:5|4(?!04))" SecAuditLogParts ABIJDEFHZ SecAuditLogType Serial SecAuditLog /var/log/httpd/modsec_audit.log SecArgumentSeparator & SecCookieFormat 0 SecTmpDir /var/lib/mod_security SecDataDir /var/lib/mod_security </IfModule>
Reiniciamos apache
systemctl restart httpd
Verificamos la salida:
[Mon May22 16 15:20:58 2017] [notice] ModSecurity for Apache/2.4.6 (http://www.modsecurity.org/) configured. [Mon May22 16 15:20:58 2017] [notice] ModSecurity: APR compiled version="1.3.9"; loaded version="1.3.9" [Mon May22 16 15:20:58 2017] [notice] ModSecurity: PCRE compiled version="7.8 "; loaded version="7.8 2008-09-05" [Mon May22 16 15:20:58 2017] [notice] ModSecurity: LUA compiled version="Lua 5.1" [Mon May22 16 15:20:58 2017] [notice] ModSecurity: LIBXML compiled version="2.4.6"
Referencias:
https://www.modsecurity.org/
http://modsecurity.org/developers.html