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_
Via: Security By Default