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