Direttive di Apache e sicurezza

Analizziamo le direttive che possono essere usate nella configurazione di Apache per regolare i cordoni della sicurezza e rendere più tranquilla l'esistenza di un sysadmin.
Come sempre, più si stringe una configurazione per aumentare la sicurezza di un sistema, più si limitano le sue funzionalità e flessibilità, per cui ogni indicazione va correlata alle proprie esigenze.

Cataloghiamo le note riportate secondo vari criteri, alcuni casi ne possono prevedere più di una contemporaneamente, in certe situazioni, le indicazioni che vengono qui date DEVONO essere disattese per garantire il servizio previsto:
DEFAULT Indica settaggi presenti nella configurazione di default di Apache, distribuita con i sorgenti.
WEBMASTER Indica configurazioni che si prestano ad aumentare la sicurezza su server su cui diversi utenti non trusted possono uploadare pagine (clienti di un ISP, freepages di utenti privati ecc.)
NAVIGATORI Si riferisce a configurazioni che impediscono a normali navigatori il potenziale uso improprio dei servizi del web
RISERVATEZZA Si riferisce a settaggi che aumentano la riservatezza dei dati presenti sul server Web
DENIAL OF SERVICE Indica procedure che possono aiutare a difendersi da Denial Of Service Attacks.

Impedire il controllo degli accessi per directory - WEBMASTER - DEFAULT
Tramite l'uso dei file .htaccess è possibile definire direttive di configurazione specifiche in ogni singola directory, direttamente da parte di chi ci uploada file.
Su un server su cui possono uploadare documenti anche webmaster non noti, è opportuno limitare il più possibile questa funzionalità con una radicale disabilitazione dell'uso degli .htaccess su ogni directory:
<Directory />
    AllowOverride None
</Directory>

E' poi possibile "aprire" per directory e funzionalità selezionate, la possibilità di fare l'override della conf generale tramite i file .htaccess locali.
Le diverse opzioni di AllowOverride controllano quali direttive possono essere definite nei file .htaccess: All, AuthConfig, FileInfo, Indexes, Limit, Options, None.

Impedire la lettura via Web a file .htaccess - NAVIGATORI - DEFAULT - RISERVATEZZA
Nella configurazione di Apache di default è presente un provvidenziale:
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

che impedisce la lettura via Web di file che iniziano con .ht e di conseguenza evita che un utente via Web possa leggere le informazioni delicate che possono essere presenti nei file .htaccess.
Ovviamente se si decide di cambiare il nome del file che controlla gli accessi sulle singole directory (direttiva di default: AccessFileName .htaccess) si dovrà adattare anche questa configurazione.

Impedire la lettura via Web a file di configurazione - NAVIGATORI - RISERVATEZZA
Analogamente al caso precedente può essere utile impedire l'accesso diretto a file che possono contenere parametri di configurazione (che finiscono con inc o conf):
<FilesMatch \.(inc|conf)>
    Order Allow,Deny
    Deny from all
</FilesMatch>


Disattivare l'uso di .cgi e .shtml al di fuori di directory predefinite  - WEBMASTER - DEFAULT
Tramite la direttiva AddHandler si può dire al server web di trattare file con determinate estensioni con un apposito handler (per esempio un modulo per gestire pagine dinamiche). Di default sulla conf di Apache sono disattivati gli handler per script .cgi e .shtml:
#AddHandler cgi-script .cgi
#AddType text/html .shtml
#AddHandler server-parsed .shtml

per cui se si vogliono usare dei Server Side Includes o degli script CGI al di fuori della directory predefinita con la direttiva ScriptAlias /cgi-bin/ "@@ServerRoot@@/cgi-bin/", queste righe vanno scommentate.

