• Home
  • Manuales
  • 10 medidas de seguridad y hardening en Apache

10 medidas de seguridad y hardening en Apache

Uno de los servicios informáticos más demandados para servidores web es el de hardening de Apache, o endurecimiento. El hardening, en informática, hace referencia a los procesos realizados para asegurar un sistema y reducir las vulnerabilidades y posibles agujeros de seguridad en el mismo.

En este artículo aprenderás 10 medidas de seguridad y hardening para Apache, que debes llevar a cabo siempre antes de poner tus servidores en producción o lanzarlos a internet.

Cierto es que habrá casos en que podremos saltarnos esta fase de hardening en apache, por ejemplo para un servidor de pruebas en red local o en un entorno seguro. Pero si vamos a exponer un servidor a internet o a tener usuarios registrados, es imprescindible realizar una serie de acciones previas.

1. Oculta la versión de apache y la identificación de sistema operativo

Por defecto, Apache transmite cierta información en las cabeceras, como el número de versión, el sistema operativo o los módulos. Se considera una mala práctica dejarlo así porque brinda al atacante información sobre el servidor.

Para solucionarlo, hay que cambiar el valor para los parámetros ServerSignature y ServerTokens, en el fichero de configuración de apache.

#/etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) 
#/etc/apache/apache2.conf (Debian/Ubuntu)
ServerSignature Off
ServerTokens Prod

El primero elimina la versión de apache de las cabeceras de respuesta, y el segundo delimita qué información muestra el servidor sobre los componentes que está ejecutando.

2. Deshabilita el listado de directorios en apache

Por defecto, Apache lista todo el contenido de las carpetas en ausencia de un fichero index, lo que puede ser un riesgo de seguridad o simplemente una forma para el atacante de encontrar ese archivo de basura que la abrirá todas las puertas.

Para ajustar esto, usaremos la sentencia Options -Indexes en la definición de directorios:

<Directory /var/www/>   
      Options -Indexes
</Directory>

3. Actualiza apache regularmente

No nos cansaremos de decirlo, el software hay que actualizarlos especialmente si está expuesto a internet. Las actualizaciones de apache pueden incluir parches de seguridad y revisiones ante nuevas vulnerabilidades, por lo que nuestro servidor web ha de estar siempre actualizado.

Sobre este punto, partimos una lanza en favor de la paquetería de los sistemas y de instalar apache desde la misma. Compilar e instalar apache o cualquier otros soft linux a mano es muy divertido y permite mucha personalización, cierto… pero luego hay que actualizarlo a mano, por lo que no es práctico, es mejor dejar que apache se actualice junto al resto del sistema, y programar las actualizaciones automáticas.

Podemos comprobar la versión de apache instalada con el comando httpd -v (RHEL/CentOS/Fedora), o apache2 -v  (Debian/Ubuntu).

# httpd -v Server version: Apache/2.2.15 (Unix) Server built: Aug 13 2013 17:29:28

4. Deshabilita módulos innecesarios en apache

Siempre es buena idea deshabilitar todo aquello que no vayamos a necesitar, pero no siempre es fácil. En el caso de los módulos, la dificultad estaría en conocerlos y saber saber discriminar entre útiles y no necesarios, y no quitar cosas que nuestra web pueda necesitar. Según tu conocimiento de los mismos, te costará más o menos.

En cualquier caso, lo que debes saber es que la configuración de módulos sigue un esquema parecido a la de sites, con ficheros bajo la carpeta modsavailable con enlaces ligeros en modsenabled.

Comandos útiles:

apache2ctl -M         Para listar los módulos cargados en apache
ae2nmod módulo Para cargar un módulo
a2dismod modulo Quitar módulo

5. Usa los parámetros Allow y Deny para Restringir el aceso a Directorios

Podemos restringir acceso a directorios sensibles con las sentencias Allow y Deny, en la configuración de directorios y subdirectorios. Esta sentencia, por ejemplo, limitaría a todos el acceso al directorio raiz del sistema, y puede ser útil si una página que alojamos es hackeada o tiene un fallo e intenta navegar por el sistema.

<Directory />
Options None
Order deny,allow
Deny from all
</Directory>
seguridad apache

6. Ejecuta apache con usuario y grupo diferentes a root

Esta es otra de las buenas prácticas no solo para apache, también para el resto del software en cualquier sistema y especialmente en Linux. Otro punto a favor de la paquetería aquí, si instalamos apache con apt-get, yum o nuestro gestor de paquetes favoritos, no tendremos que preocuparnos por este detalle. En caso de hacer la compilación manual, tendremos que especificarle nosotros esos valores.

7. Usa los módulos mod_security y mod_evasive en apache

Ambos módulos son útiles para la defensa del servidor. El primero, mod_security, proporciona un cortafuegos y monitorización del trafico http. Mod_evasive, por su parte, sirve para mitigar los ataques de denegación de servicio, DoS. Puedes consultar cómo instalar y configurar mod_evasive para apache aquí.

8. Cifra las conexiones con certificados SSL y fuerza a que todas las conexiones sean https

A día de hoy, pocas son las páginas que no incluyen certificado seguro para navegar por https. Muchas, sin embargo, cometen el error de dejar el cifrado como algo opcional.

Para conseguir un certificado seguro y gratuito te recomendamos usar letsencrypt, rápido y fácil.

Para forzar el uso de http y https puedes hacerlo mediante el fichero .htaccess o en la configuración del host que escucha en el puerto 80 (/etc/apache2/sites-available/el_host.conf ). En este último caso tan sólo tendrías que añadir la línea al mismo, por el principio.

Redirect /  https://www.nosolosistemas.com/
ssl apache

9. Limita el tamaño de las solicitudes HTTP (Request Size) en apache

Esto es útil sobretodo en los casos en los que se permite que los visitantes o usuarios suban ficheros al servidor.

Con la directiva LimitRequestBody podemos limitar el tamaño de los archivos subidos y reducir las posibilidades de sufrir ataques de denegación de servicio.

Esta directiva puede adoptar valores entre 0 (ilimitado) u 2147483647 (2GB). Por ejemplo, la siguiente configuración sería válida y limitaría el upload a 500KB:

<Directory "/var/www/web/user_uploads">   
LimitRequestBody 512000
</Directory>

10. Deshabilita la ejecución de Server Side Includes y CGI en apache

Podemos deshabilitar estas extensiones si no nos hacen falta, con la opción -ExecCGI. Esto puede hacerse a nivel de servidor o de sitio.

Por ejemplo:

<Directory "/var/www/html/web1"> 
Options -Includes -ExecCGI
</Directory>

Otra valor posible es IncludesNOEXEC, con esta opción se permite SSI pero sin permisos de ejecución ni comandos o ficheros CGI.

Con estos sencillos 10 trucos podremos subir el nivel de seguridad de nuestro sitio, si bien no todos serán siempre necesarios y existen muchos otros trucos y técnicas. Te recomendamos que, una vez domines estas primeras 10 técnicas de hardening en apache, investigues por tu cuenta para llevar tu apache al siguiente nivel de fortaleza.

Como siempre, puedes comentar o contactar con NSS si deseas más información o tienes cualquier duda.

Espacio para publicidad
[Total:3    Promedio:5/5]

NSS

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *