Saltar a contenido

P2.3 Directivas de Producción

En un entorno de producción, es crucial asegurarse de que el servidor web esté configurado correctamente, optimizar el rendimiento y garantizar la seguridad. A continuación, se describen algunas prácticas recomendadas para configurar Apache en un entorno de producción.

Desactivar información del servidor

Por defecto, Apache puede mostrar información detallada sobre el servidor en las páginas de error y en las cabeceras HTTP. Esto puede ser un riesgo de seguridad, ya que los atacantes pueden utilizar esta información para explotar vulnerabilidades conocidas.

Por ejemplo, si usamos el siguiente comando para verificar las cabeceras HTTP en nuestro servidor:

curl -I http://tu_dominio.com
Podemos ver algo como esto:

HTTP/1.1 200 OK
Date: Mon, 01 Jan 2024 12:00:00 GMT
Server: Apache/2.4.41 (Ubuntu)
Last-Modified: Mon, 01 Jan 2024 12:00:00 GMT
ETag: "5d8c72-5b8-5e1f8c72"
Accept-Ranges: bytes
Content-Length: 1456
Content-Type: text/html
Se observa que la cabecera Server revela la versión de Apache y el sistema operativo, lo cual no es recomendable en un entorno de producción. Esto puede ocasionar que un atacante identifique vulnerabilidades específicas asociadas a esa versión o sistema operativo. Para mitigar este riesgo, se recomienda desactivar la divulgación de información sensible en la configuración de Apache.

Para ocultar esta información, debemos modificar las directivas de configuración de Apache ServerTokens. Esta directiva controla la cantidad de información que Apache revela en las cabeceras HTTP y en las páginas de error.

Nota

Podemos encontrar información sobre todas las directivas en la documentación oficial de Apache.

Para desactivar la información innecesaria, sigue estos pasos:

  1. Editar el fichero de configuración principal de Apache. Este fichero puede estar ubicado en /etc/apache2/apache2.conf.
    sudo nano /etc/apache2/apache2.conf
    
  2. Agregar o modificar las siguientes directivas para ocultar la información del servidor:
    ServerTokens Prod
    
    Esta directiva configura Apache para que solo revele "Apache" en la cabecera Server, sin detalles adicionales.
  3. Recargar la configuración de Apache para aplicar los cambios:
    sudo systemctl reload apache2
    
    Después de realizar estos cambios, si volvemos a ejecutar el comando curl -I http://tu_dominio.com, la cabecera Server debería mostrar solo "Apache", sin detalles adicionales.
HTTP/1.1 200 OK
Date: Mon, 01 Jan 2024 12:00:00 GMT
Server: Apache
Last-Modified: Mon, 01 Jan 2024 12:00:00 GMT
ETag: "5d8c72-5b8-5e1f8c72"
Accept-Ranges: bytes
Content-Length: 1456
Content-Type: text/html

Conexiones simultáneas

En un entorno de producción, es importante optimizar la configuración de Apache para manejar múltiples conexiones simultáneas de manera eficiente.

La directiva MaxKeepAliveRequests controla el número máximo de solicitudes que Apache puede manejar en una conexión TCP. El valor predeterminado puede no ser adecuado para un entorno de producción, especialmente si se espera un alto volumen de tráfico.

Para ajustar esta directiva, sigue estos pasos:

  1. Editar el fichero de configuración de Apache.
    sudo nano /etc/apache2/apache2.conf
    
  2. Buscar la directiva MaxKeepAliveRequests y modificar su valor. Por ejemplo:
    MaxKeepAliveRequests 200
    
    Este ejemplo establece el número máximo de conexiones simultáneas en 200.
  3. Recargar la configuración de Apache para aplicar los cambios:
    sudo systemctl reload apache2
    

Keep Alive

Cuando un cliente (por ejemplo, un navegador) se conecta al servidor con Keep-Alive habilitado, la conexión TCP se mantiene abierta para reutilizarla en varias solicitudes consecutivas, evitando crear una nueva conexión para cada archivo (HTML, CSS, JS, imágenes, etc.).

MaxKeepAliveRequests define cuántas solicitudes consecutivas puede procesar el servidor dentro de la misma conexión persistente. Por ejemplo, si tenemos un MaxKeepAliveRequests de 100, el servidor permitirá que un cliente realice hasta 100 solicitudes antes de cerrar la conexión. Esto es especialmente útil en páginas web que requieren múltiples recursos, ya que reduce la sobrecarga de establecer nuevas conexiones.

