4. Servicio Apache

Configuraciones para servicio FTP.


Deshabilitar módulos innecesarios

  • Editar fichero /etc/apache2/conf/apache2.conf y desactivar módulos sin uso

...SNIP...

# LoadModule status_module modules/mod_status.so

...SNIP...
  • Listar módulos habilitados y utilizados

sudo apache2ctl -M
  • Deshabilitar módulos específicos:

sudo a2dismod mod_status
sudo a2dismod mod_php
sudo a2dismod mod_autoindex
sudo a2dismod mod_info
sudo a2dismod mod_userdir

Aplicar configuración segura en fichero principal

  • Configurar uso de protocolos seguros en fichero /etc/apache2/sites-available/default.conf

...SNIP...

<VirtualHost *:80>
    ServerName www.domain.com
    Redirect permanent / https://www.domain.com
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCertificateFile /etc/ssl/certs/cert.pem
    SSLCertificateKeyFile /etc/ssl/private/key.pem
    SSLCACertificateFile /etc/ssl/certs/ca-bundle.pem

    SSLHonorCipherOrder on
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLCompression off
    SSLSessionTickets off

    Header always set Referrer-Policy "no-referrer"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    Header always set X-Frame-Options DENY
    Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; style-src 'self'; img-src 'self' data:;"

    CustomLog /var/log/apache2/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    ErrorLog /var/log/apache2/ssl_error_log

    SSLUseStapling on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off
    SSLStaplingCache shmcb:/var/run/ocsp(128000)
</VirtualHost>

...SNIP...

Desactivar listado de directorios

  • Configurar fichero /etc/apache2/sites-available/default.conf para evitar que usuarios naveguen por los directorios del servidor

...SNIP...

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

...SNIP...

Limitar tamaño de solicitudes HTTP

  • Configurar fichero /etc/apache2/sites-available/default.conf para prevenir peticiones que sobrecarguen el servidor.

...SNIP...

<Directory "/var/www/html">
    LimitRequestBody 10000000
</Directory>

...SNIP...
  • Complementar con configuración del buffer máximo de recepción de solicitudes si se utiliza PHP en backend, a través de variables post_max_size, upload_max_filesize y memory_limit.


Limitar los métodos HTTP permitidos

  • Configurar fichero /etc/apache2/sites-available/default.conf para restringir métodos HTTP permitidos por el servidor

...SNIP...

<Directory "/var/www/html">
    <LimitExcept GET POST>
        deny from all
    </LimitExcept>
</Directory>

...SNIP...

Restringir acceso por IP

  • Configurar fichero /etc/apache2/sites-available/default.conf para limitar acceso a recursos sensibles por control de IP

...SNIP...

<Directory "/var/www/admin">
    Require ip 192.168.1.0/24
</Directory>

...SNIP...

Protección de archivos sensibles

  • Configurar fichero /etc/apache2/sites-available/default.conf para proteger ciertos archivos de visibilidad pública como .htaccess o config.php

...SNIP...

<VirtualHost *:443>
	<Files ".ht*">
	    Require all denied
	</Files>
	
	<Files "config.php">
	    Require all denied
	</Files>
</VirtualHost>

...SNIP...

Proteger por permisos archivos de configuración

sudo chmod 600 /etc/ssl/certs/cert.pem
sudo chmod 600 /etc/ssl/private/key.pem
sudo chmod 600 /etc/apache2/conf/apache2.conf