18 consigli di sicurezza e hardening del server web Apache

Il server web Apache è uno dei più popolari e ampiamente utilizzati server web per l’hosting di file e siti web. È facile da installare e configurare per soddisfare le tue esigenze di hosting. Tuttavia, le impostazioni predefinite non sono sicure per offrire la protezione indispensabile di cui il tuo sito ha bisogno.

In questa guida, esamineremo alcuni suggerimenti e trucchi per rafforzare la sicurezza del server web Apache.

1. Come Nascondere le Informazioni sulla Versione di Apache e sul Sistema Operativo

Per impostazione predefinita, il server web Apache mostra la sua versione nel caso in cui si visiti l’URL sbagliato di un sito web. Di seguito è riportato un esempio di pagina di errore che indica che la pagina non può essere trovata sul sito. L’ultima riga indica la versione di Apache, il sistema operativo host, l’indirizzo IP e la porta su cui è in ascolto.

Show Apache Version Info

Non è mai una buona idea mostrare le informazioni del tuo server web poiché questo può essere un bel regalo per gli hacker nella loro missione di ricognizione. Per aggiungere un livello di sicurezza e rendere più difficile per gli hacker, si consiglia di nascondere le informazioni sul server web.

Per farlo, apri il file di configurazione predefinito di Apache su distribuzioni basate su Debian.

$ sudo vim /etc/apache2/apache2.conf

Per i sistemi basati su RHEL come RHEL, Fedora, CentOS, Rocky, e AlmaLinux.

$ sudo vim /etc/httpd/conf/httpd.conf

Aggiungi le seguenti righe alla fine del file.

ServerTokens Prod
ServerSignature Off

Salva i cambiamenti e riavvia il server web Apache.

$ sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
$ sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Ora ricarica il sito e, questa volta, non verrà visualizzata informazione sul server web.

Check Apache Version Info

2. Disattiva la visualizzazione directory in Apache

Per default, Apache consente la visualizzazione directory, e i visitatori potrebbero vedere qualunque file o directory ci sia nel tuo directory Document Root.

Per dimostrare questo, creiamo una directory chiamata test.

$ sudo mkdir -p /var/www/html/test

Successivamente, navighiamo nella directory e creiamo alcuni file.

$ cd /var/www/html/test
$ sudo touch app.py main.py

Adesso, se accediamo all’URL, http://localhost/test potremo visualizzare la visualizzazione directory.

Disable Apache Directory Listing

Per disattivare la visualizzazione directory, andare nella file di configurazione principale di Apache e cercare l’attributo ‘Directory‘. Imposta il parametro ‘Options‘ a '-Indexes' come mostrato.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Ricarica Apache, e questa volta, quando visiti l’URL, le directory non verranno più visualizzate.

Disable Directory Listing in Apache

3. Aggiorna regolarmente Apache.

È sempre consigliato mantenere tutte le tue applicazioni aggiornate, poiché le ultime applicazioni vengono fornite con correzioni di bug e patch di sicurezza che affrontano le vulnerabilità sottostanti presenti nelle versioni software più vecchie.

Di conseguenza, è consigliabile aggiornare regolarmente le tue applicazioni alle loro ultime versioni.

$ sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
$ sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
Update System Packages

4. Utilizzare la crittografia HTTPS su Apache

Apache, per impostazione predefinita, utilizza il protocollo HTTP che è un protocollo debole e insicuro soggetto ad intercettazioni. Per migliorare la sicurezza del tuo sito e, ancor più, migliorare il posizionamento SEO di Google, considera di criptare il tuo sito utilizzando un certificato SSL.

In questo modo, si passa dal protocollo HTTP predefinito a HTTPS, rendendo quindi più difficile per chiunque intercettare e decifrare le comunicazioni inviate avanti e indietro dal server.

Scopri come proteggere il server web Apache utilizzando Let’s Encrypt SSL su Linux.

5. Abilitare la Sicurezza del Trasporto Rigido HTTP (HSTS) per Apache

Oltre a criptare il tuo sito web con un certificato TLS/SSL, considera l’implementazione del meccanismo di sicurezza web HSTS sopra HTTPS.

