Configurazione e sicurezza in Apache [per pinguini esordienti]

Abbiamo già visto come installare un Server LAMP al momento dell’installazione di Ubuntu. Vediamo adesso come configurarlo correttamente ed installare i nostri virtual host.

Prima di cominciare chiariamo che cosa sono i virtual host. Un webserver si suppone che possa offrire diversi siti web, ciascuno collegato ad uno specifico nome di dominio. Se abbiamo un singolo web server si potrà supporre che diversi nomi di dominio punteranno alla medesima macchina. Immaginiamo di avere il seguente server

ubuntu (192.168.56.1)

Il nostro server si trova all’indirizzo IP 192.168.56.1 (in questo caso di una LAN, ma per i nostri scopi questo è poco importante). Poi abbiamo tre domini:

miosito.com → 192.168.56.1

torregatti.com → 192.168.56.1

miosito.it → 192.168.56.1

Nel nostro esempio supponiamo che tutti e tre i domini puntino alla medesima macchina, ovvero chiedano alla medesima macchina di restituire dei risultati web per le loro richieste; supponiamo anche che il dominio miosito.commiosito.it facciano capo allo stesso hosting, ovvero a quello che comunemente si chiama lo stesso sito, mentre torregatti.com fa capo ad un altro sito.

Detto questo vediamo come configurare il nostro server Apache.

Installare Apache se non lo abbiamo ancora fatto

Se ancora non abbiamo installato il server LAMP sarà sufficiente eseguire i seguenti comandi.

Per installare apache:

Per installare il server MySQL (qui ci verranno richiesti nome utente e password per l’utente root del database, che ricordiamoci non è l’utente root del server)

Installiamo il PHP. Ricordiamoci che il PHP ha diverse versioni, quella ancora più utilizzata, è la versione 5, anche se l’ultima versione disponibile è la 7.

A questo punto riavviamo il server Apache e verifichiamo che tutto funzioni aprendo il nostro localhost.

Configurazione Apache

Anzitutto prendiamo confidenza con la configurazione di apache. Digitiamo da terminale:

Verranno visualizzati i contenuti della cartella di configurazione di apache, che dovrebbero essere qualcosa di simile a questo:

Adesso apriamo il file apache2.conf:

