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 ?