HTTP Strict Transport Security (HSTS) è un meccanismo di politica che protegge i siti web dagli attacchi di tipo man-in-the-middle e dal dirottamento di cookie. Questo avviene quando gli aggressori declassano il protocollo HTTPS al non sicuro protocollo HTTP.

HSTS consente al server web di dichiarare rigidamente che i browser web dovrebbero interagire con esso solo tramite HTTPS e mai attraverso il protocollo HTTP.

Per abilitare HSTS, assicurati che il tuo sito web stia eseguendo HTTPS e abbia un certificato TLS/SSL valido.

Successivamente, abilita il modulo degli header per Apache:

$ sudo a2enmod headers

Quindi ricarica Apache per applicare le modifiche.

$ sudo systemctl restart apache2

Successivamente, accedi al file di configurazione dell’host virtuale del tuo dominio.

$ sudo vim /etc/apache2/sites-available/mydomain.conf

Successivamente, aggiungi questa riga all’interno del blocco <VirtualHost *:443>:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Ciò appare come segue.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

Il parametro max-age istruisce i browser web ad accedere al tuo sito utilizzando solo HTTPS per l’anno successivo (31536000 = 1 anno).

Infine, riavvia Apache affinché la politica HSTS abbia effetto.

$ sudo systemctl restart apache2

6. Abilita HTTP/2 su Apache

Nel 2015 è stata rilasciata HTTP/2, una nuova versione del protocollo HTTP che cerca di risolvere molti problemi che i creatori di HTTP/1.1 non avevano previsto.

Mentre HTTP/1.1 è ancora ampiamente utilizzato, è associato a problemi di prestazioni legati all’uso di connessioni TCP multiple per elaborare più richieste dal browser, il che porta a un elevato sovraccarico delle risorse sul lato client, con conseguente degrado delle prestazioni di rete.

Man mano che le applicazioni crescevano in complessità e funzionalità, è stato creato HTTP/2 per risolvere le carenze di HTTP/1.1 che includono lunghe intestazioni HTTP, lente velocità di caricamento delle pagine web e degrado generale delle prestazioni.

HTTP/2 offre una maggiore protezione e privacy rispetto al suo predecessore. Altrettanto importante è il miglioramento delle prestazioni attraverso l’uso di flussi di dati multiplexati. Con HTTP/2 una singola connessione TCP garantisce un utilizzo efficace della larghezza di banda, anche quando si trasmettono più flussi di dati.

Scopri come abilitare HTTP/2 sul server web Apache usando:

7. Limitare l’Accesso alle Directory Sensibili in Apache

Un’altra misura di sicurezza che potresti prendere è limitare l’accesso alle directory che potrebbero contenere informazioni sensibili come dati degli utenti, log e file di configurazione.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

Nella configurazione sopra, Require all denied nega l’accesso a chiunque tenti di accedere ai file in /directory_sensibile.

Salva le modifiche ed esci dal file. Quindi riavvia Apache perché le modifiche abbiano effetto.

Disabilita la Direttiva ServerSignature in Apache

La direttiva ServerSignature nel file di configurazione di Apache aggiunge un piè di pagina ai documenti generati dal server che contengono informazioni sulla configurazione del tuo server web, come la versione e il sistema operativo su cui è in esecuzione. Esporre dettagli cruciali sul tuo server web a attori malintenzionati aumenterà significativamente le possibilità di un attacco.

Per evitare l’esposizione di tali informazioni, è necessario disabilitare questa direttiva nel file di configurazione di Apache:

ServerSignature Off

Salva le modifiche e riavvia ancora una volta Apache affinché le modifiche abbiano effetto.

$ sudo systemctl restart apache2

Imposta la Direttiva ‘ServerTokens’ su ‘Prod’

La direttiva ‘ServerTokens‘ controlla quali informazioni invia il server, tra cui la versione di Apache (versione principale e secondaria), il sistema operativo e il tipo di server web in esecuzione.

La quantità minima di informazioni che desideri esporre al pubblico è che il server web sia Apache. Tutto il resto esporrebbe solo il tuo server a potenziali attacchi. Pertanto, è consigliabile impostare la direttiva ‘ServerTokens‘ nel file di configurazione di Apache su ‘prod‘.