Si se establece un valor muy alto para MaxKeepAliveRequests, el servidor podrá manejar más solicitudes por conexión, lo que puede mejorar el rendimiento y reducir la latencia para los usuarios, pero también puede aumentar el uso de recursos del servidor si muchas conexiones permanecen abiertas durante mucho tiempo.

Por el contrario, si MaxKeepAliveRequests se establece en un valor muy bajo, el servidor cerrará la conexión después de pocas solicitudes, lo que puede aumentar la latencia y la carga del servidor debido a la necesidad de establecer nuevas conexiones con frecuencia.

Tiempo de espera de actividad

La directiva Timeout define el tiempo máximo que Apache esperará para completar ciertas operaciones, como la recepción de una solicitud o el envío de una respuesta. En un entorno de producción, es importante ajustar este valor para equilibrar la eficiencia y la capacidad de respuesta del servidor.

Supongamos que el servidor tiene que esperar a recibir datos de un cliente que está enviando una solicitud grande, como una carga de archivo. Si el valor de Timeout es demasiado bajo, el servidor podría cerrar la conexión antes de que se complete la transferencia, lo que resultaría en errores para el usuario.

Para ajustar la directiva Timeout, sigue estos pasos:

  1. Editar el fichero de configuración de Apache.
    sudo nano /etc/apache2/apache2.conf
    
  2. Buscar la directiva Timeout y modificar su valor según las necesidades del entorno de producción. Por ejemplo:
    Timeout 300
    
    Este ejemplo establece el tiempo de espera en 300 segundos (5 minutos).
  3. Recargar la configuración de Apache para aplicar los cambios:
    sudo systemctl reload apache2
    
    Ajustar el valor de Timeout puede ayudar a mejorar la experiencia del usuario al permitir tiempos de espera más largos para operaciones que pueden tardar más tiempo en completarse, como cargas de archivos grandes o conexiones lentas. Sin embargo, es importante encontrar un equilibrio adecuado, ya que un valor demasiado alto podría llevar a un uso excesivo de recursos del servidor si muchas conexiones permanecen abiertas durante largos períodos.

Nivel de registros

En un entorno de producción, es fundamental configurar adecuadamente el nivel de registros (logs) de Apache para monitorear el rendimiento del servidor y detectar posibles problemas de seguridad o funcionamiento.

Apache ofrece varios niveles de registro, que van desde emerg (emergencias) hasta debug (depuración). En un entorno de producción, se recomienda utilizar un nivel de registro que proporcione suficiente información para diagnosticar problemas sin generar un volumen excesivo de datos. Para configurar estos valores, se emplea la directiva LogLevel.

Para ajustar el nivel de registros, sigue estos pasos:

  1. Editar el fichero de configuración de Apache.
    sudo nano /etc/apache2/apache2.conf
    
  2. Buscar la directiva LogLevel y modificar su valor. Por ejemplo:
    LogLevel error
    
    Este ejemplo establece el nivel de registro en error, lo que significa que solo se registrarán errores.
  3. Recargar la configuración de Apache para aplicar los cambios:
    sudo systemctl reload apache2
    
    Ajustar el nivel de registros puede ayudar a reducir el tamaño de los archivos de registro y facilitar la identificación de problemas importantes sin verse abrumado por información innecesaria. Es recomendable revisar periódicamente los archivos de registro para asegurarse de que el nivel seleccionado sigue siendo adecuado para las necesidades del entorno de producción.

La definición de cada nivel es la siguiente:

  • emerg: Solo emergencias que requieren atención inmediata.
  • alert: Condiciones que requieren acción inmediata.
  • crit: Errores críticos que requieren atención inmediata.
  • error: Errores que no requieren atención inmediata.
  • warn: Advertencias sobre situaciones que podrían causar problemas.
  • notice: Información normal pero significativa.
  • info: Información general sobre el funcionamiento del servidor.
  • debug: Información detallada para propósitos de depuración.

Tip

Cuando se elige un nivel se muestran todos los mensajes de ese nivel y de niveles superiores. Por ejemplo, si se establece el nivel en warn, se registrarán mensajes de nivel warn, error, crit, alert y emerg.

Visualización de registros

Los logs de Apache se almacenan típicamente en la carpeta /var/log/apache2/. Los archivos más comunes son access.log, que registra todas las solicitudes al servidor, y error.log, que registra los errores y problemas del servidor.

Para visualizar los registros de Apache en tiempo real, puedes utilizar el comando tail con la opción -f. Esto es útil para monitorear la actividad del servidor y detectar problemas a medida que ocurren.

sudo tail -f /var/log/apache2/error.log