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