Servizi Essenziali di Rete
Stage per Sistemista Linux
Istituto Nazionale Fisica Nucleare
Laboratori Nazionali Frascati
21-22-23 Settembre 2005
Tutor: Claudio Soprano
Servizio di Calcolo
Email: [email protected]
Argomenti trattati

Introduzione alle reti

Dhcp server

Dns server

Web server

Proxy server
Introduzione alle reti
Una rete e’ un insieme di piu’ dispositivi (switch, router, pc, server,
stampanti, ecc.) chiamati “nodi della rete” che si scambiano
informazioni.
Lo scambio di informazioni avviene tramite l’uso di protocolli di
comunicazione, che definiscono un insieme di regole di
funzionamento.
Ogni nodo per parlare con gli altri deve quindi conoscere i
protocolli di comunicazione usati dagli altri nodi.
I protocolli di comunicazione usati in tutto il mondo per far
comunicare i nodi presenti in una rete (Locale, Metropolitana,
Estesa, Mondiale) sono inclusi nella suite dei Protocolli Internet.
L’IP (Internet Protocol) fa parte di questa suite.
Introduzione alle reti
Rappresentazione dei Protocolli Internet nella pila OSI:
Pila OSI
Protocolli Internet
7
Application
NFS
6
Presentation
FTP, Telnet
XDR
SMTP, SNMP
5
Session
4
Transport
3
Network
2
Data Link
1
Physical
RPC
TCP, UDP
Routing Protocols
IP
ARP, RARP
Not Specified
ICMP
Introduzione alle reti
L’IP e’ un protocollo di comunicazione che definisce che ogni nodo di
una rete deve avere un indirizzo unico, chiamato indirizzo IP e deve
essere diverso da quello di un altro nodo presente sulla stessa rete.
LAN
Router/Gateway
INTERNET
193.206.80.1
X.X.X.X
193.206.80.40
193.206.80.50
193.206.80.55
Ogni comunicazione tra i nodi avviene utilizzando gli indirizzi IP
(questo a livello 3 della pila OSI).
Gli indirizzi IP si dividono in pubblici (visibili/raggiungibili da Internet) e
privati (visibili/raggiungibili solo all’interno di una stessa LAN).
Introduzione alle reti
Gli indirizzi IP sono divisi in Classi:
-
Classi A da 1.0.0.0 a 127.0.0.0
Classi B da 128.0.0.0 a 191.255.0.0
Classi C da 192.0.0.0 a 223.255.255.0
Classi D da 224.0.0.0 a 239.255.255.255 (Multicast)
Classi E da 240.0.0.0 a 254.255.255.255 (nessuna specifica)
Di tutte queste le seguenti sono riservate:
–
–
la 127.0.0.0 (Classe A) e’ riservata per l’interfaccia di loopback delle
interfaccie di rete
Tutte le seguenti sono riservate per indirizzare reti private, ovvero reti che non
hanno la necessita’ di comunicare con macchine sul mondo Internet (RFC
1918):

Il range di Classi A 10.0.0.0 fino a 10.255.255.255

Il range di Classi B 172.16.0.0 fino a 172.31.255.255

