Vamos a ver unos cuantos archivos de configuración y todos los parámetros importantes a configurar en cada archivo.
Apache2.conf
El primer archivo que vamos a configurar será apache2.conf que se encuentra en la siguiente ruta: /etc/apache2/apache2.conf. Es el fichero más importante de Apache, puesto que en él se definirá el comportamiento general del servidor de páginas web y además, es el encargado de acceder a los distintos módulos que amplían la funcionalidad del servidor.


Timeout
Esta directiva determina el tiempo que espera el servidor al cliente.
- Valor por defecto: 300. Esto significa que el tiempo que espera el servidor al cliente es de 300 segundos.
- Valores posibles: Cuanto se desee. Contra más tiempo se configure, más tiempo de espera hay entre el servidor y el cliente con lo cual somos más propensos a recibir ataques de DoS y el servidor será muy lento para cortar las conexiones.
- Valor recomendado: el valor recomendado varía según la página web. Lo recomendado sería entre 10 y 60 segundos como mucho. Ya que, si el tiempo de espera entre el servidor y el cliente es más corto, ayudaría a no saturar tanto al servidor y mitigaría los ataques DoS.
KeepAlive
Determina si se permite al cliente o no realizar múltiples conexiones con el servidor. KeepAlive puede usarse para impedir que un cliente consuma muchos recursos del servidor.
- Valor por defecto: On. Esto quiere decir si está en “On”, proporcionará sesiones HTTP de larga duración que permiten enviar varias solicitudes a través de la misma conexión TCP.
- Valores posibles: On u Off. Si dejamos en On, si un servidor necesita responder a varias peticiones HTTP simultáneamente y servir un solo archivo para cada nueva conexión TCP, el tiempo de carga de la página del sitio aumentará. Esto puede conducir a una mala experiencia del usuario.
- Valor recomendado: Como recomendación para la seguridad es mejor dejarlo en Off ya que si lo dejamos activo el tiempo de carga aumentará y será más propenso a recibir ataques DoS.
KeepAliveRequests
Limita el número de peticiones permitidas por conexión de un cliente. Se utiliza para controlar las conexiones persistentes.
- Valor por defecto: 100. Esto quiere decir que se permitirán 100 solicitudes por conexión de un cliente.
- Valores posibles: Tanto como se pueda. Si se establece en 0, se permitirán solicitudes ilimitadas. Mientras más alto el valor configurado, más peticiones podrá realizar un cliente así consigo el servidor será más propenso a la saturación y a los ataques DoS.
- Valor recomendado: Depende de cada aplicación. El valor recomendado está entre 50 y 75.
KeepAliveTimeout
Cantidad de tiempo que el servidor esperará solicitudes posteriores en una conexión persistente.
- Valor por defecto: 5. El servidor Apache esperará 5 segundos una solicitud posterior antes de cerrar la conexión.
- Valores posibles: Tanto como se pueda. Establecer un valor alto puede causar problemas de rendimiento en servidores muy cargados. Cuanto mayor sea el tiempo de espera, más procesos del servidor se mantendrán ocupados esperando conexiones con clientes inactivos.
- Valor recomendado: Depende de la aplicación. Lo más recomendable es configurar el valor lo más bajo que se pueda ya que de esta forma el servidor irá con más fluidez y será menos propenso a ataques de DoS.
Security.conf
Este archivo se encuentra en el directorio /etc/apache2/conf-available. En este archivo se encuentran varias directivas para la seguridad de nuestro apache. Es muy importante a la hora de realizar el hardening de nuestro servidor.