Questo è il file principale di Apache, per ora lo possiamo scorrere un po’ per prendere confidenza con alcuni elementi chiave. Faccio notare i seguenti parametri:

  1. Timeout 300 – è il tempo predefinito per cui il server manda in timeout richieste che non riesce a gestire
  2. IncludeOptional mods-enabled/*.load – include nella configurazione presente tutti i file *.load dentro la cartella mods-enabled
  3. IncludeOptional mods-enabled/*.conf – include nella configurazione presente tutti i file *.conf dentro la cartella mods-enabled
  4. Include ports.conf – include il file chiamato ports.conf nel quale sono impostate le configurazioni predefinite delle porte
  5. AccessFileName .htaccess.htaccess è il nome del file delle configurazioni locali per ogni virtual host, il punto iniziale sta a significare che è un file nascosto di linux (i file nascosti, come succede anche sul Mac, sono preceduti da un punto)
  6. IncludeOptional conf-enabled/*.conf – include nella configurazione presente tutti i file *.conf della cartella conf-enabled (idealmente qui si trovano tutte le configurazioni attive)
  7. IncludeOptional sites-enabled/*.conf – include nella configurazione presente tutti i file *.conf della cartella sites-enabled

Facciamo caso anche ad alcune configurazioni di base:

Questo significa che per qualunque posizione tutti i file che cominciano con .ht sono proibiti a qualunque richiesta (richiesta da webserver).

Qui abbiamo la configurazione base del server. Notiamo che le cartelle /usr/share e /var/www sono accessibili a tutti. Sono preclusi tutti gli Override, questo significa che di predefinito non è possibile utilizzare le configurazioni dai file .htaccess per modificare la configurazione dei virtual host. Su questo torneremo tra poco. Inoltre notiamo che le opzioni attive su /var/www sono Indexes e FollowSymLinks.

Prima di proseguire facciamo un piccolo test, anche per prendere confidenza con il nostro server apache (ricordiamoci che il server si trova su 192.168.56.1). Da terminale digitiamo:

In questo modo creiamo una cartella test dentro la cartella predefinita del nostro server apache e le assegniamo www-data come proprietario (e gruppo).

Adesso apriamo dal nostro browser l’indirizzo http://192.168.56.1/test/

Dovrebbe aprirsi qualcosa di simile a questo:

Quello che viene mostrato non ci fa molto piacere. Anzitutto è mostrato il dettaglio del contenuto della cartella test, in secondo luogo sono mostrati i dettagli del nostro server.

Sistemiamo subito entrambi i problemi.

Modifichiamo la configurazione predefinita di /var/www rimuovendo la voce Indexes

Riavviamo apache:

Aggiornando l’indirizzo di cui sopra otterremo questo:

Adesso sistemiamo l’intestazione del nostro server (Apache/2.4.18 (Ubuntu) Server at 192.168.56.1 Port 80). Questo perché in generale è una buona idea non mostrare la versione del proprio software, per rendere più difficile la vita a chi volesse approfittare di eventuali falle note per la nostra versione.

Anzitutto dobbiamo abilitare mod_headers su apache, per farlo digitiamo:

Dopodiché procediamo alla modifica del nostro file di configurazione della sicurezza:

Modifichiamo il file sistemando i seguenti attributi (si trovano su righe separate, se non ci sono basta aggiungerli in fondo):

Fatto questo riavviamo apache:

E torniamo a verificare il solito indirizzo di prima che apparirà come:

Come è possibile vedere adesso le intestazioni del server sono sparite (abbiamo anche pulito i header HTTP con cui risponde il server).

Aggiungiamo il nostro primo Virtual Host

Creiamo anzitutto una cartella sotto /var/www nella quale metteremo il nostro sito.

Il nome della cartella è a piacere, ho messo miosito solo per praticità visto che sarà anche il nome del dominio.

Assegniamo l’utente corretto alla cartella:

Adesso copiamo le configurazioni predefinite su quelle nuove per il nostro sito.

Notiamo che non c’è niente di speciale nel nome miosito.conf. E’ solo l’ennesimo file di configurazione che sarà incluso in quello principale di apache, il nome è del tutto indifferente ai fini del nostro dominio.

Adesso modifichiamo il file di configurazione appena creato (quello che scriveremo dentro lo trasformerà nel file di configurazione del sito che vogliamo registrare):

Dopo le nostre modifiche sarà sufficiente che contenga i seguenti dati (ricordiamoci che anche in questo caso il # sta a rappresentare il commento alle righe).

Adesso dobbiamo abilitare il sito creato, digitando (qui conta il nome del file che abbiamo dato prima):

Fatto tutto questo riavviamo apache.

A questo punto possiamo testare la nostra configurazione; nel mio caso, non disponendo di un server DNS e non avendo usato un dominio registrato, modificherò le impostazioni del file hosts del mio computer affinché il dominio miosito.com punti al server all’indirizzo 192.168.56.1.

Per farlo apro come amministratore il blocco note su Windows e vado a modificare il file in C:\Windows\System32\drivers\etc chiamato hosts. In fondo al file inserisco:

Salviamo il file hosts (ricordandoci di rimetterlo a posto dopo) e andiamo sul browser all’indirizzo http://miosito.com

Dovremmo vedere qualcosa come:

Per verificare che abbiamo fatto tutto bene modifichiamo il contenuto della cartella /var/www/miosito in modo che ci sia solo un file index.php con dentro il seguente contenuto:

Per creare il file index.php è sufficiente digitare:

Se abbiamo fatto tutto bene aggiornando il suddetto indirizzo dovremmo vedere:

Adesso torniamo a modificare il nostro file hosts (questo ricordo lo facciamo solo per le nostre prove interne, non è assolutamente necessario durante la vera configurazione di un dominio, che è sufficiente che punti all’IP della nostra macchina su cui gira apache)

Aggiungendo le ultime tre righe alla prima già esistente, configuriamo l’accesso al nostro server anche per i sottodomini www ed il dominio miosito.it.

A questo punto verifichiamo dove punta http://www.miosito.com

Dovremmo vedere qualcosa di simile, con la risposta della pagina predefinita che si trova in /var/www/html. Quello che adesso vogliamo è che il server risponda con il sito nella cartella /var/www/miosito. Quindi torniamo alla configurazione del nostro sito digitando:

Modifichiamo il file aggiungendo la seguente riga:

Con questo definiamo gli alias del dominio principale. Riavviamo apache.

A questo punto possiamo verificare che tutte e quattro i domini di prima puntano alla medesima cartella.

Qualora volessimo disabilitare miosito dalla nostra configurazione di apache sarà sufficiente digitare:

Per configurare il sito della torregatti.com ripetiamo la procedura precedente, creando una nuova cartella e configurando un nuovo file per il virtual host desiderato.

One thought on “Configurazione e sicurezza in Apache [per pinguini esordienti]

Rispondi

This site uses Akismet to reduce spam. Learn how your comment data is processed.