Mod_security con Apache en Centos7/RHEL7.x – Firewall de aplicaciones web

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

Share on FacebookTweet about this on TwitterShare on Google+

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *