Spunti per incrementare il livello di sicurezza di un web server Apache
stima del tempo di lettura - minuti: 3, secondi: 0
Questo testo raccoglie alcune configurazioni da apportare ad un'istanza di Apache per aumentarne il livello di sicurezza a livello di server web
e di conseguenza di tutti i sites ospitati. Si presume che il pacchetto apache2
sia già installato sul sistema (in questo esempio, Debian) e che siano abilitati
i seguenti moduli e configurazioni:
mod_ssl
(a2enmod ssl
)mod_headers
(a2enmod headers
)conf_security
(a2enconf security
)
Il file di configurazione /etc/apache2/apache2.conf
è il principale file di configurazione del server Apache.
Esso contiene direttive di configurazione che forniscono istruzioni al server e per semplicità di organizzazione fa riferimento ad altri file
(tutti situati nella directory /etc/apache2/
), implementando così la gerarchia di configurazione delineata di seguito.
/etc/apache2/
├── apache2.conf
│ └── ports.conf
├── mods-enabled
│ ├── *.load
│ └── *.conf
├── conf-enabled
│ └── *.conf
└── sites-enabled
└── *.conf
Per semplicità, evitiamo di descrivere ogni singolo file di configurazione o directory di Apache in dettaglio. Ci concentreremo invece su alcuni file e argomenti generici attraverso i quali possiamo raggiungere gli obiettivi di questo estratto.
Il file ports.conf
Di default, il file ports.conf
determina le porte e gli indirizzi IP su cui il server web deve mettersi in ascolto.
Questo file di configurazione imposta di default il server in ascolto su tutte gli indirizzi IP sulla porta TCP 80 e
se il modulo mod_ssl
(e/o mod_gnutls
) è abilitato, anche sulla porta TCP 443.
Questo significa che, se desideriamo abilitare le connessioni HTTPS su tutti gli indirizzi IP sulla porta TCP 443,
non è necessario modificare la versione predefinita del file ports.conf
fintanto che il modulo mod_ssl
(e/o mod_gnutls
) sia abilitato.
Limitazione dell'accesso al filesystem
È possibile modificare il file apache2.conf
per limitare l'accesso del web server al filesystem.
Ad esempio, è possibile impedire l'accesso ai file sull'intero filesystem, tranne che per /var/www
,
la directory adibita di default a contenere i file relativi ai diversi sites dell'istanza Apache.
# Le seguenti direttive non consentono l'accesso al root filesystem al di fuori di /var/www.
<Directory />
Options None
AllowOverride None
Require all denied
</Directory>
# Di solito, /var/www contiene una serie di sotto-directory, ognuna delle quali ospita un sito web...
<Directory /var/www>
# ... con questo assunto, disabilitiamo l'elenco dei file e neghiamo l'override.
# Questo comportamento può essere modificato per ogni site, all'interno del relativo file di configurazione.
Options -Indexes
AllowOverride None
Require all granted
</Directory>
Il file security.conf
Un altro file di configurazione che potremmo voler modificare è /etc/apache2/conf-enabled/security.conf
.
Un esempio di modifiche che possiamo apportare a questo file è mostrato di seguito. Si noti che, come indicato nel contenuto predefinito di questo file di configurazione:
cambiare le seguenti opzioni non influenzerà realmente la sicurezza del server, ma potrebbe rendere gli attacchi leggermente più difficili in alcuni casi.
# Limitiamo le informazioni sulla versione di apache in risposta nell'header Server.
ServerTokens Prod
# Non vogliamo che una riga contenente la versione del server e il nome del virtual host alle pagine generate dal server
ServerSignature Off
# Vogliamo disabilitare il metodo TRACE
TraceEnable Off
# Potremmo non voler includere il campo ETag nella risposta
FileETag None
# Le direttive che iniziano con la parola chiave Header necessitano del modulo headers per essere abilitate:
# a2enmod headers
<IfModule mod_headers.c>
# Rimuove, in ogni caso, l'header X-Powered-By
Header unset X-Powered-By
Header always unset X-Powered-By
# Rimuove, in ogni caso, l'header X-Redirect-By
Header unset X-Redirect-By
Header always unset X-Redirect-By
# Rimuove, in ogni caso, l'header X-Generator
Header unset X-Generator
Header always unset X-Generator
# Imposta l'header X-Content-Type-Options in modo tale da impedire a MSIE di interpretare i file come qualcosa
# diverso da quanto dichiarato dal tipo di contenuto negli header HTTP.
Header set X-Content-Type-Options: "nosniff"
# Imposta l'header X-Frame-Options in modo tale da impedire ad altri siti di incorporare pagine da questo
# sito come frame. Questo mitiga gli attacchi di tipo clickjacking.
Header set X-Frame-Options: "sameorigin"
</IfModule>
Il seguente contenuto è stato tratto da questi due articoli:
- Improving the security of a WordPress instance: the sysadmin approach (F. M. Lauria, et al.)
- Increasing the security level of a Debian server (F. M. Lauria, A. De Vita)