GNU/Linux >> Linux Esercitazione >  >> Linux

10 suggerimenti per proteggere il tuo server Web Apache su UNIX / Linux

Se sei un amministratore di sistema, dovresti proteggere il tuo server web Apache seguendo i 10 suggerimenti menzionati in questo articolo.

1. Disattiva i moduli non necessari

Se hai intenzione di installare Apache dal sorgente, dovresti disabilitare i seguenti moduli. Se lo fai ./configure –help, vedrai tutti i moduli disponibili che puoi disabilitare/abilitare.

  • userdir – Mappatura delle richieste a directory specifiche dell'utente. cioè ~nome utente nell'URL verrà tradotto in una directory nel server
  • autoindex – Visualizza l'elenco delle directory quando non è presente alcun file index.html
  • stato:mostra le statistiche del server
  • env – Cancellazione/impostazione di ENV vars
  • setenvif – Inserimento di variabili ENV sulle intestazioni
  • cgi – Script CGI
  • azioni:attivazione dell'azione sulle richieste
  • negoziazione – Negoziazione dei contenuti
  • alias – Mappatura delle richieste a diverse parti del filesystem
  • include – Include lato server
  • filtro – Filtraggio intelligente delle richieste
  • versione:gestione delle informazioni sulla versione nei file di configurazione utilizzando IfVersion
  • così com'è – tipi di file così com'è

Disattiva tutti i moduli precedenti come mostrato di seguito quando esegui ./configure

./configure \
--enable-ssl \
--enable-so \
--disable-userdir \
--disable-autoindex \
--disable-status \
--disable-env \
--disable-setenvif \
--disable-cgi \
--disable-actions \
--disable-negotiation \
--disable-alias \
--disable-include \
--disable-filter \
--disable-version \
--disable-asis

Se abiliti ssl e disabiliti mod_setenv, riceverai il seguente errore.

  • Errore :Errore di sintassi alla riga 223 di /usr/local/apache2/conf/extra/httpd-ssl.conf:comando 'BrowserMatch' non valido, forse errato o definito da un modulo non incluso nella configurazione del server
  • Soluzione :Se usi ssl, non disabilitare setenvif. Oppure, commenta BrowserMatch nel tuo httpd-ssl.conf, se disabiliti mod_setenvif.

Dopo l'installazione, quando esegui httpd -l , vedrai tutti i moduli installati.

# /usr/local/apache2/bin/httpd -l
Compiled in modules:
  core.c
  mod_authn_file.c
  mod_authn_default.c
  mod_authz_host.c
  mod_authz_groupfile.c
  mod_authz_user.c
  mod_authz_default.c
  mod_auth_basic.c
  mod_log_config.c
  mod_ssl.c
  prefork.c
  http_core.c
  mod_mime.c
  mod_dir.c
  mod_so.c

In questo esempio, abbiamo installato i seguenti moduli Apache.

  • core.c – Modulo principale Apache
  • mod_auth* – Per vari moduli di autenticazione
  • mod_log_config.c – Registra la richiesta del client. fornisce ulteriori flessibilità di registro.
  • mod_ssl.c – Per SSL
  • prefork.c – Per il modulo MPM (Multi-Processing Module)
  • httpd_core.c – Modulo principale Apache
  • mod_mime.c – Per impostare i tipi MIME del documento
  • mod_dir.c – Per il reindirizzamento della barra finale sui percorsi delle directory. se specifichi url/test/, va a url/test/index.html
  • mod_so.c – Per caricare i moduli durante l'avvio o il riavvio

2. Esegui Apache come utente e gruppo separati

Per impostazione predefinita, apache potrebbe essere eseguito come nessuno o daemon. È bene eseguire Apache nel proprio account non privilegiato. Ad esempio:apache.

Crea gruppo e utente Apache.

groupadd apache
useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache

Modifica httpd.conf e imposta Utente e Gruppo in modo appropriato.

# vi httpd.conf
User apache
Group apache

Dopodiché, se riavvii apache e fai ps -ef, vedrai che apache è in esecuzione come "apache" (tranne il primo processo httpd, che verrà sempre eseguito come root).

# ps -ef | grep -i http | awk '{print $1}'
root
apache
apache
apache
apache
apache

3. Limita l'accesso alla directory principale (usa Consenti e Nega)

Proteggi la directory principale impostando quanto segue in httpd.conf

<Directory />
    Options None
    Order deny,allow
    Deny from all
</Directory>

In quanto sopra:

  • Opzioni Nessuna – Impostalo su Nessuno, che non abiliterà alcuna funzionalità aggiuntiva opzionale.
  • Ordine nega,consenti – Questo è l'ordine in cui devono essere elaborate le direttive "Nega" e "Consenti". Questo elabora prima il "nega" e poi "consenti".
  • Nega da tutti – Questo nega la richiesta di tutti alla directory principale. Non esiste una direttiva Consenti per la directory principale. Quindi nessuno può accedervi.

4. Imposta le autorizzazioni appropriate per conf e bin directory

bin e conf devono essere visualizzate solo da utenti autorizzati. È una buona idea creare un gruppo e aggiungere a questo gruppo tutti gli utenti a cui è consentito visualizzare/modificare i file di configurazione di Apache.

Chiamiamo questo gruppo:apacheadmin

Crea il gruppo.

groupadd apacheadmin

Consenti l'accesso alla directory bin per questo gruppo.

chown -R root:apacheadmin /usr/local/apache2/bin
chmod -R 770 /usr/local/apache2/bin

Consenti l'accesso alla directory conf per questo gruppo.

chown -R root:apacheadmin /usr/local/apache2/conf
chmod -R 770 /usr/local/apache2/conf

Aggiungi i membri appropriati a questo gruppo. In questo esempio, sia ramesh che john fanno parte di apacheadmin

# vi /etc/group
apacheadmin:x:1121:ramesh,john

5. Disabilita la navigazione nella directory

Se non lo fai, gli utenti saranno in grado di vedere tutti i file (e le directory) nella tua radice (o qualsiasi sottodirectory).

Ad esempio, se vanno su http://{tuo-ip}/images/ e se non hai un index.html sotto le immagini, vedranno tutti i file di immagine (e le sottodirectory) elencati in il browser (proprio come un output ls -1). Da qui, possono fare clic sul singolo file immagine per visualizzarlo o fare clic su una sottodirectory per visualizzarne il contenuto.

Per disabilitare l'esplorazione delle directory, puoi impostare il valore della Direttiva Opzioni su "Nessuno" o "-Indici" . R – davanti al nome dell'opzione lo rimuoverà dall'elenco corrente di opzioni applicate per quella directory.

Gli indici visualizzeranno un elenco di file e sottodirectory disponibili all'interno di una directory nel browser (solo quando non è presente index.html all'interno di quella cartella). Quindi, gli indici non dovrebbero essere consentiti.

<Directory />
  Options None
  Order allow,deny
  Allow from all
</Directory>

(or)

<Directory />
  Options -Indexes
  Order allow,deny
  Allow from all
</Directory>

6. Non consentire .htaccess

Usando il file .htaccess all'interno di una specifica sottodirectory sotto htdocs (o ovunque all'esterno), gli utenti possono sovrascrivere le direttive apache predefinite. In determinate situazioni, questo non va bene e dovrebbe essere evitato. Dovresti disabilitare questa funzione.

Non dovresti consentire agli utenti di utilizzare il file .htaccess e di sovrascrivere le direttive apache. A tale scopo, imposta "AllowOverride None ” nella directory principale.

<Directory />
  Options None
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

7. Disattiva altre opzioni

Di seguito sono riportati i valori disponibili per la direttiva Opzioni:

  • Opzioni tutte – Tutte le opzioni sono abilitate (tranne MultiViews). Se non specifichi la direttiva Options, questo è il valore predefinito.
  • Opzioni ExecCGI – Esegui script CGI (usa mod_cgi)
  • Opzioni FollowSymLinks – Se hai collegamenti simbolici in questa directory, verrà seguito.
  • Le opzioni includono – Consenti inclusioni lato server (usa mod_include)
  • Le opzioni includonoNOEXEC – Consenti inclusioni lato server senza la possibilità di eseguire un comando o cgi.
  • Indici di opzioni – Disattiva l'elenco delle directory
  • Opzioni MultiView – Consenti visualizzazioni multiple negoziate di contenuti (usa mod_negotiation)
  • Opzioni SymLinksIfOwnerMatch – Simile a FollowSymLinks. Ma ciò seguirà solo quando il proprietario è lo stesso tra il collegamento e la directory originale a cui è collegato.

Non specificare mai "Opzioni tutto". Specificare sempre una (o più) delle opzioni sopra menzionate. Puoi combinare più opzioni in una riga come mostrato di seguito.

Options Includes FollowSymLinks

I + e – davanti a un valore di opzione sono utili quando hai nidificato direcotires e desideri sovrascrivere un'opzione dalla direttiva Directory principale.

In questo esempio, per la directory /site, sono presenti sia le inclusioni che gli indici:

<Directory /site>
  Options Includes Indexes
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

Per la directory /site/en, se hai bisogno solo degli indici da /site (e non di include) e se vuoi seguire i link simbolici solo a questa directory, procedi come segue.

<Directory /site/en>
  Options -Includes +FollowSymLink
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>
  • /site avrà Include e Indici
  • /site/en avrà Indici e FollowSymLink

8. Rimuovere i moduli DSO indesiderati

Se hai caricato in apache moduli di oggetti condivisi dinamici, questi saranno presenti all'interno di httpd.conf sotto la direttiva "LoadModule".

Tieni presente che i moduli Apache compilati staticamente non verranno elencati come direttiva "LoadModule".

Commenta qualsiasi "LoadModules" indesiderato nel httpd.conf

grep LoadModule /usr/local/apache2/conf/httpd.conf

9. Limita l'accesso a una rete (o indirizzo IP) specifico

Se desideri che il tuo sito venga visualizzato solo da uno specifico indirizzo IP o rete, procedi come segue:

Per consentire a una rete specifica di accedere al tuo sito, fornisci l'indirizzo di rete nella direttiva Consenti.

<Directory /site>
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
  Allow from 10.10.0.0/24
</Directory>

Per consentire a un indirizzo IP specifico di accedere al tuo sito, fornisci l'indirizzo IP nella direttiva Consenti.

<Directory /site>
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
  Allow from 10.10.1.21
</Directory>

10. Non visualizzare o inviare la versione di Apache (Set ServerTokens)

Per impostazione predefinita, l'intestazione della risposta HTTP del server conterrà la versione di Apache e php. Qualcosa di simile al seguente. Questo è dannoso, poiché non vogliamo che un utente malintenzionato venga a conoscenza del numero di versione specifico.

Server: Apache/2.2.17 (Unix) PHP/5.3.5

Per evitare ciò, impostare ServerTokens su Prod in httpd.conf. Verrà visualizzato "Server:Apache" senza alcuna informazione sulla versione.

# vi httpd.conf
ServerTokens Prod

Di seguito sono riportati i possibili valori di ServerTokens:

  • Prodotto ServerTokens visualizza "Server:Apache"
  • ServerToken principali visualizza "Server:Apache/2"
  • ServerToken minori visualizza "Server:Apache/2.2"
  • Token server minimo visualizza "Server:Apache/2.2.17"
  • OS ServerTokens visualizza "Server:Apache/2.2.17 (Unix)"
  • ServerToken completi visualizza "Server:Apache/2.2.17 (Unix) PHP/5.3.5" (se non specifichi alcun valore ServerTokens, questo è il valore predefinito)

Oltre a tutti i 10 suggerimenti di cui sopra, assicurati di proteggere il tuo sistema operativo UNIX / Linux. Non ha senso proteggere il tuo apache, se il tuo sistema operativo non è sicuro. Inoltre, mantieni sempre aggiornata la tua versione di apache. L'ultima versione di apache contiene correzioni per tutti i problemi di sicurezza noti. Assicurati di rivedere frequentemente i file di registro di Apache.

Lettura aggiuntiva su apache

  • Come installare Apache 2 con SSL su Linux (con mod_ssl, openssl)
  • 9 suggerimenti per utilizzare Apachectl e Httpd come un utente esperto
  • XAMPP:installazione semplice di Apache, MySQL, PHP, Perl
  • Come installare o aggiornare lo stack LAMP utilizzando Yum

Linux
  1. Trova i 10 principali indirizzi IP che accedono al tuo server Web Apache

  2. Installa il server web Apache su Linux Mint 13 / Linux Mint 14

  3. Migrazione da Unix a Linux

  4. 6 Strumenti open source indispensabili per proteggere il tuo server Linux

  5. LAMP vs. LEMP:suggerimenti su come scegliere Apache o nginx per il tuo server web

Come installare il server web Apache su Linux

Come ospitare un sito Web su un server Web Apache

Come installare Apache Web Server su Alpine Linux

Proteggi il tuo server Web Apache Best Practice

10 suggerimenti utili per il rafforzamento SSH per proteggere il tuo server Linux

Protezione del tuo server Web Apache con Mod Security