Ricerca nel sito web

18 Suggerimenti per la sicurezza e il rafforzamento del server Web Apache


Il server Web Apache è uno dei server Web più popolari e ampiamente utilizzati 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 tanto necessaria di cui il tuo sito ha bisogno.

In questa guida, esamineremo alcuni suggerimenti e trucchi per il rafforzamento del server Apache che puoi implementare per rafforzare la sicurezza del tuo server web.

1. Come nascondere la versione di Apache e le informazioni sul sistema operativo

Per impostazione predefinita, il server web Apache mostra la sua versione nel caso in cui navighi nell'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.

Non è mai una buona idea visualizzare le informazioni del tuo server web in quanto può essere un buon regalo per gli hacker nella loro missione di ricognizione. Per aggiungere un livello di sicurezza e rendere il lavoro più difficile per gli hacker, si consiglia di nascondere le informazioni del server web.

Per fare ciò, apri il file di configurazione Apache predefinito sulle distribuzioni basate su Debian.

sudo vim /etc/apache2/apache2.conf

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

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

Aggiungi le seguenti righe alla fine del file.

ServerTokens Prod
ServerSignature Off

Salva le modifiche 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, le informazioni sul server web non verranno visualizzate.

2. Disabilitare l'elenco delle directory in Apache

Per impostazione predefinita, Apache consente l'elenco delle directory e i visitatori potrebbero vedere qualsiasi file o directory tu possa avere nella tua directory Document Root.

Per dimostrarlo, creeremo una directory chiamata test.

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

Successivamente, navigheremo nella directory e creeremo alcuni file.

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

Ora, se accediamo all'URL http://localhost/test saremo in grado di visualizzare l'elenco delle directory.

Per disabilitare l'elenco delle directory, vai al file di configurazione principale di Apache e cerca l'attributo "Directory". Imposta il parametro "Opzioni" su '-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.

3. Aggiorna regolarmente Apache

È sempre consigliabile mantenere aggiornate tutte le applicazioni, poiché le applicazioni più recenti sono dotate di correzioni di bug e patch di sicurezza che risolvono le vulnerabilità sottostanti presenti nelle versioni software precedenti.

Pertanto, si consiglia di aggiornare regolarmente le applicazioni alle versioni più recenti.

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

4. Utilizza la crittografia HTTPS su Apache

Apache, per impostazione predefinita, utilizza il protocollo HTTP che è un protocollo debole e insicuro incline alle intercettazioni. Per migliorare la sicurezza del tuo sito e, soprattutto, migliorare il tuo posizionamento SEO su Google, valuta la possibilità di crittografare il tuo sito utilizzando un certificato SSL.

In questo modo, cambia il protocollo HTTP predefinito in HTTPS, rendendo così 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.

  • Come proteggere Apache con Let's Encrypt SSL Certificate su RHEL
  • Come proteggere Apache con il certificato SSL gratuito Let's Encrypt su Ubuntu e Debian

5. Abilita HTTP Strict Transport Security (HSTS) per Apache

Oltre a crittografare il tuo sito web con un certificato TLS/SSL, valuta la possibilità di implementare il meccanismo di sicurezza web HSTS oltre a HTTPS.

HTTP Strict Transport Security (HSTS) è un meccanismo di policy che protegge i siti web dagli attacchi man-in-the-middle e dal dirottamento dei cookie. Ciò accade quando gli aggressori eseguono il downgrade del protocollo HTTPS al protocollo HTTP non sicuro.

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

Per abilitare HSTS, assicurati che il tuo sito web esegua HTTPS e disponga di un certificato TLS/SSL valido.

Successivamente, abilita il modulo 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 :

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

Questo appare come segue.

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

Il parametro max-age indica ai browser web di accedere al tuo sito solo utilizzando HTTPS per il prossimo anno (31536000=1 anno).

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

sudo systemctl restart apache2

6. Abilita HTTP/2 su Apache

