Unidad 9.4: Seguridad basica en Apache

Permisos, headers y superficie minima

Author

Diego Saavedra

Published

Feb 2, 2026

Unidad 9.4: Seguridad basica en Apache

Introduccion

Hardening basico en Apache consiste en: exponer lo minimo, evitar configuraciones inseguras, y dejar evidencias (headers/logs/configtest).

Objetivos de aprendizaje

  • Reducir informacion expuesta
  • Habilitar headers basicos de seguridad
  • Verificar con curl

Quitar informacion innecesaria (ServerTokens/ServerSignature)

En Ubuntu, puedes definir directivas globales en /etc/apache2/conf-available/.

BASH
1$ sudo tee /etc/apache2/conf-available/security-hardening.conf >/dev/null <<'EOF'
ServerTokens Prod
ServerSignature Off
EOF


2$ sudo a2enconf security-hardening
Enabling conf security-hardening.


3$ sudo apachectl configtest
Syntax OK


4$ sudo systemctl reload apache2
1
tee + heredoc crea un archivo de configuracion global.
2
a2enconf habilita configuraciones en conf-enabled/.
3
apachectl configtest valida sintaxis.
4
systemctl reload aplica cambios.

Headers basicos

BASH
1$ sudo a2enmod headers
Enabling module headers.


2$ sudo tee /etc/apache2/conf-available/security-headers.conf >/dev/null <<'EOF'
<IfModule mod_headers.c>
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
EOF


3$ sudo a2enconf security-headers
Enabling conf security-headers.


4$ sudo apachectl configtest
Syntax OK


5$ sudo systemctl reload apache2
1
a2enmod headers habilita mod_headers.
2
tee + heredoc define headers basicos.
3
a2enconf habilita la configuracion.
4
apachectl configtest valida sintaxis.
5
systemctl reload aplica cambios.

Verificar headers

BASH
1$ curl -I http://localhost | sed -n '1,15p'
HTTP/1.1 200 OK
Server: Apache
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Referrer-Policy: strict-origin-when-cross-origin
1
curl -I verifica headers de respuesta.

Mejores practicas

  • Configtest antes de cada reload.
  • Logs siempre: si no esta en logs, no paso.

Code Appendix