ServerTokens Off

Come sempre, salva le modifiche e assicurati di riavviare Apache.

Proteggi Apache con Fail2ban

Fail2ban è un’applicazione open source di prevenzione delle intrusioni che protegge i sistemi Linux da minacce esterne, tra cui attacchi DoS e brute-force. Funziona monitorando costantemente i log di sistema per attività malintenzionate e bloccando gli host che corrispondono a pattern che imitano comportamenti di attacco.

Fail2ban può essere configurato per proteggere Apache da attacchi DoS monitorando costantemente i log di Apache per tentativi di accesso falliti e bannando temporaneamente gli IP offender.

Scopri come installare Fail2ban su Linux usando:

11. Disabilita i moduli non necessari

I moduli Apache sono semplicemente programmi che vengono caricati per estendere le funzionalità del server web. Le funzioni estese dai moduli includono autenticazione di base, caching del contenuto, crittografia, sicurezza, ecc.

È sempre consigliabile disabilitare tutti quei moduli che non sono attualmente in uso per ridurre al minimo le possibilità di cadere vittima di un attacco.

Per visualizzare tutti i moduli abilitati, eseguire il comando

$ apache2ctl -M
View Apache Modules

Per verificare se un modulo specifico è abilitato, ad esempio il modulo rewrite, eseguire il comando.

$ apache2ctl -M | grep rewrite
Check Apache Module

Per disabilitare il modulo, eseguire il comando:

$ sudo a2dismod rewrite 
Disable Apache Module

12. Utilizza i moduli mod_security e mod_evasive per proteggere Apache

Puoi abilitare i moduli mod_security e mod_evasive per proteggere Apache da attacchi brute-force o attacchi DDoS.

  • Il modulo mod_security agisce come un firewall per applicazioni web (WAF) e blocca il traffico sospetto e indesiderato sul tuo sito.
  • Il modulo mod_evasive protegge il tuo server dagli attacchi brute force e denial of service (DoS).

Leggi di più su come proteggere Apache utilizzando i moduli mod_security e mod_evasive.

13. Servizi non desiderati limitati in Apache

Per aumentare ulteriormente la sicurezza di Apache, considera di disabilitare alcuni servizi come i collegamenti simbolici e l’esecuzione CGI se attualmente non sono necessari. Per impostazione predefinita, Apache segue i symlink, possiamo disattivare questa funzionalità così come la funzione -Includes e CGI in una sola riga.

Per fare ciò, aggiungi la riga ‘ -ExecCGI -FollowSymLinks -Includes ‘ per la direttiva ‘Options’ nella sezione ‘Directory’.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

Questo può essere ottenuto anche a livello di directory. Ad esempio, qui stiamo disattivando Includes e le esecuzioni dei file CGI per la directory “/var/www/html/mydomain1”.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

Salva le modifiche e riavvia Apache.

14. Limita la dimensione di upload del file in Apache

Un altro modo per proteggere il tuo server web è limitare la dimensione totale del corpo della richiesta HTTP inviata al server web da un client. Puoi impostarlo nel contesto del server, per directory, per file o per posizione.

Ad esempio, se desideri consentire l’upload di file in una directory specifica, ad esempio /var/www/domain.com/wp-uploads, e limitare la dimensione del file caricato a 4M = 4194304Bytes, aggiungi la seguente direttiva al tuo file di configurazione di Apache o file .htaccess.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

Salva le modifiche e ricorda di riavviare Apache.

Puoi impostarlo nel contesto del server, per directory, per file o per posizione. La direttiva protegge dal comportamento anomalo delle richieste dei client, che a volte può essere una forma di attacco di negazione del servizio (DoS).

15. Abilitare il Registro in Apache

Il registro fornisce tutti i dettagli sulle richieste dei client e qualsiasi altra informazione relativa alle prestazioni del tuo server web. Questo fornisce informazioni utili nel caso in cui qualcosa vada storto. Abilitare i log di Apache, specialmente nei file degli host virtuali, ti consente di individuare un problema nel caso in cui qualcosa vada storto con il server web.