Nel 2015 è stato rilasciato HTTP/2, una nuova versione del protocollo HTTP che cerca di affrontare o risolvere molteplici problemi che i creatori di HTTP/1.1 non avevano previsto.

Sebbene HTTP/1.1 sia ancora ampiamente utilizzato, è associato a problemi di prestazioni associati all'uso di più connessioni TCP per elaborare più richieste dal browser, il che porta a un elevato sovraccarico di risorse sul lato client, portando a prestazioni di rete degradate.

Man mano che le applicazioni crescevano in complessità e funzionalità, è stato creato HTTP/2 per risolvere i difetti di HTTP/1.1 che includono intestazioni HTTP lunghe, velocità di caricamento lente delle pagine Web e prestazioni generali degradazione.

HTTP/2 offre 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 durante la trasmissione di più flussi di dati.

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

  • Come abilitare HTTP/2 in Apache su Ubuntu

7. Limitare l'accesso alle directory sensibili in Apache

Un'altra misura di sicurezza che potresti adottare è limitare l'accesso alle directory che potrebbero contenere informazioni sensibili come dati utente, registri 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 precedente Richiedi tutti negati nega l'accesso a chiunque tenti di accedere ai file in /sensitive_directory.

Salvare le modifiche ed uscire dal file. Quindi riavvia Apache affinché le modifiche diventino effettive.

8. Disabilitare 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 server Web, come la versione e il sistema operativo su cui è in esecuzione. Esporre dettagli cruciali sul tuo server web ad attori malintenzionati aumenterà significativamente le possibilità di un attacco.

Per impedire 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

9. Imposta la direttiva "ServerTokens" su "Prod"

La direttiva "ServerTokens" controlla quali informazioni invia il server, inclusa la versione di Apache (versione principale e secondaria), il sistema operativo e il tipo di server Web in esecuzione.

La minima quantità di informazioni che vorresti esporre al pubblico è che il server web è Apache. Qualsiasi altra cosa esporrebbe solo il tuo server a potenziali attacchi. Pertanto, si consiglia di impostare la direttiva "ServerTokens" nel file di configurazione di Apache su "prod".

ServerTokens Off

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

10. Proteggi Apache con Fail2ban

Fail2ban è un'applicazione di prevenzione delle intrusioni open source che protegge i sistemi Linux da minacce esterne, inclusi attacchi DoS e forza bruta. Funziona monitorando costantemente i registri di sistema per rilevare attività dannose e vietando gli host che corrispondono a modelli che imitano il comportamento di attacco.

Fail2ban può essere configurato per proteggere Apache dagli attacchi DoS monitorando costantemente i registri di Apache per tentativi di accesso non riusciti e vietando temporaneamente gli IP offensivi.

Scopri come installare Fail2ban su Linux utilizzando:

  • Come utilizzare Fail2ban per proteggere il tuo server Linux

11. Disabilita i moduli non necessari

I moduli Apache sono semplicemente programmi caricati per estendere le funzionalità del server web. Le funzioni estese dai moduli includono l'autenticazione di base, la memorizzazione nella cache dei contenuti, la crittografia, la sicurezza, ecc.

Si consiglia sempre di disabilitare tutti quei moduli che al momento non sono 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

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

apache2ctl -M | grep rewrite

Per disabilitare il modulo, eseguire il comando:

sudo a2dismod rewrite 

12. Utilizza i moduli mod_security e mod_evasive per proteggere Apache

Puoi abilitare i moduli mod_security e mod_evasive per proteggere Apache dagli attacchi di forza bruta o DDoS.

  • Il modulo mod_security agisce come un firewall per applicazioni web (WAF) e blocca il traffico sospetto e indesiderato verso il tuo sito.
  • Il modulo mod_evasive protegge il tuo server dalla forza bruta e dagli attacchi Denial of Service (DoS).

Maggiori informazioni su come proteggere Apache utilizzando i moduli mod_security e mod_evasive.

13. Servizi indesiderati limitati in Apache