Disabilitare l'accesso pubblico a server-info e server-status - NAVIGATORI - DEFAULT - RISERVATEZZA
Apache prevede due location speciali che possono essere utilizzate per visualizzare informazioni utili al sysadmin sullo stato del server web e la sua configurazione. Di default questo sono disabilitate, ma possono essere abilitate limitando gli IP da cui possono essere visualizzate. In genere è consigliabile non renderle visibili pubblicamente (in particolare server-info, che di fatto espone la configurazione completa di Apache).
#<Location /server-status>
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from .your-domain.com
#</Location>

#<Location /server-info>
#    SetHandler server-info
#    Order deny,allow
#    Deny from all
#    Allow from .your-domain.com
#</Location>

Se si vogliono visualizzare server-status e server-info, scommentare queste righe e specificare i domini o gli IP da cui è permesso visualizzarli.

Disabilitare il file listing in directory senza index.html (o analoghi nomi di file predefiniti) - NAVIGATORI - RISERVATEZZA
Con la direttiva DirectoryIndex si definiscono quali file Apache automaticamente cerca, e visualizza, quando il client richiede un URI che contiene solo il nome di una directory, senza specificare il nome della pagina web. Se il client accede ad una directory che non contiene uno di questi index predefiniti, Apache visualizza direttamente tutti i file contenuti nella directory stessa, esponendo infomazioni potenzialmente riservate.
Se si vuole disabilitare il listing di tutti i file presenti in una directory, quando non è presente il file di indice, si usa la direttiva Options -Indexes. Es:
<Location />
Options -Indexes
</Location />

Per disabilitare il directory listing si può anche direttamente rimuovere il caricamento (o la compilazione) del modulo mod_autoindex, se invece si vuole abilitarlo, ma al contempo escludere dal listing dei file potenzialmente sensibili si può usare una direttiva come:
IndexIgnore .??* *.bak *.swp *# HEADER* README* RCS

Limitare le richieste del client - NAVIGATORI - DENIAL OF SERVICE
Di default Apache permette al client di eseguire richieste particolarmente esose che possono essere impropriamente utilizzate per un Denial Of Service attack. Esistono alcune direttive che limitano alcune caratteristiche delle richieste che il client può eseguire:
LimitRequestBody 10240 Limita a meno di 10 Kb le dimensioni del body di una richiesta HTTP (PUT o POST). Di default questo valore è 0 (infinito). Si può specificare un valore in byte diverso, avendo cura di non interferire con il normale funzionamento di un sito.
LimitRequestFields 30 Imposta a 30 il numero massimo di header HTTP che il client può inserire nella sua richiesta. Il valore di default è 100, in genere è difficile avere richieste che abbiamo più di 20-30 header.
LimitRequestFieldSize 500 Imposta a 500 byte la dimensione massima di ogni singolo header HTTP in una richiesta. Il valore di default è 8190.
LimitRequestLine 500 Imposta a 500 byte le dimensioni della richiesta HTTP (metodo, URL e protocollo), limitando di fatto le dimensioni dell'URL stesso che un client può chiedere (attenzione a dimensionarlo secondo i nomi e i parametri passati negli URL del proprio sito). Valore di default 8190.

Disabilitare l'uso di symlink - WEBMASTER
Di default Apache se trova in una directory di un suo sito Web un link simbolico all'infuori della directory stessa, prova a seguirlo e fornire il file linkato.
Questo comportamento può essere usato per far vedere via web dati che non dovrebbero essere visibili (immaginare un webmaster che digita il seguente comando nella sua home: ln -s /etc/passwd passwd.html.
Per impedirlo si deve definire, nella conf generale o in un specifico contenitore:
Options -FollowSymLinks.
Esiste anche la possibilità di configurare Apache per seguire solo i symlink a file posseduti dall'utente, permettendo il symlinking all'interno del proprio sito web (e appesantendo non poco il server, per la quantità di controlli aggiuntivi che deve fare per ogni file servito):
Options -FollowSymLinks +SymLinksIfOwnerMatch.

Privacy Policy