Instalacion Mod Security y Mod Evasive en Apache

De Wiki Informatica Gobierno Regional
Revisión del 21:03 16 dic 2015 de Soporte Gobierno Regional de La Araucanía (discusión | contribs.) (Página creada con «== mod_security en Apache == mod_security es un firewall de aplicaciones Web bajo licencia GNU que se ejecuta como módulo del servidor web Apache, provee protección cont...»)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

mod_security en Apache

mod_security es un firewall de aplicaciones Web bajo licencia GNU que se ejecuta como módulo del servidor web Apache, provee protección contra diversos ataques hacia aplicaciones Web y permite monitorizar tráfico HTTP, así como realizar análisis en tiempo real sin necesidad de hacer cambios a la infraestructura existente.

Instalación

Se debe incorporar el repo EPEL.

Para 32 bits:

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

Para 64 bits:

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Luego se instalan los siguientes librerias:

yum install mod_security mod_security_crs -y

Finalmente se recarga apache:

service httpd reload

Configuración

Archivos de configuración mod_security

  • /etc/httpd/conf.d/mod_security.conf - Archivo de configuración global para el módulo de Apache mod_security.
  • /etc/httpd/modsecurity.d/ - Todos los demás archivos de configuración del Apache mod_security.
  • /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf - La configuración contenida en este archivo debe ser personalizado para sus necesidades específicas antes de su implementación.
  • /var/log/httpd/modsec_debug.log - Utilice los mensajes de depuración para depurar políticas mod_security y otros problemas.
  • /var/log/httpd/modsec_audit.log - Todas las solicitudes que desencadenan una serie de eventos mod_security o errores, se registran en este archivo.

mod_evasive en Apache

mod_evasive es un módulo para Apache que permite prevenir ataques de denegación de servicios (DoS). Para ello, mantiene una tabla dinámica con las URIs accedidas por las distintas IPs de los clientes del Apache, y permite ejecutar algunas acciones cuando una misma IP solicita un mismo recurso (una misma URI o elementos de un mismo sitio) más de n veces en m segundos. La acción predeterminada es, una vez superado el máximo de requests por segundo permitidos, bloquear durante una cantidad de segundos al cliente (la IP) devolviendo un error 403 (Forbidden) a la petición HTTP.

El sitio web oficial de mod_evasive es http://www.zdziarski.com/blog/?page_id=442.

NOTA: existe un bug no corregido en el código de mod_evasive, que provoca un error en el manejo de uno de los contadores y puede llevar a que se bloqueen algunas peticiones legítimas. Lamentablemente, el desarrollo de mod_evasive parece estar detenido y por lo tanto este bug no ha sido corregido, a pesar de que ya existe una solución conocida. Debido a esto, he creado un paquete RPM de mod_evasive que incluye la corrección; este paquete está disponible en el repositorio Lazos (de momento sólo está disponible para CentOS 6 x86_64).

Para mayor información acerca del bug y su correción, véase http://el-blog-de-thor.blogspot.com/2009/04/fallo-de-programacion-en-modevasive.html.

Instalación

En primer lugar se debe activar el repositorio Lazos. Se debe crear el archivo /etc/yum.repos.d/lazos.repo con el siguiente contenido:

[lazos-noarch]
name=Repositorio LAZOS para CentOS - noarch
baseurl=http://repo.lazos.cl/centos/$releasever/noarch
enabled=1
gpgcheck=0

[lazos-$basearch]
name=Repositorio LAZOS para CentOS - $basearch
baseurl=http://repo.lazos.cl/centos/$releasever/$basearch
enabled=1
gpgcheck=0

Luego se debe ejecutar la siguiente instrucción:

yum install mod_evasive

Configuración

El archivo de configuración se encuentra en /etc/httpd/conf.d/mod_evasive.conf. A continuación se muestra una configuración de ejemplo:

# mod_evasive configuration
LoadModule evasive20_module modules/mod_evasive20.so