Per abilitare il registro, è necessario includere il modulo mod_log_config, che fornisce due direttive principali di registro.

  • ErrorLog – Specifica il percorso del file di registro degli errori.
  • CustomLog – Crea e formatta un file di registro.

Puoi utilizzare questi attributi in un file di host virtuale nella sezione di host virtuale per abilitare il registro.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

La direttiva {APACHE_LOG_DIR} nei sistemi Debian è definita come percorso /var/log/apache2.

16. Esegui Apache come Utente e Gruppo Separati

Eseguire Apache come utente e gruppo separati è una pratica comune per la sicurezza. In questo modo, puoi isolare il processo del server web dagli altri processi di sistema e ridurre al minimo i danni potenziali se il server web viene compromesso.

Prima di tutto, dovrai creare un nuovo utente e un gruppo specificamente per Apache.

$ sudo groupadd apachegroup
$ sudo useradd -g apachegroup apacheuser

Successivamente, dovrai modificare il file di configurazione di Apache per specificare il nuovo utente e gruppo.

User apacheuser
Group apachegroup

Dato che stai cambiando l’utente e il gruppo con cui Apache viene eseguito, potresti dover aggiornare la proprietà delle directory e dei file web per garantire che Apache possa comunque leggerli.

$ sudo chown -R apacheuser:apachegroup /var/www/html

Dopo aver apportato queste modifiche, riavvia Apache per applicarle:

$ sudo systemctl restart httpd      # For RHEL/CentOS
$ sudo systemctl restart apache2    # For Debian/Ubuntu

17. Protezione da attacchi DDoS e Harden

Bene, è vero che non puoi proteggere completamente il tuo sito web dagli attacchi DDoS. Tuttavia, ecco alcune linee guida che possono aiutarti a mitigarli e gestirli.

  • TimeOut – Questa direttiva ti consente di specificare la durata per cui il server attende che determinati eventi si completino prima di restituire un errore. Il valore predefinito è di 300 secondi. Per siti suscettibili agli attacchi DDoS, è consigliabile mantenere questo valore basso. Tuttavia, l’impostazione appropriata dipende principalmente dalla natura delle richieste ricevute dal tuo sito web. Nota: Un timeout basso potrebbe causare problemi con alcuni script CGI.
  • MaxClients – Questa direttiva imposta il limite sul numero di connessioni che possono essere servite contemporaneamente. Eventuali nuove connessioni oltre questo limite verranno messe in coda. È disponibile sia nei Prefork che nei Worker MPMs. Il valore predefinito è 256.
  • KeepAliveTimeout – Questa direttiva specifica la durata per cui il server attende una successiva richiesta prima di chiudere la connessione. Il valore predefinito è di 5 secondi.
  • LimitRequestFields – Questa direttiva imposta un limite sul numero di campi dell’intestazione della richiesta HTTP accettati dai client. Il valore predefinito è 100. Se gli attacchi DDoS stanno avvenendo a causa di un numero eccessivo di intestazioni delle richieste HTTP, si consiglia di ridurre questo valore.
  • LimitRequestFieldSize – Questa direttiva imposta un limite di dimensione per l’intestazione della richiesta HTTP.

18. Effettua scansioni regolari delle vulnerabilità

Un altro modo per proteggere il tuo server web è effettuare regolari test di scansione delle vulnerabilità. Questo aiuta a individuare potenziali falle di sicurezza che potrebbero essere sfruttate dagli hacker per accedere a file sensibili o iniettare malware.

Gli strumenti di scansione delle vulnerabilità aiutano anche a individuare impostazioni di configurazione non sicure e a effettuare audit per la conformità. Tra gli strumenti di scansione delle vulnerabilità popolari ci sono Acutenix, Nessus, Nexpose, Sucuri, e molti altri.

Conclusione

Questi sono alcuni dei consigli per la sicurezza di Apache che puoi implementare sul tuo server web per fornire un ulteriore livello di protezione e tenere lontane le intrusioni.

Source:
https://www.tecmint.com/apache-security-tips/