Costruire un Web Server da zero
Stefano Bortolato
stefano <dot> bortolato <at> gmail <dot> com
Versione v0.01 26 Luglio 2008
Questo documento tenta di insegna come costruire un web server full options usando Linux su un PC.
Sommario
|
1. Introduzione |
2 |
|
1.1. Hardware |
2 |
|
1.1.1. Scegliere il computer |
2 |
|
3 |
|
|
1.1.3. Server: un piccolo overview |
3 |
|
1.2. Software |
4 |
|
1.2.1. Sistema Operativo |
4 |
|
1.2.2. Ambiente Web |
5 |
|
1.2.3. Amministrazione |
5 |
|
1.2.4. E il DNS ed il DHCP? |
6 |
|
6 |
|
|
7 |
|
|
8 |
|
|
8 |
|
|
20 |
|
|
31 |
Perché questa guida
Nel costruire un web server entrano in gioco tante variabili. La scelta delle singole variabili dipende soprattutto dall'obiettivo finale e dai soldi a disposizione. Un server di questo tipo può essere realizzato usando un vecchio PC obsoleto, oppure un PC di nuova generazione o un computer server espressamente pensato.
Vediamo passo-passo cosa possiamo scegliere e come fare.
Quanti utenti si collegheranno al nostro server? Quanto deve resistere ad eventuali guasti? Quanti soldi possiamo spendere?
Dalla risposta a queste domande possiamo determinare il tipo di computer di cui necessitiamo.
Il nostro computer deve essere adatto ad ospitare un server web, essere veloce, garantire il funzionamento anche in caso di guasto parziale.
Una via economica, ma che forse non risponde ai nostri obiettivi, è riciclare un PC obsoleto. Vediamo dunque che tipo di computer usare:
-
PC: è il computer che usiamo a casa. Adeguatamente scelto-configurato può avere caratteristiche adeguate per fare da server
-
Server: a prescindere dal tipo di processore un server ha dei componenti interni aggiuntivi che monitorano costantemente lo stato del server stesso, permettono un controllo a distanza del computer e, in caso di guasto parziale, continua a funzionare
-
Server Mac: siamo nel caso sopra, ma si usa un tipo di processore e di sistema operativo proprietario della MAC
-
Server alta-fascia: in questa fascia la tipologia si diversifica notevolmente. Gli aspetti più salienti sono dimensioni ridotte (sovente sono ideali per i rack, armadi a dimensioni standard), impiego di processori speciali come i RISC e resistenza ai guasti (funzionano anche se si rompe un alimentatore, un hard-disk, ecc...).
Come si vede la gamma di scelta è vastissima (se si hanno i soldi!). In questa guida immaginiamo di scegliere comunque una fascia PC e di poter disporre di un op0’ di soldi.
Quindi scegliamo un computer server. Avrà le seguenti caratteristiche:
-
alimentatore rindondante (significa che si si rompo all’interno ha un altro alimentatore che entra in funzione. Meglio se ci sono due alimentatori di questo tipo)
-
scheda madre con doppio processore
-
due processori tipo Intel Dual Core o Quad Core. Il trend vincente, al momento, nello sviluppo di processore è di integrare più processori all’interno di un solo processore. L’Intel costruisce quelli più facilmente reperibili nei negozi
-
8 GB di RAM. La quantità è molto variabile e discutibile. Una dimensione adeguata per un server base di buone prestazione è 4 GB
-
Hard Disk: è bene mettere un disco per il sistema operativo e gli applicativi ed uno per tutto i siti. Questo secondo disco sarà costruito con un sistema RAID che, a seconda della configurazione, permette di avere grandi spazi e di garantire la continuità anche se si rompe un disco. Fa molta differenza anche se usiamo un disco ATA, SATA o SCSI. I primi stanno progressivamente scomparendo. I secondi sono economici, veloci e supportati da tutti i PC. Gli ultimi sono velocissimi, sicuri, non supportati da tutti i PC e costosi
-
cabient: a seconda di dove andrà il nostro computer sceglieremo. Un tower è ideale, ma occupa grandi spazi. Un modello da rack occupa spazi minimi, ma è molto più costoso.
Ai nostri scopi useremo un PC con cabinet tower, decisamente meno costoso, doppio processore, 4 GB di RAM, un disco da 80 GB per il sistema operativo, 5 dischi da 300 GB configurati come pacco RAID 5 (vengono visti tutti come un unico disco. Se si rompe un disco è possibile cambiarlo senza spegnere il computer e senza perdere informazioni).
Processore Intel o AMD? In genere gli Intel costano di più e gli AMD sono più economici. Alcuni AMD sono più veloci degli Intel. Se la differenza per noi è nel risparmio un AMD è ideale.
Che differenza c’è tra un PC ed un server? Proviamo a dare una risposta (anche se non è semplice!).
-
PC: è un computer ottimizzato per la velocità e per soddisfare l’unico utente che lo sta usando. In genere sono economici a scapito della robustezza
-
SERVER: è un computer ottimizzato per offrire servizi in rete e penalizza l’uso diretto (cioè dalla tastiera e dal monitor). In genere sono costosi e molto robusti. Hanno dei circuiti elettronici speciali e sovente (almeno quelli di fascia alta) usano processori speciali.
È complesso il mondo dei server, ma l’aspetto determinante è la robustezza, cioè la capacità di continuare a funzionare malgrado guasti e imprevisti. Per raggiungere ciò serve un sistema operativo adeguato (e Windows non lo è. AIX, MVS, OS, ... lo sono. Linux è tra questi secondi) e una hardware idoneo (componenti rindondanti, più processori, hard disk veloci, controller RAID, ecc... Le scelte possibili sono molte, non tutte facilmente reperibili, ma molto costose).
E il server è servito...
Ora per far funzionare il nostro computer dobbiamo inserirci un sistema operativo ed un set di programmi adatti.
Possiamo scegliere questi tra quelli a pagamento (close-source) e quelli gratuiti (open-source). Scegliamo questi secondi per quello che offrono (un approfondimento sull’open source lo puoi trovare al sito www.opensource.org).
Tra gli open source prendiamo Linux. Non è l’unico. Ci sono ottime e migliori alternative. Scelgo Linux perché molto facile da trovare, gira su molti computer ed è ricco di documentazione.
Linux sì, ma quale? Uno dei talloni di Achille di linux sono le numerosissime distribuzioni. Pur usando tutte lo stesso cuore differiscono per i tool a corredo e, soprattutto, per quelle personalizzazioni nell’organizzazione dei file di configurazione che rende ciascuna diversa. Se questo è un’enorme risorsa perché posso adattare il sistema ad ogni mia specifica esigenza, è anche una dannazione perché molto spesso devo cercare dov’è la configurazione (e questo significa perdere tempo, non riuscire a sistemare subito ed essere sempre a studiare).
Ma insomma quale distribuzione? Quella con cui ti trovi meglio. Se vuoi un suggerimento ti consiglio:
1) Debian, stabile, diffusa e con un sacco di guide
2) OpenSuSE o SuSE, stabile e facile da usare e configurare.
Sistema operativo o sistema virtuale? Si tratta di due tecnologie diverse.
Sistema operativo: consiste nell’installare direttamente i programmi nel sistema operativo. Soluzione semplice, ma poco sicura. In caso di crash dei programmi o di attacco il sistema operativo è direttamente coinvolto. Risultato: il computer non funziona più. Per il ripristino può non è sufficiente un semplice backup.
Sistema virtuale: consiste nell’installare un finto computer nel computer attraverso dei programmi di virtual-machine (VMWare, VirtualBOX, ecc...). È una soluzione più complessa, ma molto sicura. In caso di crash dei programmi o di attacco viene coinvolto solo il computer-sistema virtuale. Risultato: il computer continua funzionare. Per ripristinare è sufficiente il backup del sistema virtuale.
In conclusione la tecnologia del sistema virtuale è la più sicura in ogni senso, ma è decisamente più difficile da realizzare. Se le nostre esigenze non impongono alti standard di sicurezza o i clienti non chiedono un computer virtuale possiamo decisamente scegliere la prima tecnica.
Questa parte è composta da una serie di programmi. Il set di software dipende dalle funzionalità che desideriamo attivare. Immaginando una configurazione completa installiamo:
-
Web server: è il programma che fa funzionare le pagine web.
Il programma principe è Apache (completo dei moduli php e mono. È consigliato installare anche i linguaggi perl, python e ruby). Esistono molte altre scelte possibili come HTTPd, lighttpd, mini-httpd... -
FTP server: è il programma che permette di copiare, cancellare e modificare le pagine/file web sul server via rete.
Uno dei programmi più noti è wsFTP. Eccellente e potente è anche ProFTP. -
Mail server (MTA): è il programma che si occupa di spedire la posta.
Uno dei più diffusi programmi è Postfix. -
Mail server (POP e IMAP): è il programma che permette di scaricare la posta dai propri PC.
Uno dei programmi più diffusi è Courier. Più potente e versatile è Dovecot. -
Database (DBMS): è il programma che si occupa di immagazzinare e gestire informazioni. È un tassello fondamentale in moltissime tecnologie web.
Uno dei più usati è MySQL. Un’alternativa eccellente, ma non molto impiegata, è PostGreSQL.
A questa base di programmi si possono aggiungere due importanti utilità: -
Awstats: è un programma che genera analisi e grafici sull’uso del web. Esistono diverse alternative anche migliori.
-
SquirrelMail: è un programma di webmail. Esistono altri programmi che fanno lo stesso. Può essere utile conoscere (o usare) OpenWebMail (http://openwebmail.org), IlohaMail (http://blog.ilohamail.org) e PHPwebmail (http://phpwebmail.sourceforge.net).
Il nostro server manca ancora di una cosa. Esso deve essere amministrato ed è improbabile che saremo con le mani sulla tastiera del server. È molto facile che ci troveremo invece davanti al nostro PC soprattutto quando ci sarà un’emergenza. Come amministrare facilmente, velocemente e, soprattutto, da remoto il nostro server? Ecco alcune tecnologie possibili:
-
WebMin: è un programma per l’amministrazione del server attraverso una comoda ed intuitiva interfaccia web. Interessante soprattutto perché permette una sicura, comoda e facile amministrazione da remoto.
È sufficiente questo solo applicativo per poter controllare e gestire tutto il server. -
PhpMyAdmin e PhpPgAdmin: due eccellenti programmi per l’amministrazione (e per l’uso) dei DBMS MySQL e PostGreSQL. Come per WebMin si avvalgono di una interfaccia Web. Li possiamo trovare anche integrati in WebMin (consultate il sito di WebMin. Li trovate nei moduli aggiuntivi).
-
sshd: permette di entrare nel server, via internet, con un terminale a riga di comando. La connessione tra il nostro PC ed il server è completamente criptata. Estremamente leggero e veloce è ideale per connessioni lente. Permette di creare anche connessioni criptate grafiche (cioè portare la schermata di Xwindows di Linux sul mio PC).
-
VNC: permette di collegarsi direttamente alle schermate Xwindows di Linux. Estremamente elegante ed intuitivo necessita, però, di un collegamento veloce.
Ci sono diversi programmi che permettono questo servizio. Trai più noti ed usati c’è ThingVNC e Krdc.
Un server per un ufficio o una piccola azienda può comodamente integrare anche questi servizi. Un server più grosso e dedicato al web-hosting è meglio che non li ospiti. In questi casi si usa, di norma, una soluzione cluster (=a blocchi) dove ciascuna applicazione è ospitata in un server dedicato.
Immaginando che chi usa questa guida mira a realizzare un server full-options per ufficio/piccola azienda o è un normale curioso hacker suggerisco di consultare gli HowTo DNS HowTo (http://tldp.org/HOWTO/DNS-HOWTO.html , http://www.pluto.it/files/ildp/HOWTO/DNS-HOWTO/DNS-HOWTO.html ) e DHCP mini-HOWTO (http://www.tldp.org/HOWTO/DHCP/index.html , http://www.pluto.it/files/ildp/HOWTO/DHCP ). Qui di seguito descrivo cosa sono:
-
DNS: è un sistema che sostituisce al volo i nomi internet (es. www.linux.org) nei relativi indirizzi IP (es. 72.32.47.231).
-
DHCP: è un sistema che consegna automaticamente la configurazione di rete ai computer connessi. In questo modo l’utente non deve far nulla per usare la rete, basta solo che accenda il computer. L’amministratore deve solo preoccuparsi di configurare il server perché tutti i computer funzionino.
Esistono due orientamenti diversi per scrivere le configurazioni dei nostri applicativi e registrare le account degli utenti:
-
backend su DB: i programmi (web, ftp, email, ecc...) leggono la configurazione da un database ospitato sul nostro DBMS. Ugualmente anche le account degli utenti (nome, password, dati personali, quote, scadenze, ecc...) sono conservate in un database.
-
backend su file: i programmi (web, ftp, email, ecc...) leggono la configurazione da una serie di file normalmente scritti nella directory /etc. Ugualmente anche le account degli utenti (nome, password, dati personali, quote, scadenze, ecc...) sono conservate in alcuni file siti nella directory /etc.
Il primo offre il vantaggio di dividere nettamente la configurazione web da quella del sistema operativo. È facile backuppare e ripristinare configurazioni e account. Tutte queste informazioni possono essere gestite dal server di DB rendendo particolarmente performante e sicuro il reperimento delle configurazioni e delle account da parte delle applicazioni. Questa soluzione è particolarmente adatta a scalare l’alto per ospitare/controllare molti siti, molte account, ecc...
Di contro c’è una maggiore complessità di realizzazione, la necessità di maggiori competenze per l’amministratore e il bisogno di un hardware più potente o (cosa assai consigliabile) di più computer configurati in cluster.
Il secondo offre il vantaggio di essere molto semplice da realizzare (i programmi nell’installazione già sono predisposti per questa architettura). Non servono grandi competenze per allestire il server e farlo funzionare e può essere sufficiente un modesto hardware per far funzionare il tutto.
Di contro troviamo che la configurazione web e quella del sistema operativo in parte coincidono e si sovrappongono. Le varie account coincidono con il sistema operativo (se una viene compromessa il cracker è direttamente dentro il computer) e, soprattutto, è poco scalabile verso l’alto (non adatta a ospitare molti siti, molte account, ecc...).
In conclusione per realizzare un piccolo web server è decisamente meglio un’architettura con backend su file. Se costruiamo qualcosa di grande o vogliamo anche solo sperimentare la seconda via è la nostra.
OK. Dopo tutte queste parole di teoria passiamo ad un esempio pratico.
Vogliamo realizzare un web server con un hardware PC con le seguenti caratteristiche-configurazione:
-
Sistema operativo OpenSuSE: ospitato su un hard disk da 120 GB e due dischi da 300 GB in RAID 0 (mirror). Configurazione degli applicativi su file.
-
Server web: Apache 2 full options, con due domini virtuali, e PHP.
-
Serve mail: Postfix, come MTA, e Dovecot come server POP e IMAP.
-
Server FTP: ProFTP.
-
Server DBMS: MySQL.
-
Server SSH: SSHd.
-
Analisi dei log: Awstats.
-
WebMail: SquirrelMail.
-
WebMin: per l’amministrazione del server
-
PhpMyAdmin: per l’amministrazione del DBMS MySQL (lato amministratori e lato utenti).
Naturalmente abbiamo un accesso a internet ad alta velocità (una ADSL da 20 MB è una buona scelta), con un IP pubblico (a titolo di esempio ipotizziamo di avere 85.93.41.76) con una registrazione al DNS come segue:
mail.esempio-ws.it (record MX)
www.1.esempio-ws.it (record CA. Sito 1)
www.2.esempio-ws.it (record CA. Sito 2)
www.esempio-ws.it (record CA. Sito amministrazione).
Prima di procedere il nostro PC ospita tre hard disk di tipo SATA. La scheda madre ha integrato un controller RAID 0, 1, 0+1. Configuriamo il controller RAID in mirror (RAID 0). Questa configurazione rende la lettura-scrittura sui dischi più veloce e offre un buon livello di sicurezza. In caso di rottura di un disco l’altro è una perfetta fotografia del primo e il server continua a funzionare senza problemi.
Per prima cosa installiamo il nostro Linux OpenSuSE. Accettiamo le impostazioni automatiche che propone OpenSuSE. Accertiamo, unicamente, che:
-
il pacco RAID da 300 GB sia montato in /srv
-
nel software sia installato: apache 2 con tutti i moduli, PHP con tutte le sotto-componenti, SSL, MySQL, Postfix, perl, ruby, make e gcc (pacchetto intero di sviluppo e compilazione).
SSHd è installato di serie, mentre per Dovecot, ProFTP. Awstats, SquirrelMail e WebMin dovremmo aggiungerli manualmente.
Terminata l’installazione del sistema, prima di iniziare la configurazione, installiamo i programmi mancanti.
Per OpenSuSE si trovano diversi applicativi già compilati e pacchettizati. Basta 1 click per installarli. Per Debian il parco è ancora più ampio.
In questo manuale procederemo in modo tradizionale (scarica il pacchetto sorgente, compila e installa). Ciò ci permetterà di imparare di più. Qualora creiamo un grosso server sappiamo meglio come personalizzarlo.
Attenzione: verificate i link del download perché potrebbero essere cambiati ed esserci versioni più recenti del software.
Spacchettamento e compilazione la ipotizziamo nella cartella /tmp. A parte indicazioni diverse siamo connessi come utente root.
-
Dovecot: sito www.dovecot.org
download dovecot.org/releases/1.0/dovecot-1.0.13.tar.gz
# cd /tmp/dovecot-XXX
# ./configure --prefix=/ --infodir=/usr/share/info --mandir=/usr/share/man \
--includedir=/usr/include --docdir=/usr/share/doc/dovecot --with-mysql --with-pgsql \
--with-sqlite --with-lucene --with-solr
# make
# make install
# useradd -c Dovecot\ IMAP\ server -g mail -u 200 -s /bin/false dovecot
Per OpenSuSE, purtroppo, non c’è nel pacchetto di codice sorgente lo script per avviarlo automaticamente. Pertanto usiamo quello preparato da Mads Martin Joergensen e Marcus Rueckert. Creiamo ed editiamo il file /etc/init.d/dovecot . Dopo di che rendiamolo eseguibile a root e al gruppo di root con il comando “chmod 754 /etc/init.d/dovecot” :
#!/bin/sh
# Copyright (c) 1995-2004 SUSE Linux AG, Nuernberg, Germany.
# 2005-2007 SUSE / Novell Inc.
# All rights reserved.
#
# Author: Mads Martin Joergensen < Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo. >
# Marcus Rueckert < Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo. >
# Please send feedback to http://www.suse.de/feedback/
#
# /etc/init.d/dovecot
# and its symbolic link
# /usr/sbin/rcdovecot
#
### BEGIN INIT INFO
# Provides: dovecot
# Required-Start: $remote_fs $syslog $network
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Dovecot IMAP/POP3/SASL server
# Description: Dovecot IMAP/POP3/SASL server
### END INIT INFO
. /etc/rc.status
# Reset status of this service
rc_reset
DOVECOT_BIN=/sbin/dovecot
test -x $DOVECOT_BIN || {
echo "$DOVECOT_BIN not installed";
if [ "$1" = "stop" ] ; then
exit 0
else
exit 5
fi
}
case "$1" in
start)
echo -n "Starting dovecot "
startproc $DOVECOT_BIN
rc_status -v
;;
stop)
echo -n "Stopping dovecot "
killproc -TERM $DOVECOT_BIN
rc_status -v
;;
try-restart|condrestart)
$0 status
if test $? = 0; then
$0 restart
else
rc_reset
fi
rc_status
;;
restart)
$0 stop
$0 start
rc_status
;;
force-reload)
# dovecot has support for reloading it's config when
# recieving signal 1 (SIGHUP). There's still some
# issues noticed in the dovecot-TODO though so restart
# for now.
echo -n "Reload service dovecot "
# killproc -HUP $DOVECOT_BIN
# rc_status -v
$0 try-restart
rc_status
;;
reload)
echo -n "Reload service dovecot "
killproc -HUP $DOVECOT_BIN
rc_status -v
;;
status)
echo -n "Checking for service dovecot "
checkproc $DOVECOT_BIN
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
exit 1
;;
esac
rc_exit
-
ProFTP: sito www.proftpd.org
download ftp.proftpd.org/distrib/source/proftpd-1.3.1.tar.gz
# cd /tmp/proftp-XXXX
# ./configure --prefix=/ --infodir=/usr/share/info –mandir=/usr/share/man \
--sysconfdir=/etc/proftpd --includedir=/usr/include -enable-openssl
# make
# make install
Per OpenSuSE, purtroppo, non c’è nel pacchetto di codice sorgente lo script per avviarlo automaticamente. Pertanto andiamo a crearlo noi partendo dal file schema fornito di serie /etc/init.d/skeleton . Creiamo ed editiamo il file /etc/init.d/proftpd . Dopo di che rendiamolo eseguibile a root e al gruppo di root con il comando “chmod 754 /etc/init.d/proftpd” :
#!/bin/sh
### BEGIN INIT INFO
# Provides: esempio-ws.it
# Required-Start: $local_fs $remote_fs $network
# Should-Start:
# Required-Stop: $local_fs $remote_fs $network
# Should-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: FTP server
# Description: A nice, flexible and powerfull FTP server
### END INIT INFO
. /etc/rc.status
proftpd=/sbin/proftpd
prog=ProFTP
pidfile=/var/run/proftpd.pid
lockfile=/var/lock/subsys/proftpd
RETVAL=0
case "$1" in
start)
echo -n "Starting $prog: "
startproc $proftpd
rc_status -v
;;
stop)
echo -n "Stopping $prog... "
killproc -TERM $proftpd
rc_status -v
;;
status)
echo -n "Checking for service ProFTP "
checkproc $proftpd
rc_status -v
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Reloading $prog: "
killproc -HUP $proftpd
#rc_failed 3
rc_status -v
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
rc_exit
-
SquirrelMail: sito squirrelmail.org
download downloads.sourceforge.net/squirrelmail/squirrelmail-1.4.15.tar.gz
# mkdir /srv/www/esempio-sw.it/squirrelmail
# cp -pR /tmp/squirrelmail-XXX/* /srv/www/esempio-ws.it/squirrelmail/
# chown -R wwwrun:www /srv/www/esempio-ws.it/squirrelmail
# cd /srv/www/esempio-ws.it/squirrelmail
# mkdir /var/attach
# chgrp -R www /var/attach
# chmod 730 /var/attach
# cd config
# per conf.pl
seguire le istruzioni a menù. Può essere d’aiuto la lettura della documentazione.
# kate /etc/apache2/vhosts.d/esempio-ws.it.conf
copiate le righe qui di seguito dentro questo file. Salvate e uscite:
<VirtualHost *:80>
ServerAdmin Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo.
ServerName www.webmail.esempio-ws.it
ServerAlias webmail.esempio-ws.it
DocumentRoot "/srv/www/esempio-ws.it/squirrelmail"
ErrorLog /srv/www/esempio-ws.it/log/esempio-ws.it-error.log combined
CustomLog /srv/www/esempio-ws.it/log/esempio-ws.it-access.log combined
</VirtualHost>
-
PhpMyAdmin: sito www.phpmyadmin.net
download sourceforge.net/project/showfiles.php?group_id=23067 .
# mkdir /srv/www/esempio-ws.it/html/phpmyadmin
# mkdir /srv/www/esempio-ws.it/html/phpmyadmin/config
# cp -pR /tmp/phpmyadmin-XXX/* /srv/www/esempio-ws.it/html/phpmyadmin
# chown -R wwwrun:www /srv/www/esempio-ws.it/html/phpmyadmin
per completare la configurazione bisogna collegarsi a phpmyadmin via web, ma
per fare questo il nostro server deve già essere operativo.
Pertanto rimandiamo questa operazione a server attivo. Teniamo presente che
quando potremo fare questo è sufficiente seguire le indicazioni che compariranno
sul nostro browser web per configurarlo. Quando sarà il momento teniamo sotto
mano questi dati per una configurazione funzionante:
Ipserver:
CryptKey Blue phishe:
Autentication:
-
WebMin: sito www.webmin.net
download www.webmin.com/download.html .
Prima di procedere scarichiamo anche i moduli (www.webmin.org -> Third-Party Modules -> all modules) awstats.
# mkdir /opt/webmin
# cp -pR /tmp/webmin-XXX/* /opt/webmin/
# cd /opt/webmin
# ./setup.sh
seguire le istruzioni. Per la configurazione scegliete la directory /etc/webmin.
Per i log la cartella /var/log/webmin . Per il "Login name" suggerisco "root" al
posto di "admin". Per la password sapete come crearla (e scrivetevela subito!!).
Dite "y" (=yes) alla richiesta "Use SSL (y/n):" e "y" (=yes) alla richiesta
"Start Webmin at boot time (y/n):".
Finita l'installazione colleghiamocivia web all'applicazione con l'idirizzo
https://esempio-ws.it:10000 . Personalizziamolo, eliminiamo i moduli che non
usiamo e installiamo i moduli aggiuntivi.
-
Awstats: sito awstats.sourceforge.net
download prdownloads.sourceforge.net/awstats/awstats-6.7.tar.gz
# mkdir /srv/www/esempio-ws.it/awstat
# mkdir /etc/awstat
# mkdir /srv/lib/awstats
# cp -pR /tmp/awstat-6.5/wwwroot/* /srv/www/esempio-ws.it/awstat
# chown -R wwwrun:www /srv/www/esempio-ws.it/awstat
# kate /etc/awstat/awstat.esempio-ws.it.conf
copiate le righe qui di seguito dentro questo file. Salvate e uscite:
LogFile="/srv/www/esempio-ws.it/logs/esempio-ws.it-access.log"
LogType=W
LogFormat=1
LogSeparator=" "
SiteDomain="esempio-ws.it"
HostAliases="esempio-ws.it www.esempio-ws.it 127.0.0.1 localhost"
DNSLookup=1
DirData="/srv/lib/awstats"
DirCgi="/awstats/cgi-bin"
DirIcons="/awstatsicons"
AllowToUpdateStatsFromBrowser=0
AllowFullYearView=2
EnableLockForUpdate=0
DNSStaticCacheFile="dnscache.txt"
DNSLastUpdateCacheFile="dnscachelastupdate.txt"
SkipDNSLookupFor=""
AllowAccessFromWebToAuthenticatedUsersOnly=0
AllowAccessFromWebToFollowingAuthenticatedUsers=""
AllowAccessFromWebToFollowingIPAddresses=""
CreateDirDataIfNotExists=0
BuildHistoryFormat=text
BuildReportFormat=html
SaveDatabaseFilesWithPermissionsForEveryone=0
PurgeLogFile=0
ArchiveLogRecords=0
KeepBackupOfHistoricFiles=0
DefaultFile="index.php index.html index.htm"
SkipHosts=""
SkipUserAgents=""
SkipFiles=""
SkipReferrersBlackList=""
OnlyHosts=""
OnlyUserAgents=""
OnlyFiles=""
NotPageList="css js class gif jpg jpeg png bmp ico swf"
ValidHTTPCodes="200 304"
ValidSMTPCodes="1 250"
AuthenticatedUsersNotCaseSensitive=0
URLNotCaseSensitive=0
URLWithAnchor=0
URLQuerySeparators="?;"
URLWithQuery=0
URLWithQueryWithOnlyFollowingParameters=""
URLWithQueryWithoutFollowingParameters=""
URLReferrerWithQuery=0
WarningMessages=1
ErrorMessages=""
DebugMessages=0
NbOfLinesForCorruptedLog=50
WrapperScript=""
DecodeUA=0
MiscTrackerUrl="/js/awstats_misc_tracker.js"
LevelForBrowsersDetection=2
LevelForOSDetection=2
LevelForRefererAnalyze=2
LevelForRobotsDetection=2
LevelForSearchEnginesDetection=2
LevelForKeywordsDetection=2
LevelForFileTypesDetection=2
LevelForWormsDetection=0
UseFramesWhenCGI=1
DetailedReportsOnNewWindows=1
Expires=0
MaxRowsInHTMLOutput=1000
Lang="auto"
DirLang="./lang"
ShowMenu=1
ShowSummary=UVPHB
ShowMonthStats=UVPHB
ShowDaysOfMonthStats=VPHB
ShowDaysOfWeekStats=PHB
ShowHoursStats=PHB
ShowDomainsStats=PHB
ShowHostsStats=PHBL
ShowAuthenticatedUsers=0
ShowRobotsStats=HBL
ShowWormsStats=0
ShowEMailSenders=0
ShowEMailReceivers=0
ShowSessionsStats=1
ShowPagesStats=PBEX
ShowFileTypesStats=HB
ShowFileSizesStats=0
ShowOSStats=1
ShowBrowsersStats=1
ShowScreenSizeStats=0
ShowOriginStats=PH
ShowKeyphrasesStats=1
ShowKeywordsStats=1
ShowMiscStats=a
ShowHTTPErrorsStats=1
ShowSMTPErrorsStats=0
ShowClusterStats=0
AddDataArrayMonthStats=1
AddDataArrayShowDaysOfMonthStats=1
AddDataArrayShowDaysOfWeekStats=1
AddDataArrayShowHoursStats=1
IncludeInternalLinksInOriginSection=0
MaxNbOfDomain = 10
MinHitDomain = 1
MaxNbOfHostsShown = 10
MinHitHost = 1
MaxNbOfLoginShown = 10
MinHitLogin = 1
MaxNbOfRobotShown = 10
MinHitRobot = 1
MaxNbOfPageShown = 10
MinHitFile = 1
MaxNbOfOsShown = 10
MinHitOs = 1
MaxNbOfBrowsersShown = 10
MinHitBrowser = 1
MaxNbOfScreenSizesShown = 5
MinHitScreenSize = 1
MaxNbOfWindowSizesShown = 5
MinHitWindowSize = 1
MaxNbOfRefererShown = 10
MinHitRefer = 1
MaxNbOfKeyphrasesShown = 10
MinHitKeyphrase = 1
MaxNbOfKeywordsShown = 10
MinHitKeyword = 1
MaxNbOfEMailsShown = 20
MinHitEMail = 1
FirstDayOfWeek=1
ShowFlagLinks=""
ShowLinksOnUrl=1
UseHTTPSLinkForUrl=""
MaxLengthOfShownURL=64
HTMLHeadSection=""
HTMLEndSection=""
Logo="awstats_logo6.png"
LogoLink="http://awstats.sourceforge.net"
BarWidth = 260
BarHeight = 90
StyleSheet="/awstatscss/awstats_default.css"
color_Background="FFFFFF"
color_TableBGTitle="CCCCDD"
color_TableTitle="000000"
color_TableBG="CCCCDD"
color_TableRowTitle="FFFFFF"
color_TableBGRowTitle="ECECEC"
color_TableBorder="ECECEC"
color_text="000000"
color_textpercent="606060"
color_titletext="000000"
color_weekend="EAEAEA"
color_link="0011BB"
color_hover="605040"
color_u="FFAA66"
color_v="F4F090"
color_p="4477DD"
color_h="66DDEE"
color_k="2EA495"
color_s="8888DD"
color_e="CEC2E8"
color_x="C1B2E2"
ExtraTrackedRowsLimit=500
# kate /etc/awstat/awstat.1.esempio-ws.it.conf
copiate le righe qui di seguito dentro questo file. Salvate e uscite:
LogFile="/srv/www/1.esempio-ws.it/logs/1.esempio-ws.it-access.log"
LogType=W
LogFormat=1
LogSeparator=" "
SiteDomain="1.esempio-ws.it"
HostAliases="1.esempio-ws.it www.1.esempio-ws.it 127.0.0.1 localhost"
DNSLookup=1
DirData="/srv/lib/awstats"
DirCgi="/awstats/cgi-bin"
DirIcons="/awstatsicons"
AllowToUpdateStatsFromBrowser=0
AllowFullYearView=2
EnableLockForUpdate=0
DNSStaticCacheFile="dnscache.txt"
DNSLastUpdateCacheFile="dnscachelastupdate.txt"
SkipDNSLookupFor=""
AllowAccessFromWebToAuthenticatedUsersOnly=0
AllowAccessFromWebToFollowingAuthenticatedUsers=""
AllowAccessFromWebToFollowingIPAddresses=""
CreateDirDataIfNotExists=0
BuildHistoryFormat=text
BuildReportFormat=html
SaveDatabaseFilesWithPermissionsForEveryone=0
PurgeLogFile=0
ArchiveLogRecords=0
KeepBackupOfHistoricFiles=0
DefaultFile="index.php index.html index.htm"
SkipHosts=""
SkipUserAgents=""
SkipFiles=""
SkipReferrersBlackList=""
OnlyHosts=""
OnlyUserAgents=""
OnlyFiles=""
NotPageList="css js class gif jpg jpeg png bmp ico swf"
ValidHTTPCodes="200 304"
ValidSMTPCodes="1 250"
AuthenticatedUsersNotCaseSensitive=0
URLNotCaseSensitive=0
URLWithAnchor=0
URLQuerySeparators="?;"
URLWithQuery=0
URLWithQueryWithOnlyFollowingParameters=""
URLWithQueryWithoutFollowingParameters=""
URLReferrerWithQuery=0
WarningMessages=1
ErrorMessages=""
DebugMessages=0
NbOfLinesForCorruptedLog=50
WrapperScript=""
DecodeUA=0
MiscTrackerUrl="/js/awstats_misc_tracker.js"
LevelForBrowsersDetection=2
LevelForOSDetection=2
LevelForRefererAnalyze=2
LevelForRobotsDetection=2
LevelForSearchEnginesDetection=2
LevelForKeywordsDetection=2
LevelForFileTypesDetection=2
LevelForWormsDetection=0
UseFramesWhenCGI=1
DetailedReportsOnNewWindows=1
Expires=0
MaxRowsInHTMLOutput=1000
Lang="auto"
DirLang="./lang"
ShowMenu=1
ShowSummary=UVPHB
ShowMonthStats=UVPHB
ShowDaysOfMonthStats=VPHB
ShowDaysOfWeekStats=PHB
ShowHoursStats=PHB
ShowDomainsStats=PHB
ShowHostsStats=PHBL
ShowAuthenticatedUsers=0
ShowRobotsStats=HBL
ShowWormsStats=0
ShowEMailSenders=0
ShowEMailReceivers=0
ShowSessionsStats=1
ShowPagesStats=PBEX
ShowFileTypesStats=HB
ShowFileSizesStats=0
ShowOSStats=1
ShowBrowsersStats=1
ShowScreenSizeStats=0
ShowOriginStats=PH
ShowKeyphrasesStats=1
ShowKeywordsStats=1
ShowMiscStats=a
ShowHTTPErrorsStats=1
ShowSMTPErrorsStats=0
ShowClusterStats=0
AddDataArrayMonthStats=1
AddDataArrayShowDaysOfMonthStats=1
AddDataArrayShowDaysOfWeekStats=1
AddDataArrayShowHoursStats=1
IncludeInternalLinksInOriginSection=0
MaxNbOfDomain = 10
MinHitDomain = 1
MaxNbOfHostsShown = 10
MinHitHost = 1
MaxNbOfLoginShown = 10
MinHitLogin = 1
MaxNbOfRobotShown = 10
MinHitRobot = 1
MaxNbOfPageShown = 10
MinHitFile = 1
MaxNbOfOsShown = 10
MinHitOs = 1
MaxNbOfBrowsersShown = 10
MinHitBrowser = 1
MaxNbOfScreenSizesShown = 5
MinHitScreenSize = 1
MaxNbOfWindowSizesShown = 5
MinHitWindowSize = 1
MaxNbOfRefererShown = 10
MinHitRefer = 1
MaxNbOfKeyphrasesShown = 10
MinHitKeyphrase = 1
MaxNbOfKeywordsShown = 10
MinHitKeyword = 1
MaxNbOfEMailsShown = 20
MinHitEMail = 1
FirstDayOfWeek=1
ShowFlagLinks=""
ShowLinksOnUrl=1
UseHTTPSLinkForUrl=""
MaxLengthOfShownURL=64
HTMLHeadSection=""
HTMLEndSection=""
Logo="awstats_logo6.png"
LogoLink="http://awstats.sourceforge.net"
BarWidth = 260
BarHeight = 90
StyleSheet="/awstatscss/awstats_default.css"
color_Background="FFFFFF"
color_TableBGTitle="CCCCDD"
color_TableTitle="000000"
color_TableBG="CCCCDD"
color_TableRowTitle="FFFFFF"
color_TableBGRowTitle="ECECEC"
color_TableBorder="ECECEC"
color_text="000000"
color_textpercent="606060"
color_titletext="000000"
color_weekend="EAEAEA"
color_link="0011BB"
color_hover="605040"
color_u="FFAA66"
color_v="F4F090"
color_p="4477DD"
color_h="66DDEE"
color_k="2EA495"
color_s="8888DD"
color_e="CEC2E8"
color_x="C1B2E2"
ExtraTrackedRowsLimit=500
# kate /etc/awstat/awstat.2.esempio-ws.it.conf
copiate le righe qui di seguito dentro questo file. Salvate e uscite:
LogFile="/srv/www/2.esempio-ws.it/logs/2.esempio-ws.it-access.log"
LogType=W
LogFormat=1
LogSeparator=" "
SiteDomain="2.esempio-ws.it"
HostAliases="2.esempio-ws.it www.2.esempio-ws.it 127.0.0.1 localhost"
DNSLookup=1
DirData="/srv/lib/awstats"
DirCgi="/awstats/cgi-bin"
DirIcons="/awstatsicons"
AllowToUpdateStatsFromBrowser=0
AllowFullYearView=2
EnableLockForUpdate=0
DNSStaticCacheFile="dnscache.txt"
DNSLastUpdateCacheFile="dnscachelastupdate.txt"
SkipDNSLookupFor=""
AllowAccessFromWebToAuthenticatedUsersOnly=0
AllowAccessFromWebToFollowingAuthenticatedUsers=""
AllowAccessFromWebToFollowingIPAddresses=""
CreateDirDataIfNotExists=0
BuildHistoryFormat=text
BuildReportFormat=html
SaveDatabaseFilesWithPermissionsForEveryone=0
PurgeLogFile=0
ArchiveLogRecords=0
KeepBackupOfHistoricFiles=0
DefaultFile="index.php index.html index.htm"
SkipHosts=""
SkipUserAgents=""
SkipFiles=""
SkipReferrersBlackList=""
OnlyHosts=""
OnlyUserAgents=""
OnlyFiles=""
NotPageList="css js class gif jpg jpeg png bmp ico swf"
ValidHTTPCodes="200 304"
ValidSMTPCodes="1 250"
AuthenticatedUsersNotCaseSensitive=0
URLNotCaseSensitive=0
URLWithAnchor=0
URLQuerySeparators="?;"
URLWithQuery=0
URLWithQueryWithOnlyFollowingParameters=""
URLWithQueryWithoutFollowingParameters=""
URLReferrerWithQuery=0
WarningMessages=1
ErrorMessages=""
DebugMessages=0
NbOfLinesForCorruptedLog=50
WrapperScript=""
DecodeUA=0
MiscTrackerUrl="/js/awstats_misc_tracker.js"
LevelForBrowsersDetection=2
LevelForOSDetection=2
LevelForRefererAnalyze=2
LevelForRobotsDetection=2
LevelForSearchEnginesDetection=2
LevelForKeywordsDetection=2
LevelForFileTypesDetection=2
LevelForWormsDetection=0
UseFramesWhenCGI=1
DetailedReportsOnNewWindows=1
Expires=0
MaxRowsInHTMLOutput=1000
Lang="auto"
DirLang="./lang"
ShowMenu=1
ShowSummary=UVPHB
ShowMonthStats=UVPHB
ShowDaysOfMonthStats=VPHB
ShowDaysOfWeekStats=PHB
ShowHoursStats=PHB
ShowDomainsStats=PHB
ShowHostsStats=PHBL
ShowAuthenticatedUsers=0
ShowRobotsStats=HBL
ShowWormsStats=0
ShowEMailSenders=0
ShowEMailReceivers=0
ShowSessionsStats=1
ShowPagesStats=PBEX
ShowFileTypesStats=HB
ShowFileSizesStats=0
ShowOSStats=1
ShowBrowsersStats=1
ShowScreenSizeStats=0
ShowOriginStats=PH
ShowKeyphrasesStats=1
ShowKeywordsStats=1
ShowMiscStats=a
ShowHTTPErrorsStats=1
ShowSMTPErrorsStats=0
ShowClusterStats=0
AddDataArrayMonthStats=1
AddDataArrayShowDaysOfMonthStats=1
AddDataArrayShowDaysOfWeekStats=1
AddDataArrayShowHoursStats=1
IncludeInternalLinksInOriginSection=0
MaxNbOfDomain = 10
MinHitDomain = 1
MaxNbOfHostsShown = 10
MinHitHost = 1
MaxNbOfLoginShown = 10
MinHitLogin = 1
MaxNbOfRobotShown = 10
MinHitRobot = 1
MaxNbOfPageShown = 10
MinHitFile = 1
MaxNbOfOsShown = 10
MinHitOs = 1
MaxNbOfBrowsersShown = 10
MinHitBrowser = 1
MaxNbOfScreenSizesShown = 5
MinHitScreenSize = 1
MaxNbOfWindowSizesShown = 5
MinHitWindowSize = 1
MaxNbOfRefererShown = 10
MinHitRefer = 1
MaxNbOfKeyphrasesShown = 10
MinHitKeyphrase = 1
MaxNbOfKeywordsShown = 10
MinHitKeyword = 1
MaxNbOfEMailsShown = 20
MinHitEMail = 1
FirstDayOfWeek=1
ShowFlagLinks=""
ShowLinksOnUrl=1
UseHTTPSLinkForUrl=""
MaxLengthOfShownURL=64
HTMLHeadSection=""
HTMLEndSection=""
Logo="awstats_logo6.png"
LogoLink="http://awstats.sourceforge.net"
BarWidth = 260
BarHeight = 90
StyleSheet="/awstatscss/awstats_default.css"
color_Background="FFFFFF"
color_TableBGTitle="CCCCDD"
color_TableTitle="000000"
color_TableBG="CCCCDD"
color_TableRowTitle="FFFFFF"
color_TableBGRowTitle="ECECEC"
color_TableBorder="ECECEC"
color_text="000000"
color_textpercent="606060"
color_titletext="000000"
color_weekend="EAEAEA"
color_link="0011BB"
color_hover="605040"
color_u="FFAA66"
color_v="F4F090"
color_p="4477DD"
color_h="66DDEE"
color_k="2EA495"
color_s="8888DD"
color_e="CEC2E8"
color_x="C1B2E2"
ExtraTrackedRowsLimit=500
# kate /etc/apache2/vhosts.d/esempio-ws.it.conf
copiate le righe qui di seguito dentro questo file. Salvate e uscite. Questo
file deve essere completato, ma lo faremo configurando Apache:
Alias /awstatsclasses "/srv/www/esempio-ws.it/awstats/classes/"
Alias /awstatscss ""/srv/www/esempio-ws.it/awstats/css/"
Alias /awstatsicons ""/srv/www/esempio-ws.it/awstats/icon/"
ScriptAlias /awstats/cgi-bin ""/srv/www/esempio-ws.it/awstats/cgi-bin/"
Alias /awstats ""/srv/www/esempio-ws.it/awstats"
<Directory ""/srv/www/esempio-ws.it/awstats">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Iniziamo il tour di configurazione dei programmi:
-
Apache: (il server web) creiamo la struttura base di directory per ospitare i nostri siti:
# mkdir /srv/www/esempio-ws.it
# mkdir /srv/www/esempio-ws.it/log
# mkdir /srv/www/esempio-ws.it/cgi
# mkdir /srv/www/esempio-ws.it/html
# mkdir /srv/www/1.esempio-ws.it
# mkdir /srv/www/1.esempio-ws.it/log
# mkdir /srv/www/1.esempio-ws.it/cgi
# mkdir /srv/www/1.esempio-ws.it/html
# mkdir /srv/www/2.esempio-ws.it
# mkdir /srv/www/2.esempio-ws.it/log
# mkdir /srv/www/2.esempio-ws.it/cgi
# mkdir /srv/www/2.esempio-ws.it/html
# chown -R wwwrun:www /srv/www/*ws.it
Editiamo il file /etc/apache2/listen.conf . Troviamo e correggiamo la seguente riga come qui di seguito:
NameVirtualHost *:80
Fate attenzione che non ci sia il # a inizio riga, altrimenti viene ignorata.
Ora attiviamo i due domini virtuali (significa che con un sono IP pubblico, ma due nomi FQDN diversi apache tratta i due nomi come due web server totalmente distinti). Creiamo il file /etc/apache2/vhosts.d/1.esempio-ws.it.org e inseriamo le seguenti righe:
<VirtualHost *:80>
ServerAdmin Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo.
ServerName www.1.esempio-ws.it
ServerAlias 1.esempio-ws.it
DocumentRoot "/srv/www/1.esempio-ws.it/html"
ErrorLog /srv/www/1.esempio-ws.it/logs/1.esempio-ws.it-error.log combined
CustomLog /srv/www/1.esempio-ws.it/logs/1.esempio-ws.it-access.log combined
<Directory "/srv/www/1.esempio-ws.it/html">
Options None
# Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi/ "/srv/www/1.esempio-ws.it/cgi/"
<Directory "/srv/www/1.esempio-ws.it/cgi/">
AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Creiamo il file /etc/apache2/vhosts.d/2.esempio-ws.it.org e inseriamo le seguenti righe:
<VirtualHost *:80>
ServerAdmin Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo.
ServerName www.2.esempio-ws.it
ServerAlias 2.esempio-ws.it
DocumentRoot "/srv/www/2.esempio-ws.it/html"
ErrorLog /srv/www/2.esempio-ws.it/logs/2.esempio-ws.it-error.log combined
CustomLog /srv/www/2.esempio-ws.it/logs/2.esempio-ws.it-access.log combined
<Directory "/srv/www/2.esempio-ws.it/html">
Options None
# Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi/ "/srv/www/2.esempio-ws.it/cgi/"
<Directory "/srv/www/2.esempio-ws.it/cgi/">
AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Completiamo il file /etc/apache2/vhosts.d/esempio-ws.it.org inserendo all’inizio le seguenti righe:
<VirtualHost *:80>
ServerAdmin Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo.
ServerName www.esempio-ws.it
ServerAlias esempio-ws.it
DocumentRoot "/srv/www/esempio-ws.it/html"
ErrorLog /srv/www/esempio-ws.it/logs/esempio-ws.it-error.log combined
CustomLog /srv/www/esempio-ws.it/logs/esempio-ws.it-access.log combined
<Directory "/srv/www/esempio-ws.it/html">
Options None
# Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi/ "/srv/www/esempio-ws.it/cgi/"
<Directory "/srv/www/esempio-ws.it/cgi/">
AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all
</Directory>
Testiamo la nostra configurazione
# /etc/init.d/apache2 configtest
Se non ci sono errori di sintassi nei nostri file di configurazione comparirà la scritta “Syntax OK”. Proviamo anche a far girare il nostro web server Apache. Perché questo funzioni, però, il server deve essere connesso a internet e deve comunicare con un DNS pubblico. Questo perché Apache riuscirà a dare il corretto accesso ai file dei siti solo se può rilevare e verificare la combinazione nome-IP (www.1.esempio-ws.it – 85.93.41.76).
Dunque procediamo mettendo una pagina test per ogni sito, poi lanciamo il server Apache e, in fine, accediamo al nostro sito dal un PC o direttamente dal nostro server.
# echo "<? phpinfo()?>" > /srv/www/esempio-ws.it/html/index.php
# echo "<? phpinfo()?>" > /srv/www/1.esempio-ws.it/html/index.php
# echo "<? phpinfo()?>" > /srv/www/2.esempio-ws.it/html/index.php
# chown wwwrun:www /srv/www/esempio-ws.it/html/index.php
# chown wwwrun:www /srv/www/1.esempio-ws.it/html/index.php
# chown wwwrun:www /srv/www/2.esempio-ws.it/html/index.php
# /etc/init.d/apache2 start
Ora, da un PC o dal server, apriamo un browser e mettiamo, una dopo l’altra, le tre URL www.esempio-ws.it, www.1.esempio-ws.it, www.2.esempio-ws.it .
Tutto dovrebbe essere in ordine e ci comparirà, per ciascun indirizzo, una lunga pagina che descrive lo stato del server.
OK! Il primo passo è stato completato con successo. Ora, prima di procedere, spegniamo Apache.
# /etc/init.d/apache2 stop
-
Postfix: (il serve mail di spedizione detto MTA) editiamo il file /etc/postfix/main.cf e cerchiamo le seguenti righe modificandole come di seguito
myhostname = mail.esempio-ws.it
mydomain = esempio-ws.it
home_mailbox = Maildir/
mydestination = $myhostname, localhost.$mydomain,/etc/postfix/local-domains
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
reject_unauth_destination,
reject_rbl_client opm.blitzed.org,
permit
message_size_limit = 40960000
Procediamo creando ed editando /etc/postfix/local-domain
esempio-ws.it
1.esempio-ws.it
2.esempio-ws.it
Ora testiamo il nostro MTA server
# /etc/init.d/postfix start
Se non ci sono errori di sintassi Postfix partirà regolarmente. Per completare il testo dobbiamo assicurarci che il server sia collegato a internet (come nel caso precedente) e dobbiamo aggiungere un utente. Lo facciamo da riga di comando:
# useradd -d /home/mtatest -g users -m -s /bin/bash mtatest
# passwd mtatest
Dopo aver dato l’ultima istruzione (passwd) Linux ci chiederà per due volte la password.
A questo punto per completare il nostro test abbiamo bisogno di un PC connesso a internet equipaggiato con un programma di posta. Aggiungiamo in questo programma un’account di spedizione con i seguenti parametri:
server SMTP: mail.esempio-ws.it
User: mtatest
Password: quella che hai messo
Ora inviamo una mail alla nostra casella ordinaria attraverso la nuova account di spedizione. In primo luogo il nostro server dovrebbe subito accettare la nostra mail e nel giro di qualche secondo essere recapitata nella nostra casella di destinazione.
OK. Se tutto è andato a buon porto passiamo alla tappa successiva. Qualora il risultato non è quello atteso teniamo presente che in alcuni casi la recapitazione delle email può richiedere minuti e non secondi. Se davvero c’è qualche problema lo possiamo scoprire consultando i file di log /var/log/mail , /var/log/mail.err , /var/log/mail.info e /var/log/mail.warn .
-
Dovecot: (il server di posta di ricezione POP e IMAP) creiamo una configurazione base. Soddisferà le esigenze di quasi tutti. Creiamo ed editiamo il file di configurazione /etc/dovecot/dovecot.conf
base_dir = /var/run/dovecot/
#protocols = imap imaps pop3 pops
protocols = imap pop3
ssl_disable = yes
log_path = /var/log/dovecot.log
login_user = dovecot
disable_plaintext_auth = no
mail_location = maildir:~/Maildir
first_valid_uid = 1000
first_valid_gid = 0
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
protocol imap {
listen = *
}
auth default {
mechanisms = plain
passdb shadow {
}
userdb passwd {
}
user = root
}
-
ProFTP: (il server FTP) questo programma usa una configurazione molto simile ad Apache, motivo per il quale è scelto in questa guida insieme alle sue eccellenti caratteristiche di FTP server. Per iniziare la configurazione creiamo la cartella per i domini virtuali ed editiamo il file principale di configurazione:
# mkdir /etc/proftpd/vhosts.d
# kate /etc/proftpd/
copiate le righe qui di seguito dentro questo file. Salvate e uscite.
ServerAdmin Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo.
ServerName "PROVA-WS server sperimentale FTP"
ServerType standalone
Port 21
User ftp
Group ftp
MaxInstances 30
Umask 002
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 3600
DefaultRoot /home/%u
AllowOverwrite yes
DisplayLogin welcome.msg
DisplayFirstChdir .message
PidFile /var/run/proftpd.pid
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth
ExtendedLog /var/log/proftpd/paranoid.log ALL default
Include /etc/proftpd/vhosts.d/*.conf
A questo punto creiamo i tre file che controllano l’accesso ai tre siti ai relativi utenti. Chiameremo i tre utenti esempio, 1.esempio, 2.esempio .
# kate /etc/proftpd/vhosts.d/esempio-ws.it.conf
copiate le righe qui di seguito dentro questo file. Salvate e uscite:
<Anonymous /srv/www/esempio-ws.it/html>
User esempio
Group www
AnonRequirePassword yes
<Limit LOGIN>
AllowAll esempio
</Limit>
</Anonymous>
# kate /etc/proftpd/vhosts.d/1.esempio-ws.it.conf
copiate le righe qui di seguito dentro questo file. Salvate e uscite:
<Anonymous /srv/www/1.esempio-ws.it/html>
User 1.esempio
Group www
AnonRequirePassword yes
<Limit LOGIN>
AllowUser 1.esempio
</Limit>
</Anonymous>
# kate /etc/proftpd/vhosts.d/2.esempio-ws.it.conf
copiate le righe qui di seguito dentro questo file. Salvate e uscite:
<Anonymous /srv/www/2.esempio-ws.it/html>
User 2.esempio
Group www
AnonRequirePassword yes
<Limit LOGIN>
AllowUser 2.esempio
</Limit>
</Anonymous>
Il nostro server FTP ora è pronto. Aggiungiamo i tre utenti, lanciamo ProFTP e testiamolo:
# useradd -d /home/esempio -g users -m -s /bin/bash esempio
# passwd mtatest
# useradd -d /home/1.esempio -g users -m -s /bin/bash 1.esempio
# passwd mtatest
# useradd -d /home/2.esempio -g users -m -s /bin/bash 2.esempio
# passwd mtatest
Naturalmente segna la password che inserisci. Ora passiamo a lanciare ProFTP e testiamolo:
# /etc/init.d/proftpd start
Ora che ProFTP sta funzionando per completare il nostro test ci dobbiamo assicurare che il nostro server sia collegato a internet e metterci su un PC connesso alla rete e con un programma FTP client. Quindi colleghiamoci all’URL www.esempio-ws.it usando i nostri tre utenti (esempio, 1.esempio, 2.esempio). Proviamo ad uploadare e downloadare dei file, creare e rimuovere delle cartelle.
Lasciamo dei file come traccia dei nostri test. Vedremo che a seconda del nome utente usato per connettersi ci troveremo in uno spazio web diverso.
Ok. Prima di procedere oltre spegniamo ProFTP:
# /etc/init.d/proftpd stop
-
MySQL: (il server DBMS) la configurazione di default può egregiamente soddisfare le esigenze dei più. Quindi non ritocchiamola, ma limitiamoci a lanciare manualmente per la prima volta volta MySQL per verificare la creazione del database base:
# /etc/init.d/mysql start
-
SSHd: (il Server SSH) la configurazione necessaria serve solo per controllare chi può accedere e da dove. Editiamo il file /etc/ssh/sshd_config, lanciamo ssh e testiamolo. Nell’editing cerchiamo le righe riportate qui di seguito e modifichiamole come a seguire:
LoginGraceTime 60
PermitRootLogin no
AllowUsers esempio 1.esempio 2.esempio
MaxAuthTries 5
PermitEmptyPasswords no
Per motivi di sicurezza l’utente root non può mai connettersi da remoto. Si permette, invece, l’accesso ad un utente non privilegiato che poi, tramite il comando su, acquisisce i privilegi di amministratore. La configurazione di su può essere un ulteriore controllo su chi può o non può diventare amministrtatore.
Detto questo lanciamo sshd:
# /etc/init.d/sshd start
Per testarlo ci spostiamo sul nostro PC connesso a internet (naturalmente anche il server lo è) e usiamo un’applicazione ssh clinet come PuTTY. I parametri per connettersi sono:
server www.esempio-ws.it
Nome esempio (o 1.esempio o 2.esempio)
Password quella inserita.
Dopo la richiesta di accettazione della chiave di crittografia si apre il tipico terminale unix. Qui possiamo chiedere di diventare amministratori tramite il comando su e fare... quello che vogliamo.
OK. Prima di passare oltre chiudiamo sshd:
# /etc/init.d/sshd stop
-
Awstats: (l’analizzatore di traffico web) in realtà lo abbiamo già configurato quando abbiamo scritto i file /etc/awstat/awstat.esempio-ws.it.conf , /etc/awstat/awstat.1.esempio-ws.it.conf , /etc/awstat/awstat.2.esempio-ws.it.conf . Le uniche due cose che ci mancano per far funzionare awstats sono: che qualcuno usi i nostri siti e far generare l’analisi.
Occupiamoci della seconda cosa istruendo cron perché una volta al giorno lanci l’analisi dei log di Apache. Editiamo il file /etc/crontab e aggiungi la seguente riga:
50 3 * * * root /etc/cron.local/awstats.cron
Il comando istruisce cron perché ogni giorno alle 3 e 50 della mattina esegua l’istruzione /etc/cron.local/awstats.cron . Ora creiamo questo secondo file:
# mkdir /etc/cron.local
# chmod 744 /etc/cron.local/awstats.cron
# kate /etc/cron.local/awstats.cron
copiate le righe qui di seguito dentro questo file. Salvate e uscite:
#!/bin/bash
###################################
#
# awstats.cron di Stefano Bortolato
# 08/04/2007
#
###################################
# Version 0.1
#
# Creazione variabli principali
#
awstats_dir_conf="/etc/awstats"
log_dir="/var/log"
_DATA=`date +%G-%m-%d`
#
# Creazione elenco grezzo dei file di configurazione di awstats
awstats_sites=`/bin/ls $awstats_dir_conf/`
#
# Pulizia delle righe da "awstats."
awstats_sites="`echo "$awstats_sites" | sed -e 's/awstats.//g'`"
#
# Eliminazione di ".conf" da ogni riga
awstats_sites="`echo "$awstats_sites" | sed -e 's/.conf//g'`"
# Inizio del ciclo FOR per l'aggiornamento di ogni database-sito
#
i=""
for i in $awstats_sites
do
# crea una traccia di inizio aggionamento nel log per ogni sito aggiornato
# e lancia l'aggiornamento
#
echo -e "$_DATA START update log database for domain $i" >> $log_dir/awstats.log
/usr/bin/perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=$i -update 2>> $log_dir/awstats.err.log >> $log_dir/awstats.log
# crea una traccia di fine aggiornamento nel log per ogni aggiornamento
#
echo -e "$_DATA END update log database for domain $i \n" >> $log_dir/awstats.log
done
Questo script riconosce i vari file di configurazione e lancia l’aggiornamento dell’analisi del traffico per ciascun file di configurazione. Ogni file di configurazione descrive un sito. In questo modo sarà sufficiente creare un nuovo file di configurazione per aggiungere un sito. Una grande comodità. Se un domani aggiungiamo dei siti virtuali in apache basterà aggiungere il relativo file di configurazione (es. /etc/awstat/awstat.nuovo.sito.esempio-ws.it ) per avere una nuova analisi del log senza dover fare alcunché.
Per testare il nostro analizzatore di traffico web aspettiamo di completare la configurazione perché abbiamo bisogno di un minimo di traffico (almeno un accesso per sito).
OK. Siamo in dirittura di arrivo. Passiamo alla configurazione di SquirrelMail.
-
SquirrelMail: (la webmail) e... sorpresa!!! SquirrelMail è già configurato. Lo dobbiamo solo testare. Dal momento che ci server che Apache sia attivo lo faremo alla fine. Ora dal nostro PC connesso a internet inviamo una mail alle nostre tre account ospitate nel web server (assicuriamoci che anche il server sia connesso a internet!). I nostri tre indirizzi sono: Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo. , Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo. , Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo. .
OK! Passiamo a PhpMyAdmin.
-
PhpMyAdmin: (per l’amministrazione di MySQL) per configurarlo dobbiamo avere il nostro server operativo. Bene provvediamo ad attivarlo. In questo modo avremo un po’ di traffico da analizzare con awstats. Prepariamo il nostro PC connesso a internet e il colleghiamo anche il server a internet qualora non lo fosse. Dal nostro emulatore di terminale sul server, connessi come root, diamo le seguenti istruzioni:
# /etc/init.d/mysql start
# /etc/init.d/apache2 start
Dal nostro PC connesso a internet accediamo alla seguente URL attraverso un browser internet: www.esempio-ws.it/phpmyadmin . Teniamo sotto mano le informazioni precedentemente annotate (se non le abbiamo guardiamo alle righe qui di seguito) per poter completare la configurazione del nostro applicativo.
Se le cose stanno come con la versione 2.11.8 è già funzionante con la pre-configurazione di base. Ma ipotizziamo che non sia così.
Procediamo, dunque, accedendo all’indirizzo: www.esempio-ws.it/phpmyadmin/scripts/setup.php . Se compare una box rossa, in alto, che dice “Not secure connection” non preoccupatevi. Tutto è in ordine, ma bisognerebbe attivare una connessione web SSL per impedire l’intercettazione dei dati. Per ora trascuriamo questo aspetto.
Se, invece, compare un’altra box rossa che dice “Can not load or save configuration” allora dobbiamo creare o sistema la cartella di configurazione dando le istruzioni qui di seguito
# mkdir /srv/www/esempio-ws.it/html/phpmyadmin/config
# chown -R wwwrun:www /srv/www/esempio-ws.it/html/phpmyadmin
Bene: possiamo procedere alla configurazione. Clicchiamo sul bottone “ADD” della sezione Server. Completate i campi riportati qui di seguito come da queste pagine. Ignorate gli altri campi. In fine, scorrendo in basso la pagina, cliccate sul bottone “ADD”:
Server hostname: localhost
PHP extention to use: mysql
Compress connection: chekkare
Authentication type: cookie
User for config auth: root
Password for config auth: la vostra password di
amministratore
Dal nostro terminale diamo le seguenti istruzioni di copia della configurazione e rinomina del file wizard di configurazione per motivi di sicurezza (nota: il file wizard per generare la configurazione è preferibile eliminarlo. Dal momento che non siamo certi di aver dovutamente completato la nostra configurazione lo rinominiamo in modo da poterlo riutilizzare in caso di necessità):
# cp /srv/www/esempio-ws.it/html/phpmyadmin/config/config.inc.php /srv/www/esempio-ws.it/html/phpmyadmin
# mv /srv/www/esempio-ws.it/html/phpmyadmin/scripts/setup.php /srv/www/esempio-ws.it/html/phpmyadmin/scripts/setup.php_
Ora il nostro applicativo di amministrazione è pronto all’uso. Per motivi di sicurezza è opportuno accedere immediatamente al nostro DBMS MySQL e cambiare la password dell’utente root (attenzione: gli utenti root sono due. Uno previsto per un accesso dall’esterno del server ed uno per accedere da dentro il server. Faccia attenzione che la password sia sufficientemente complicata: lunga almeno 8 caratteri, composta da lettere e numeri e con lettere in maiuscolo e minuscolo. Non fidatevi di internet; i cracker sono in agguato e possono confezionarvi amare sorprese!). L’operazione è facile. Andiamo all’URL www.esempio-ws.it/phpmyadmin , nella form mettiamo come nome utente “root” e lasciamo vuoto il campo password. Clicchiamo su “Esegui”.
Ora andiamo sul link “Privilegi”, clicchiamo e ci comparirà il pannello di amministrazione degli utenti. Clicchiamo sul disegnino del primo utente root e inseriamo la password (sezione “Cambia password”. Dovrete un po’ scorrere in basso la pagina), due volte chiaramente, e clicchiamo sul bottone “Esegui” della sezione. Ricordatevi i criteri di sicurezza minima per creare la vostra password...
Ora clicchiamo sul tag in alto “Privilegi” e... Ritorna la form iniziale di login: che è successo? Significa che la password è stata accettata e da ora, per ogni operazione, è richiesta. Quindi ri-autentichiamoci come root con la nostra nuova password, clicchiamo sul link “Privilegi” e dall’elenco degli utenti clicchiamo sull’icona dell’utente root ancora sprotetto (dovrebbe essere l’ultimo dell’elenco). Come prima impostiamo la password (per comodità personale può essere utile impostarla uguale alla precedente).
NOTA: prendete nota delle password che inserite, magari su un foglio che custodirete in un luogo opportuno. Non si tratta di paranoia, ma quando ne avrete bisogno se non le avete scritte saranno davvero dolori!
OK! PhpMyAdmin è configurato. Usciamo cliccando sul link in alto, sulla colonna a sinistra e passiamo alla tappa seguente.
-
WebMin: (per l’amministrazione del server via Web) il nostro sistema di amministrazione dovrebbe essere già tutto a posto. Potrebbe essere necessario personalizzare qualche configurazione per il controllo delle parti (hardware o software) del server o delle impostazioni globali del programma.
Usandolo scoprirete se necessita di qualche colpo di lima.
-
LogRotate: (per l’automatizzazione della compressione-cancellazione dei log) siamo ormai alla fine della nostra impresa. Ritocchiamo la configurazione base di log rotate per Apache. Editiamo il file /etc/logrotate.d/apache2 aggiungendo, al fondo del file, queste righe. Essi si occuperanno di comprimere e ri-generare i file di log dei nuovi domini virtuali.
/srv/www/*/log/*access.log {
compress
dateext
maxage 365
rotate 99
size=+4096k
notifempty
missingok
create 644 root root
postrotate
/etc/init.d/apache2 reload
endscript
}
/srv/www/*/log/*error.log {
compress
dateext
maxage 365
rotate 99
size=+1024k
notifempty
missingok
create 644 root root
postrotate
/etc/init.d/apache2 reload
endscript
}
Aggiungiamo la gestione dei log di Dovecot. Dobbiamo creare ed editare il file /etc/logrotate.d/dovecot :
/var/log/dovedot/*.log {
compress
dateext
maxage 365
rotate 99
size=+1024k
notifempty
missingok
create 644 root root
postrotate
/etc/init.d/dovedot reload
endscript
}
-
Aggiungiamo la gestione dei log di ProFTP. Dobbiamo creare ed editare il file /etc/logrotate.d/proftpd :
/var/log/proftpd/*.log {
compress
dateext
maxage 365
rotate 99
size=+1024k
notifempty
missingok
create 644 root root
postrotate
/etc/init.d/proftpd reload
endscript
}
-
Aggiungiamo la gestione dei log di Awstats. Dobbiamo creare ed editare il file /etc/logrotate.d/awstats :
/var/log/awstats.log {
compress
dateext
maxage 365
rotate 99
size=+1024k
notifempty
missingok
create 644 root root
endscript
}
-
Finalmente avviamo il nostro nuovo server. Non dimentichiamoci, subito dopo, di far un po’ di pulizia dai resti dei pacchetti di installazione.
Procediamo con la strada un po’ più lunga, ma che ci permette di risparmiare un po’ tempo.
Lanciamo yast e andiamo alla sezione Sistema → Editor dei runlevel e selezioniamo il “Modo per esperto”. Se non usiamo usiamo OpenSuSE apriamo l’applicativo di gestione dei runlevel. Qui impostiamo che vengano avviati al livello 3 e 5 le seguenti applicazioni. Se sono già attive facciamole ripartire:
apache
postfix
dovecot
proftpd
mysql
sshd
Facciamo un po’ di navigazione e giri sul nostro nuovo server. Purtroppo è ancora vuoto per cui la nostra navigazione è azzoppata in partenza. Ma ci serve un po’ di traffico per avere qualche grafico con Awstats.
Forziamo il ciclo di aggiornamento di awstat tramite il comando:
# /etc/cron.local/awstats.cron
-
Per vedere i nostri primi grafici basta inserire la seguente URL nel nostro internet browser preferito http://www.esempio-ws.it/awstats/awstats.pl?config=esempio-ws.it . Per vedere i grafici degli alti due viti virtuali basterà usare queste due URL:
http://www.esempio-ws.it/awstats/awstats.pl?config=1.esempio-ws.it
http://www.esempio-ws.it/awstats/awstats.pl?config=2.esempio-ws.it
Come vede è sufficiente scrivere alla fine dell’URL il nome del sito che vogliamo visionare. Il nome coincide con il nome che abbiamo dato al file di configurazione di Awstats (Ricordate? /etc/awstat/awstat.esempio-ws.it.conf senza il “awstat” iniziale de il “conf” finale). Per aggiungere nuovi siti da analizzare basta ricordarsi di usare lo stesso nome del sito per il file di configurazione e per l’URL di Awstats per vedere l’analisi dei log. -
A questo punto cancelliamo le cartelle (ed il loro contenuto) che abbiamo creato in /tmp per installare i vari applicativi (ricordate che questa operazione può essere fatta solo dall’utente root!):
# rm -R /tmp/proftp-*
# rm -R /tmp/squirrelmail-*
# rm -R /tmp/phpmyadmin-*
# rm -R /tmp/webmin-*
# rm -R /tmp/awstats-*
È prudente anche cancellare il file di configurazione di PhpMyAdmin /srv/www/esempio-ws.it/html/phpmyadmin/scripts/setup.php_ . Potrebbe essere sufficiente il cambio di nome che abbiamo precedentemente fatto, ma è meglio non fidarsi. Se un domani abbiamo bisogno di questo file lo possiamo sempre ripescare dal pacchetto originale di installazione.
Perfetto! Se non ci sono stati imprevisti a questo punto abbiamo un bel web server in funzione, completo di server di posta per inviarla e riceverla, server FTP per i nostri clienti per amministrarsi il proprio spazio web ed un completo, potente e semplice sistema di amministrazione del computer e del DBMS.
Prima di tirare il meritato sospiro di sollievo perché abbiamo concluso con pieno successo il nostro lavoro suggerisco di far ripartire il server e di consultare con attenzione i log per verificare che non ci sia sfuggito qualcosa (ad esempio l’auto avviamento di un servizio) e dopo il riavvio una navigazione in tutte le parti per un ultimo collaudo di accettazione.
Volutamente molti aspetti sono stati trascurati. Per eventuali perfezionamenti e approfondimenti sulle singole applicazioni e servizi rimando alla documentazione interna e ai numerosi HowTo reperibili in rete.
Questa guida ha uno scopo sopratutto di laboratorio per offrire ad altri conoscenze conquistate con grande fatica e che, al momento, non ho ancora trovato raccolte e spiegate come in un unico documento come questo.
Pertanto consiglio caldamente a chi volesse usare queste pagine di realizzare il tutto su un computer di prova. E prima di mettere in produzione il sistema di integrarlo a dovere (ad esempio manca l’antivirus per la scansione delle mail, la quota per controllare lo spazio concesso a ciascun sito, ecc...), perfezionarlo (ad esempio non ho nemmeno accennato al perfezionamento di Apache perché sia veloce e non sovraccarichi il computer), testarlo dovutamente e quindi portarlo in produzione.
Se volete semplicemente divertirvi per avere un vostro personale webserver in rete questa guida potrebbe fare al caso vostro se la seguite con le dovute cautele.
Spero, comunque, che queste pagine siano interessanti e utili per voi coraggiosi lettori.



Testi