<IfModule mod_evasive20.c>
    # The hash table size defines the number of top-level nodes for each
    # child's hash table.  Increasing this number will provide faster
    # performance by decreasing the number of iterations required to get to the
    # record, but consume more memory for table space.  You should increase
    # this if you have a busy web server.  The value you specify will
    # automatically be tiered up to the next prime number in the primes list
    # (see mod_evasive.c for a list of primes used).
    DOSHashTableSize    3097

    # This is the threshhold for the number of requests for the same page (or
    # URI) per page interval.  Once the threshhold for that interval has been
    # exceeded, the IP address of the client will be added to the blocking
    # list.
    DOSPageCount        200

    # This is the threshhold for the total number of requests for any object by
    # the same client on the same listener per site interval.  Once the
    # threshhold for that interval has been exceeded, the IP address of the
    # client will be added to the blocking list.
    DOSSiteCount        100

    # The interval for the page count threshhold; defaults to 1 second
    # intervals.
    DOSPageInterval     10

    # The interval for the site count threshhold; defaults to 1 second
    # intervals.
    DOSSiteInterval     10

    # The blocking period is the amount of time (in seconds) that a client will
    # be blocked for if they are added to the blocking list.  During this time,
    # all subsequent requests from the client will result in a 403 (Forbidden)
    # and the timer being reset (e.g. another 10 seconds).  Since the timer is
    # reset for every subsequent request, it is not necessary to have a long
    # blocking period; in the event of a DoS attack, this timer will keep
    # getting reset.
    DOSBlockingPeriod   1

    # If this value is set, an email will be sent to the address specified
    # whenever an IP address becomes blacklisted.  A locking mechanism using
    # /tmp prevents continuous emails from being sent.
    #
    # NOTE: Requires /bin/mail (provided by mailx)
    DOSEmailNotify      usuario@servidor.dominio

    # If this value is set, the system command specified will be executed
    # whenever an IP address becomes blacklisted.  This is designed to enable
    # system calls to ip filter or other tools.  A locking mechanism using /tmp
    # prevents continuous system calls.  Use %s to denote the IP address of the
    # blacklisted IP.
    #DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"

    # Choose an alternative temp directory By default "/tmp" will be used for
    # locking mechanism, which opens some security issues if your system is
    # open to shell users.
    #
    #   http://security.lss.hr/index.php?page=details&ID=LSS-2005-01-01
    #
    # In the event you have nonprivileged shell users, you'll want to create a
    # directory writable only to the user Apache is running as (usually root),
    # then set this in your httpd.conf.
    #DOSLogDir           "/var/lock/mod_evasive"

    # You can use whitelists to disable the module for certain ranges of
    # IPs. Wildcards can be used on up to the last 3 octets if necessary.  
    # Multiple DOSWhitelist commands may be used in the configuration.
    #DOSWhitelist   127.0.0.1
    #DOSWhitelist   192.168.0.*
</IfModule>

Cada una de las opciones de configuración se encuentra bien explicada en el archivo. Las más importantes son:

  • DOSPageCount <valor> - Indica el valor del umbral para el número de peticiones de una misma página (o URI) dentro del intervalo definido en DOSPageInterval. Cuando el valor del parámetro es excedido, la IP del cliente se añade a la lista de bloqueos.
  • DOSSiteCount <valor> - Cuenta cuántas peticiones de cualquier tipo puede hacer un cliente dentro del intervalo definido en DOSSiteInterval. Si se excede dicho valor, el cliente queda añadido a la lista de bloqueos.
  • DOSPageInterval <valor> - El intervalo, en segundos, para el umbral de petición de páginas.
  • DOSSiteInterval <valor> - El intervalo, en segundos, para el umbral de petición de objetos de cualquier tipo.
  • DOSBlockingPeriod <valor> - Establece el tiempo, en segundos, que un cliente queda bloqueado una vez que ha sido añadido a la lista de bloqueos. Todo cliente bloqueado recibirá una respuesta del tipo 403 (Forbidden) a cualquier petición que realice durante este periodo.
  • DOSEmailNotify <e-mail> - Un e-mail será enviado a la dirección especificada cuando una dirección IP quede bloqueada.

Reinicio del servicio

Una vez configurado el módulo mod_evasive, se debe reiniciar el servidor web Apache para aplicar la nueva configuración:

service httpd restart

Referencias