ServerTokens
Esta directiva controla si (Server)el campo de encabezado de respuesta que se envía a los clientes incluye una descripción del tipo de sistema operativo genérico del servidor, así como información sobre los módulos compilados.
- Valor por defecto: OS. Esto quiere decir que el servidor envía, por ejemplo: Server: Apache/2.4.1 (Unix).
- Valores posibles:
- Major: El servidor envía, por ejemplo :Server: Apache/2.
- Minor: El servidor envía, por ejemplo :Server: Apache/2.4
- Min[imal]: El servidor envía, por ejemplo :Server: Apache/2.4.1
- Full: El servidor envía, por ejemplo :Server: Apache/2.4.1 (Unix) PHP/4.2.2 MyMod/1.2
- Proud: El servidor envía, por ejemplo: Server: Apache
- Valor recomendado: El valor recomendado sería configurarlo con el parámetro “Proud”, ya que no mostrará la versión de nuestro Apache. Esto evitaría que los ciberdelincuentes supieran la versión de nuestro apache y complicar el intento de hackeo.
ServerSignature
Permite la configuración de una línea de pie de página al final de los documentos generados por el servidor (mensajes de error, mod_proxy, listas de directorios ftp, mod_info, salida, ...). La razón por la que querría habilitar una línea de pie de página de este tipo es que en una cadena de proxies, el usuario a menudo no tiene la posibilidad de saber cuál de los servidores encadenados realmente produjo un mensaje de error devuelto.
- Valor por defecto: On. Al estar en “On”, se permite que se visualice en la parte inferior de las páginas generadas por Apache, por ejemplo, al mostrar el error 404 (documento no encontrado).
- Valores posibles:
- On: Simplemente agrega una línea con el número de versión del servidor y ServerName del host virtual de servicio
- Off: Suprime la línea de pie de página (y, por lo tanto, es compatible con el comportamiento de Apache-1.2 y versiones anteriores)
- Email: Además crea una referencia "mailto:" al ServerAdmin documento al que se hace referencia.
- Valor recomendado: El valor recomendado sería “Off”, así suprimimos la línea de pie de página y no damos información de más sobre nuestro navegador.
Header set X-Content-Type-Options
Se usa para proteger contra las vulnerabilidades de detección de MIME. Estas vulnerabilidades pueden ocurrir cuando un sitio web permite a los usuarios cargar contenido en un sitio web, sin embargo, el usuario disfraza un tipo de archivo en particular como otra cosa. Esto puede darles la oportunidad de realizar secuencias de comandos entre sitios y comprometer el sitio web.
- Valor por defecto: “nosniff”, los navegadores que soportan esta cabecera (IE y Chrome), no cargan las hojas de estilos, ni los scripts (Javascript), cuyo Myme-type no sea el adecuado.
- Valores posibles:
- Valor recomendado: El valor recomendado sería el que se encuentra por defecto “nosniff”, ya que este encabezado de seguridad ayuda a prevenir este tipo de ataques al deshabilitar la funcionalidad de detección de MIME de los navegadores IE y Chrome para que el navegador deba usar el tipo MIME enviado a través del servidor de origen.
Header set X-Frame-Options
Puede ser usado para indicar si debería permitírsele a un navegador renderizar una página en un <frame>, <iframe>, <embed> u <object>. Las páginas web pueden usarlo para evitar ataques de click-jacking, asegurándose de que su contenido no es embebido en otros sitios.
- Valor por defecto: “sameorigin”, Esto quiere decir que se puede usar la página en un marco mientras el sitio que la incluya sea el mismo que la sirve.
- Valores posibles:
- Sameorigin: Se puede usar la página en un marco mientras el sitio que la incluya sea el mismo que la sirve.
- Deny: La página no puede ser mostrada en un marco, independiente del sitio que esté intentándolo
- ALLOW-FROM uri: Esta es una directiva obsoleta que ya no funciona en navegadores modernos. No usar. En el soporte de navegadores antiguos, una página se puede mostrar en un marco solo en el origen especificado uri.
- Valor recomendado: El valor recomendado sería el que se encuentra por defecto “Sameorigin”, ya que tendremos protección contra ClickJacking, que es cuando un atacante usa varias capas transparentes u opacas para engañar a un usuario para que haga click en un botón o enlace en otra página cuando intenta hacer click en la página del nivel superior.
PHP.ini
Este archivo se encuentra en la ruta /etc/php/8.1/cli/php.ini. Php.ini es un archivo que nos permite ajustar la configuración de PHP.
Session.cookie_lifetime
Especifica el tiempo de vida en segundos de la cookie que es enviada al navegador.
- Valor por defecto: “0”, El valor 0 significa "hasta que el navegador se cierre".
- Valor recomendado: El valor recomendado sería el que se encuentra por defecto “0”, ya que cuando un navegador finaliza, la cookie de ID de sesión se elimina inmediatamente.
Session.use_cookies
Especifica si el módulo usará cookies para almacenar el id de sesión en la parte del cliente.
- Valor por defecto: “1”, Esto quiere decir que se permite usar cookies para almacenar el id de sesión en la parte del cliente.
- Valores posibles:
- 0: Deshabilitado.
- 1: Habilitado.
- Valor recomendado: El valor recomendado varía según la página web. Pero es más seguro configurarlo en “0”.
Session.use_only_cookies
Especifica si el módulo sólo usará cookies para almacenar el id de sesión en la parte del cliente. Habilitar este ajuste previene ataques que implican pasar el id de sesión en la URL.
- Valor por defecto: “1”, Esto quiere decir que se permite usar cookies para almacenar el id de sesión en la parte del cliente.
- Valores posibles:
- 0: Deshabilitado.
- 1: Habilitado.
- Valor recomendado: El valor recomendado es “1”, ya que habilitar este ajuste previene ataques que implican pasar el id de sesión en la URL.
session.use_strict_mode
Previene que el módulo de sesiones utilice ID de sesiones no inicializados. En otras palabras, el módulo de sesiones solamente acepta ID de sesiones válidos generados por él mismo. Rechaza ID de sesión proporcionados por los usuarios. Se podría realizar una inyección de ID de sesiones a través de inyecciones de cookies mediante JavaScript de forma permanente o temporal.
- Valor por defecto: “0”, Esto quiere decir que está deshabilitado.
- Valores posibles:
- 0: Deshabilitado
- 1: Habilitado
- Valor recomendado: Es obligatoria habilitar session.use_strict_mode por seguridad general de sesión. Todos los sitios están advertidos de esto.
session.cookie_httponly
Marca la cookie como accesible sólo a través del protocolo HTTP. Esto significa que la cookie no será accesible por lenguajes de script, tales como JavaScript. Este ajuste puede ayudar de manera efectiva a reducir robos de identidad a través de ataques (aunque no está soportado por todos los navegadores).
- Valor por defecto: “on”, Esto quiere decir que se deniega el acceso a cookies de sesión a JavaScript.
- Valores posibles:
- On: Habilitado
- Off: Deshabilitado
- Valor recomendado: El valor recomendado sería el que se encuentra por defecto “On”, ya que este ajuste previene del robo de cookies por inyecciones de JavaScript. Es posible utilizar ID de sesiones como claves de protección CSRF, aunque no se recomienda. Por ejemplo, se podría guardar y enviar código fuente HTML a otros usuarios. Para mayor seguridad, los desarrolladores no deberían escribir ID de sesiones en páginas web. Casi todas las aplicaciones deben emplear el atributo httponly para cookies de ID de sesión.
session.cookie_secure
Especifica si las cookies deberían enviarse sólo sobre conexiones seguras.
- Valor por defecto: “Off”, Esto quiere decir que las cookies pueden enviarse en conexiones seguras tanto no seguras.
- Valores posibles:
- On: Habilitar
- Off: Deshabilitar
- Valor recomendado: El valor recomendado sería “On”, ya que si un sitio web es un sitio solamente HTTPS, se debe habilitar este ajuste. No debería considerarse el empleo de HSTS para sitios web que sean solamente HTTPS.
session.gc_maxlifetime
Especifica el número de segundos después de lo cual la información sea vista como 'basura' y potencialmente limpiada. La recolección de basura puede suceder durante el inicio de sesiones.
- Valor por defecto: “1440”, Esto quiere decir que hay 1440 segundos antes de que la información sea vista como basura y sea eliminada.
- Valores posibles: Tantos segundos como se desee.
- Valor recomendado: El valor recomendado sería el valor más pequeño posible para que las sesiones obsoletas sean eliminadas con la frecuencia apropiada. Si se requiere la autoidentificación, se ha de implementar una característica de autoidentificación segura. No utilice ID de sesiones de vida larga para ello.
session.use_trans_sid
Especifica cuáles etiquetas HTML son reescritas para incluir el ID de sesión cuando está habilitado el soporte para SID transparente.
- Valor por defecto: “a=href,area=href,frame=src,input=src,form= form”, es una etiqueta especial. <input hidden="id_sesión" name="nombre_sesión"> se añade como variable de formulario.
- Valores posibles:
- Off
- a=href,area=href,frame=src,input=src,form= form
- Valor recomendado: El valor recomendado sería “Off”, ya que mejoraría la seguridad general de ID de sesiones eliminando la posibilidad de inyecciones y filtraciones de ID de sesiones.
session.referer_check
Contiene la subcadena para comprobar cada HTTP Referer. Si la Referencia fue enviada por el cliente y la subcadena no se encontró, el id de sesión embebido será marcado como no válido.
- Valor por defecto: “Cadena vacía”, Esto quiere decir que se puede usar la página en un marco mientras el sitio que la incluya sea el mismo que la sirve.
- Valores posibles:
- Valor recomendado: Cuando session.use_trans_sid está habilitado, se recomienda el empleo de este ajuste si es posible. Reduce el riesgo de inyecciones de ID de sesión. Si un sitio fuera http://example.com/, se ha de establecer http://example.com/ para ello. Observar que, al utilizar HTTPS, los navegadores no enviarán la cabecera recomendante. Los navegadores podrían no enviar dicha cabecera debido a su configuración. Por tanto, este ajuste no es una medida de seguridad de confianza.
session.cache_limiter
Especifica el método de control de caché usado por páginas de sesión.
- Valor por defecto: “nocache”, Esto quiere decir que garantiza que los contenidos HTTP no se almacenan en caché para sesiones autenticadas. Permite el almacenamiento en caché solamente cuando el contenido no es privado. De lo contrario, el contenido podría quedar expuesto.
- Valores posibles:
- Nocache: Garantiza que los contenidos HTTP no se almacenan en caché para sesiones autenticadas.
- Private: Se podría emplear "private" si el contenido HTTP no incluye datos sensibles a la seguridad. Observar que "private" podría dejar datos privados en caché por clientes compartidos.
- Private_no_expire: La caché no expira.
- Public: Se podría utilizar "public" solamente cuando el contenido HTTP no contenga ningún dato privado en absoluto.
- Valor recomendado: El valor recomendado sería el que se encuentra por defecto “nocache”, ya que se garantiza que los contenidos HTTP no se almacenan en caché para sesiones autenticadas.
session.hash_function
Permite especificar el algoritmo hash utilizado para generar los ID de sesión.
- Valor por defecto: (No aparece).
- Valores posibles:
- 0: Significa MD5 (128 bits)
- 1: Significa SHA-1 (160 bits).
- Valor recomendado: El valor recomendado sería “1”, ya que el algoritmo SHA-1 es más seguro frente a MD5.
Hay muchos parámetros más que configurar, pero estos serían los más importantes a la hora de securizar el apache. Cada uno de ellos aporta alguna mitigación de los posibles ataques a nuestro servidor.