23 agosto 2010

Top módulos recomendados para Apache

Una de las características fundamentales de Apache es la ventaja que aporta el poder añadir/habilitar dinámicamente cuantos módulos necesitemos. Digamos que Apache es la base de la pizza sobre la que añadimos los ingredientes a nuestro gusto y necesidades (estoy escribiendo este post cerca de la hora de comer y los ejemplos que se me ocurren son los que son…)

En varios de nuestros blogs favoritos, ya hay buenas guías de securización de Apache, en las que nos hablan de cómo hemos de asignar los permisos, configuración de accesos, ocultar la información mostrada en banners, etc, etc,…

Así pues, únicamente he querido centrarme en hacer una recopilación de aquellos módulos que he utilizado en Apache y que me han valido para dotarlo de un mejor rendimiento, así como de un mejor nivel de protección ante las amenazas a las que el servidor web se encuentra expuesto.


Aceleración
  • mod_gzip/mod_deflate: En general, casi todos los clientes web son capaces de "hablar" HTTP recibiendo los datos comprimidos por parte del servidor. La idea es configurar el servidor web para que sea capaz de servir los datos comprimidos, ahorrando parte del ancho de banda disponible acelerando el tráfico web. Tanto mod_gzip como mod_deflate son capaces de comprimir los datos servidos.
  • mod_cache: Es sobre todo útil cuando se usa a la vez que mod_proxy (se verá más adelante). La idea es que Apache cachee los datos que ya ha servido, y no tenga que procesar las peticiones de nuevo. Este módulo depende a su vez de mod_disk_cache y mod_mem_cache para cachear la información en un espacio de disco o en memoria predefinidos para ello. En el caso de usarse con mod_proxy, la idea es que el servidor web final tenga una carga inferior para los contenidos más utilizados, estando estos cacheados en el servidor Apache que actúa como proxy intermedio.


Confidencialidad y autenticación

  • mod_ssl: El tráfico web HTTP va en claro o sin cifrar. Si queremos ser capaces de hacer que el servidor web trabaje sirviendo datos cifrados desde extremo a extremo mediante HTTPS, debemos habilitar mod_ssl. De esta forma incluso podremos exigir a nuestros clientes la autenticación mediante certificados SSL X.509 de cliente (soportados mediante SSL v3).
  • mod_auth_*: Si queremos que ciertas partes de los datos que servimos vía web requieran otro tipo de autenticación basado en usuario y contraseña, Apache nos provee de una infinidad de módulos para esta funcionalidad. El más básico es mod_auth. Podemos exigir autenticación Básica y Digest comparando los pares usuario/contraseña (o hash de la misma) contra un fichero, por convención llamado .htaccess, y permitir o no el acceso a los datos. Sin embargo, muchas veces se quiere utilizar para autenticar otros servidores de autenticación centralizada como pueden ser Radius, LDAP, Directorio Activo o una base de datos mysql por ejemplo. Para ello contamos con: mod_auth_radius, mod_auth_ldap o mod_auth_mysql por ejemplo.


Protección ante ataques


  • mod_security: Tanto de forma embebida en el servidor web final, como en conjunción con mod_proxy para proteger ante accesos internos, mod_security es la alternativa libre en cuanto al software de Cortafuegos de Aplicación Web (o WAF) de los que hemos hablado varias veces en SbD. La idea es blindar el servidor web ante las peticiones que puedan ser ataques de tipo Inyección SQL o XSS, entre otros...
  • mod_proxy: Una de las mejores maneras de aislar un servidor del mundo exterior es poner un proxy inverso de por medio. De esta manera, publicamos un servidor Apache en este caso hacia fuera y las peticiones se las lleva éste, como se hace en un sistema de correo con un relay que comprueba el spam y los virus. Así, si queremos incluso balancear tráfico entre diferentes servidores web finales, Apache con mod_proxy hará las peticiones hacia los internos. Como se comentó anteriormente, si además utilizamos mod_cache, podremos acelerar la aplicación web al cachear en el proxy inverso según que tipo de contenidos. Lo mismo ocurre con mod_security, al recibir Apache las peticiones, efectuará las que considere sanas hacia el servidor web final, no dejando pasar las demás.
  • mod_evasive/mod_qos/mod_limitipconn/mod_antiloris: Dotar de la mayor disponibilidad posible el sistema es una de las labores de varios módulos diferentes. El más completo de todos es mod_evasive, aunque los otros módulos expuestos son buenas alternativas si sólo queremos limitar la Calidad de Servicio del servidor Apache mediante el ancho de banda y/o número de conexiones desde una determinada IP. Con mod_evasive incluso se puede reaccionar de forma dinámica cuando se detecte un ataque, bloqueando vía IPTables la IP atacante, avisos por correo o syslog, etc,... La idea principal de estos módulos es evitar los ataques de denegación de servicio debido al consumo de los recursos disponibles en el servidor. mod_antiloris está especificado para evitar ataques con la herramienta Slowloris. Lo he probado en una red local y efectivamente lo que antes bloqueaba mi Apache, al aplicarlo, permite que se siga utilizando por otras IPs.

3 comments :

Anónimo dijo...

mod_jail o mod_chroot también sirven para mejorar la seguridad.

Y respecto a guías, una de las mejores la tiene "owasp", en inglés.

Kitai

Unknown dijo...

Añadiría :

mod_memcache_block is an Apache module that allows you to block access to your servers using a block list stored in memcache. It also offers distributed rate limiting based on HTTP response code.

mod_parmguard : es viejo pero en su día era una buena alternativa a mod_security

Hay muchos que no se mantienen pero que puede ser interesante evaluar :

http://modules.apache.org/

mod_ifier : request filtering and rejection
mod_diffprivs/mod_suid2/mod_suexec_helper : chroot/suexec
..
etc

En la mayoria de los casos con limitar el tamaño de cabeceras, etc para evitar overflows, unas buenas reglas de rewrite o si se usa mod_security con unas reglas ajustadas a la aplicación Web da bastantes buenos resultados.

Hay varios libros sobre esta tematica para él que pueda interesarle : Apache Security, Apache Modules, Desarrollo de Modulos y aplicaciones con Apache y que da una visión general de como funcionan.

@anónimo la jaula/chroot ya la implementa mod_security por lo que es más interesante usar directamente este.

Jordi Prats dijo...

Muy buena recopilación, sólo un pequeño detalle:

El fichero que contiene las contraseñas por convención es el .htpasswd, el .htaccess es el que contiene configuración específica del directorio dónde se encuentra para "overridear" la configuración del apache (si se permite con el AllowOverride)

Se usan estos nombres porque en la configuración por defecto se deniega servir ficheros que empiezan por .ht

@Anónimo: A mi no me gusta el mod_chroot porque no se hace por VirtualHost sino por un solo punto "global" del apache