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.com e miosito.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:
1 |
sudo apt-get install apache2 |
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)
1 |
sudo apt-get install mysql-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.
1 2 3 4 |
sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt php5-mysql sudo mysql_install_db sudo mysql_secure_installation sudo apt-get install php5-cli |
A questo punto riavviamo il server Apache e verifichiamo che tutto funzioni aprendo il nostro localhost.
1 |
sudo service apache2 restart |
Configurazione Apache
Anzitutto prendiamo confidenza con la configurazione di apache. Digitiamo da terminale:
1 |
ls /etc/apache2/ |
Verranno visualizzati i contenuti della cartella di configurazione di apache, che dovrebbero essere qualcosa di simile a questo:
Adesso apriamo il file apache2.conf:
1 |
sudo nano /etc/apache2/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:
- Timeout 300 – è il tempo predefinito per cui il server manda in timeout richieste che non riesce a gestire
- IncludeOptional mods-enabled/*.load – include nella configurazione presente tutti i file *.load dentro la cartella mods-enabled
- IncludeOptional mods-enabled/*.conf – include nella configurazione presente tutti i file *.conf dentro la cartella mods-enabled
- Include ports.conf – include il file chiamato ports.conf nel quale sono impostate le configurazioni predefinite delle porte
- 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)
- IncludeOptional conf-enabled/*.conf – include nella configurazione presente tutti i file *.conf della cartella conf-enabled (idealmente qui si trovano tutte le configurazioni attive)
- IncludeOptional sites-enabled/*.conf – include nella configurazione presente tutti i file *.conf della cartella sites-enabled
Facciamo caso anche ad alcune configurazioni di base:
1 2 3 |
<FilesMatch "^\.ht"> Require all denied </FilesMatch> |
Questo significa che per qualunque posizione tutti i file che cominciano con .ht sono proibiti a qualunque richiesta (richiesta da webserver).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory> <Directory /usr/share> AllowOverride None Require all granted </Directory> <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> |
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:
1 2 |
sudo mkdir /var/www/html/test sudo chown www-data:www-data /var/www/html/test/ |
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.
1 |
sudo nano /etc/apache2/apache2.conf |
Modifichiamo la configurazione predefinita di /var/www rimuovendo la voce Indexes
1 2 3 4 5 |
<Directory /var/www/> Options FollowSymLinks AllowOverride None Require all granted </Directory> |
Riavviamo apache:
1 |
sudo service apache2 restart |
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:
1 |
sudo a2enmod headers |
Dopodiché procediamo alla modifica del nostro file di configurazione della sicurezza:
1 |
sudo nano /etc/apache2/conf-available/security.conf |
Modifichiamo il file sistemando i seguenti attributi (si trovano su righe separate, se non ci sono basta aggiungerli in fondo):
1 2 3 4 5 6 |
ServerTokens Prod ServerSignature Off TraceEnable Off Header unset ETag Header always unset X-Powered-By FileETag None |
Fatto questo riavviamo apache:
1 |
sudo service apache2 restart |
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.
1 |
mkdir /var/www/miosito |
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:
1 |
sudo chown -R www-data:www-data /var/www/miosito |
Adesso copiamo le configurazioni predefinite su quelle nuove per il nostro sito.
1 |
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/miosito.conf |
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):
1 |
sudo nano /etc/apache2/sites-available/miosito.conf |
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).
1 2 3 4 5 6 7 8 9 |
<VirtualHost *:80> ServerName miosito.com ServerAdmin webmaster@localhost DocumentRoot /var/www/miosito ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
Adesso dobbiamo abilitare il sito creato, digitando (qui conta il nome del file che abbiamo dato prima):
1 |
sudo a2ensite miosito |
Fatto tutto questo riavviamo apache.
1 |
sudo service apache2 restart |
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:
1 |
192.168.56.1 miosito.com |
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:
1 2 3 4 5 |
<?php echo "ciao da miosito.com"; ?> |
Per creare il file index.php è sufficiente digitare:
1 |
sudo nano /var/www/miosito/index.php |
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)
1 2 3 4 |
192.168.56.1 miosito.com 192.168.56.1 www.miosito.com 192.168.56.1 www.miosito.it 192.168.56.1 miosito.it |
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:
1 |
sudo nano /etc/apache2/sites-available/miosito.conf |
Modifichiamo il file aggiungendo la seguente riga:
1 2 3 4 5 6 7 8 9 10 |
<VirtualHost *:80> ServerName miosito.com ServerAlias www.miosito.com miosito.it www.miosito.it ServerAdmin webmaster@localhost DocumentRoot /var/www/miosito ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
Con questo definiamo gli alias del dominio principale. Riavviamo apache.
1 |
sudo service apache2 restart |
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:
1 |
sudo a2dissite miosito |
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]”