fbpx

IL BLOG DEGLI RHCE ITALIANI

Guida alla Configurazione di Apache su RHEL / CentOS 6

Michele Milaneschi

Apache è il nome della piattaforma web più diffusa e conosciuta usabile sia in ambienti Unix/Linux, *BSD che Microsoft..

Stiamo parlando di Web Server ossia un software installato in un server che serve per ospitare uno o più siti internet dal quale i vari client tramite l’ URL possono raggiungere.

I siti internet che ospita il server vengono detti Virtual Host e possono essere integrati tramite diverse metodologie ma quella più comunemente usata si chiama VirtualHost Name-based:

Cioè ad un indirizzo IP vengono fatti corrispondere più Virtual Host. Ovvero sullo stesso server è possibile creare più Virtual Host che puntano allo stesso indirizzo IP.

Nel momento in cui il client fa una richiesta HTTP al server, in base all’URL inserito, il server interpreta la richiesta, ed eroga il servizio relativamente al Virtual Host richiesto.

Questo fa si che non si debba assegnare un ip diverso ad ogni Virtual Host creato.

Vediamo come installare Apache:

yum install httpd

Avviamo il Servizio:

service httpd start

Potremmo ricevere l’OK ma anche un messaggio di questo genere:

Ciò significa che dobbiamo inserire nel file /etc/hosts l’indirizzo ip della macchina con accanto l’hostname che nel nostro caso è pc1.talla.it

err2

Se proviamo a riavviare il servizio vedremo che non ci sarà più il messaggio:

err3

