Apache Parte 1

  • 1,127 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,127
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
19
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. WEB SERVER APACHE PARTE 1 1
  • 2. Premessa • Il Web è basato su un'architettura client-server • Un processo particolare (Web server) si occupa di processare le richieste di risorse Web • Le richieste sono veicolate attraverso il protocollo HTTP (Hyper Text Transfer Protocol) • Ci sono modi diversi di implementare un Web server • Ci sono diversi Web server 2
  • 3. Tre modalità di gestione richieste HTTP Piattaforma client Browser Richiesta Richiesta http http Risposta (1) Richiesta Risposta (i) http Risposta http http http Processo (a) (c) processo server (4) listener-dispatcher (b) (2) fork thread 1 (ii) (iv) thread 2 helper 1 Processo thread 3 (iii) helper 2 figlio thread 4 helper 3 Metodo fork Metodo multithread Metodo helper (aka worker) (aka prefork) (3) Piattaforma Apache 1.3.x server Apache 2.x 3
  • 4. Due parole su sicurezza e prestazioni Processo Thread molti processi molti processi un processo più thread un thread molti thread per processo per processo 4
  • 5. Overview di Apache 5
  • 6. Apache: A patchy server 1994: public domain HTTP daemon (NCSA) sviluppato da Rob McCool al National Center for Supercomputing Applications, University of Illinois, Urbana-Champaign Necessità di modifiche (patches) Brian Behlendorf Roy T. Fielding Feb. 1995: un gruppo di Rob Hartill Webmaster David Robinson si coordinano creando Cliff Skolnick l’Apache Group Randy Terbush Robert S. Thau Andrew Wilson with additional contributions Eric Hagberg Frank Peters Nicolas Pioch 6
  • 7. Software per server Web <-WTH!!! Fonte: GoDaddy.com Netcraft Web Server Survey (http://www.netcraft.com/) Server Web più diffusi: Apache, …, Microsoft Internet Information Server, altri (GWS, SunONE, Zeus, iPlanet Web Server, …) Sistemi e Servizi di Rete - LS 2004/2005 – Server Web 7
  • 8. Caratteristiche di Apache • Free ed Open source • Portabile (Unix, Win32, OS/2, BeOS, ...) • Efficiente • Supporta HTTP/1.1 • Stabile e sicuro • Modulare • Supporta feature avanzate – Autenticazione – Personalizzazione log – Negoziazione contenuti – Virtual hosts 8
  • 9. Versioni di Apache 9
  • 10. Apache 1.3 • Versione storica di enorme successo • Ancora supportata • Caratteristiche salienti: – Approccio prefork per il servizio concorrente delle richieste – File di configurazione altamente configurabile – Supporto per HTTP/1.1, Virtual host, ... • Limiti principali – Approccio prefork può limitare le prestazioni – Scarsa portabilità fuori da contesti Unix (necessita system call Unix) 10
  • 11. Apache 2.0 • Major rewriting del codice • Modifiche architetturali fondamentali – Concetto di MPM (Multi Process Model) • Benefici: – Migliore portabilità su piattaforme non Unix – Maggiori prestazioni e incremento della flessibilità 11
  • 12. MPM In Apache • MPM=Multi Process Model • Modelli thread “nativi” – beos – mpm_os2 – mpm_winnt • Modelli “unix-oriented” – prefork (come apache 1.3, massima stabilità) – worker (usa thread, massime prestazioni) 12
  • 13. Apache 2.2 • Apache 2.2 è una minor version – Le modifiche non sono a livello architetturale • Riorganizzazione del file di configurazione – Molte distribuzioni linux introducevano un layout alternativo anche con apache 2.0 (es. Debian) • Riorganizzazione dei moduli – Alcuni moduli sono stati rinominati – Alcuni moduli “sperimentali” ora sono standard – Alcuni moduli sono stati riscritti e suddivisi – Nuovi moduli/nuovi MPM • Nuova API unificata per l'accesso ai DB • Migliorie generali – Supporto per file > 2GB 13
  • 14. Nuovo file di configurazione • Si passa da un file monolitico (httpd.conf) in una gerarchia di file articolata – I virtual hosts vengono configurati in un file separato – Le configurazioni sui moduli sono separate dal file centrale • Obiettivi: Manutenzione più semplice – Maggiore gestibilità delle configurazioni (es. se abbiamo molti virtual hosts) – Semplifica l'automazione della gestione del file di configurazione 14
  • 15. Riorganizzazione dei moduli • Moduli rinominati: – mod_imap → mod_imagemap – mod_access → mod_authz_host – mod_auth_ldap • Moduli sperimentali divenuti stabili – mod_cache e altri moduli simili (da usare con attenzione) – mod_dumpio (dump all I/O) • Moduli spezzati in sottoparti: – mod_auth viene suddiviso in molti sottomoduli – mod_proxy è esteso e spezzato in varie parti • New entries: – mod_dbd, mpm_event 15
  • 16. Nuova API per accesso a DB • Implementata mediante mod_dbd • La nuova API offre un layer di connettività a DBMS usabile da altri moduli – Semplifica e toglie codice ridondante nei moduli – Il modulo è sicuro, poiché tratta ogni untrusted input come user data. Il problema è come viene utilizzato da moduli terzi. Per evitare SQL Injection meglio filtrare i dati in input  $untrusted =~ /([a-z]+)/; ← Teniamo i caratteri a-z  $trusted = $1; 16
  • 17. Installare Apache 17
  • 18. Per gli impazienti • download dei sorgenti da httpd.apache.org – i sorgenti sono disponibili anche sul sito del corso • Noi facciamo riferimento alla versione 2.2 di apache $ tar -xzvf httpd-<versione>.tar.gz $ cd httpd-<versione> $ ./configure --prefix=</destination/path> $ make $ make install 18
  • 19. Principali opzioni di configurazione • Opzioni da passare allo script configure – --prefix=<prefix> – --with-mpm={beos|worker|prefork|mpm_os2} – --enable-modules={...} • Prefix è la directory dove verrà installato Apache • MPM indica quale sistema MPM dovrà essere usato per gestire le richieste concorrenti • Enable modules indica quali moduli dovranno essere abilitati (il default contiene I moduli più comunemente utilizati) 19
  • 20. Dopo aver installato apache Albero di directory: <prefix> bin conf htdocs cgi­bin logs 20
  • 21. Eseguibili di Apache <prefix> bin httpd apachectl ab htpasswd 21
  • 22. Eseguibili di apache • httpd: binario del server apache • ab: apache benchmark, strumento per misurare le prestazioni del Web server – ab -c <parallelismo> -n <# richieste> <URL> • apachectl: script per lanciare, fermare e controllare il demone – apachectl start – apachectl stop – apachectl restart • htpasswd: serve per generare e modificare file di autenticazione di apache – htpasswd [-c] <file.passwd> <username> 22
  • 23. Configurare Apache 23
  • 24. File di configurazione <prefix> conf extras httpd.conf magic mime.types 24
  • 25. File di configurazione • File conf/httpd.conf • 2 sezioni – impostazioni globali – impostazioni del server di default • Presenza di file aggiuntivi nella directory extras – Ogni aspetto specifico della configurazione non richiede di modificare il file principale – Configurazione alcune impostazioni di default – Configurazioni specifiche per moduli (es. SSL) – Configurazione MPM – Configurazione del virtual hosting 25
  • 26. Impostazioni globali • ServerRoot – top level directory per altri file di configurazione • PidFile (facoltativo) – usato da apachectl per riconoscere httpd • Timeout (facoltativo) • Parametri per connessioni persistenti (facoltativi) – Keepalive (abilita o meno connessioni persistenti) – MaxKeepAliveRequests (dopo un certo numero di richieste forza la chiusura della connessione) – KeepAliveTimeout (dopo un certo tempo forza la chiusura della connessione) 26
  • 27. Impostazioni globali • Listen – porta su cui ascolta il server – valori tipici: 80 o 8080 per server “non di sistema” • Nel nostro caso dovremo usare 8080... Perchè? • LoadModule – Carica moduli esterni che estendono le funzioni di Apache (e.g., php) • User, Group – Utente non privilegiato usato da Apache – Per motivi di sicurezza si abbandonano il prima possibile i privilegi da superutente 27
  • 28. Impostazioni del server di default • ServerName (nome dell'host che ospita il server) • DocumentRoot (directory htdocs) • <Directory></Directory> (contenitore di settings) • <Location><Location> (contenitore di settings) – Options  Indexes (crea automaticamente indici)  Includes (Abilita ServerSide Includes)  FollowSymlinks, SymlinksIfOwnerMatch (Sicurezza symlink)  ExecCGI (abilita esecuzione di codice)  ... 28
  • 29. Configurazioni del Server di default • Ancora dentro Directory o Location – AllowOverride (uso di files .htaccess per cambiare impostazioni) – Allow, Deny (Access Control List su IP) • Esempi <Directory /> <Directory /[....]/htdocs> Options FollowSymLinks Options FollowSymLinks AllowOverride None AllowOverride None Order deny,allow Order allow,deny Deny from all Allow from all </Directory> </Directory> 29
  • 30. Configurazioni del Server di default • Ancora dentro Directory o Location – AllowOverride (uso di files .htaccess per cambiare impostazioni) – Allow, Deny (Access Control List su IP) • Direttive per il logging – ErrorLog (messaggi di errore) – CustomLog (messaggi sulle richieste) 30
  • 31. File con configurazioni extra • Direttiva include – Include conf/extra/httpd-mpm.conf – Include conf/extra/httpd-vhosts.conf – Include conf/extra/httpd-userdir.conf • Il contenuto dei file inclusi è trattato esattamente come se fosse nel file principale • Esempio: – Configurazione della user directory: – UserDir (diectory http://www.sito.it/~nomeUtente/) 31
  • 32. Impostazioni MPM • Dipendono da modello prescelto • prefork – Identici parametri rispetto ad Apache 1.3 • Worker – Usa thread multipli 32
  • 33. MPM prefork • Processo principale • Processi aggiuntivi per servire le richieste • Parametri – StartServers (numero di processi da far partire) – MinspareServers, MaxSpareServers (autoadatta il numero di processi al carico, ciclo di isteresi) – MaxClients (massimo parallelismo: evita il thrashing) – MaxRequestPerChild (rejuvination: dopo un po' fa ripartire il processo per evitare il rischio di memory leak) 33
  • 34. MPM worker • Un processo principale • Processi ausiliari con thread multipli • Parametri – ThreadsPerChild – ServerLimit, ThreadLimit (massimo parallelismo: evita il thrashing) – StartServers, MinspareServers, MaxSpareServers, (come modello prefork) 34
  • 35. Piccoli accorgimenti utili • La maggior parte delle volte si possono mantenere le impostazioni di default • Alcuni accorgimenti utili: – Modificare la pagina 404 (in httpd.conf) – Personalizzare l'autoindex (in httpd.conf e in httpd-autoindex.conf) – Impostare il livello del ServerTokens e il tipo di ServerSignature (entrambi in httpd-default.conf) 35
  • 36. Lanciare apache: • Per lanciare apache dalla directory server root: <ServerRoot>$ bin/apachectl start • Verificare l'apertura della porta: $ netstat -ntlp | grep 8080 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp6 0 0 :::8080 :::* LISTEN 28526/httpd 36
  • 37. Verifica del funzionamento di apache 37
  • 38. Funzionamento di Apache 38
  • 39. Ciclo di vita di una richiesta REQUEST • Gestione della richiesta divisa in fasi Wait Post-Re ad-Re que st successive URI Translation • Ogni fase può essere Cle anup He ade r Parsing ridefinita da un module che estende Acce ss Control apache Authe ntication Authorization Logging MIME Type Che cking Fixup RESPONSE Docume nto 39
  • 40. Ciclo delle richieste • Post-Read-Request – vengono estratti i valori dei campi principali presenti nella richiesta HTTP e vengono inizializzate le strutture dati che verranno utilizzate successivamente dai moduli che implementano le varie fasi di gestione • URI Translation – L’URI richiesto può riferirsi ad un file fisico, ad una risorsa dinamica prodotta da uno script esterno, oppure ad un documento generato da un modulo interno. Il server deve sapere come individuare il documento, prima di poter effettuare decisioni successive: è necessaria la conversione da URL a risorsa presente sul server. – Le direttive standard di Apache Alias, ScriptAlias e DocumentRoot permettono ad esempio di tradurre l’URI nel nome di un file presente nell’albero dei documenti. Moduli esterni come il mod_rewrite possono assumere il controllo di questa fase ed effettuare traduzioni più sofisticate. 40
  • 41. Ciclo delle richieste • Header Parsing – Analisi dell’header della richiesta HTTP, al fine di estrarre informazioni utili sul client • Access control – Identificazione della locazione di provenienza della richiesta (indirizzo IP) • Authentication – Identificazione del cliente che ha effettuato la richiesta • Authorization – Si stabilisce se il cliente possiede i diritti di accesso per il documento richiesto • Mime type checking – Individuazione del tipo MIME del documento richiesto. Il server deve sapere il tipo della modalità di elaborazione richiesta (prelievo file da disco, generazione dinamica di un documento) prima di poter preparare la risposta. Noto il tipo del file, Apache individua il gestore opportuno per la fase di risposta. 41
  • 42. Ciclo delle richieste • Fixup – Fase introdotta per permettere l’esecuzione di un qualunque tipo di operazione prima dell’invio della risposta. • Response – Le informazioni riguardanti il documento vengono passate al gestore opportuno (content handler), che si occupa di costruire l’header della risposta HTTP e di spedirlo al client. Successivamente, creazione del contenuto del documento (ad es., letto dal disco) ed invio al client. In caso di errore, il gestore invia un codice di errore opportuno al server, che lo notifica al client. • Logging – L’esito delle operazioni effettuate viene scritto su file. Apache fornisce un supporto per il logging degli accessi e degli errori, che può essere modificato oppure esteso. • Cleanup – Operazioni di chiusura, con cui i moduli possono deallocare le risorse utilizzate (ad es., liberare memoria principale, chiudere file). 42
  • 43. Logging 43
  • 44. Il logging • I logfile permettono di monitorare gli accessi ad un server Web – Le informazioni che possono essere memorizzate nel logfile sono quelle che viaggiano all’interno dei messaggi di richiesta e risposta che il server scambia con il client usato dagli utenti – Generalmente i server Web permettono di definire quali campi dei messaggi devono essere memorizzati generando così dei logfile “custom” in modo da soddisfare al meglio le necessità dell’amministratore del sito Web 44
  • 45. Dati estraibili da un log file • Orari di maggiore traffico • Tipologia degli utenti (browser utilizzato, provenienza geografica) • Pagine più popolari • Quali siti fanno riferimento al proprio • Attenzione: la presenza di proxy intermedi tra client e server Web può falsare i risultati 45
  • 46. Utilità dei log file • Monitorare lo stato del server • Capacity planning • Billing • Attack detection 46
  • 47. Esempio •127.0.0.1 - - [14/Oct/2002:18:00:16 +0200] "GET /icons/apache_pb.gif HTTP/1.1" 200 2326 "http://localhost/" "Mozilla/5.0 Galeon/1.2.6 (X11; Linux i686; U;) Gecko/20020913 Debian/1.2.6-2" •211.97.159.184 - - [14/Oct/2002:16:06:44 +0200] "GET /default.ida? NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNNNNNNNNN %u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7 801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190 %u00c3%u0003%u8b00%u531b%u53ff %u0078%u0000%u00=a HTTP/1.0" 400 341 "-" "-" 47
  • 48. Configurazione di log LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined LogFormat "%h %l %u %t "%r" %>s %b" common CustomLog "logs/access_log" common Significato dei campi: • %h remote host • %l remote log name (ottenuto mediante identd) • %u remote user • %t time of request • "%r" prima linea della richiesta • %>s stato della richiesta (response code) • %b domensione della risposta in byte • "%{Referer}i" header “referer” nella richiesta • "%{User-Agent}i" header “user agent” nella richiesta 48