Il range di Classi C 192.168.0.0 fino a 192.168.255.255
Queste classi non possono essere ruotate su Internet
Introduzione alle reti
Gli indirizzi IP privati possono essere usati da chiunque, ma non
DEVONO oltrepassare il router di frontiera.
Gli indirizzi IP pubblici vengono assegnati da un organo chiamato RIPE
(Regional Internet Registry) agli Amministratori di Rete che ne fanno
richiesta ed hanno un costo.
Gli Amministratori a loro volta li girano agli utenti per usarli nei PC.
I problemi piu’ comuni nella gestione di una rete sono:
Duplicazione di indirizzi IP e problemi di comunicazione nella LAN
(per configurazione sbagliata della scheda di rete da parte dell’utente)
- Renumbering, indica il cambio degli indirizzi IP di tutta una rete
- Scarsita’ di indirizzi IP pubblici e quindi necessita’ di riusare gli indirizzi
disponibili a chi ne fa richiesta
- Gestione degli indirizzi IP
-
DHCP
(Dynamic Host Configuration Protocol)
Che cose il DHCP ?
- e’ un protocollo di comunicazione che permette la configurazione
automatica delle impostazione di rete di un client generico, basato sul
protocollo BOOTP
- la comunicazione avviene tra il client ed il server DHCP
- il server ascolta sulla porta 67 utilizzando protocollo UDP
- il client effettua le richieste usando la porta 68 ed il protocollo UDP
- se nella rete e’ presente un DHCP server, ed ha le informazioni relative
al client che effettua la richiesta, il server inviera’ al client tutti i
parametri necessari (indirizzo IP del client, netmask, indirizzi dei DNS,
WINS, NTP servers, indirizzo del gateway-router, lease time, ecc.)
- se nella rete non e’ presente un DHCP server, il client (se con Sistema
Operativo Microsoft) prendera’ un indirizzo IP nella classe 169.254.0.0
che e’ generato automaticamente dal Sistema Operativo e ritentera’ la
ricerca di un DHCP server nella rete, tutti gli altri Sistemi Operativi non
prenderanno nessun indirizzo IP e non tenteranno successive richieste
DHCP
(Dynamic Host Configuration Protocol)
Il DHCP Server puo’ funzionare in 3 modalita’:
-
Assegnazione manuale degli indirizzi IP in base ad una lista di Mac Address specificata
dall’Amministratore di Rete.
Solo i client con il Mac Address all’interno della lista specificata otterranno un indirizzo IP
Quindi nel DHCP server sara’ specificato per ogni Mac-Address il relativo indirizzo IP da
assegnare
-
Assegnazione automatica degli indirizzi IP in base ad un range di indirizzi specificati
dall’Amministratore di Rete, i client che richiedono un indirizzo IP otterranno sempre lo
stesso dal DHCP server (Lease Time infinito, usata dai router ADSL)
-
Assegnazione dinamica degli indirizzi IP in base ad un range di indirizzi specificati
dall’Amministratore di Rete, i client che richiedono un indirizzo IP, lo otterranno e sara’
valido per un tempo predefinito (Lease Time).
Allo scadere del tempo, rieffettueranno la richiesta al DHCP Server che potrebbe
assegnargli anche un indirizzo IP diverso dal precedente (perche’ gia assegnato ad un
altro).
Questa e’ l’unica modalita’ che permette di riassegnare un indirizzo IP non piu’ usato da
un client ad un altro che ne fa richiesta.
DHCP
(Dynamic Host Configuration Protocol)
RETE LOCALE (LAN)
DHCP DISCOVER
DHCP DISCOVER
DHCP DISCOVER
Client 1
Dhcp Server
DHCP DISCOVER
DHCP DISCOVER
DHCP DISCOVER
Client 2
Client “n”
Dhcp Server
Fase 1 (DHCP Discover): Il Client 1 effettua una richesta broadcast (255.255.255.255)
con indirizzo sorgente 0.0.0.0 per localizzare eventuali DHCP Server sulla rete locale,
nella richiesta sono contenuti il Mac-Address ed il nome del client che effettua la
richiesta
DHCP
(Dynamic Host Configuration Protocol)
RETE LOCALE (LAN)
Client 1
Dhcp Server
DHCP OFFER
DHCP OFFER
DHCP OFFER
DHCP OFFER
DHCP OFFER
DHCP OFFER
Client 2
Client “n”
Dhcp Server
Fase 2 (DHCP Offer): Ogni DHCP Server risponde soltanto al Client 1 offrendogli un
indirizzo IP, netmask, l’indirizzo IP del DHCP Server e la durata di validita’ (Lease
Time), questo se avra’ indirizzi a disposizione per il client in questione (vedi modalita’
del DHCP) altrimenti rispondera’ che non ha indirizzi disponibili (No free leases)
DHCP
(Dynamic Host Configuration Protocol)
RETE LOCALE (LAN)
DHCP REQUEST
DHCP REQUEST
DHCP REQUEST
Client 1
Dhcp Server
Client 2
Client “n”
Dhcp Server
Fase 3 (DHCP Request): Il Client 1 accetta la prima offerta che gli arriva da un DHCP Server,
verifica che l’IP ricevuto e’ valido, in caso affermativo avvisera’ quel server che accetta i
parametri di rete ricevuti precedentemente, se l’IP ricevuto non e’ valido mandera’ un (DHCP
Decline) al DHCP Server informandolo che non lo puo’ accettare.
DHCP
(Dynamic Host Configuration Protocol)
RETE LOCALE (LAN)
Client 1
Dhcp Server
DHCP ACK
DHCP ACK
DHCP ACK
Client 2
Client “n”
Dhcp Server
Fase 4 (DHCP ACK): Il DHCP Server rispondera’ al client dicendogli che gli ha riservato l’IP e gli
mandera’ tutti i dati di configurazione che l’Amministratore di Rete ha inserito nel DHCP Server,
inoltre scrivera’ i dati del client in un suo database (leases file).Se dovesse aver gia assegnato l’IP
ad un altro client o se il client richiede un indirizzo che il server non puo’ assegnargli, questo
inviera’ un DHCP Nack al client che quindi rimarra’ sconfigurato.Alla scadenza della validita’ dei
dati (Lease Time) il Client 1 ne richiedera’ la validita’ al DHCP Server rieffettuando la fase 3
DHCP
(Dynamic Host Configuration Protocol)
RETE LOCALE (LAN)
DHCP RELEASE
DHCP RELEASE
DHCP RELEASE
Client 1
Dhcp Server
Client 2
Client “n”
Dhcp Server
Fase 5 (DHCP Release): Quando il Client 1 viene spento (procedura di Shutdown
normale) questo informera’ il DHCP Server del rilascio dell’indirizzo IP, che a
seconda della modalita’ di funzionamento del DHCP Server potrebbe essere
riutilizzato da un altro client che ne fa richiesta. Questa fase e’ opzionale.
DHCP
(Dynamic Host Configuration Protocol)
Alcune considerazioni:
- ogni DHCP server, usa un indirizzo IP statico, ovvero non
puo’ ottenere un indirizzo IP da se stesso, in quanto la rete
viene attivata prima dei servizi
- un DHCP server risponde senza problemi a migliaia di
richieste
- se si vuole aumentare l’affidabilita’ si possono usare piu’
DHCP server configurati opportunamente (uno per ogni
network, o tutti con la stessa configurazione) in modo da
bilanciare il carico in base alle esigenze
- in caso di uso di piu’ DHCP server, la malconfigurazione di
uno dei server porta i client ad avere problemi nella
configurazione delle impostazioni di rete e quindi guai
all’Amministratore di Rete
DHCP
(Dynamic Host Configuration Protocol)
Il software usato per implementare un DHCP
Server in ambiente Linux in questo Stage e’
l’ISC DHCP Server
Si puo’ scaricare da http://www.isc.org
- e’ gratuito
- e’ tenuto continuamente aggiornato
- e’ molto stabile
DHCP
(Dynamic Host Configuration Protocol)
Passi necessari per l’installazione di un DHCP server:
Scaricare il pacchetto software DHCP server dal sito http://www.isc.org
Installare il pacchetto
tar –xvzf dhcp-3.0.3.tar.gz
./configure
make
make install
Configurare il DHCP server
modificare il file /etc/dhcpd.conf
Attivare il DHCP server
/etc/init.d/dhcpd start
Testare il funzionamento guardando i log di sistema
tail –f /var/log/messages o more /var/log/messages
Verificare la presenza del database dei client connessi
more /var/lib/dhcp/dhcpd.leases
Attivare il dhcp come servizio partente al riavvio della macchina
chkconfig --add dhcpd
chkconfig --level 35 dhcpd on
DHCP
(Dynamic Host Configuration Protocol)
File di configurazione /etc/dhcpd.conf
default-lease-time nnn;
max-lease-time nnn;
specifica la validita’ di default dei dati in secondi
specifica la validita’ massima dei dati in secondi
use-host-decl-names on;
option host-name “nome”;
indica di assegnare come nome ip il nome indicato
specifica il nome ip da assegnare al client
option domain-name “nomedominio”;
specifica il dominio da assegnare ai client
option domain-name-servers ipserver1,ipserver2…;
specifica gli indirizzi IP dei server dns
option subnet-mask xxx.xxx.xxx.xxx;
specifica la network mask
option routers iprouter1,iprouter2….;
specifica gli indirizzi IP dei router/gateway
option time-servers ipserver1,ipserver2...; specifica gli indirizzi IP degli NTP server
….
ci sono moltissime altre option, usare man dhcpd.conf
ddns-updates on|off ; abilita/disabilita gli aggiornamenti dinamici verso i server dns (impostazione di
tipo globale)
ddns-update-style ad-hoc|interim|none;
scegli il tipo di dinamic update che usera’ (ad-hoc e’
obsoleto, impostazione di tipo globale)
range xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy;
specifica un range di indirizzi da assegnare ai client
DHCP
(Dynamic Host Configuration Protocol)
File di configurazione /etc/dhcpd.conf (continua)
deny unknown-clients; ottengono un indirizzo IP solo i client che hanno i Mac-Address registrati
allow unknown-clients; ottengono un indirizzo IP tutti i client registrati e non
pool {
…
}
permette di definire un pool di indirizzi che verra’ trattato differentemente da un altro pool
(usando piu’ gruppi pool)
subnet xxx.xxx.xxx.xxx netmask yyy.yyy.yyy.yyy {
….
}
definisce la network alla quale assegnare gli indirizzi IP, deve esistere almeno
una dichiarazione per la network definita sull’interfaccia di rete per
funzionare
group {
….
}
definisce un gruppo di regole valide per i client definiti all’interno del gruppo
host nomeclient {
definisce i dati di un client
hardware ethernet xx:xx:xx:xx:xx:xx;
definisce il Mac-Address del client che effettuera’ la
richiesta
fixed-address xxx.xxx.xxx.xxx;
definisce l’indirizzo/nome IP da assegnare staticamente
}
al client, nomeclient puo’ essere un nome fittizio per
DHCP
(Dynamic Host Configuration Protocol)
Esercitazioni
Realizzare un DHCP server che:
Assegni indirizzi IP ai client nella modalita’ descritta sotto
Assegni il dominio lnf.infn.it
Assegni l’indirizzo ip del router 192.168.160.1
-
Assegni gli indirizzi dei dns server primario (ad ognuno il proprio, solo per
esercizio 3) e secondario a tutti lo stesso
Esecizio 1: assegnare automaticamente gli indirizzi IP a qualsiasi client utilizzando il
range 192.168.160.201-192.168.160.220
Esercizio 2: assegnare automaticamente gli indirizzi IP utilizzando il range
192.168.160-201-192.168.200 solo ai client conosciuti (bisogna censire tutti i Mac
Address ed inserirli nella configurazione del DHCP)
Esercizio 3: assegnare staticamente gli indirizzi IP (sempre lo stesso) ai client
conosciuti
DNS
(Domain Name System)
In una rete molto estesa con molti nodi (PC, server, stampanti, router, switch) ricordare a
memoria tutti gli indirizzi IP e’ veramente difficile.
Si e’ deciso quindi di usare i nomi al posto degli indirizzi in modo da ricordarli piu’ facilmente.
Ed e’ proprio per questa necessita’ che nasce il DNS Server, come un database distribuito
gerarchicamente che traduce i nome di dominio in indirizzi IP (diretta) ed il contrario (inversa).
Il mondo e’ diviso in domini uno per ogni nazione (IT per italia, UK per Regno Unito, FR per
Francia, ES per Spagna, ecc.), questi sono chiamati domini di primo livello (top-level).
Oltre a quelli relativi alle nazioni ci sono domini di primo livello particolari come ORG per
organizzazioni senza scopo di lucro, MIL per istituzioni militari, GOV per istituzioni governative,
EDU per istituzioni educazionali (come universita’), COM e NET usate principalmente per scopi
commerciali, inoltre ogni tanto ne vengono aggiungono altri.
Ognuno di questi domini principali e’ poi suddiviso in altri domini (di secondo livello) che a seconda
della societa’, istituzione, organizzazione che lo richiede registrandolo, avra’ un nome.
La struttura e’ ad albero e ogni dominio e’ composto o da altri domini o da nodi fisici che
rappresentano le foglie dell’albero.
I domini (che devono essere visibili e raggiungibili in Internet) vanno registrati (presso enti presenti
in ogni nazione) pagandoli, se invece li si usano in reti private non e’ necessaria la registrazione.
Il numero massimo di livelli (o domini) che un nome di dominio puo’ avere e’ 127.
Il DNS usa il protocollo UDP ed ascolta sulla porta 53 per le richieste da parte dei client, usa
invece protocollo TCP e porta 53 per i trasferimenti di zona con i DNS Secondari.
DNS
(Domain Name System)
Radice
.
Dominio .
Domini 1 livello (top-level)
Domini 2 livello
yahoo
com
….
edu
standford
….
Root “name” servers
mil
defense
….
it
….
libero
….
infn
lnf
pca www
….
….
Domini 3 livello
pcd www dhcp dns1 dns2
dhcp dns1 dns2
pcb www dhcp dns1 dns2
pcc www dhcp dns1 dns2
pce www dhcp dns1 dns2
Se voglio sapere il nome di dominio del server indicato dal cerchio rosso dovro’ partire dal suo nome fino ad arrivare alla
radice dell’albero aggiungendo un “.” per ogni dominio che attraverso, ottengo quindi: www.yahoo.com. mentre il nome del
webserver indicato col cerchio marrone sara’: www.lnf.infn.it.
L’ultimo punto nel nome di dominio viene normalmente omesso (in quanto viene inserito per default quando effettuate una
richiesta al DNS). I rettangoli in blue sono domini di 1 livello, quelli in verde di 2 livello e quelli in arancione di 3 livello.
Ogni dominio e’ responsabile per tutti i domini di livello inferiore (nella struttura ad albero), ovvero i domini di 1 livello sono
responsabili dei domini di 2 livello, quelli di 2 livello di quelli di 3 livello, ecc. ecc., ma nello stesso tempo possono delegare
questa responsabilita’ a qualcun’altro (anche se non e’ strettamente necessario, normalmente si usa).
DNS
(Domain Name System)
Ogni dominio deve avere almeno due DNS Server per funzionare, uno Primario (master) ed uno
Secondario (slave) e se fosse possibile un altro Secondario esterno alla rete del dominio che gestisce.
Il Primario ha i dati effettivi, mentre i Secondari ne ha una copia (Transfer Zone) ricevuta dal Primario.
Gli Amministratori di Rete, cambiano/aggiornano/modificano i dati solo nel DNS Primario, i Secondari
verrano aggiornati automaticamente.
Ogni DNS contiene le informazioni relative al proprio dominio (zona) e sa come ottenere le informazioni
di quelli sottostanti (in quanto ne ha delegato la gestione ad altri DNS, oppure li gestisce direttamente).
Quindi il DNS del dominio .it sa chi detiene le informazioni del dominio libero.it e chi detiene le
informazioni del dominio infn.it ma non sa chi detiene le informazioni per il dominio lnf.infn.it
I root “name” servers sono dei server DNS che hanno tutte le informazioni relative ai domini di 1 livello
(top-level) ed indirizzano i vari DNS nelle traduzioni da nomi di domini in indirizzi IP e viceversa.
I DNS server di un dominio (zona) sono detti autoritativi per quel dominio, mentre risulteranno non
autoritativi per tutti gli altri domini che non gestiscono direttamente.
I DNS del dominio .it non sono autoritativi per il dominio libero.it.
Ogni client di una rete ha installato automaticamente nel sistema operativo un DNS client
(resolver) che manda le richieste ai DNS server configurati nelle proprieta’ di rete.
E’ FQDN (Full Qualified Domain Name) un nome (di un host) comprensivo del dominio di appartenenza
www.lnf.infn.it e’ un FQDN, www.libero.it e’ un FQDN, www non e’ un FQDN.
Il DNS server usa il protocollo UDP ed ascolta sulla porta 53 per le richieste da parte dei client (che usano
invece una porta alta, sulla quale rispondera’ il DNS), usa invece protocollo TCP e porta 53 per I
trasferimenti di zona con i DNS Secondari.
DNS
(Domain Name System)
Salva in cache
2
www.lnf.infn.it A ?
4
Chiedi al NS it 3
www.lnf.infn.it A ?
6
Chiedi al NS infn.it 5
www.lnf.infn.it A ?
B
name
server
Cancella dalla
cache (TTL)
Chiedi al NS lnf.infn.it 7
C
193.206.84.220
1
www.lnf.infn.it A ?
8
Client
resolver
www.lnf.infn.it A ?
193.206.84.220
9
“.”
Root name server
it
name server
infn.it
name server
lnf.infn.it
name server
it
fr
infn
es
virgilio
A
roma1
mi
lnf
Come si puo’ notare la traduzione di un FQDN (www.lnf.infn.it) ad indirizzo IP avviene partendo da destra
(il . e’ implicito) e a mano mano andando a sinistra (poi it poi infn poi lnf) fino ad arrivare all’ultimo nameserver
DNS
(Domain Name System)
DNS Secondario
dns.libero.it
dns.yahoo.com
DNS Primario
Router/Gateway
INTERNET
Richieste dns
dns.virgilio.it
Richieste dns
dns.microsoft.com
Client 1
Client 2
Client 3
DNS Secondario
…
Collocazione dei DNS Server Primari e Secondari
DNS
(Domain Name System)
Quando arriva una richiesta di traduzione da nome ad
indirizzo o viceversa, il DNS server
1.
se riguarda una delle proprie zone di autorita’ esegue
direttamente la traduzione e restituisce il dato richiesto
2.
se non riguarda le proprie zone, guarda se lo ha nella
cache (se lo aveva gia richiesto precedentemente) ed in
caso affermativo restituisce il dato richiesto direttamente
3.
se non lo ha nella cache, chiede al root “name” server
dove trovera’ l’informazione richiesta (come visto nello
schema precedente), alla fine inviera’ il dato richiesto e
ne terra’ una copia nella cache per il tempo specificato
dal TTL (Time To Live)
DNS
(Domain Name System)
Finora abbiamo visto esempi di come trovare un indirizzo dato un nome ed abbiamo visto
che il DNS ha un database ed una gerarchia ad albero, che facilita la ricerca dei nomi.
Ma se noi volessimo sapere quale e’ il FQDN associato ad un indirizzo IP ?
Per evitare la costruzione di un altra struttura si e’ pensato di usare lo stesso metodo
anche per i numeri, creando un dominio chiamato in-addr.arpa (in-addr sta per Internet
Address) che copre l’intero indirizzamento IP.
Al suo interno ci sono 256 sottodomini (da 0 a 255) per esempio 193.in-addr.arpa, e dentro
ognuno di loro altri 256 domini (da 0 a 255) per esempio 203.193.in-addr.arpa, ancora
all’interno 256 domini (da 0 a 255) per esempio 84.203.193.in-addr.arpa ed infine
all’interno gli ultimi 256 domini (da 0 a 255) e finalmente 112.84.203.193.in-addr.arpa, che
corrisponde al nome dns2.lnf.infn.it.
Il meccanismo che risale ad un nome da un indirizzo IP e’ lo stesso che si usa per i nomi,
quando vogliamo sapere il nome dell’indirizzo IP 193.206.84.112, il nostro client, lo chiede
al nostro DNS, che lo chiede a quello di in-addr.arpa, che ci risponde di chiederlo al DNS di
193.in-addr.arpa, che a sua volte ci risponde di chiederlo al DNS di 206.193.in-addr.arpa,
che alla fine ci chiede di chiederlo al DNS di 84.206.193.in-addr.arpa che ci risponde con
dns2.lnf.infn.it e la ricerca e’ terminata e messa nella cache del nostro DNS.
DNS
(Domain Name System)
Radice
Dominio .
Root “name” servers
arpa
Domini 1 livello (top-level)
0
1
….
it
in-addr
Domini 2 livello
Domini 3 livello
.
libero
….
infn
…. 193 …. 255
lnf
….
….
pcd www dhcp dns1 dns2
Domini 4 livello
Domini 5 livello
Domini 6 livello
0
1
0
…. 206 …. 255
1
0
pce www dhcp dns1 dns2
…. 84 …. 255
1
…. 112 …. 255
193.206.84.112
112.84.206.193.in-addr.arpa
ovvero
dns2.lnf.infn.it
Perche’ gli ottetti sono invertiti rispetto all’indirizzo IP ?
-perche’ il valore 112 e’ il meno significativo per un indirizzo IP (e quindi nel caso del nome deve essere il primo)
-perche’ normalmente le reti (Classi A,B,C,D,E) vengono suddivise e date in gestione e facendo in questo modo ognuno
puo’ gestire la propria parte di reverse, il proprietario della rete 193.206.84.x gestisce la sua reverse e non e’ ARPA a farlo
DNS
(Domain Name System)
Ma quali tipi di record sono contenuti in un DNS ?
- SOA (Start Of Authority) indica la zona di autorita’ del DNS e l’indirizzo
email del Responsabile (non si usa la @), ogni zona DEVE avere un
record SOA (all’inizio)
- NS (Name Server) indica i DNS server per la zona (subito dopo il SOA)
- MX (Mail Exchange) indica i server di posta SMTP (zona diretta)
- A (Address) effettua il mapping da nome ad indirizzo (zona diretta)
- PTR (Pointer) effettua il mapping da indirizzo a nome (zona inversa)
- CNAME (Canonical Name) indica un alias di un nome (zona diretta)
- TXT (Text) da delle informazioni aggiuntive (zona diretta, non viene piu’
usato per motivi di sicurezza)
- ORIGIN indica la parte da aggiungere ai non FQDN (Fully Qualified
Domain Name) in un file di zona
DNS
(Domain Name System)
Il record SOA contiene al suo interno altri record importantissimi per il
funzionamento del DNS, i tempi sono espressi in secondi a meno di aggiungere al valore
una M (minuti), H (ore), D (day) e W (settimane)
Serial AAAAMMDDXX per esempio Serial 2005092101
indica quando e’ stata effettuata l’ultima modifica e va incrementato ogni volta che si
modifica un qualsiasi dato di una zona DNS
Refresh xxxxx (10800, 3 ore per default)
indica ogni quanti secondi il DNS Secondario deve controllare che la sua copia sia
accurata
Retry xxxxx
(7200, 2 ore per default)
se il DNS Secondario non riesce ad ottenere una copia dal Primario, riprovera’ dopo
xxxxx secondi
Expire xxxxx
(604800, 1 settimana per default)
se il DNS Secondario non riesce a contattare il Primario, dopo xxxxx secondi smette di
dare informazioni sulla zona (dominio)
Minimum xxxxx (86400, 1 giorno per default)
e’ un parametro globale (ma puo’ essere modificato per ogni singolo record) che indica
per quanti xxxxx secondi l’informazione vale
DNS
(Domain Name System)
Tools per la verifica di un DNS server: nslookup e dig sono i comandi che si possono
usare per effettuare delle richieste ai DNS server di tutto il mondo (non solo a quello
locale che normalmente e’ il default).
Scrivendo nslookup FQDN si ricevera’ la traduzione da nome ad indirizzo (diretta)
mentre scrivendo nslookup indirizzo IP si ricevera’ la traduzione da indirizzo a nome
(inversa).
Scrivendo nslookup soltanto, si entrera’ in una modalita’ interattiva che ci
permettera’ di:
cambiare NS a cui effettuare le richieste (e’ temporanea) con il comando: server
xxx.xxx.xxx.xxx
effettuare richieste particolari usando il comando: set querytype=x
(con x=A/PTR/NS/MX/SOA)
Vediamo invece il comando dig, non permette query su indirizzi IP standard,
ma nel formato inverso xxx.xxx.xxx.xxx.in-addr.arpa
con dig FQDN, cerchera’ informazioni di tipo A sul nome di dominio
con dig xxx.xxx.xxx.xxx.in-addr.arpa cerchera’ informazioni di tipo PTR
con dig x querytype, riceveremo informazioni del tipo querytype (A/PTR/NS/MX/SOA)
DNS
(Domain Name System)
Il software usato per implementare un DNS Server
in ambiente Linux in questo Stage e’ l’ISC DNS
Server (Bind)
Si puo’ scaricare da http://www.isc.org
- e’ gratuito
- e’ tenuto continuamente aggiornato
- e’ molto stabile
- e’ quello usato in tutte le distribuzioni Linux
DNS
(Domain Name System)
DNS Server runnante come utente root
Passi necessari per l’installazione di un DNS server:
Scaricare il pacchetto software DNS server dal sito http://www.isc.org
Installare il pacchetto
tar –xvzf bind-9.3.1.tar.gz
./configure
make
make install
Configurare il DNS server
modificare il file /etc/named.conf
creare i files per le zone diretta ed inversa in /var/named
Attivare il DNS server
/etc/init.d/named start
Modificare /etc/resolv.conf
Testare il funzionamento guardando i log di sistema
tail –f /var/log/messages o more /var/log/messages
Usare tools come nslookup e dig per verificare la funzionalita’
Attivare named come servizio partente al riavvio della macchina
chkconfig --add named
chkconfig --level 35 named on
DNS
(Domain Name System)
DNS Server runnante come named in ambiente protetto (chroot)
Passi necessari per l’installazione di un DNS server:
Scaricare il pacchetto software DNS server dal sito http://www.isc.org
Installare il pacchetto
tar –xvzf bind-9.3.1.tar.gz
./configure
make
make install
Configurare il DNS server
modificare il file /etc/named.conf
creare i files per le zone diretta ed inversa in /var/named/chroot/var/named
Attivare il DNS server
/etc/init.d/named start
Modificare /etc/resolv.conf
Testare il funzionamento guardando i log di sistema
tail –f /var/log/messages o more /var/log/messages
Usare tools come nslookup e dig per verificare la funzionalita’
Attivare named come servizio partente al riavvio della macchina
chkconfig --add named
chkconfig --level 35 named on
DNS
(Domain Name System)
File /etc/name.conf
acl nome { indirizzoip1; indirizzoip2; ….};
options {
directory “pathcompleto”;
pid-file “pathconomefile”;
…..
};
zone “.” IN {
type hint;
file “nomefile”;
};
definisce un nome al quale associare diversi numeri ip
definisce opzioni generali
definisce dove sono i files relativi alle zone (dirette ed inverse)
definisce il file che conterra’ il numero del processo del demone
definisce il file dei root “name” server
zone “nomedominio” IN {
type master|slave;
definisce se il server e’ primario per questa zona
masters { nomeacl|indirizzi IP;};
definisce chi e’ il master di questa zona (usato se type slave)
file “pathcompletoenomefile”;
definisce il file dove ci sono i dati per questa zona
allow-query { none|any|nomeacl|indirizzi IP;}; definisce chi puo’ effettuare richieste per questa zona
allow-transfer { none|any|nomeacl|indirizzi IP;}; definisce chi puo’ trasferire la zona (normalmente slaves)
allow-update { none|any|nomeacl|indirizzi IP;}; definisce chi puo’ aggiornare i dati per questa zona
};
logging {
….
};
definisce le modalita’ di logging per categorie
DNS
(Domain Name System)
Esempio di zona diretta (da nome di dominio ad indirizzo)
@
IN
SOA lnfnet.lnf.infn.it. root.lnfnet.lnf.infn.it. (
2005091302; Serial
86400
; Refresh
3600
; Retry
604800
; Expire
172800 )
; Minimum TTL
IN
NS
lnfnet.lnf.infn.it.
; dichiarazione DNS server primario
IN
NS
dns2.lnf.infn.it.
; dichiarazione DNS server secondario
IN
NS
mvxrm1.roma1.infn.it. ; dichiarazione DNS server secondario
lnf.infn.it. IN
MX 10 smtp1.lnf.infn.it.
; dichiarazione mail exchanger
lnf.infn.it. IN
MX 10 smtp2.lnf.infn.it.
; dichiarazione mail exchanger
lnf.infn.it. IN
MX 20 infngw.infn.it.
; dichiarazione mail exchanger
$ORIGIN lnf.infn.it.
; definisce il dominio da aggiungere ai non FQDN
; (vale dalla riga successiva a quella di $ORIGIN)
$TTL 172800
; definisce il TTL (se non messo si usa quello del SOA)
www
500 IN A
193.206.84.219
; mappa piu’ indirizzi ip ad un solo nome usato per
500 IN A
193.206.84.220
; load balancing tra due IP, definito un TTL di 500 secondi
lnfnet
IN
A
193.206.84.12
; mappa il nome del DNS primario al suo indirizzo ip
dns2
IN
A
193.206.84.112
; mappa il nome del DNS secondario al suo indirizzo ip
afs1
IN
A
193.206.84.121
; mappa un nome ad un indirizzo ip
ntp1
IN
CNAME afs1
; definisce un alias ad afs1 con nome ntp1
DNS
(Domain Name System)
Esempio di zona inversa (da indirizzo a nome di dominio)
@
IN
SOA lnfnet.lnf.infn.it. root.lnfnet.lnf.infn.it. (
2005091302
; Serial
86400
; Refresh
3600
; Retry
604800
; Expire
172800 )
; Minimum TTL
IN
NS
lnfnet.lnf.infn.it.
; dichiarazione DNS server primario
IN
NS
dns2.lnf.infn.it.
; dichiarazione DNS server secondario
IN
NS
mvxrm1.roma1.infn.it.
; dichiarazione DNS server secondario
$ORIGIN 84.206.193.in-addr.arpa.
; definisce il dominio da aggiungere
; ai nomi non FQDN
12
IN
PTR
lnfnet.lnf.infn.it.
; mappa un indirizzo ip ad un nome
112
IN
PTR
dns2.lnf.infn.it.
; mappa un indirizzo ip ad un nome
121
IN
PTR
afs1.lnf.infn.it.
; mappa un indirizzo ip ad un nome
219
IN
PTR
www1.lnf.infn.it.
; mappa un indirizzo ip ad un nome
220
IN
PTR
www2.lnf.infn.it.
; mappa un indirizzo ip ad un nome
Per ogni record A nella zona diretta, DEVE esistere un record PTR nella zona inversa, i
CNAME non necessitano di un PTR in quanto esiste gia un PTR del loro nome di dominio
vero, i record NS e MX DEVONO avere un record A.
DNS
(Domain Name System)
Esercizio 1: Ogni studente deve installare un DNS Server Primario per il proprio dominio
“cognome.” (top level domain) e verificare che la risoluzione diretta ed inversa del proprio
dominio funzioni, inoltre verificare che funzioni anche la traduzione dei domini esistenti su
internet.
Verificare quale server e’ autoritativo per ogni dominio.
Esercizio 1a: Modificare la configurazione del DHCP Server precedentemente creato in
modo tale che ogni PC studente abbia indirizzo ip fisso (sempre lo stesso) e abbia come
DNS Server Primario il PC stesso.
Esercizio 2: Installare un solo DNS Server Secondario di tutti i domini precedentemente
creati e verificate che avvengono i trasferimenti di zona tra Master e Slave.
Esercizio 2a: Modificare la configurazione del DHCP Server precedentemente creato in
modo che, ogni PC studente abbia indirizzo ip fisso (sempre lo stesso) e abbia come DNS
Server Secondario quello appena realizzato.
WWW
(World Wide Web)
Il World Wide Web (ragnatela mondiale, www o semplicemente web) e’ nato per semplificare lo
scambio di informazioni e documenti scientifici al Cern di Ginevra.
Il web funziona con il meccanismo client-server, la parte client e’ il browser (Internet Explorer,
Netscape, Mozilla, ecc.) disponibile per tutti i sistemi operativi presenti oggi (Windows, Linux, Mac
Os, Be Os, ecc.) che ha il compito di richiedere le informazioni ad un web server, mentre il server
ha il compito di inviare le informazioni richieste ai client.
Appena ricevono le Informazioni, i browser le visualizzeranno in pagine indipendenti.
Le pagine web sono scritte nel linguaggio di formattazione HTML (Hyper Text Markup Language),
che consente di creare pagine ipertestuali che qualsiasi server web puo’ distribuire e qualsiasi
browser puo’ visualizzare.
Il codice HTML contiene anche dei descrittori (tag) che consentono di indicare per esempio la
formattazione del testo (dimensione, stile, posizionamento,ecc.) e la posizione di immagini, filmati
e animazioni.
Una pagina web puo’ contenere collegamenti (link) ad altre pagine web, che possono risiedere
anche su server diversi, possono essere incorporati nel testo od essere associati ad una
immagine.
WWW
(World Wide Web)
Questo e’ il concetto di ipertesto, ovvero e’ un testo che consente una lettura non lineare
di un documento.
Se in un testo che parla di motori c’è una informazione sulle case produttrici che li
producono, e a questa informazione è associato un link, basta fare clic sul link per
andare ad una nuova pagina che parla di queste case, fermando la lettura della parte
dedicata ai motori, alla quale si potrà tornare successivamente.
Il sistema delle URL (Uniform Resource Locator) consente a tutte le informazioni di
essere recuperate da quasi tutti i punti su Internet ed e’ stato creato per il web.
La comunicazione tra browser (client web) e server web e’ il protocollo HTTP (Hyper Text
Transfer Protocol) ed il modo piu’ comune per pubblicare informazioni attraverso la rete.
Normalmente le informazioni pubblicate in questo modo sono rivolte a tutti gli utenti, nel
senso che non e’ richiesta nessun tipo di identificazione.
Per offrire un servizio HTTP serve un programma in grado di gestirlo, di solito si tratta di
un demone, che consente l’accesso ad una directory particolare (chiamata Document
Root) e a quelle discendenti, si tratta di una directory personale degli utenti anonimi che
accedono attraverso questo protocollo.
WWW
(World Wide Web)
Anche dal lato client serve un programma in grado di gestire il protocollo HTTP, questo e’ il browser (o
navigatore), che pero’ e’ in grado di servire anche altri protocolli, tipo FTP (File Transfer Protocol), HTTPS.
L’integrazione di piu’ protocolli impone l’utilizzo di un sistema uniforme per indicare gli indirizzi, in modo tale da
sapere subito in che modo effettuare un collegamento.
Per questo quando si usa un navigatore si devono usare indirizzi espressi secondo il formato URI (Uniform
Resource Identifier), mentre attualmente si usa ancora la vecchia definizione, cioe’ l’URL (Uniform Resource
Locator), che rappresenta un sottoinsieme dell’URI.
Attraverso l’URI e’ possibile definire tutto quello che serve per raggiungere una risorsa: il protocollo da usare,
l’indirizzo del nodo (host), la porta, ed il percorso, quindi
protocollo indirizzo_della_risorsa [dati aggiuntivi]
Alcuni protocolli sono in grado di gestire dei dati aggiuntivi in coda all’indirizzo della risorsa, per esempio nel
caso dell’HTTP per effettuare richieste CGI o di percorsi aggiuntivi.
Quando un URI comprende anche una stringa di richiesta (query) questa e’ indicata con un punto interrogativo (?):
protocollo indirizzo_della_risorsa?[richiesta]
L’utilizzo di una stringa di richiesta, presume che la risorsa sia in grado di utilizzare l’informazione presente in tale
stringa:
http://www.brot.dg/cgi-bin/saluti.pl?buongiorno
Quando l’indirizzo di una risorsa fa riferimento ad un programma, questo puo’ ricevere un informazione aggiuntiva
legata ad un file o ad una directory particolare, questo si ottiene aggiungendo il percorso che identifica questo file
o questa directory:
http://www.brot.dg/cgi-bin/elabora.pl/archivio.doc
Quando si deve usare in un URI un simbolo non utilizzabile normalmente, si usa la notazione %hh, dove
hh rappresenta una coppia di cifre esadecimali, a questa regola fa eccezione lo spazio che e’
rappresentato da un +, ma non in tutte le occasioni; per gli URI normali non c’e’ da preoccuparsi di questo
problema, che normalmente si presenta invece quando si costruiscono delle richieste.
WWW
(World Wide Web)
La tabella mostra l’elenco di alcune corrispondenze tra simboli particolari e la codifica alternativa utilizzabile
negli URI:
Carattere
Codifica
Carattere
Codifica
%
%25
&
%26
+
%2B
/
%2F
=
%3D
~
%7E
Il funzionamento del protocollo HTTP e’ molto semplice e si compone di una serie di transazioni, ognuna delle
quali si articola in queste fasi:
1.
Apertura della connessione;
2.
Invio da parte del client di una richiesta;
3.
Risposta da parte del server;
4.
Chiusura della connessione.
In questo modo il server non deve tenere conto delle transazioni che iniziano e finiscono, ogni volta che un
utente compie un azione attraverso il programma client (browser).
La richiesta inviata dal programma cliente deve contenere il metodo (i più comuni sono GET e POST),
l'indicazione della risorsa cui si vuole accedere, la versione del protocollo ed eventualmente l'indicazione dei tipi
di dati che possono essere gestiti dal programma cliente (si parla in questi casi di tipi MIME).
Il server HTTP risponde con una intestazione che indica in che modo l’informazione allegata va interpretata,
l’intestazione e’ staccata dall’intestazione attraverso una riga vuota, composta dalla sequenza <CR><LF>
(Carriage Return, Line Feed).
WWW
(World Wide Web)
Vediamo come funziona una connessione HTTP, usiamo il comando telnet al posto del
navigatore normale e supponiamo di collegarci al server www.brot.db, nel quale e’
installato e configurato il server web Apache (un comune web server), dal server viene
prelevato il file index.html, dalla directory Document Root
$ telnet www.brot.dg 80 [Invio]
telnet risponde e si mette in attesa di una nostra richiesta:
Trying 192.168.1.1...
Connected to www.brot.dg.
Escape character is '^]'.
Si deve iniziare a scrivere, cominciando con una riga contenente il metodo, la risorsa e la
versione del protocollo, continuando con una riga contenente le possibilità di
visualizzazione del cliente (i tipi MIME):
GET /index.html HTTP/1.0 [Invio]
Accept: text/html [Invio]
[Invio]
L’ultima riga vuota indica al server che la richiesta e’ finita e che va quindi evasa.
WWW
(World Wide Web)
HTTP/1.1 200 OK
Date: Tue, 27 Jan 1998 17:44:46 GMT
Server: Apache/1.2.4
Last-Modified: Tue, 30 Dec 1997 21:07:24 GMT
ETag: "6b003-792-34a9628c"
Content-Length: 1938
Accept-Ranges: bytes
Connection: close
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Test Page for Linux's Apache Installation</TITLE>
</HEAD>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<BODY BGCOLOR="#FFFFFF“ TEXT="#000000“ LINK="#0000FF“ VLINK="#000080“ ALINK="#FF0000“>
<H1 ALIGN="CENTER">It Worked!</H1>
<P>
If you can see this, it means that the installation of the
<A HREF=http://www.apache.org/>Apache</A>
software on this Linux system was successful. You may now add content to this directory and replace this page.
</P>
…
...
</BODY>
</HTML>
Connection closed by foreign host.
WWW
(World Wide Web)
Come già accennato, il messaggio restituito dal servente è composto da un'intestazione
(header) in cui l'informazione più importante è il tipo di messaggio allegato (MIME), cioè
in questo caso Content-Type: text/html, seguita da una riga vuota e quindi dall'oggetto
richiesto,cioè il file index.html.
Al termine della ricezione dell'oggetto richiesto, la connessione ha termine, lo si nota dal
messaggio dato da telnet:
Connection closed by foreign host.
Il lavoro di un programma cliente è tutto qui: inviare richieste al servente HTTP, ricevere le
risposte e gestire i dati, possibilmente visualizzandoli o mettendo comunque l'utente in
grado di fruirne.
Cerchiamo ora di capire cosa sono i tipi MIME: il MIME (Multipurpose Internet Mail
Extensions) e’ una codifica standard per definire il trasferimento di documenti multimediali
attraverso la rete, e’ nato con la necessita’ di allegare documenti nei messaggi di posta
elettronica, come l’acronimo lascia intendere.
Il protocollo HTTP utilizza lo stesso metodo per indicare al client il tipo di documento che
gli sta inviando, ed il client quando effettua una richiesta informa il server su quali tipi
MIME sa gestire. Ma come fa il server HTTP a riconoscere la natura di un oggetto ?
Questo grazie all’estensione dei file, quindi per ogni tipo MIME utilizzato nel protocollo
HTTP c’e’ una associazione tipo MIME, e l’estensione relativa.
WWW
(World Wide Web)
Esempi di tipi MIME
Tipo MIME
Estensioni
Descrizione
application/postscript
ps eps
Documento PostScript
application/rtf
rtf
Documento Rich Text
application/x-tex
tex
Documento Tex/Latex
audio/basic
au snd
File Audio
audio/x-wav
wav
File Audio
image/gif
gif
Immagine Gif
image/jpeg
jpeg jpg
Immagine Jpeg
image/tiff
tiff
Immagine Tiff
text/html
html htm
Documento Html
text/plain
txt
Documento Testo
video/mpeg
mpeg mpg mpe
Animazione Mpeg
video/quicktime
qt mov
Animazione QuickTime
WWW
(World Wide Web)
Le risposte del server HTTP abbiamo visto che si compongono di una intestazione seguita da un
eventuale allegato, che costituisce la risorsa alla quale voleva accedere il client.L’intestazione e’ separata
dall’allegato da una riga vuota.
La prima riga dell’intestazione e’ costituita dal codice di stato della risposta, nella migliore delle ipotesi
dovrebbe presentarsi nel seguente modo:
HTTP/1.0 200 OK
Comunque ci sono anche altri codici di ritorno, ecco i piu’ frequenti:
Codice
Descrizione
Codice
Descrizione
200
OK
400
Richiesta errata
201
Creato
401
Non autorizzato
202
Accettato
403
Proibito
204
Nessun Contenuto
404
Non trovato
300
Scelte Multiple
500
Errore interno al server
301
Spostato in modo permanente
501
Servizio non realizzato (non disponibile)
302
Spostato temporaneamente
502
Gateway errato
304
Non modificato
503
Servizio non disponibile
WWW
(World Wide Web)
Il software usato per implementare un Web Server in ambiente Linux in
questo Stage e’ l’Apache v.2.0 della Apache Software Foundation
Si puo’ scaricare da http://www.apache.org
- e’ gratuito
- e’ tenuto continuamente aggiornato
- e’ molto stabile
- e’ il web server piu’ usato al mondo, IBM, HP, ed altre societa’ ne
hanno uno loro basato su Apache e poi personalizzato
- possibilita’ di avere piu’ virtual host sullo stesso server
- possibilita’ di avere moduli aggiuntivi a quelli basi per vari tipi di
autenticazione (mysql, postgres, oracle) , di crittografazione (ssl), di
aggiungere estensioni (php, java), ecc.
- la porta standard di risposta e’ 80 ed usa protocollo TCP
WWW
(World Wide Web)
Passi necessari per l’installazione di un Web server:
Scaricare il pacchetto software Web server dal sito http://www.apache.org
Installarlo
tar –xvzf apache-2.0.54.tar.gz
./configure
make
make install
- Configurarlo
modificare il file /etc/httpd/conf/httpd.conf
eventualmente aggiungere dei tipi MIME in /etc/httpd/conf/mime.types
- Attivare il Web server
/etc/init.d/httpd start
- Testare il funzionamento guardando i log in /etc/httpd/logs/error.log|access.log
Usare un browser per la verifica
Attivarlo come servizio partente al riavvio della macchina
chkconfig --add httpd
chkconfig --level 35 httpd on
WWW
(World Wide Web)
Esaminiamo il file di configurazione /etc/httpd/conf/httpd.conf della versione 1.3:
ServerType standalone|inetd
;modalita’ di funzionamento del server, standalone e’ la migliore
Port porta
;porta che usa il web server
Listen indirizzoip:porta
;(se si usa anche https Ie righe listen sono due, 80 e 443)
User nomeutente
Group nomegruppo
; indicano utente e gruppo che eseguira’ il server
ServerAdmin emailaddress
; indica l’email da usare per riportate errori o problemi
DocumentRoot “pathcompleto”
; indica la directory che conterra’ le pagine web
<Directory pathcompleto>
Options opzioni
AllowOverride opzioni
; consente di specificare per una directory (e tutte quelle sottostanti) delle
; delle caratteristiche particolari (tipo seguire i link Unix) deve esistere una
; <Directory> per la DocumentRoot
Order Deny,Allow
Allow from all
Deny from all
; controlla chi puo’ accedere a questa directory
; tutti possono accedere a questa directory
; nessuno puo’ accedere a questa directory
</Directory>
DirectoryIndex file1.est file2.est
; indica il file da cercare e da visualizzare per default, e’ la pagina principale
Alias /nome “pathcompleto”
; indica un alias ad una directory, se il nome finisce con / allora nella URL di
; richiesta deve esserci lo / alla fine, altrimenti non funzionera’
ScriptAlias /nome “pathcompleto”
; indica un alias ad una directory che conterra’ scripts cgi,shell
ErrorLog pathcompletoenomefile
CustomLog pathcompletoenomefile
; indica il file dove saranno scritti eventuali errori riportati dal server
; indica il file dove saranno scritti tutti gli accessi al server
WWW
(World Wide Web)
Esaminiamo il file di configurazione /etc/httpd/conf/httpd.conf della versione 2.0:
Listen indirizzoip:porta
;(se si usa anche https Ie righe listen sono due, 80 e 443)
User nomeutente
Group nomegruppo
; indicano utente e gruppo che eseguira’ il server
ServerAdmin emailaddress
; indica l’email da usare per riportate errori o problemi
DocumentRoot “pathcompleto”
; indica la directory che conterra’ le pagine web
<Directory pathcompleto>
Options opzioni
AllowOverride opzioni
; consente di specificare per una directory (e tutte quelle sottostanti) delle
; delle caratteristiche particolari (tipo seguire i link Unix) deve esistere una
; <Directory> per la DocumentRoot
Order Deny,Allow
Allow from all
Deny from all
; controlla chi puo’ accedere a questa directory
; tutti possono accedere a questa directory
; nessuno puo’ accedere a questa directory
</Directory>
DirectoryIndex file1.est file2.est
; indica il file da cercare e da visualizzare per default, e’ la pagina principale
Alias /nome “pathcompleto”
; indica un alias ad una directory, se il nome finisce con / allora nella URL di
; richiesta deve esserci lo / alla fine, altrimenti non funzionera’
ScriptAlias /nome “pathcompleto”
; indica un alias ad una directory che conterra’ scripts cgi,shell
ErrorLog pathcompletoenomefile
CustomLog pathcompletoenomefile
; indica il file dove saranno scritti eventuali errori riportati dal server
; indica il file dove saranno scritti tutti gli accessi al server
WWW
(World Wide Web)
Gli esempi precedenti riguardano la configurazione di un web server normale, un web server che gestisce un solo
sito web, ma se volessimo gestire “n” siti web con lo stesso web server ? Vediamo cosa c’e’ da aggiungere alla
configurazione base del file /etc/httpd/conf/httpd.conf, valida sia per v.1.3 che per v.2.0 di apache
NameVirtualHost indirizzoip
; indica l’indirizzo IP del server, che rispondera’ a piu’ web server
<VirtualHost indirizzoipNVH>
ServerName FQDNdelwebserver1
ServerAdmin emailaddress
; indica il nome di dominio del sito web
DocumentRoot pathcompleto
<Directory pathcompletoDR>
Options opzioni
AllowOverride opzioni
Order Deny,Allow
Allow from all |
</Directory>
Deny from all
ErrorLog pathcompletoenomefile
CustomLog pathcompletoenomefile
</VirtualHost>
<VirtualHost indirizzoipNVH>
ServerName FQDNdelwebserver2
…
</VirtualHost>
WWW
(World Wide Web)
Esercizio 1: Ogni studente deve installare un web server sul proprio PC, che
risponda alla porta 80, verificare che viene visualizzata la pagina di default di apache.
Esercizio 1a: Sostituire la Document Root di default con /var/webserver e creare una
pagina web iniziale per il proprio sito web, inoltre registrare nel dns l’entry relativa a
www.<cognome>, verificare con il browser che andando sul sito
http://www.<cognome> risponda il proprio web server con la nuova pagina appena
creata
Esercizio 2: Ogni studente deve installare 3 web server (Virtual Host) sul proprio PC
ognuno con la propria Document Root, file di logs, rispondenti agli indirizzi
www1.<cognome> www2.<cognome> e www3.<cognome> e registrarli nel proprio
dns
HTTP Proxy
L’esigenza sempre maggiore di reperire informazioni via Internet (documenti scientifici, programmi, demo
dei giochi, drivers, ecc.) tramite i Browsers (Internet Explorer, Netscape, Mozilla, ecc.) fa crescere
l’esigenza di aumentare la banda da parte di providers, istituzioni in generale, ma anche di piccole societa’.
Purtroppo fino a qualche hanno fa una linea di connessione ad Internet costava veramente tanto, inoltre
ci si accorgeva che all’interno di una stessa rete, piu’ persone accedevano alle stesse informazioni (siti)
piu’ volte durante la stessa giornata, senza contare che le informazioni a volte rimanevano le stesse per
diversi giorni, ed ogni volta veniva sprecata della banda per scaricare sempre le stesse pagine, gli stessi
documenti, gli stessi drivers.
E’ da questa esigenza che e’ nato il Proxy server, vediamo i vari tipi attualmente disponibili:
web (http) proxy, non e’ altro che un collezionatore di pagine web, immagini e di tutti i documenti statici
esportati usando i protocolli HTTP e su alcuni anche FTP, il suo funzionamento e’ veramente semplice,
ad ogni richiesta il Proxy verifica se nella cache e’ gia presente il documento, in caso affermativo lo
restituisce direttamente, altrimenti lo scarica dalla rete, e lo restituisce, tenendone copia nella Cache, i
documenti vengono eliminati dalla Cache usando degli algoritmi che tengono conto dell’eta’, della
dimensione e della storia di accesso. Due semplici algoritmi sono il LRU (Least Recently Used, il meno
recentemente usato) e LFU (Least Frequently Used, il meno frequentemente usato). Alcuni di questi
proxy possono effettuare filtering contains, ovvero bloccare l’accesso a determinati siti. Il proxy viene
acceduto solo attraverso un browser.
Socks proxy, e’ un intermediatore tra client e server, per qualsiasi connessione TCP, il proxy gestisce
tutta la comunicazione tra client e server interponendosi nella connessione. Questo permette al proxy
di poter gestire ogni tipo di applicazione TCP e UDP che lo supporta, quindi puo’ essere usato per
leggere la posta, usare ICQ, Napster, Edonkey ecc. ecc. purtroppo per funzionare con alcune
applicazioni ha bisogno di programmi aggiuntivi (i normali browser non gestiscono proxy di tipo socks)
HTTP Proxy
-
CGI proxy, non e’ altro che un server web dal quale richiedere un altra pagina web, la pagina richiesta
apparira’ con indirizzo http://cigproxyFQDN/http/sitowebrichiesto, logicamente puo’ essere usato solo
tramite l’uso di un browser
Noi tratteremo solo il primo tipo (quello piu’ comunemente usato) ovvero il http proxy
Quali sono i vantaggi di usare un Http Proxy Server ?
-
Tempi di risposta piu’ rapidi; se la pagina cercata e’ nella cache del Proxy Server, la risposta sara’
immediata (sicuramente molto piu’ rapida che scaricare dalla rete la stessa pagina)
-
Risparmio di banda; vedremo successivamente delle statistiche che mostreranno come in un ambiente
con centinaia di client quasi il 50% delle richieste e’ espletata dalla cache
-
Possibilita’ di vietare l’accesso ad alcuni siti
-
Possibilita’ di vietare l’accesso web ad alcuni utenti
-
Sicurezza e rispetto della privacy, i proxy anonymous, distruggono tutte le informazioni riguardanti il
tuo computer in modo tale che le tue informazioni non possono essere usate da hackers e spammers
HTTP Proxy
Gli Http Proxy Server hanno diversi livelli di anonimita’ e dipende dalla loro configurazione:
-
Trasparente: questi proxy non sono anonimi, il server dice al sito web che viene usato un proxy, ma
fornisce tutti i dati relativi al client (indirizzo IP, browser usato, ecc.)
-
Anonima: questi proxy informano il sito web che viene usato un proxy, ma non forniscono I dati relativi
al client
-
Distorta: questi proxy informano il sito web che viene usato un proxy, ma forniscono un indirizzo IP
fantasma, generato casualmente dal proxy server, oppure impostato dall’utente, in ogni caso non e’
l’indirizzo IP del client, che effettua la richiesta
-
Alta Anonimita’: questi proxy non informano il sito web che viene usato un proxy e forniscono un IP
fantasma generato casualmente dal proxy server, oppure impostato dall’utente, in ogni caso non e’
l’indirizzo IP del client, che effettua la richiesta
E’ possibile inoltre creare una struttura di Http Proxy Servers, in modo da avere una elevata affidabilita’ ed
anche per suddividere il carico delle richieste, si avranno quindi Proxy parent e sibling ai quali richiedere le
pagine mancanti nella nostra cache, il parent scarica anche le pagine che noi richiediamo non presenti
nella
sua cache, mentre il sibling ci fornisce solo quelle che ha gia scaricato.
I vari proxy server comunicano tra di loro usando il protocollo ICP (Internet Cache Protocol) via UDP.
HTTP Proxy
Cerchiamo di capire come funziona il proxy server nel dettaglio.
Quando arriva una richiesta da parte del client (per esempio http://www.yahoo.it)
il server cerca nella sua cache per vedere se ha la pagina richiesta
a) se non ha la pagina, la scarica dal sito, la da al client e la copia in cache
b) se ha la pagina, vede se e’ ancora valida (TTL non scaduto)
1) se e’ valida la da al client
2) se non e’ valida (TTL scaduto), richiede al server con un messaggio
IMS se e’ cambiata
a) se e’ cambiata, sostituisce quella in cache e la restituisce al
client
b) se non e’ cambiata, aggiorna il TTL se viene impostato dal
server e la restituisce al client
c) Quando la cache disco e’ piena, vengono cancellatte tutte le pagine ritenute
vecchie e meno accedute.
L’IMS e’ solo un messaggio di richiesta da parte del Proxy, per sapere dal sito se
la pagina e’ cambiata, solo se e’ cambiata la scarica nuovamente.
HTTP Proxy
Schema funzionamento di un normale Http Proxy Server
www.libero.it
www.yahoo.com
Proxy server
Router/Gateway
INTERNET
Richieste http/ftp/gopher e IMS
www.ferrari.it
Richieste http/ftp/gopher
www.microsoft.com
Client 1
Client 2
Client 3
…
HTTP Proxy
Schema funzionamento in ridondanza degli Http Proxy Server tramite script
nel webserver
www.libero.it
Proxy server 2
www.yahoo.com
Router/Gateway
INTERNET
Proxy server 1
www.ferrari.it
Richieste http/ftp/gopher
www.microsoft.com
Client 1
Client 2
Client 3
…
HTTP Proxy
Esempio di configurazione con 2 proxy server, in affidabilita’ (anche se uno e’ sprecato perche’ non fa cache finche’ non
muore il primo)
//
// File: proxy.pac
// Author: Claudio Soprano
// Date: Sept 2005
// Last Modification: 22-settembre-2005
//
// Description: Mozilla proxy auto configuration for LNF.
//
// The only function we need to define.
//
function FindProxyForURL( url, host )
{
if (isPlainHostName(host))
return "DIRECT";
if (dnsDomainIs(host,".lnf.infn.it"))
return "DIRECT";
if (url.substring(0,5)=="http:" ||
url.substring(0,4)=="ftp:" ||
url.substring(0,7)=="gopher:")
{
return "PROXY wwwcache1.lnf.infn.it:3128 ; PROXY wwwcache2.lnf.infn.it ; DIRECT";
}
}
HTTP Proxy
Schema funzionamento in bilanciamento degli Http Proxy Server tramite
script nel webserver
Proxy server 2
Domini dispari
www.libero.it
www.yahoo.com
Router/Gateway
INTERNET
Proxy server 1
Domini pari
www.ferrari.it
Richieste http/ftp/gopher
www.microsoft.com
Client 1
Client 2
Client 3
…
HTTP Proxy
Esempio di configurazione con 2 proxy server, domini pari sul primo e domini dispari sul secondo, in caso di fail di uno dei due proxy si
va sull’altro
//
// File: proxy.pac
// Author: Massimo Pistoni - Sandro Angius - Claudio Soprano
// Date: May 1996
// Last Modification: 13-novembre-2000
//
// Description: Mozilla proxy auto configuration for LNF.
//
// The only function we need to define.
//
function FindProxyForURL( url, host )
{
if (isPlainHostName(host))
return "DIRECT";
if (dnsDomainIs(host,".lnf.infn.it"))
return "DIRECT";
if (url.substring(0,5)=="http:" ||
url.substring(0,4)=="ftp:" ||
url.substring(0,7)=="gopher:")
{
ret = url.length;
if ( (ret % 2) == 0 ) {
return "PROXY wwwcache1.lnf.infn.it:3128 ; PROXY wwwcache2.lnf.infn.it ; DIRECT";
} else {
return "PROXY wwwcache2.lnf.infn.it:3128 ; PROXY wwwcache1.lnf.infn.it ; DIRECT";
}
} else
return "DIRECT";
}
HTTP Proxy
Schema funzionamento di un Http Proxy Server in modalita’ gerarchica
utilizzando il protocollo ICP
Proxy domini IT
Proxy domini COM
Proxy server
Router/Gateway
ICP
ICP
Proxy domini GOV
ICP
INTERNET
Richieste domini GOV
ICP
Proxy domini ORG
Richieste http/ftp/gopher
Client 1
Client 2
Client 3
Proxy domini …
HTTP Proxy
Differenza tra parente e sibling in una modalita’ gerarchica di Http Proxy
Proxy1 domini IT
parent
Proxy server 2
sibling
Proxy2 domini IT
parent
ICP
sibling
Proxy1 domini ORG
parent
ICP
Proxy server 1 Router/Gateway
ICP
ICP
INTERNET
ICP
ICP
sibling
Richieste http/ftp/gopher
Client 1
Client 2
Client 3
Proxy domini …
Proxy2 domini ORG
parent
HTTP Proxy
Richieste Accesso Proxy/Cache Servers (3) 2004
Percentuale Minima di richieste in Cache 37%
Percentuale Media di richieste in Cache 45%
Percentuale Massima di richieste in Cache 56%
7,000,000
Richieste Mensili
6,000,000
5,000,000
Richieste Totali
4,000,000
In Cache
3,000,000
Non in Cache
2,000,000
1,000,000
0
Feb
Mar
Apr
May Jun
Jul
Aug Sep
Oct
Nov Dec
Anno 2004
Totale dal 1/2 al 31/12, 53 Milioni di richieste
In Cache 25 Milioni di richieste
Non in Cache 28 Milioni di richieste
HTTP Proxy
Accesso Proxy/Cache Servers (3) in GB
Percentuale Minima risparmiata 6%
Percentuale Media risparmiata 12%
Percentuale Massima risparmiata 15%
90.00
80.00
GB Mensili
70.00
60.00
GB Totali
50.00
GB Rispiarmiati
40.00
GB Scaricati
30.00
20.00
10.00
0.00
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Anno 2004
Totale dal 1/2 al 31/12 570,02 GB
Scaricati 502,32 GB
Risparmiati 67,70 GB
Nov Dec
HTTP Proxy
Vediamo come funziona una connessione ad un Proxy Server da parte di un client,
usiamo il comando telnet al posto del navigatore normale e supponiamo di collegarci al
Proxy server wwwcache1.lnf.infn.it, nel quale e’ installato e configurato il server proxy
Squid, al server gli chiedamo di darci la pagina di yahoo
$ telnet wwwcache1.lnf.infn.it 3128[Invio]
telnet risponde e si mette in attesa di una nostra richiesta:
Trying 193.206.84.219...
Connected to www.lnf.infn.it.
Escape character is '^]'.
Si deve iniziare a scrivere, cominciando con una riga contenente il metodo, la risorsa e la
versione del protocollo, continuando con una riga contenente le possibilità di
visualizzazione del cliente (i tipi MIME):
GET http://www.yahoo.com HTTP/1.0 [Invio]
Accept: text/html [Invio]
[Invio]
L’ultima riga vuota indica al server che la richiesta e’ finita e che va quindi evasa.
Otterremo come risposta la index pagina del sito www.yahoo.com
HTTP Proxy
Ecco le possibili risposte di SQUID (le trovate nei logs) i codici TCP si riferiscono alle richieste HTTP
sulla porta 3128, quelli UDP alle richieste ICP sulla porta 3130
TCP_MISS
l’oggetto richiesto non e’ nella cache
TCP_HIT
l’oggetto richiesto e’ nella cache
TCP_REFRESH_HIT l’oggetto richiesto era in cache ma scaduto, l’IMS indica che non e’ cambiato
TCP_REFRESH_MISS l’oggetto richiesto era in cache da molto tempo, l’IMS indica che l’oggetto e’
cambiato e quindi viene riscaricato
TCP_CLIENT_REFRESH_MISS il client ha specificato di non prenderlo dalla cache, l’oggetto viene
riscaricato
TCP_IMS_HIT
il client ha richiesto una riconferma per un oggetto che e’ in cache ed e’ valido
TCP_SWAPFAIL_MISS l’oggetto si credeva in cache, ma non era possibile accedere ad esso
TCP_MEM_HIT
l’oggetto richiesto era in cache in memoria, non viene letto dal disco
TCP_DENIED
accesso negato per la richiesta
UDP_HIT
UDP_MISS
UDP_DENIED
UDP_INVALID
l’oggetto richiesto era in cache
l’oggetto richiesto non era in cache
accesso negato per questa richiesta
richiesta non valida ricevuta
HTTP Proxy
Il software usato per implementare un Http Proxy Server in
ambiente Linux in questo Stage e’ Squid
Si puo’ scaricare da http://www.squid-cache.org
- e’ gratuito
- e’ tenuto continuamente aggiornato
- e’ molto stabile
- e’ il proxy server di default su Linux
- possibilita’ di limitare l’accesso al proxy solo ad alcuni domini o
ad alcuni utenti
- possibilita’ di creare una struttura gerarchica
- la porta standard di risposta e’ 3128 ed usa protocollo TCP
HTTP Proxy
Passi necessari per l’installazione di un Http Proxy server:
Scaricare il pacchetto software Http Proxy server dal sito
http://www.squid-cache.org
Installare il pacchetto
tar –xvzf squid-2.5.STABLE10.tar.gz
./configure
make
make install
Configurare il Proxy server
modificare il file /etc/squid/squid.conf
Creare le directory di caching con il comando, va dato ogni volta che aumentiamo la dim. della cache
/sbin/squid -z
Attivare il Proxy server
/etc/init.d/squid start
-
Testare il funzionamento guardando i log in /var/log/squid
access.log (contiene gli accessi al proxy e se sono fatti in cache o meno)
store.log (contiene le informazioni su tutti gli oggetti che entrano, ed escono dalla cache)
cache.log (contiene gli errori che Squid genera)
-
Usare un browser per la verifica, attivando l’uso di un proxy server
Attivarlo come servizio partente al riavvio della macchina
chkconfig --add squid
chkconfig --level 35 squid on
-
HTTP Proxy
File di configurazione /etc/squid/squid.conf
http_port porta
indica la porta TCP sulla quale il server accettera’ le richieste (default 3128)
cache_mem valore MB
indica la quantita’ di RAM da riservare per la cache in memoria (default 8 MB)
calcolare come valore max RAMPC/3
maximum_object_size valore KB
minimum_object_size valore KB
indica la dimensione massima degli oggetti da salvare in cache (default 4096 KB)
indica la dimensione minima degli oggetti da salvare in cache (default 0 KB)
cache_dir ufs pathcompleto dimensioneinMB level1directory level2directory
indica dove risiedera’ la cache (default /var/spool/squid), la dimensione in MB di tutta la cache, il numero di directory
per il level1 (default 16) e il numero di directory per il level2 (default 256)
cache_access_log pathcompletoenomefile indica dove sono scritti i log di accesso (default /var/log/squid/access.log)
cache_log pathcompletoenomefile
indica dove sono scritti i log di funzionamento (default /var/log/squid/cache.log)
cache_store_log pathcompletoenomefile indica dove sono scritti i log con informazioni sulla cache, cosa e’ salvato nella
cache, cosa viene rimosso (default /var/log/squid/cache.log)
ftp_user emailaddress
ftp_passive on|off
indica l’email usato per accedere a ftp anonimi (default Squid@)
indica se usare la modalita’ passiva per ftp (default on)
HTTP Proxy
File di configurazione /etc/squid/squid.conf (continua)
acl nome tipo opzioni
crea un acl, di un tipo
acl nome proxy_auth REQUIRED
indica che ogni accesso al proxy deve essere autenticato con login e password
auth_param tipo program pathcompletoefile opzioni
indica il tipo di metodo di autenticazione da usare, quindi il
programma esterno da usare e le eventuali opzioni, i metodi di
autenticazione vanno compilati a parte
acl nome src|srcdomain valore
crea un acl (access-list) basandosi su IP o su dominio questa viene usata per
dire chi avra’ accesso alla cache
http_access allow|deny acl
indica chi avra’ accesso o meno alla cache (ci sono piu’ http_access, e quindi
importante la posizione, l’ultimo e’ un deny normalmente)
http_reply_access allow|deny acl
indica chi otterra’ le risposte alle richieste (e’ complementare a
http_access,l’ultimo e’ un deny normalmente)
cache_mgr emailaddress indica l’email dell’amministratore del proxy server
cache_effective_user nomeutente
cache_effective_group nomegruppo
indica l’utente che eseguira’ il demone
indica il gruppo di appartenenza del demone
HTTP Proxy
File di configurazione /etc/squid/squid.conf (continua)
visible_hostname FQDN
unique_hostname FQDN
indica il nome FQDN che apparira’ nei log (default e’ hostname)
indica il nome FQDN unico del Proxy Server (ognuno ha il suo)
logfile_rotate valore
indica il numero di logfile da creare quando si usa (squid –k rotate)
append_domain .domain
indica il dominio da aggiungere ad hostname senza dominio
cachemgr_passwd passwordshutdown shutdown indica la password per effettuare lo shutdown del server via manager
cachemgr_passwd passwordconfig config
indica la password per vedere lo stato del server via manager
cache_peer FQDN|IP parent|sibling http_port udp_port opzioni
indica da quale altro proxy server prendere le informazioni, parent indica un proxy server che puo’ scaricare oggetti per noi,
sibling indica un proxy server che non puo’ scaricare per noi, nelle opzioni troviamo proxy-only, che indica che il nostro
proxy non copiara’ nella cache gli oggetti ricevuti da un’altro proxy parent o sibling che sia
cache_peer_domain FQDN|IP .dominio1 .dominion !.dominio1 !.dominion
indica per quali domini chiedere o non chiedere ad un altro proxy (parent o sibling, esempio .it !.com)
HTTP Proxy
Esercitazione 1: ogni studente deve installare e configurare un Proxy server sul proprio
PC, configurare il browser per usarlo e verificare il suo funzionamento
Esercitazione 2: modificare apache in modo che sia possibile usare il cache-manager via
Web, per vedere le statistiche di accesso del nostro Proxy server
Esercitazione 3: creare una gerarchia divisa a Top Level Domain tra i Proxy servers
appena installati, in modo tale che ogni Proxy server chiede agli altri le pagine a seconda
del dominio richiesto
FINE
Domande ?
Scarica

Stage Estivi - Laboratori Nazionali di Frascati