Cómo proteger Apache: Configuraciones clave de Ciberseguridad

Cómo proteger Apache: Configuraciones clave de Ciberseguridad

por Raúl Unzué

Configuraciones de Ciberseguridad Esenciales para Servidores Apache

Apache HTTP Server es, desde hace más de dos décadas, una de las piezas fundamentales en la infraestructura de Internet. Su código abierto, flexibilidad y amplia comunidad de soporte lo han convertido en una opción preferida para administradores de sistemas y desarrolladores en entornos empresariales, educativos y personales. Sin embargo, precisamente por su popularidad, Apache también se ha transformado en un blanco frecuente para atacantes que buscan explotar configuraciones débiles,  intrusión en sistemas ajenos o errores comunes de implementación.

Aunque la instalación por defecto de Apache es funcional, no necesariamente está pensada para entornos de producción seguros. En muchos casos, los ajustes iniciales priorizan la compatibilidad o la facilidad de uso sobre la seguridad. Por ello, resulta fundamental realizar una serie de configuraciones adicionales que fortalezcan el servidor y reduzcan la superficie de ataque.

Los riesgos asociados a una mala configuración pueden ir desde la exposición involuntaria de información sensible (como versiones del software o rutas internas) hasta ataques más complejos, como inyecciones SQL, secuestro de sesiones, fuerza bruta o denegación de servicio. Estos incidentes no solo afectan la disponibilidad del servicio, sino también la reputación y la confianza de los usuarios.

Este artículo presenta una serie de prácticas recomendadas y ajustes clave que permiten mejorar la seguridad de Apache sin comprometer su rendimiento. Se incluyen ejemplos de configuración concretos, explicaciones técnicas y las ventajas que cada medida aporta. El objetivo es ofrecer una guía práctica que ayude a los administradores a reforzar la protección de sus servidores y a adoptar un enfoque preventivo ante posibles amenazas.

Geeknetic Cómo proteger Apache: Configuraciones clave de Ciberseguridad 1

Antes de comenzar todas estas configuraciones adicionales, una buena práctica es realizar una copia de seguridad de vuestro entorno con el siguiente comando:

sudo cp -a /etc/apache2 /etc/apache2.bak-$(date +%F)

Geeknetic Cómo proteger Apache: Configuraciones clave de Ciberseguridad 2

Ocultar la versión de Apache y del Sistema Operativo

Revelar la versión del servidor o del sistema operativo es uno de los errores más comunes. Esta información puede ser aprovechada por atacantes para buscar vulnerabilidades específicas.

Editamos el fichero de seguridad (Debian/Ubuntu):

sudo nano /etc/apache2/conf-available/security.conf

Añadimos o modificamos:

ServerTokens ProdServerSignature Off

Geeknetic Cómo proteger Apache: Configuraciones clave de Ciberseguridad 3

Aplicamos y probamos:

sudo a2enconf security # Debian/Ubuntu (si no está habilitado)
 sudo systemctl reload apache2

Geeknetic Cómo proteger Apache: Configuraciones clave de Ciberseguridad 4

Comprobamos. Lo podéis hacer con el comando "curl" de la siguiente forma:

curl -I https://midominio.com
  • ORIGINAL:

Geeknetic Cómo proteger Apache: Configuraciones clave de Ciberseguridad 5

  • MODIFICADO:

Geeknetic Cómo proteger Apache: Configuraciones clave de Ciberseguridad 6

Por aclararlo, ServerTokens Prod hace que el header Server muestre sólo Apache (sin versión). No elimina completamente headers agregados por proxies/CDN.

Si usas módulos que añaden información (ej. PHP-FPM), revisa su configuración.

