Oculta la versión y otra información delicada

Por defecto muchas instalaciones de Apache muestran el número de versión que está funcionando, el sistema operativo y un informe de módulos de Apache están instalados en el servidor. Los usuario maliciosos pueden utilizar esta información para atacar tu servidor.

 

 

En Debian se encuentra en :”/etc/apache2/conf.d/security

ServerTokens Prod

ServerSignature Off

 

El ServerSignature aparece en la parte inferior de las páginas generadas por Apache, por ej al mostrar el error 404 (documento no encontrado).

La directiva ServerTokens sirve para determinar lo que pondrá Apache en la cabecera de la respuesta HTTP del servidor.

 

Evitar ataques DOS con mod_evasive

Vamos a explicar como proteger un servidor web Apache contra ataques DOS y DDOS mediante el módulo mod_evasive y el firewall nativo de Linux IPTables.

El servidor corre Debian Lenny, y hago incapie en esto porque la configuración de Apache varía mucho según la distribución que estemos utilizando.

Ya tenemos el servidor instalado y configurado y nos interesa protegerlo, para ello instalamos el módulo de Apache mod_evasive:

apt-get install libapache2-mod-evasive

También es posible descargar y compilar, pero prefiero siempre en la medida de lo posible, usar paquetes proporcionados por la distribución.

En Debian Lenny, el archivo de configuración de Apache es /etc/apache2/apache2.conf en el podemos escribir la configuración del módulo, o mejor, comprobar que existe la línea

Include /etc/apache2/mods-enabled/*.conf

y añadir la configuración del módulo en un fichero nuevo dedicado, por mantener el orden, por ejemplo mod-evasive.conf La configuración que viene por defecto es la siguiente.

<span style="color: #0000ff;"><code>&lt;IfModule mod_security2.c&gt;</code> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 300 &lt;/IfModule&gt;</span>

La explicación de cada parámetro la transcribo de tail -f | systemadmin

  • DOSHashTableSize <valor> – Establece el número de nodos a almacenar para cada proceso de peticiones de la tabla hash (contenedor asociativo de recuperación de peticiones por medio de claves que agiliza las respuestas del servidor). Si aplicamos un número alto a este parámetro obtendremos un rendimiento mayor, ya que las iteraciones necesarias para obtener un registro de la tabla son menores. Por contra, y de forma evidente, aumenta el consumo de memoria necesario para el almacenamiento de una tabla mayor. Se hace necesario incrementar este parámetro si el servidor atiende un número abultado de peticiones, aunque puede no servir de nada si la memoria de la máquina es escasa.
  • 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. Como ya se indicó unas líneas atrás, 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. La configuración del proceso de envío se establece en el fichero mod_evasive.c de la forma /bin/mail -t %s, siendo %s el parámetro que queda configurado en este parámetro. Será necesario cambiar el proceso si usamos un método diferente de envío de e-mails y volver a compilar el módulo con apxs (por ejemplo, la opción t ha quedado obsoleta en las últimas versiones del comando).
  • DOSSystemCommand <comando> – El comando reflejado se ejecutará cuando una dirección IP quede bloqueada. Se hace muy útil en llamadas a herramientas de filtrado o firewalls. Usaremos %s para especificar la dirección IP implicada. Por ejemplo, podemos establecer su uso con iptables de la forma siguiente:
    DOSSystemCommand “/sbin/iptables –I INPUT –p tcp –-dport 80 –s %s –j DROP”
  • DOSLogDir <ruta> – Establece una ruta para el directorio temporal. Por defecto, dicha ruta queda establecida en /tmp, lo cual puede originar algunos agujeros de seguridad si el sistema resulta violado.
  • DOSWhitelist <IP> – La dirección IP indicada como valor del parámetro no será tenida en cuenta por el módulo en ningún caso. Para cada dirección IP a excluir ha de añadirse una nueva línea con el parámetro. Por ejemplo, dejaremos fuera del chequeo del módulo a un posible bot que use los siguientes rangos de direcciones:
    DOSWhitelist 66.249.65.*
    DOSWhitelist 66.249.66.*

Para activar el módulo simplemente

# a2enmod mod-evasive

Como vemos tiene más opciones, la que ahora nos insteresa es la de DOSSystemCommand que es la que permite ejecutar acciones en el sistema.

 

Para probar si está funcionando podemos ejecutar el script perl que proporciona el paquete mod_evasive, veremos algo como esto:

$ perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
Expiró el tiempo de conexión at test.pl line 12.