Rendiamo avviabile il servizio anche in caso di riavvio del sistema: chkconfig httpd on A questo punto il nostro Web Server risulta pronto e funzionante, infatti se digitiamo su browser l’indirizzo ip della macchina vedremo la pagina di dafault di Apache. ( http://ip_macchina )

apache Il file su cui andremo a lavorare si chiama httpd.conf e si trova nel percorso /etc/httpd/conf.

Oltre alle varie impostazioni che potremmo attuare sul nostro Web Server il file httpd.conf ci serve anche per la creazione del o dei VirtualHost.

Vediamo una semplice creazione:

L’ip del server è: 192.168.0.34 Il sito o dominio ( o VirtualHost ) che andremo a creare si chiamerà: sito1.it
La pagina web di Default sarà chiamata index.html

Dati i dettagli andremo passeremo alla creazione del VirtualHost secondo uno schema ben preciso:

Ogni VirtualHost creato si deve aprire e chiudere con i seguenti tag:

 app

All’interno dei tag inseriamo i seguenti dati:

Avremo cosi la seguente struttura:

apache2

Salviamo e chiudiamo il file Controlliamo che la sintassi è corretta digitando il seguente comando:

httpd -t

Adesso andiamo nella Document Root, eliminiamo eventuali file index.html e creiamo un nostro file index.html dove al suo interno inseriremo “CIAO MONDO”:

cd /var/www/html
touch index.html
echo “CIAO MONDO” > index.html

apache3

Fatto ciò riavviamo il servizio Apache: service httpd restart Non resta che provare inserendo l’indirizzo IP nel browser:

apache4 Sul file di log custom.log vediamo che viene registrato l’accesso dal client 192.168.0.2

apache5

Premettendo che stiamo lavorando all’interno di una LAN, se volessimo inserire invece che l’indirizzo IP il nome del sito ( http://sito1.it ) dobbiamo modificare opportunamente il file hosts della macchina client.

apache44

apache444 Eccetto questa ultima parte della modifica del file hosts sulla macchina Client quello che abbiamo appena descritto è ciò che accade quando prendiamo un dominio presso un azienda per crearci il nostro sito web.

L’ultima parte cioè la modifica del file hosts non esiste perchè viene svolta tramite l’interrogazione DNS fino ad arrivare alla risoluzione del nome nel corrispondente indirizzo IP pubblio.

Si possono creare quindi più VirtualHost sullo stesso server come abbiamo detto, e la struttura della sua creazione rimane più o meno la stessa che abbiamo visto fino ad adesso.

Una cosa da ricordare è che nel momento in cui creiamo più VirtualHost, al riavvio di Apache ci potremmo trovare davanti al seguente messaggio:

apache6

Questo messaggio ci indica che prima della struttura dei singoli VirtualHost dobbiamo inserire:

NameVirtualHost indirizzo_ip:80

Anche qui come sulla creazione del VirtualHost al posto dell’indirizzo ip potremmo mettere * intendendo qualsiasi IP.

Nel nostro caso l’idirizzo ip sarà: 192.168.0.34

apache7

E vedremo che al riavvio di Apache il messaggio non verrà più dato

Apache: Accesso Directory tramite Autenticazione

Vediamo adesso come oltre alla semplice creazione di un VirtualHost nasca il bisogno di dover inserire parte del sito sotto autenticazione.

Ossia rendere l’accesso ad esempio a una Directory solamente a specifici utenti quindi tramite l’inserimento corretto di un nomeutente e una password per ciascuno. Facciamo un esempio:

Andremo a creare una directory che si troverà nel percorso /var/www/ e si chiamerà dati
Al suo interno creeremo un file index.html per testare ciò.
Garantiremo l’accesso solamente a 2 utenti: michele e nicola con relative password

Innanzitutto andremo nel percorso specificato e ci creeremo la Directory dati con all’interno il file index.html:

cd /var/www/html
mkdir dati
cd dati/
touch index.html
echo “Benvenuto” > index.html

apache8

Adesso andremo a dichiare all’interno del VirtualHost sito1.it la Directory. Cosa importante: La dichiarazione delle Directory va sempre fatta all’interno di un VirtualHost. La dichiarazione verrà fatta nel seguente modo:

Authname “Inserire i dati di Login”
AuthType basic
AuthUserFile /etc/httpd/.login
Require valid-user michele, nicola

Detto questo il nostro VirtualHost sarà strutturato nel seguente modo:

apache9

A questo punto dobbiamo creare il relativo file che si chiamerà .login con i relativi utenti e lo facciamo tramite l’uso del seguente comando: htaccess

Faremo uso dell’opzione -c per creare il file

E dell’opzione -m per cifrare la password in MD5

Il file .login come vedete ha un punto davanti e ciò significa che sarà un file nascosto.

htpasswd -cm /et/httpd/.login michele

htpasswd -m /etc/httpd/.login nicola

apache10

Il file .login sarà cosi strutturato:

apache11

Non resta che dare una controllata alla sinstassi per vedere se è tutto ok e riavviare il servizio:

httpd -t

service httpd restart

Sul Browser digitando l’indirizzo http://sito1.it/dati avremo cosi la seguente schermata:

apache12

Oltre alla login, potrebbe esserci il caso in cui il contenuto di una Directory possa essere visibile solamente ai client di un dominio, o di specifici host.

Questo lo facciamo inserendo altre istruzioni tra i tag della dichiarazione delle Directory.

Facciamo un esempio:

La Directory del VirtualHost sito1.it chiamata “privatadeve essere accessibile solamente ai client del dominio talla.it:

apache13

Se tentiamo l’accesso all’URL: http://sito1.it/privata da una macchina che non fa parte del dominio ( talla.it ) riceveremo il messaggio che non abbiamo il permesso:

apache14

Potremmo per esempio anche concedere l’accesso solamente a 2 host specifici ( 192.168.0.2 e 192.168.0.100 ) modificando il file in questo modo:

apache15

 

Apache: Autenticazione tramite SSL

 Vediamo adesso come strutturare un VirtualHost tramite certificato e protocollo https.

L’implementazione di questi 2 strumenti fa si che il traffico che viaggia tra il client e il server sia cifrato e che ci sia un autenticazione tramite l’uso del certificato e delle chiavi tra le 2 parti durante lo scambio di dati per garantire l’autenticità e la sicurezza.

I punti cruciali sono i seguenti:

 

Quando ci troviamo in https viene subito verificata la corretta validità del certificato, e se ha esito positivo si passa allo scambio di dati in maniera cifrata mediante l’uso delle chiavi del Server.

Se la validità del certificato non ha esito positivo di solito viene mostrato il seguente messaggio:

apache155

La causa più banale di ciò potrebbe anche essere uno sfalsamento della data sulla macchina client da cui si effettua l’accesso: Ossia che la data della macchina locale non risulta essere nel range del periodo di validità del certificato emettendo cosi il messaggio.

Ci possono essere delle occasioni in cui potrebbe essere necessario installare manualmente il certificato per non avere sempre il messaggio sopra mostrato, come per esempio per la login della distribuzione ZeroShell.

Ricordiamo inoltre che la porta è la 443.

 

Fatta questa breve introduzione andiamo a vedere come implementare un VirtualHost tramite https.

 

Il virtualHost in questione è: https://miosito.it

Innanzitutto installiamo crypto-utils che ci serve per la generazione del certificato e mod_ssl:

yum install crypto-utils mod_ssl

Fatto ciò andiamo a creare il certificato con validità di un anno:

genkey –day 365 miosito.it

apache16

Avremo una serie di schermate che ci guideranno alla creazione del certificato e delle chiavi;
Sono importanti i percorsi che ci vengono mostrati che poi andranno inseriti sulla creazione del VirtualHost nel file httpd.conf

Ci verrà chiesto se inviare il Certificato alla Certification Autority che ne stabilirà la validità ma nel nostro caso in cui cerchiamo di capire semplicemente come funzionano le cose gli diciamo di no.

Ci verrò chiesto se cifrare la chiave privata, noi gli diciamo di no.

Avremo un modulo da compilare in cui ci vengono chiesti i dettagli del certificato e alla fine di ciò avremo una cosa simile a questa.

apache17

A questo punto creiamo il VirtualHost come in figura seguente:

apache18

Modifichiamo opportunamente il file hosts sulla macchina client, nella seguente struttura:

192.168.0.34 miosito.it

E su browser andiamo a digitare il seguente indirizzo: https://miosito.it

apache19

Non trovando valido il certificato ci da il seguente messaggio, nel nostro caso gli diciamo di aggiungere un eccezione e visualizzeremo il contenuto.

apache20

Sulle opzioni del Browser potermmo visualizzare il nostro certificato con gli attributi precedentemente impostati e la sua Validità:

apache21

 

SELinux e Apache:

 L’argomento SeLinux fino a questo momento ci è stato abbastanza indifferente in quanto andando ad operare nei percorsi di default certi attributi risultano gia impostati in maniera tale da operare senza alcun problema.

Alcune volte però, anche per motivi di sicurezza non ci affidiamo ai percorsi di default ma decidiamo noi dove certe cose devono stare.

Per esempio il percorso della DocumentRoot di uno o più VirtualHost invece che impostare quello di default ( /var/www/html) potremmo aver necessita di cambiarlo.
Potremmo impostare come DocumentRoot una Directory che si trova nella root del sistema.

Facciamo un esempio pratico:

Vogliamo che il VirtualHost miodominio.it abbia come DocumentRoot la Directory /miodominio che si trova nella /.

 

La creazione della Directory e la dichiarazione nel file httpd.conf avviene sempre allo stesso modo.

Ma quando andiamo a riavviare il servizio di Apache riceviamo il messaggio che la DocumentRoot non esiste, nonostante sia stata creata.

ap1

Questo è un problema di SeLinux, in quanto dobbiamo assegnargli il giusto contesto tramite degli appositi comandi:

Per vedere il contesto utilizziamo il seguente comando:

ls -Z

Per assegnare un contesto specifico vediamo le diverse metodologie:

Se la Directory non contiene nulla possiamo dare i seguenti comandi:

semanage fcontext -a -t httpd_sys_content_t ‘/miodominio(/*)?’

restorecon -FRvv /miodominio

E tutti i file creati successivamente assumeranno il contesto corretto ( httpd_sys_content_t )

 

Invece se gia abbiamo dei file diamo il seguente comando:

chcon -R -t httpd_sys_content_t /miodominio

E tutti i file all’interno assumeranno il contesto corretto ( httpd_sys_content_t )

Apache è il nome della piattaforma web più diffusa e conosciuta usabile sia in ambienti Unix/Linux, *BSD che Microsoft.

Stiamo parlando di Web Server ossia un software installato in un server che serve per ospitare uno o più siti internet dal quale i vari client tramite l’ URL possono raggiungere.

I siti internet che ospita il server vengono detti Virtual Host e possono essere integrati tramite diverse metodologie ma quella più comunemente usata si chiama VirtualHost Name-based:

Cioè ad un indirizzo IP vengono fatti corrispondere più Virtual Host. Ovvero sullo stesso server è possibile creare più Virtual Host che puntano allo stesso indirizzo IP.

Nel momento in cui il client fa una richiesta HTTP al server, in base all’URL inserito, il server interpreta la richiesta, ed eroga il servizio relativamente al Virtual Host richiesto.

Questo fa si che non si debba assegnare un ip diverso ad ogni Virtual Host creato.

Vediamo come installare Apache:

yum install httpd

Avviamo il Servizio:

service httpd start

Potremmo ricevere l’OK ma anche un messaggio di questo genere:

Ciò significa che dobbiamo inserire nel file /etc/hosts l’indirizzo ip della macchina con accanto l’hostname che nel nostro caso è pc1.talla.it

err2

Se proviamo a riavviare il servizio vedremo che non ci sarà più il messaggio:

err3

Rendiamo avviabile il servizio anche in caso di riavvio del sistema: chkconfig httpd on A questo punto il nostro Web Server risulta pronto e funzionante, infatti se digitiamo su browser l’indirizzo ip della macchina vedremo la pagina di dafault di Apache. ( http://ip_macchina )

apache Il file su cui andremo a lavorare si chiama httpd.conf e si trova nel percorso /etc/httpd/conf.

Oltre alle varie impostazioni che potremmo attuare sul nostro Web Server il file httpd.conf ci serve anche per la creazione del o dei VirtualHost.

Vediamo una semplice creazione:

L’ip del server è: 192.168.0.34 Il sito o dominio ( o VirtualHost ) che andremo a creare si chiamerà: sito1.it
La pagina web di Default sarà chiamata index.html

Dati i dettagli andremo passeremo alla creazione del VirtualHost secondo uno schema ben preciso:

Ogni VirtualHost creato si deve aprire e chiudere con i seguenti tag:

 app

All’interno dei tag inseriamo i seguenti dati:

Avremo cosi la seguente struttura:

apache2

Salviamo e chiudiamo il file Controlliamo che la sintassi è corretta digitando il seguente comando:

httpd -t

Adesso andiamo nella Document Root, eliminiamo eventuali file index.html e creiamo un nostro file index.html dove al suo interno inseriremo “CIAO MONDO”:

cd /var/www/html
touch index.html
echo “CIAO MONDO” > index.html

apache3

Fatto ciò riavviamo il servizio Apache: service httpd restart Non resta che provare inserendo l’indirizzo IP nel browser:

apache4 Sul file di log custom.log vediamo che viene registrato l’accesso dal client 192.168.0.2

apache5

Premettendo che stiamo lavorando all’interno di una LAN, se volessimo inserire invece che l’indirizzo IP il nome del sito ( http://sito1.it ) dobbiamo modificare opportunamente il file hosts della macchina client.

apache44

apache444 Eccetto questa ultima parte della modifica del file hosts sulla macchina Client quello che abbiamo appena descritto è ciò che accade quando prendiamo un dominio presso un azienda per crearci il nostro sito web.

L’ultima parte cioè la modifica del file hosts non esiste perchè viene svolta tramite l’interrogazione DNS fino ad arrivare alla risoluzione del nome nel corrispondente indirizzo IP pubblio.

Si possono creare quindi più VirtualHost sullo stesso server come abbiamo detto, e la struttura della sua creazione rimane più o meno la stessa che abbiamo visto fino ad adesso.

Una cosa da ricordare è che nel momento in cui creiamo più VirtualHost, al riavvio di Apache ci potremmo trovare davanti al seguente messaggio:

apache6

Questo messaggio ci indica che prima della struttura dei singoli VirtualHost dobbiamo inserire:

NameVirtualHost indirizzo_ip:80

Anche qui come sulla creazione del VirtualHost al posto dell’indirizzo ip potremmo mettere * intendendo qualsiasi IP.

Nel nostro caso l’idirizzo ip sarà: 192.168.0.34

apache7

E vedremo che al riavvio di Apache il messaggio non verrà più dato

Apache: Accesso Directory tramite Autenticazione

Vediamo adesso come oltre alla semplice creazione di un VirtualHost nasca il bisogno di dover inserire parte del sito sotto autenticazione.

Ossia rendere l’accesso ad esempio a una Directory solamente a specifici utenti quindi tramite l’inserimento corretto di un nomeutente e una password per ciascuno. Facciamo un esempio:

Andremo a creare una directory che si troverà nel percorso /var/www/ e si chiamerà dati
Al suo interno creeremo un file index.html per testare ciò.
Garantiremo l’accesso solamente a 2 utenti: michele e nicola con relative password

Innanzitutto andremo nel percorso specificato e ci creeremo la Directory dati con all’interno il file index.html:

cd /var/www/html
mkdir dati
cd dati/
touch index.html
echo “Benvenuto” > index.html

apache8

Adesso andremo a dichiare all’interno del VirtualHost sito1.it la Directory. Cosa importante: La dichiarazione delle Directory va sempre fatta all’interno di un VirtualHost. La dichiarazione verrà fatta nel seguente modo:

Authname “Inserire i dati di Login”
AuthType basic
AuthUserFile /etc/httpd/.login
Require valid-user michele, nicola

Detto questo il nostro VirtualHost sarà strutturato nel seguente modo:

apache9

A questo punto dobbiamo creare il relativo file che si chiamerà .login con i relativi utenti e lo facciamo tramite l’uso del seguente comando: htaccess

Faremo uso dell’opzione -c per creare il file

E dell’opzione -m per cifrare la password in MD5

Il file .login come vedete ha un punto davanti e ciò significa che sarà un file nascosto.

htpasswd -cm /et/httpd/.login michele

htpasswd -m /etc/httpd/.login nicola

apache10

Il file .login sarà cosi strutturato:

apache11

Non resta che dare una controllata alla sinstassi per vedere se è tutto ok e riavviare il servizio:

httpd -t

service httpd restart

Sul Browser digitando l’indirizzo http://sito1.it/dati avremo cosi la seguente schermata:

apache12

Oltre alla login, potrebbe esserci il caso in cui il contenuto di una Directory possa essere visibile solamente ai client di un dominio, o di specifici host.

Questo lo facciamo inserendo altre istruzioni tra i tag della dichiarazione delle Directory.

Facciamo un esempio:

La Directory del VirtualHost sito1.it chiamata “privatadeve essere accessibile solamente ai client del dominio talla.it:

apache13

Se tentiamo l’accesso all’URL: http://sito1.it/privata da una macchina che non fa parte del dominio ( talla.it ) riceveremo il messaggio che non abbiamo il permesso:

apache14

Potremmo per esempio anche concedere l’accesso solamente a 2 host specifici ( 192.168.0.2 e 192.168.0.100 ) modificando il file in questo modo:

apache15

 

Apache: Autenticazione tramite SSL

 Vediamo adesso come strutturare un VirtualHost tramite certificato e protocollo https.

L’implementazione di questi 2 strumenti fa si che il traffico che viaggia tra il client e il server sia cifrato e che ci sia un autenticazione tramite l’uso del certificato e delle chiavi tra le 2 parti durante lo scambio di dati per garantire l’autenticità e la sicurezza.

I punti cruciali sono i seguenti:

 

Quando ci troviamo in https viene subito verificata la corretta validità del certificato, e se ha esito positivo si passa allo scambio di dati in maniera cifrata mediante l’uso delle chiavi del Server.

Se la validità del certificato non ha esito positivo di solito viene mostrato il seguente messaggio:

apache155

La causa più banale di ciò potrebbe anche essere uno sfalsamento della data sulla macchina client da cui si effettua l’accesso: Ossia che la data della macchina locale non risulta essere nel range del periodo di validità del certificato emettendo cosi il messaggio.

Ci possono essere delle occasioni in cui potrebbe essere necessario installare manualmente il certificato per non avere sempre il messaggio sopra mostrato, come per esempio per la login della distribuzione ZeroShell.

Ricordiamo inoltre che la porta è la 443.

 

Fatta questa breve introduzione andiamo a vedere come implementare un VirtualHost tramite https.

 

Il virtualHost in questione è: https://miosito.it

Innanzitutto installiamo crypto-utils che ci serve per la generazione del certificato e mod_ssl:

yum install crypto-utils mod_ssl

Fatto ciò andiamo a creare il certificato con validità di un anno:

genkey –day 365 miosito.it

apache16

Avremo una serie di schermate che ci guideranno alla creazione del certificato e delle chiavi;
Sono importanti i percorsi che ci vengono mostrati che poi andranno inseriti sulla creazione del VirtualHost nel file httpd.conf

Ci verrà chiesto se inviare il Certificato alla Certification Autority che ne stabilirà la validità ma nel nostro caso in cui cerchiamo di capire semplicemente come funzionano le cose gli diciamo di no.

Ci verrò chiesto se cifrare la chiave privata, noi gli diciamo di no.

Avremo un modulo da compilare in cui ci vengono chiesti i dettagli del certificato e alla fine di ciò avremo una cosa simile a questa.

apache17

A questo punto creiamo il VirtualHost come in figura seguente:

apache18

Modifichiamo opportunamente il file hosts sulla macchina client, nella seguente struttura:

192.168.0.34 miosito.it

E su browser andiamo a digitare il seguente indirizzo: https://miosito.it

apache19

Non trovando valido il certificato ci da il seguente messaggio, nel nostro caso gli diciamo di aggiungere un eccezione e visualizzeremo il contenuto.

apache20

Sulle opzioni del Browser potermmo visualizzare il nostro certificato con gli attributi precedentemente impostati e la sua Validità:

apache21

 

SELinux e Apache:

 L’argomento SeLinux fino a questo momento ci è stato abbastanza indifferente in quanto andando ad operare nei percorsi di default certi attributi risultano gia impostati in maniera tale da operare senza alcun problema.

Alcune volte però, anche per motivi di sicurezza non ci affidiamo ai percorsi di default ma decidiamo noi dove certe cose devono stare.

Per esempio il percorso della DocumentRoot di uno o più VirtualHost invece che impostare quello di default ( /var/www/html) potremmo aver necessita di cambiarlo.
Potremmo impostare come DocumentRoot una Directory che si trova nella root del sistema.

Facciamo un esempio pratico:

Vogliamo che il VirtualHost miodominio.it abbia come DocumentRoot la Directory /miodominio che si trova nella /.

 

La creazione della Directory e la dichiarazione nel file httpd.conf avviene sempre allo stesso modo.

Ma quando andiamo a riavviare il servizio di Apache riceviamo il messaggio che la DocumentRoot non esiste, nonostante sia stata creata.

ap1

Questo è un problema di SeLinux, in quanto dobbiamo assegnargli il giusto contesto tramite degli appositi comandi:

Per vedere il contesto utilizziamo il seguente comando:

ls -Z

Per assegnare un contesto specifico vediamo le diverse metodologie:

Se la Directory non contiene nulla possiamo dare i seguenti comandi:

semanage fcontext -a -t httpd_sys_content_t ‘/miodominio(/*)?’

restorecon -FRvv /miodominio

E tutti i file creati successivamente assumeranno il contesto corretto ( httpd_sys_content_t )

 

Invece se gia abbiamo dei file diamo il seguente comando:

chcon -R -t httpd_sys_content_t /miodominio

E tutti i file all’interno assumeranno il contesto corretto ( httpd_sys_content_t )

Info about author

Michele Milaneschi

RHCE Consultant

Prenota subito il tuo corso ufficiale Red Hat

GUARDA I CORSI