Per proteggere ulteriormente Apache, valuta la possibilità di disattivare alcuni servizi come i collegamenti simbolici e l'esecuzione CGI se non attualmente richiesti. Per impostazione predefinita, Apache segue i collegamenti simbolici, possiamo disattivare questa funzionalità così come la funzionalità -Include e CGI in una riga.

Per fare ciò, aggiungi la riga '-ExecCGI -FollowSymLinks -Includes' per la direttiva "Opzioni" nella sezione "Directory".

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

Ciò può essere ottenuto anche a livello di directory. Ad esempio, qui stiamo disattivando le esecuzioni di file Include ed Cgi per la directory "/var/www/html/miodominio1".

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

Salva le modifiche e riavvia Apache.

14. Limita la dimensione del caricamento dei file in Apache

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

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

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

Salva le modifiche e ricorda di riavviare Apache.

Puoi impostarlo nel contesto di server, per directory, per file o per posizione. La direttiva scongiura comportamenti anomali delle richieste del client che a volte possono essere una forma di attacco Denial of Service (DoS).

15. Abilita la registrazione in Apache

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

Per abilitare la registrazione, devi includere il modulo mod_log_config, che fornisce due direttive di registrazione principali.

  • ErrorLog: specifica il percorso del file di registro degli errori.
  • CustomLog: crea e formatta un file di registro.

È possibile utilizzare questi attributi in un file host virtuale nella sezione host virtuale per abilitare la registrazione.

<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 di sicurezza comune. In questo modo è possibile isolare il processo del server Web dagli altri processi di sistema e ridurre al minimo i danni potenziali nel caso in cui il server Web venga compromesso.

Innanzitutto, ti consigliamo di creare un nuovo utente e gruppo specifico 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

Poiché stai modificando l'utente e il gruppo eseguito da Apache, potresti dover aggiornare la proprietà delle directory e dei file Web per garantire che Apache possa ancora 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. Proteggi gli attacchi DDOS e il rafforzamento

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 consente di specificare la durata di attesa del server per il completamento di determinati eventi prima di restituire un errore. Il valore predefinito è 300 secondi. Per i siti sensibili agli attacchi DDoS è consigliabile mantenere basso questo valore. Tuttavia, l'impostazione appropriata dipende in gran parte 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 al numero di connessioni che possono essere servite simultaneamente. Eventuali nuove connessioni oltre questo limite verranno messe in coda. È disponibile sia in Prefork che in Worker MPM. Il valore predefinito è 256.
  • KeepAliveTimeout – Questa direttiva specifica la durata di attesa del server per una richiesta successiva prima di chiudere la connessione. Il valore predefinito è 5 secondi.
  • LimitRequestFields: questa direttiva imposta un limite al numero di campi di intestazione della richiesta HTTP accettati dai client. Il valore predefinito è 100. Se si verificano attacchi DDoS a causa di un numero eccessivo di intestazioni di richiesta HTTP, si consiglia di ridurre questo valore.
  • LimitRequestFieldSize: questa direttiva imposta un limite di dimensione per l'intestazione della richiesta HTTP.

18. Eseguire scansioni regolari delle vulnerabilità

Un altro modo per salvaguardare il tuo server web è eseguire regolarmente test di scansione delle vulnerabilità. Ciò aiuta a identificare potenziali lacune nella sicurezza che potrebbero essere sfruttate dagli hacker per ottenere l'accesso a file sensibili o iniettare malware.

Gli strumenti di scansione delle vulnerabilità aiutano inoltre a evidenziare impostazioni di configurazione non sicure e aiutano a verificare la conformità. Gli strumenti più diffusi per la scansione delle vulnerabilità includono Acutenix, Nessus, Nexpose, Sucuri e molti altri.

Conclusione

Questi sono alcuni dei suggerimenti per il rafforzamento di Apache che puoi implementare sul tuo server Web per fornire un ulteriore livello di protezione e tenere a bada le intrusioni.