HTTPS con TLS (Let's Encrypt + Configuración TLS segura)

En este punto, buscamos instalar certificado válido, forzar HTTPS y usar parámetros TLS seguros (deshabilitar SSLv3/TLS1.0/TLS1.1, ciphers fuertes, HSTS, OCSP stapling).

Instalación de Certificado (Let’s Encrypt / Certbot)

sudo apt updatesudo apt install certbot python3-certbot-apache
 sudo certbot --apache -d ejemplo.com -d www.ejemplo.com

Forzar redirección HTTP a HTTPS

En tu "VirtualHost :80":

nano /etc/apache2/sites-available/000-default.conf

Cambiamos la sección con estos parámetros:

    ServerName ejemplo.com

    ServerAlias www.ejemplo.com

    Redirect permanent / https://ejemplo.com/

Geeknetic Cómo proteger Apache: Configuraciones clave de Ciberseguridad 7

Configuración TLS recomendada

Editar el SSL conf del virtual host (ej. /etc/apache2/sites-available/default-ssl.conf o /etc/apache2/mods-available/ssl.conf):

# Deshabilitar protocolos débiles
 SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 # Ciphers (ejemplo intermedio compatible)
 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:\
 ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:\
 ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
 SSLHonorCipherOrder onSSLCompression offSSLSessionTickets off
 # HSTS (forzar HTTPS en navegadores)
 Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" env=HTTPS
 # OCSP staplingSSLUseStapling on
 SSLStaplingCache shmcb:/var/run/ocsp(128000)

Con todas estas modificaciones, aplicamos y probamos:

sudo a2enmod ssl headerssudo systemctl reload apache2

Comprobamos puerto 443 con "openssl":

openssl s_client -connect ejemplo.com:443 -servername ejemplo.com

Probar forzar TLS1.2/1.3:

openssl s_client -connect ejemplo.com:443 -tls1_2

 

Deshabilitar listado de directorios

Evitaremos que Apache muestre el contenido de carpetas cuando no existe index.html o index.php.

En la configuración del sitio o en apache2.conf, modificamos la sección de la siguiente forma:

sudo nano /etc/apache2/apache2.conf

Busca la sección "Directory /var/www/" y modifica estos parámetros:

   Options -Indexes

    AllowOverride None

    Require all granted

Geeknetic Cómo proteger Apache: Configuraciones clave de Ciberseguridad 8

Si necesitas .htaccess para algo, usa AllowOverride Limit en lugar de None y evita Indexes.

Aplicamos y probamos:

sudo systemctl reload apache2
 # Intenta abrir http://ejemplo.com/carpeta-sin-index/
 # Debe devolver 403 Forbidden o la página de error, no listado

Adicionalmente podemos también:

Restringir acceso a directorios sensibles

Proteger rutas administrativas y de configuración (paneles, /admin, /config) por IP o autenticación.

Podemos modificar la sección "Directory /var/www/html/admin":

Require ip 192.168.1.0/24 203.0.113.4

 

Autenticación básica

  1. Podemos crear un archivo de contraseñas para los accesos:
    sudo apt install apache2-utilssudo htpasswd -c /etc/apache2/.htpasswd usuario

     

  2. Lo configuraríamos también desde la sección "Directory":
    AuthType Basic AuthName "Área Administrativa"
     AuthUserFile /etc/apache2/.htpasswd Require valid-user

     

  3. Aplicar y probar:
    sudo systemctl reload apache2
     # Acceder a /admin y verificar que solicita credenciales o restringe por IP
  • Para producción, es preferible una autenticación basada en TLS client certs o integración con SSO/LDAP cuando sea posible (más seguro que Basic si no hay MFA).
  • No uses Basic sin TLS (podrías exponer las credenciales).

Mitigación de Fuerza Bruta y DoS (mod_evasive y fail2ban)

Opción A: mod_evasive (Apache module)

Instalación

sudo apt install libapache2-mod-evasive

Configuramos (ej. /etc/apache2/mods-available/evasive.conf o /etc/apache2/mods-available/mod-evasive.conf):

Sección "IfModule mod_evasive20.c":

    DOSHashTableSize    3097
     DOSPageCount        2
     DOSSiteCount        50
     DOSPageInterval     1
     DOSSiteInterval     1
     DOSBlockingPeriod   10
     DOSEmailNotify      admin@ejemplo.com
     DOSLogDir           /var/log/mod_evasive

Creamos directorio de logs y reiniciamos:

sudo mkdir /var/log/mod_evasivesudo systemctl restart apache2
  • DOSPageCount es un contador de peticiones por página, deberéis ajustar según la carga.
  • mod_evasive es simple y útil para ataques básicos. Para DoS a gran escala conviene WAF/IPS o soluciones a nivel de red/CDN.

Opción B: fail2ban (protección basada en logs)

Instalación

sudo apt install fail2ban

Crear filtro y jail para Apache (ejemplo /etc/fail2ban/jail.d/apache.local):

[apache-auth]enabled = trueport    = http,https
 filter  = apache-authlogpath = /var/log/apache2/*error.logmaxretry = 3
 bantime = 3600

Fail2ban incluye filtros para apache-auth y apache-badbots, o crea filtros personalizados en /etc/fail2ban/filter.d/.

  • Fail2ban es efectivo para intentos de fuerza bruta en autenticación HTTP/SSH.
  • Ajustar logpath según sistema y volumen de logs.

Configuraciones esenciales de Apache para blindar tu servidor web

Como podéis observar, la seguridad en Apache no depende únicamente del software, sino de una configuración responsable y del mantenimiento continuo. Ajustes como la ocultación de versiones, el uso de TLS, la restricción de accesos o la implementación de un WAF marcan una diferencia importante en la resiliencia del entorno.

Complementar estas medidas con actualizaciones regulares, revisiones de logs, entornos de alta disponibilidad con HAProxy con ModSecurity y políticas de seguridad claras permite mantener un servidor Apache estable, confiable y preparado frente a las amenazas más comunes.

Fin del Artículo. ¡Cuéntanos algo en los Comentarios!

Redactor del Artículo: Raúl Unzué

Raúl Unzué

Soy un apasionado de la virtualización con más de 20 años de experiencia, especializado en soluciones como VMware(premio vExpert y vExpert Pro desde 2013), Proxmox e Hyper-V. Durante mi carrera, he ayudado a empresas a optimizar sus infraestructuras TI mientras comparto mis conocimientos como redactor IT. Mi objetivo es traducir lo complejo en algo práctico y accesible, combinando teoría con experiencia real. Si te interesa la virtualización, las herramientas TI o simplemente aprender algo nuevo, espero ayudarte con mis artículos.