Apache Parte 1

48
1 WEB SERVER APACHE PARTE 1

Transcript of Apache Parte 1

1

WEB SERVER APACHEPARTE 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

3

Tre modalità di gestione richieste HTTPPiattaformaclient

Browser

Piattaformaserver

Processoserver

Richiestahttp

Rispostahttp

(1)

(3)

(2) fork

(4) processo

listener-dispatcher(ii) (iv)

(a)

(b)

Richiesta http

(i)

(iii)

Rispostahttp

Metodo helper(aka prefork)

Metodo multithread(aka worker)

Metodo fork

thread 3

thread 2thread 1

(c)

thread 4

Richiestahttp

Rispostahttp

helper 1helper 2

helper 3

Processofiglio

Apache 1.3.x

Apache 2.x

4

Due parole su sicurezza e prestazioni

Processo

Thread

un processomolti thread

molti processipiù thread

per processo

molti processiun thread

per processo

5

Overview di Apache

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)

Feb. 1995: un gruppo di Webmaster si coordinano creando l’Apache Group

Brian Behlendorf

Roy T. Fielding

Rob Hartill

David Robinson

Cliff Skolnick

Randy Terbush

Robert S. Thau

Andrew Wilson

with additional contributions

Eric Hagberg Frank Peters Nicolas Pioch

7Sistemi e Servizi di Rete - LS 2004/2005 – Server Web

Fonte:Netcraft Web Server Survey (http://www.netcraft.com/)

Software per server Web

Server Web più diffusi: Apache, …, Microsoft Internet Information Server,

altri (GWS, SunONE, Zeus, iPlanet Web Server, …)

<-WTH!!!

GoDaddy.com

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

9

Versioni di Apache

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)

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à

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)

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

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

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

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;

17

Installare Apache

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

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)

20

Dopo aver installato apache

Albero di directory:

bin conf htdocs cgi­bin logs

<prefix>

21

Eseguibili di Apache

bin

<prefix>

httpd apachectl ab htpasswd

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>

23

Configurare Apache

24

File di configurazione

<prefix>

conf

extras

httpd.conf magic mime.types

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

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)

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

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) ...

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 /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all</Directory>

<Directory /[....]/htdocs> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all</Directory>

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)

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/)

32

Impostazioni MPM

• Dipendono da modello prescelto

• prefork

– Identici parametri rispetto ad Apache 1.3

• Worker

– Usa thread multipli

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)

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)

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)

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

37

Verifica del funzionamento di apache

38

Funzionamento di Apache

39

Ciclo di vita di una richiesta

• Gestione della richiesta divisa in fasi successive

• Ogni fase può essere ridefinita da un module che estende apache

Documento

REQUEST

Post-Read-Request

URI Translation

Header Parsing

Access Control

Authentication

Authorization

MIME Type Checking

FixupRESPONSE

Cleanup

Logging

Wait

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 DocumentRootpermettono ad esempio di tradurre l’URI nel nome di un file presente nell’albero dei documenti. Moduli esterni come il mod_rewritepossono assumere il controllo di questa fase ed effettuare traduzioni più sofisticate.

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.

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).

43

Logging

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

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

46

Utilità dei log file

• Monitorare lo stato del server

• Capacity planning

• Billing

• Attack detection

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?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u6858%ucbd3%u7801%u9090%u9090%u8190%u00c3%u0003%u8b00%u531b%u53ff%u0078%u0000%u00=a HTTP/1.0" 400 341 "-" "-"

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