Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Solutia Linux de conectare la Internet

Solutia Linux de conectare la Internet



CUPRINS

PARTEA I (Conectarea unui LAN la Internet)

Cazul clasic al conectarii la Internet

Conceptul de Internet

Cum functioneaza Internet-ul ?

Conectarea la Internet printr-un cablu UTP

Cablul UTP

Viteza de transfer

Informatii vitale pentru conectarea la Internet

Adresa IP



Netmask

Adresa de broadcast

Gateway

DNS

Testarea conexiunii

Conectarea mai multor calculatoare la Internet

Instalarea Linux-ului

Cate ceva despre hard-disk-uri

Configurari la Instalarea Linux-ului

Comenzi low-level de configurare retea

Ifconfig

Route

Studiu de caz

Recompilarea kernel-ului

Bootare fortata

De unde se obtin adresele IP routabile

Domenii DNS

Serverul de email

Proxy

Securitate

Firewall-ul in Linux

 PARTEA A DOUA (Reprezentare Firewall)  

Introducere

Cum functioneaza un firewall

Pachetul IP

Abstractizare firewall

Limitari cunoscute

Posibile reprezentari

Reprezentarea cu masca

Reprezentare firewall printr-un automat

Automat firewall minimal  

PARTEA A TREIA (Protocolul TCP/IP)  

Protocolul IP (Internet Protocol)

Adrese IP  

Bibliografie

PARTEA INTAI

- Conectarea unui LAN la Internet -

Cazul clasic al conectarii la Internet

Pentru ca un calculator sa fie conectat la Internet trebuie intai sa existe o legatura fizica intre acesta si un nod al acestei retele Internet. Legatura poate fi realizata prin fire de cupru (cablu BNC, UTP), fibra optica, unde radio, etc. De obicei administratorul nodului deja conectat la Internet (Internet Service Providerul de exemplu) furnizeaza un IP noului host conectat.

Conceptul de Internet

In momentul in care o firma/institutie a inceput sa acumuleze dispozitive de calcul, a aparut si problema transmiterii de date intre acestea si utilizarii unor informatii in comun. Transmiterea prin manipularea dispozitivelor de stocare (disckete, hard-disk-uri, benzi magnetice) s-a dovedit ineficienta pentru accesari de date in timp real sau pentru transmiteri frecvente de fisiere mici (cum ar fi transportul pe disketa a fisierelor pana la calculatorul la care este conectata imprimanta). Aceasta nevoie a fost rezolvata interconectand calculatoarele (si alte dispozitive de calcul care au putut fi adaptatate precum imprimante de retea, etc) prin legaturi fizice permanente, prin fire de cupru, fibre optice sau chiar prin infrarosii si unde radio. In scurt timp insa a aparut si problema comunicarii de date intre filiale ale aceleiasi firme din zone geografice diferite, asa ca aceste retele (net-uri) au fost inter-conectate (la inceput prin linii telefonice inchiriate). Astfel s-au format internet-urile (inter-retele). La un moment dat (prin anul 1960), Ministerul Apararii din SUA a dorit sa interconecteze bazele sale militare intr-o inter-retea care sa fie capabila sa continue sa functioneze chiar in cazul in care unele puncte ale marii retelei ar fi distruse. Asa a aparut o inter-retea numita ARPANET (ARPA = 'Advanced Research Projects Agency' se numea institutia guvernamentala care a coordonat si finantat proiectul). Experimentele facute cu aceasta retea au dus la concluzia ca trebuie dezvoltat un protocol nou, special conceput pentru o astfel de arhitectura de retea. Astfel a aparut protocolul TCP/IP, special conceput pentru a lucra pe o retea de intindere foarte mare, pe o inter-retea. ARPA a semnat un contract de finantare cu 'University of California din Berkeley' pentru a implementa acest protocol in sistemul de operare UNIX, ceea ce a dus la dezvoltarea unei interfete flexibile prin care programele pot comunica intre ele prin retea numita 'socket' (soclu). In cursul dezvoltarii protocolului au fost interconectate retelele mai multor universitati, rezultand o retea cu aproximativ 200 de noduri. In anul 1980 portiunea militara a fost data in exploatare (si izolata de restul retelei), dar cele aproximativ 160 de noduri ramase au functionat in continuare, noi si noi retele fiind interesate sa se conecteze la acesta mare inter-retea. Cand aceasta inter-retea a devenit atat de mare incar lumea a constientizat-o ca Inter-reteaua (cu I mare), a aparut si conceptul de Internet (cu I mare).

Cum functioneaza Internet-ul ?

Internetul este o retea care interconecteaza calculatoare din intreaga lume, facand posibil schimbul de informatii de orice tip intre oricare doua calculatoare din aceasta retea. Protocolul de comunicare in aceasta retea este se numeste IP (Internet Protocol) si asigura transmiterea de datagrame (numite pachete IP) intre oricare doua puncte ale retelei. Aceste pachete au lungime limitata (uzual 1500 bytes), mesajele mai mari transmitandu-se in cadrul mai multor pachete. In fiecare pachet exista specificate sursa si destinatia mesajului.

Fiecare calculator care participa la Internet are un identificator unic (un numar pe 32 de biti) prin care el poate fi referit de catre alt calculator din Internet. Acest numar se numeste 'adresa IP', sau mai simplu 'IP' si este reprezentat in general ca 4 grupe de catre 8 biti scrise in baza zece, mai exact ca 4 numere in intervalul 0-255 separate cu punct ('.') , de exemplu: '193.226.51.54'. Un calculator poate avea mai multe adrese IP dar un calculator fara IP nu poate comunica in Internet. Alaturi de calculatoare exista si alte echipamente care pot comunica in Internet (imprimante special concepute, routere dedicate, switch-uri, etc). Participant la Internet este orice agent care are asignata o adrese IP si poate schimba mesaje cu ceilalti paticipanti prin protocolul IP.

Protocolul IP asigura transmiterea de mesaje scurte intre oricare doua puncte ale Internetului, dar responsabilitatea lui este doar sa controleze traseul pe care trebuie sa-l urmeze pachetul spre destinatie prin multiplele noduri ale retelei. In responsabilitatea sa nu intra controlul pachetelor pierdute si nu garanteaza ca pachetele ajung in ordinea in care au fost trimise. El nu face decat sa transporte pachete de informatii de la un host la altul, de la un IP la altul, pachetul continand doar IP-ul sursa, IP-ul destinatie si cateva informatii de control cum ar fi versiunea protocolului, daca pentru pachet este mai important sa ajunga rapid la destinatie sau este mai important sa ajunga, chiar daca cu intarziere, etc. Pe parcursul drumului de la sursa la destinatie, pachetul poate trece prin segmente de retea care au un maxim al lungimii pachetului mai mic decat cel al sursei, ceea ce face necesara fragmentarea pachetului si atasarea fiecarui fragment un ID si un numar de ordine, un pachet IP contine deci si aceste campuri.

Pentru unele aplicatii (de exemplu transmiterea frame-uri video) acest sistem este destul de acceptabil, pierderea unui frame nu este o problema, retransmiterea ar fi chiar inutila. Pentru transferul de fisiere insa pierderea unui pachet sau primirea in alta ordine a pachetelor este chiar o problema. Astfel a aparut necesitatea diferentierii de clase de servicii, servicii nefiabile, orientate pe datagrame care nu asigura retransmiterea pachetelor pierdute si reordonarea lor si servicii fiabile, orientate pe conexiune, in care se face automat retransmiterea pachetelor piedute, ordonarea la destinatie si chiar controlul congestiei. Pentru acest scopuri au fost create protocoale de comunicare 'peste' acest protocol, mai exact a fost rezervat in antetul pachetului IP un camp 'tip de pachet' iar in functie de acest camp informatia din pachetul IP este interpretata in mod diferit si este tratata de protocoale diferite. Cele mai cunoscute tipuri de pachete IP sunt pachetele TCP, UDP si ICMP. Protocolul UDP (User Datagram Protocol) este un protocol simplu dar nesigur, aplicatiile care il folosesc trebuie sa-si implementeze singure metode de detectare a pachetelor pierdute si de retransmitere a lor. Protocolul TCP este un protocol complex, asigurand initierea de conexiuni fiabile, cu retransmitere de pachete, reordonare si controlul congestiei. Pachetele ICMP (Internet Control Mesage Protocol) se folosesc pentru depanarea retelei (ping) si pentru transmiterea de informatii despre evenimente speciale pe parcursul traseului unui pachet (de ex. pachetul a trecut prin mai multe routere decat maximul specificat in pachet).

Recapituland: exista pachetele IP care au ca definitorii IP-ul sursa si IP-ul destinatie. Printre tipurile de pachete IP cele mai cunoscute sunt UDP, TCP, ICMP si ARP (ultimul mai putin cunoscut pentru ca nu este folosit de aplicatii ci de catre sistemele de operare).

Pentru a identifica si diferentia hosturile exista adresele IP. Pentru a diferentia in cadrul aceluias host diversele aplicatii care comunica in retea exista numarul de port, care este un numar pe 16 biti, deci intre 0 si 65535. Un comunicatie in retea se face intre doua perechi IPsursa-PORTsursa si IPdestinatie-PORTdestinatie. Comunicatia poate fi nefiabila (la nivel de pachet prin UDP) sau fiabila (la nivel de conexiune prin TCP).

Conectarea la Internet printr-un cablu UTP

Situatia tipica de legatura permanenta la Internet este facuta printr-o conexiune ethernet, pana la un router legat la randul sau la Internet. Legatura ethernet se poate realiza prin mai multe tipuri de cabluri, cel mai folosit fiind insa cablul UTP.

Cablul UTP contine 4 perechi de fire de cupru izolate si torsadate (rasucite), prinse intr-un invelis izolator. In fiecare pereche exista un fir colorat intr-una din culorile portocaliu, verde, albastru, maro, perechea lui avand aceeasi culoare, dar intrerupta de portiuni albe. De fapt pentru ethernet se folosesc doar doua perechi, una 'dus' si un 'intors'. Cablurile UTP se termina cu mufe care au aspectul mufelor telefonice, dar sunt mai late, trebuind sa cuprinda 8 fire (fata de 4 la mufele telefonice). Cablul se prinde in mufe prin 'sertizare' cu un cleste special care infige lamele metalice ale mufei prin invelisul izolator al fiecarui fir. Privind mufa cu lamela de prindere in spate si cu lamelele metalice in sus, firele folosite la ethernet sunt 1-2 si 3-6. Pe aceste pozitii trebuiesc sa fie sertizate fire perechi, uzual portocaliu si verde. Pentru a interconecta doua calculatoare cablul trebuie sertizat astfel incat perechea de fire care este pe pozitia 1-2 la un capat sa corespunda perechii 3-6 la celalalt capat (ce transmite o placa de retea sa ajunga la pozitia de receptie ai celeilalte). De obicei insa se foloseste un 'concentrator' la care se aduna cablurile de la mai multe calculatoare si prin care comunica intre ele (de exemplu HUB sau SWITCH). Acesta are mufele asemenatoare celor de retea, dar au inversati conectorii 1<->3 si 2<->6, astfel ca pentru conectarea unui calculator catre acest 'concentrator' se folosesc cabluri care au la ambele mufe aceeasi ordine a perechilor. Ordinea uzuala este:

w-o,o,w-g,b,w-b,g,w-br,br cu conventia: o=orange (portocaliu), g=green(verde), b=blue(albastru), br=broun (maro) iar w- semnifica ca respectiva culoare este intrerupta. In cazul in care cablul este 'inversat' (se mai numeste si twisted sau cross-over) ordinea la una din mufe este schimbata in w-g,g,w-o,b,w-b,o,w-br,br. Trebuie precizat ca o greseala frecventa este pozitionarea perechilor in mufa dupa o ordine oarecare. Daca este respectata in ambele parti, cablul poate functiona aparent, dar daca perechile 1-2 si 3-6 nu sunt torsadate (rasucite) pot apare functionari defectuase (pierderi, erori), mai insemnate la 100Mbps si/sau cabluri lungi.

De obicei langa calculator exista o priza UTP care este legata la concentrator (HUB, SWITCH). Conectarea consta in legarea unui cablu UTP 'direct' (neinversat) intre priza UTP si placa de retea ethernet din calculator. In general vom avea la dispozitie o mufa utp 'mama' care ne va lega fizic de un router deja conectat la Internet (acesta poate fi in aceeasi cladire si legat la acelasi HUB/SWITCH sau poate fi la providerul INTERNET pana la care legatura se face prin Modem de cablu, Fibra optica sau Radio. Este de asteptat ca la provider sa exista o trecere similara de la echipamentul de conectare spre un cablu UTP, deci daca facem abstractie de viteza putem considera ca exista un cablu UTP de la calculatorul nostru pana in HUB-ul/SWITCH-ul providerului, la care este conectat routerul acestuia.

Viteza de transfer. La inceput conexiunea ethernet asigura o viteza de 10Mbps (10 megabiti pe secunda). Legatura se putea realiza printr-un cablu BNC (coaxial) care trecea pe la toate calculatoarele sau prin cablu UTP si HUB/SWITCH pentru conectarea mai multor calculatoare. Pe cablul UTP a fost proiectat apoi un standard care permite atingerea vitezei de 100Mbps. Majoritatea placilor de retea de 100Mbps suporta si interconectari la viteza de 10Mbps pentru compatibilitate cu placile vechi. Un avantaj al conectarii cu UTP fata de BNC este pe langa faptul ca se pot realiza transmisii full-duplex, adica 100Mbps intr-un sens si 100Mbps in celalat sens simultan. Aceasta facilitate nu este suportata de toate placile si nu poate fi folosita daca se foloseste un HUB, necesitand un SWITCH. Aceasta viteza este asigurata intre oricare doua calculatoarele care sunt in acelasi HUB sau pe acelasi cablu BNC, dar in cazul in care se face trafic intre mai multe calculatoare suma vitezelor cu care se transmit datele nu poate depasi aceasta valoare. In cazul unui SWITCH insa, doua perechi de calculatoare pot comunica ambele cu 100Mbps, viteza nu mai este limitata la suma vitezelor ci pe fiecare cablu UTP in parte. Trebuie precizat faptul ca unitatea de masura pentru latimea de banda este bitul (nu byte-ul ca in cazul fisierelor), deci pe o conexiune de 100Mbps viteza de transfer al unui fisier va fi maxim 100:8Mbps, o aproximare destul de buna fiind 10MB/s (mai exista informatii de control al transferului). Viteza de transfer in Internet este data de minimul dintre latimile de banda disponibile pe diferitele tronsoane traversate de de pachete intre locatii. De obicei viteza in Internet este mult mai mica decat viteza in reteaua locala, aceasta fiind de ordinul KB/s (kilobytes pe secunda), deci un upgrade de la 10Mbps la 100Mbps in reteaua locala nu creste decat viteza de comunicatie in interiorul retelei, nu si viteza de acces Internet. Viteza de acces Internet este data de canalul de comunicatie pana la provider (care poate avea limitari fizice de viteza) si de banda pe care providerul o aloca clientului.

Informatii vitale pentru conectarea la Internet. In momentul conectarii calculatorului trebuiesc aflate cateva date tehnice vitale pentru a putea folosi conexiunea. Aceste informatii sunt: Adresa IP, Netmask, Gateway, Name-server(e). Hostname-ul (numele de host) se poate pune oricum, dar daca exista o inregistrare DNS cu corespondenta intre un nume de host si IP-ul pus, este bine sa se seteze acel nume. In lipsa, se poate pune orice nume, urmat de domeniul organizatiei din care se face parte calculatorul sau chiar un domeniu fictiv.

Adresa IP este identificatorul unic cu care calculatorul va fi recunoscut in Internet. Este un numar de 32 de biti cu fiecare grupa de 8 biti scrisa in zecimal si separate prin punct ('.'). Ex: 193.226.51.54

Netmask-ul este tot un numar de 32 de biti, dar are proprietatea ca este format dintr-un sir de biti 1 urmat de un sir de biti 0. Cea mai uzuala valoare este 255.255.255.0 care este formata din 24 de biti 1 si 8 biti 0. Netmask-ul este folosit pentru a determina daca o destinatie se afla in aceeasi retea ethernet (de ex. in acelasi HUB sau pe acelasi cablu BNC) cu calculatorul care vrea sa trimita un pachet de date. Daca IP-ul destinatie corespunde cu IP-ul propriu pe toate pozitiile pe care Netmask-ul este 1, atunci calculatorul va 'intreba in retea' printr-un broadcast cine are acel IP, placa care are acel IP va raspunde si se va trimite un pachet direct catre acea placa de retea. De exemplu un calculator cu IP-ul 193.226.51.54 cu netmask 255.255.255.0 se considera in aceeasi retea cu toate calculatoarele care au IP-uri 193.226.51.X cu X intre 0 si 255. Daca netmask-ul este 255.255.255.128 (inca un bit 1 in plus), calculatorul se va considera in aceeasi retea doar cu IP-urile care au pe ultima pozitie un numar X intre 0 si 127. Celelate IP-uri vor avea bit-ul 25 (primul bit din al 4-ulea octet) egal cu 1 si nu ar mai corespunde cu bit-ul 0 de pe pozitia 25 al lui 193.226.51.54. In acest caz, el va trimite pachetul unuia din calculatoarele care este in aceeasi retea cu el si care are o alta placa de retea care comunica cu Internet-ul. Adresa acestul calculator este adresa de gateway. Folosirea mastilor de retea (netmask-urilor) are o utilitate foarte mare in construirea algoritmilor de routare, prin folosirea operatiilor logice 'bit cu bit', care iau foarte putin timp de procesare. La initializarea configuratiei de retea calculatorul calculeaza 'adresa retelei' facand 'si logic bit cu bit' intre IP si netmask (practic se obtine adresa de IP in care s-au modificat in 0 bitii care sunt 0 in netmask). De exemplu pentru IP=193.226.51.130 netmask=255.255.255.0 adresa de retea este 193.226.51.0 iar pentru IP=193.226.51.130 netmask=255.255.255.192 (64 adrese), adresa de retea este 193.226.51.128. In momentul in care calculatorul trebuie sa determine daca un ip este in aceeasi retea cu IP-ul sau, el face ' si logic bit cu bit ' intre acel IP si netmask, calculand adresa de retea a acelui IP daca ar avea acea masca. Daca rezultatul coincide cu adresa de retea a IP-ului propriu, inseamna ca acel IP este in aceeasi retea cu el. Se observa ca punand in 2 IP-uri 0 pe bitii pe care netmask-ul ii are 0, rezultatele vor fi egale daca si numai daca IP-urile corespundeau la inceput pe pozitiile pe care netmask-ul este 1.Pentru subiectul uman exista exista metode mai mai simple pentru calculul mental al unei configuratii. Pentru calcul retelelor sub 256 de adrese (cel mai intalnit caz) calculele afecteaza doar ultimul din cele 4 numere prin care se reprezinta ip-ul. Netmask-ul va avea primele 3 numere 255, ultimul obtinandu-se scazand din 256 numarul de IP-uri din subnet. Invers, scazand ultimul numar al netmask-ului din 256 se obtine numarul de IP-uri din retea (numita si subnet cand este mai mica de 256 adrese). Deci un netmask 255.255.255.240 corespunde la un subnet de 16 IP-uri si invers. Adresa de retea corespunde pe primele 3 pozitii cu IP-ul, iar pe ultima pozitie are primul numar mai mic decat cel al IP-ului si divizibil cu numarul de IP-uri din subnet. Pentru exemplul de mai sus cu IP=193.226.51.130 netmask=255.255.255.192 (64 ip-uri), vom cauta cel mai mare numar care este mai mic decat 130 si divizibil cu 64. Acesta este 128, deci adresa de retea este 193.226.51.128.

Adresa de broadcast este ceruta in unele sisteme si este folosita pentru a desemna toate calculatoarele dintr-un anumit subnet. Ea se obtine ca si adresa de retea din IP si netmask si se calculeaza facand 'sau bit cu bit' intre IP si 'negatul bit cu bit' al netmask-ului. Mai simplu, in IP se fac 1 bitii care in netmask sunt 0 asa cum pentru adresa de retea ei sunt pusi pe 0. Adresa de broacast este ultima adresa din retea, putandu-se calcula pentru subneturi pastrand pe primele 3 pozitii numerele din IP si pe a patra pozitie punand numarul corespunzator urmatorului subnet minus 1. Deci pt. IP=193.226.51.130 netmask=255.255.255.192 avem 64 IP-uri, adresa de retea este 193.226.51.128, adunam 64 la ultimul numar si scadem 1, deci obtinem 193.226.51.191. Cele mai multe sisteme calculeaza automat broadcast-ul, ca si adresa de retea.

Gateway este adresa IP a calculatorului prin care trebuie sa treaca pachetele in drum spre o grupa de destinatii. De obicei exista un singur gateway (o singura legatura spre exterior), numit default gateway care este adresa IP a calculatorului care detine legatura spre Internet. Standardul cere ca acest IP sa fie in aceeasi clasa de adrese cu ip-ul calculatorului, uzual folosindu-se a doua adresa din aceasta clasa de adrese (prima este adresa retelei). De exemplu daca avem IP-ul 193.226.51.54 cu netmask 255.255.255.0 (256 adrese), adresa retelei este 193.226.51.0 si adresa de gateway este 193.226.51.1. Daca IP=193.226.51.130 netmask=255.255.255.192, adresa de retea este deci 193.226.51.128 si gateway va fi 193.226.51.129. Gateway poate fi de fapt oricare din IP-urile din subnet (in afara de adresa de retea si broadcast) dar exceptiile de la regula anterioara se fac doar pentru situatii speciale (de ex. pentru a schimba iesirea Internet a unora dintre calculatoare printr-o a doua legatura).

DNS-ul este prescurtarea de la Domain Name System si este o baza de date distribuita (ierarica) care contine corespondente intre nume de host (ex: www.yahoo.com) si IP-uri (ex. 216.32.74.52). Aceasta baza de date contine si informatii despre adresa IP a serverului de email pentru un domeniu, ca si corespondente intre IP si nume de host. Pentru a putea accesa aceaste baza de date trebuie sa existe setat cel putin o adresa de DNS, uzual doua, pentru cazul in care primul nu functioneaza. IP-ul respectiv este al unuia dintre calculatoarele care are instalat un server DNS si este bine sa existe o legatura cat mai buna pana la el (pentru retele mai mari se instaleaza un server DNS chiar in reteaua locala). Majoritatea serverelor DNS din lume raspund la interogari DNS, dar timpul de raspuns este direct proportional cu calitatea conexiunii pana la el, deci este bine sa fie cat mai aproape. Avand setat un server DNS valid, calculatorul poate sa afle IP-ul asociat oricarui nume de host din Internet. Serverul web apelant interogheaza recursiv mai multe servere, incepand cu unul din serverele 'root' pe care le are predefinite. De ex. pentru domeniul www.yahoo.com intreaba un server 'root' care ii spune ca stie nameserverele care se ocupa de domeniile terminate in '.com'. Intreaba unul dintre aceste nameservere (virtual echivalente) si afla ca www.yahoo.com are un anumit IP (in cazul www.yahoo.com exista chiar o lista de IP-uri asociate, pentru impartirea cererilor intre mai multe servere). De obicei un nume de host se rezolva intr-un singur IP.

Testarea conexiunii: in primul rand trebuie verificata conexiunea pana la gateway. In primul rand trebuie verificata conexiunea pana la gateway. Se va da un ping catre adresa de gateway. Indiferent daca platforma este Linux sau Windows, o functionare a conexiunii este ilustrata prin afisarea timpului in care pachetul de ping a facut drumul 'dus-intors'. In caz contrar se afiseaza 'time out' pe Windows sau nu se afiseaza nimic in cazul Linux-ului. Daca acest test esueaza, in cvasitotalitatea cazurilor conexiunea este inutilizabila. Exista cazuri rare in care gateway-ul este configurat (printr-un firewall) sa nu raspunda la ping (nerecomandabil) si conexiunea sa fie functionala. Aceste cazuri sunt rare insa. O comanda mai putin standard care exista pe Linux si cu care se poate verifica indiferent de firewall este arping. Prin ea se poate verifica conexiunea doar intre host-ul local si alt host accesbil la nivel ethernet (cum este si gateway-ul). Se bazeaza pe trimiterea unei cereri de ARP in retea, intrebandu-se ce placa de retea are acel IP. Protocolul ARP este indispensabil comunicarii, daca un calculator cu acel IP este accesibil la nivel ethernet, atunci el va raspunde. O alta metoda de diagnosticare este verificarea tabelei de ARP dupa ping. Chiar daca exista un firewall, calculatorul spre care se da ping va raspunde la cererea ARP, deci tabela ARP va contine corespondenta intre acel IP si adresa fizica ('MAC-address-ul') placii de retea a calculatorului cu acel IP. Tabela ARP se poate vedea pe Linux prin comanda 'arp -na' iar in Windows cu comanda 'arp -a'. O modalitate mai puternica de depanare a retelei este uilitarul de Linux tcpdump. Rulat cu 'tcpdump -i eth0' de exemplu va afisa cateva informatii (sursa, destinatie, port) despre fiecare pachet care trece prin prima interfata de retea (eth0). Pentru filtrarea informatiilor se pot da argumente mai complexe, in care sa se specifice ce tipuri de pachete sa se afiseze. Ruland tcpdump de pe un calculator pe care nu se face trafic in retea, dar legat la o retea in care se face trafic, se vor observa broadcast-urile celorlate calculatoare care sunt legate in retea, de exemplu cereri ARP. Astfel se poate vedea daca conexiunea exista (cel putin intr-un sens, spre calcularul de pe care se fac teste). Astfel se poate si identifica dintre doua interfete care este eth0 si care este eth1 (se va pune cablul de retea in fiecare, pe rand, in timp ce se face 'tcpdump -i eth0'. In cazul in care se incearca un ping, chiar daca legatura intre interfata si retea nu este functionala, se vor observa totusi cereri ARP ale calculatorului local, de genul 'arp who has <gateway> tell <ip_local>' sau 'arp who has <ip_retea locala> tell <ip_local>'. Acestea nu trebuiesc confundate cu traficul pe care placa il observa din retea.

In momentul in care legatura pana la gateway este functionala este foarte probabil ca legatura sa functioneze si in alta parte. Se poate incerca un ping la IP-urile serverelor DNS. Verificarea nu poate da informatii despre functionarea serverului DNS, dar poate verifica daca serverul este pornit si accesibil. Daca si nameserverele raspund, se poate incerca ping la un nume de host. Este bine sa se inceapa cu un ping la o adresa apropiata (ping www.ici.ro). Ping-ul ar trebui macar sa translateze numele de host in IP (iar acesta sa apara pe ecran), chiar daca hostul este inaccesibil. Daca comanda ping se blocheaza fara sa afiseze IP-ul desinatie sau spune 'invalid host name' inseamna ca rezolvarea de nume nu functioneaza. Ori serverul (serverele) DNS sunt nefunctionale, ori este o problema cu configurarea DNS pe calculator. Se va verifica corectitudinea datelor introduse, in cazul Linux-ului in fisierul /etc/resolv.conf, in cazul Windows-ului in 'Start/Settings/Control-Panel/Network/TCP-IP/Properties/DNS_configuration'. Chiar daca rezolvarea numelor nu functioneaza pentru primul host, merita incercat si alt host care se stie ca functioneaza in 'foc continuu' (ex: www.yahoo.com). Exista posibilitatea ca rezolvarea de nume sa nu functioneze si din cauza faptului ca accesul la serverele 'root' nu sunt accesibile de catre nameservere (ex. conexiunea Internet nu este functionala). Se va incerca daca este posibil si cu un host din domeniul de care este responsabil acel nameserver (multe nameserver-e nu sunt numai apelanti ai bazei de date distribuite, ci contin chiar o portiune din acesta baza de date - gazduiesc un domeniu internet, de exemplu 'unibuc.ro', adica stie toate hosturile care se termina in 'unibuc.ro'). Daca rezolvarea de nume nu functioneaza si se cunoaste un IP din exterior, se poate incerca ping la acel IP si daca nu functioneaza se poate da un 'traceroute <IP>' pe Linux sau 'tracert <IP>' pe Windows. Ultimul IP afisat este ultimul IP accesibil de pe calculatorul local. Este posibil ca legatura intre acel ultim host (router) atins si urmatorul sa fie nefunctionala, sau hostul urmator este nefunctional. In functie de numarul de routere prin care a reusit sa treaca pachetul se poate estima unde este problema. Daca o adresa raspunde la ping catre numele sau (ex. ping www.yahoo.com) dar nu poate fi accesata din browser (Netscape, Internet Explorer) cauza este foarte probabil sa fie o setare de proxy prin care browserul este instruit sa nu acceseze direct paginile, ci sa le ceara unui server proxy. In Netscape, setarea de proxy se afla in Edit/Preferences/Advanced/Proxyes, iar in Internet Explorer in View/Internet Options/Connection.

Conectarea mai multor calculatoare la Internet

Avand un IP si o conexiune valida la Internet, se pune problema legarii celorlalte calculatoare din apropierea sa la Internet. Probabil exista deja o retea pentru comunicarea acelor calculatoare intre ele, nu trebuie decat ca aceasta retea sa fie conectata la Internet. Pentru aceasta va fi nevoie de un router, cea mai simpla solutie fiind folosirea unui PC echipat cu doua placi de retea, una spre iesirea Internet si cealalta spre reteaua locala. O solutie foarte buna este instalarea pe router a sistemului de operare Linux, el oferind o multime de oportunitati precum gazduirea email-ului, a unui proxy, gazduirea unei pagini de web, al unui site ftp si protectia retelei interne fara absolut nici un cost in afara costurilor hardware. Cu putin mai multa memorie o masina cat de cat decenta se poate folosi in acelasi timp si ca statie de lucru, si chiar sa se lucreze remote pe ea de catre mai multi utilizatori.



Instalarea Linux-ului

Imediat dupa bootarea cu CD-ul de instalare se solicita cateva optiuni precum interfata de instalare de tip grafic sau text. De obicei instalarea in interfata grafica consuma mai multe resurse, deci instalarea in mod text este mai rapida. Alte optiuni precum tipul de mouse, tastatura, diferenta fata de timpul GMT, etc mai sunt cerute. In cazul in care se detecteaza o interfata de retea se cere si configuratia placii de retea (IP, netmask, gateway, nameserver-e, nume de host). Se mai cere setarea parolei de administrator (root), unele distributii cerand sa se creeze si un user obisnuit (ne-root). Cel mai important lucru (si oarecum mai delicat) este insa partitionarea si setarea punctelor de montare a partitiei. Programul de instalare va intreba daca se pastreaza partitiile existente sau se face repartitionare. La partitionare se vor sterge partitiile existente, apoi se vor creea una cate una partitiile, de obicei cea de swap prima si cea care se monteaza in '/' a doua. Se poate stabilii ca anumite directoare (ex: /home = directorul fisierelor personale ale utilizatorilor) sa fie 'montate' intr-o partitie separata. Stergerea unei partitii cu informatii importante face extrem de dificila refacerea lor, deci este nevoie de multa atentie. Odata cu stabilirea partitiilor pe care le va folosi Linux-ul si a locului in care se vor monta ele se va cere permisunea de formatare a acestora. In cazul in care partitia a fost deja formatata, se poate trece peste formatare. Formatarea se poate face cu sau fara verificarea hard-disk-ului. Verificarea dureaza foarte mult (zeci de minute la hard-disk-uri mari) dar asigura impotriva defectiunilor fizice care pot compromite la un moment dat sistemul. In cazul in care hard-disk-ul a fost verificat de curand impotriva 'bad-block-urilor (zone de memorare nefolosibile)', se poate trece peste verificare. In cazul in care nu se alege formatarea, instalarea va continua normal, nu se vor sterge eventuale fisiere existente, cel mult se vor suprascrie cele care coincid ca si nume/localizare cu cele ale sistemului care se instaleaza. Exista si optiunea de upgrade care modifica doar fisierele care s-au modificat de la versiunea anterioara, dar nu este recomandata procedura. In plus nu se poate face decat de la versiunea anterioara din aceeasi distributie.

Un alt lucru mai dificil este configurarea sistemului de X-windows. Distributiile noi detecteaza un numar mare de placi video si monitoare, dar in cazul in care sistemul nu reuseste trebuie date informatii manual. Cel mai dificil ar fi specificarea frecventelor monitorului, de obicei neexistand cartea tehnica a acestuia. Se pot incerca toate posibilitatile la rand, incepand cu 'High frecvency monitor 70Hz). Unele placi video care sunt suportate de serverul SVGA nu au suport decat pentru 256 culori, chiar daca placa video suporta mai multe culori. Oricum, pentru un router nu este nevoie de functionarea sistemului X-windows, modul text este suficient.

Un lucru util este creearea unei disckete de boot pentru sistemul instalat, acest lucru fiind facut chiar de catre programul de instalare cu interogarea celui care instaleaza. O astfel de disketa foloseste in cazul in care sectorul de boot al hard-disk-ului este suprascris din greseala (de exemplu se instaleaza pe alta partitie Windows). In acest caz se ba boota cu disketa si se va rula /sbin/lilo, care va reface sectorul de boot. Sectorul de boot este primul sector al hard-disk-ului, in cazul in care bios-ul este setat sa boot-eze de pe acest disk el startand programul pe care il gaseste in acest sector. Acest program se foloseste pentru a starta mai multe sisteme de operare, sau acelasi sistem cu optiuni/kernele diferite. Cel mai folosit astfel de program pentru Linux este 'lilo' (linux loader). El poate starta la alegere si alte sisteme de operare prezente in alte partiti (ex: Windows). Programul de instalare va intreba unde se doreste instalarea programului lilo, in MasterBoot (primul sector al hard-disk-ului) sau in primul sector al partitiei de Linux. Se va alege prima varianta, cea de-a doua folosind doar daca se foloseste un alt bootload-er global, care starteaza bootload-erul lilo.

Alte optiuni cerute pot fi de exemplu tipul de encriptare a parolelor (MD5 este default si este o alegere buna), tipul de securitate ('medium' este o buna alegere). In general setarile default sunt alegeri potrivite.

O portiune delicata este si alegerea pachetelor de instalare. Chiar si in cazul cunoasterii pachetelor importante, uitarea unui pachet poate cauza neplaceri ulterior, fiind mai dificila instalarea lui manuala. Cel mai simplu este sa se instaleze 'full', bineinteles aceasta alegere necesita existenta spatiului necesar pe hard-disk. Unele distributii au pre-configurari pentru diferite utilizari ale viitorului sistem (ex.: server, statie de lucru, statie grafica, etc). Este recomandat macar sa se instaleze toate serverele de X-windows (default se instaleaza doar serverul care suporta placa video care a fost detectata), in cazul unei schimbari a placii video nefiind necesara instalarea driverului.

Daca totul a decurs bine, dupa instalare sistemul se restarteaza si porneste bootloader-ul care fara a se apasa nici o tasta porneste dupa un timeout noul sistem instalat. In cazul configurarii corecte a retelei se poate trece direct la verificarea conexiunii de retea. In cazul in care ceva nu functioneaza bine incepe travaliul de depanare. Daca exista o a doua placa ea trebui configurata si ea. Fiecare distributie are utilitarul propriu de configurare (ReadHat are 'linuxconf/netconf', Suse are 'yast', etc). Toate utilitarele sunt interfete catre programe low-level care se pot apela din linie de comanda sau dintr-un script continand astfel de comenzi. In cele ce urmeaza se va discuta doar folosirea acestor comenzi low-level, ele fiind general valabile in toate distributiile, spre deosebire de interfetele mai mult sau mai putin prietenoase.

Comenzi low-level de configurare retea

ifconfig este comanda de configurare a interfetelor de retea. 'ifconfig -a' afiseaza interfetele activate si configurarea lor. In cazul in care output-ul nu incape intr-o pagina de ecran, se poate folosi comanda 'filtru' 'more' care afiseaza output-ul pagina cu pagina (ifconfig -a|more). Se poate folosi cu cale completa (/sbin/ifconfig) daca directorul /sbin nu este in lista de directoare in care se cauta executabilele - variabila se enviroment PATH). Informatiile afisate contin ip-ul asignat, netmask-ul, adresa broadcast, counteri de pachete primite/trimise, erori de mai multe tipuri, utile in depanare. O interfata care a fost recunoscuta de kernel se poate activa cu 'ifconfig eth0 inet <ip> netmask <netmask> broadcast <broadcast> (sau se inlocuieste eth0 cu eth1, eth2, etc). O interfata virtuala (alias) se poate face pe o interfata inlocuind eth0 cu eth0:1, eth0:2, etc). Interfetele virtuale nu folosesc decat in cazuri speciale cand se simuleaza printr-o placa de retea fizica mai multe placi de retea.Interfata lo este bine sa existe in toate sistemele (chiar daca nu sunt legate la retea). Ea este o interfata virtuala, care doar returneaza pachetele trimise spre ea. Este folosita pentru a simula prin ea conectarea de tip retea catre propriul calculator (de exemplu se poate incarca o pagina de web de pe aceeasi masina dand http://localhost sau http://127.0.0.1).

route este comanda de configurare a routelor (routele controland directia in care se trimite un pachet spre o oarecare grupa de destinatii). 'route -n' afiseaza routele curente, eventual se poate folosi '/sbin/route -n|more' cu paginarea output-ului.Routele contin pe linie adresa retelei, gateway-ul pentru a ajunge la acea retea, netmask-ul retelei, interfata prin care se ajunge la subnet si alte informatii mai putin utile depanarii. Ideea ar fi ca pentru fiecare pachet se parcurge fiecare linie de sus in jos, pana cand destinatia facuta 'si bit cu bit' cu masca de retea da adresa retelei din stanga. In acel moment se expediaza pachetul pe interfata scrisa in dreapta, catre placa de retea care raspunde la cererea de ARP pentru IP-ul de gateway. Ultima linie contine la netmask si adresa de retea '0.0.0.0', deci orice IP va face 'match' cu aceasta regula, pachetul cu destinatie spre care nu exista routa explicita va pleca spre 'default gateway'. O routa care are trecut la gateway 0.0.0.0 este o routa 'directly connected' adica IP-urile din acel subnet sunt accesibile direct (la nivel ethernet prin acea interfata). O routa spre un subnet se adauga cu comanda 'route add -net <subnet> netmask <netmask> gw <gateway>'. O routa catre un host se adauga cu comanda 'route add -host <host> gw <gateway> dev <ethx>' sau 'direct pe interfata' cu 'route add -host dev <ethx>'. In kernelurile noi routa catre IP-urile din acelasi subnet cu IP-ul/IP-urile proprii se pune automat la ridicarea interfetei, prin acea interfata. In general nu trebuie pusa decat routa default prin 'route add default gw <gateway>'. Spre <gateway> trebuie sa existe o routa 'direcly connected', daca gateway-ul este standard, un IP din acelasi subnet cu IP-ul calculatorului, aceasta routa exista. In caz contrar se poate pune o routa catre acel host pe acea interfata dar o asemenea necesitate este generata in general de proiectari defectuase ale retelei sau stari de tranzitie.

Studiu de caz

Presupunem ca exista un cablu UTP pana la un laborator dotat cu 20 calculatoare care au instalat sistemul de operare Windows, legate prin cablu BNC (coaxial) care trece pe la fiecare calculator. Este asignat un IP (193.226.51.54) cu netmask 255.255.255.192, gateway 193.226.51.1. Unul din calculatoare va fi instalat cu Linux, punandu-i-se inca o placa de retea cu priza UTP (majoritatea placilor BNC au si priza UTP). Placa dinspre cablul UTP (spre Internet) va avea IP-ul 193.226.51.54. Placa dinspre BNC (reteaua locala) va avea un IP 'neroutabil', dintre cele special rezervate pentru uz intern (nu sunt folosibile in Internet). De exemplu va avea adresa 192.168.101.1 (IP=urile care incep cu 192.168. si cele care incep cu 10. sunt 'neroutabile'). Netmask-ul va fi pentru reteau locala 255.255.255.0 (256 calculatoare maxim). Se putea pune si 255.255.0.0 (65536 calculatoare maxim) dar nu este nevoie. Comenzile de configurare ar trebui sa fie:

ifconfig eth0 inet 193.226.51.54 netmask 255.255.255.192 broadcast 193.226.51.63

route add default gw 193.226.51.1

ifconfig eth1 inet 192.168.101.1 netmask 255.255.255.0 broadcast 192.168.101.1

Pentru configurarea DNS trebuie editat fisierul /etc/resolv.conf. Editorul standar UNIX este vi (vi /etc/resolv.conf). Se va muta cursorul pe linia dorita, se vor sterge caractere cu tasta 'x'. Se va trece in modul 'insert' apasand tasta 'i', se vor face adaugarile si se va salva si iesi din editor trecand in mod 'comanda' cu tasta 'Esc' si apasand ulterior ':wq'. Un alt editor (mai intuitiv, semanand cu vechiul WordStar) este joe (joe /etc/resolv.conf). Se va edita fisierul si se va iesi cu 'Ctrl+K,X' - se apasa simultan Ctrl si K, apoi se elibereaza si se apasa X. Un help mai amanuntit se obtine cu 'Ctrl+K,H'. Daca exista instalat utilitarul 'mc' (o interfata text semanand cu norton commander) atunci se poate folosi editorul sau 'mcedit'.

Pe statiile Windows se va configura adresa de IP 192.168.101.x (x intre 2 si 254), netmask 255.255.255.0, gateway 192.168.101.1, DNS server 193.226.51.4. Hostul se poate pune dupa dorinta de ex: statie-2, statie-3, etc, domeniul poate fi cel al institutiei (de exemplu math.unibuc.ro), poate fi fictiv sau poate lipsi.

Pentru a functiona cele 20 de calculatoare in retea, mai este necesar sa se activeze routaerea si masquarading-ul. Pentru activarea routarii se va scrie '1' in fisierul virtual /proc/sys/net/ipv4/ip_forward cu comanda:

echo '1' > /proc/sys/net/ipv4/ip_forward

Pentru a face masquarade este suficient sa se scrie o singura comanda, in cazul kernelelor 2.2.x sau celor 2.4.x cu modulul de ipchains activat comanda este:

ipchains -I forward -s 192.168.101.0/255.255.255.0 -j MASQ

sau

ipchains -I forward -s 192.168.101.0/24 -j MASQ

(/24 reprezinta o notare prescurtata a mastii de retea, prin numarul de biti '1' pe care ii contine la inceput).

Deja calculatoarele Windows ar trebui sa poate accesa Internet-ul. Pentru asigurarea unei securitati sporite si pentru unele servicii suplimentare mai trebuiesc insa facute cateva configurari. Comanda simpla prezentata mai sus activeaza de fapt un mecanism complicat numit 'masquarading', un caz particular de NAT (Network Address Translation). Pentru configurare se foloseste acelasi utilitare prin care se configureaza firewall-ul ('ipchains' sau 'iptables' in kernel 2.4.x). Prin acest mecanism, pachetelor venite de la calculatoarele cu adrese neroutabile (192.168.101.x) li se modifica adresa sursa cu adresa dinspre Internet a Linuxului si portul cu un port liber al Linuxului. Pachetul de raspuns ajunge la adresa sursa, adica la Linux, care tine intr-o lista cu translatarile facute, si modifica destinatia pachetului cu sursa si destinatia oficiala. Astfel, un server accesat de un calculator din 'spatele' Linuxului are impresia ca a fost accesat de catre Linux, iar masina care face accesul are impresia ca ea a discutat direct cu serverul din Internet. Acest mecanism se preteaza cel mai bine la conexiuni TCP/IP dar functioneaza fara probleme si cu pachete UDP si ICMP. Singurele probleme care apar sunt in cazul in care o aplicatie din spatele Linux-ului negociaza prin legatura stabilita un alt port de comunicare decat cel de pe care a plecat conexiunea initiala. Linux-ul nu poate afla despre acest port decat daca cunoaste protocolul folosit in negocierea portului (ex. FTP). In acest caz serverul din Internet considera ca trebuie sa se conecteze cu cel cu care a discutat (din punctul lui de vedere a discutat cu Linuxul). Linuxul nu poate forwarda cererea de deschidere a conexiunii venita din Internet spre masina din spatele Linuxului ci o considera o conexiune venita spre sine, si o respige. Pentru protocoalele foarte folosite (FTP de exemplu) exista module speciale care urmaresc negocierea intre aplicatii si forwardeaza conexiunea de feed-back la calculatorul 'masquaradat'. Este evident ca pe un calculator care iese in Internet prin masquarade nu se poate pune un server accesibil din Internet. Pe de alta parte insa, aceasta reprezinta si o protectie fata de posibilitatea unor atacuri din exterior spre reteaua locala. De obicei in reteaua locala nu exista decat statii de lucru, doar initiatori de conexiuni, nu servere accesate din exterior. Pentru astfel de cazuri serverul se instaleaza pe Linux, sau daca nu este posibil se folosesc adrese routabile.

Recompilarea kernel-ului

In cazul in care distributia care se instaleaza nu contine support pentru un anumit device (de exemplu o anumita placa de retea), este destul de probabil ca problema sa se rezolve prin compilarea unui kernel cu support pentru acel device. Sursele kernel-ului sunt continute in distributie sau se pot download-a ca arhiva tar.gz si tar.bz de la un mirror apropiat de kernel (ex. ftp://ftp.linux.ro/pub/kernel). Arhivele se numesc linux-2.x.y.tar.gz (sau similar cu tgz=tar.gz sau tar.bz). tar  este extensia prin care se desemneaza o arhiva continand intr-un singur fisier mai multe fisiere si directoare. Extensia .gz este data in momentul comprimarii acestei arhive cu gzip, bz fiind extensia in cazul arhivarii cu bzip2. Arhiva se 'desface' prin decomprimare (gunzip linux-2.x.y.tar.gz) si dezarhivare (tar -xvf linux-2.x.y.tar). Decomprimarea pentru fisiere .bz  se face cu bunzip fisier.bz. Pentru arhive .tar.gz se poate folosi tar -xvzf linux-2.x.y.tar.gz care face in acelasi timp si decomprimarea. Optiunea -v este folosita pentru a activa modul 'verbose' in care se afiseaza fiecare fisier extras din arhiva, -z semnificand faptul ca se face intai decomprimarea iar -x faptul ca se face extragere din arhiva. Dupa -f s epune numele arhivei. Arhiva a fost facuta printr-o comanda de genul 'tar -cvzf linux-2.x.y.tar.gz linux'. In momentul in care se dezarhiveaza, se creeaza in directorul in care se face dezarhivarea un director numit 'linux'. Pentru compilare se intra in acest director ('cd linux') si se fac urmatorii pasi:

- make menuconfig - se configureaza ceea ce sa contina viitorul kernel.Exista o configuratie default de la care se pleaca si care se modifica in functie de nevoi. Important este ca procesorul ales la configurare sa nu fie mai puternic decat cel de pe masina pe care se instaleaza. In plus, daca exista device-ul speciale (scsi, placi ethernet) trebuiesc incluse in configuratie. Exista cateva facilitati care se pot include in kernel in plus fata de configuratia default (de ex. support pentru partitia de Dos/Windows), dar ele nu sunt in general neaparat necesare pentru functionarea sistemului. Pe de alta parte majoritatea optiunilor incluse nu fac sistemul nefunctional, cel mult maresc kernelul nejustificat. Trebuie avut grija sa nu se includa optiunea 'Kernel autoreconfiguration' pentru ca in acel moment viitorul kernel va incerca sa booteze din retea. O privire prin help-ul fiecarei optiuni este binevenita. Exista si o versiune grafica a programului de configurare (make xconfig)

make dep - se refac dependintele intre module

- make bzImage - se compileaza kernelul. Acesta va fi depus in arch/i386/boot/bzImage . Kernelul este comprimat cu autoextract pentru micsorarea dimensiunii, trebuind sa poata fi reprezentat pe disk intr-un bloc contiguu. Dupa compilare el se muta in alt director (uzual /boot) si se introduce in /etc/lilo.conf o intrare catre el dupa modelul celor deja existente. 'label' este numele prin care se poate alege acel kernel din lilo, root reprezinta partitia pe care o va monta ca '/', image reprezinta kernelul. read-only se specifica pentru ca sistemul trebuie sa monteze partitia root read only, sa starteze programul /sbin/init, care verifica integritatea partitiei si abia apoi face 'remontarea' read-write'. Mai multe optiuni se pot trimite kernelului la bootare cu optiunea append. Daca inainte de montarea partitiei este necesara inserarea unor module care sa recunoasca partitia, se foloseste 'initrd', montandu-se un fisier ca partitie '/', din care se insereaza modulul si se monteaza apoi partitia de pe disk.

- make modules - se compileaza modulele in cazul in care unele optiuni au fost incluse ca module. Suportul pentru toate placile de retea se poate compila astfel fara sa mareasca dimensiunea kernelului, urmand sa fie incarcat cel de care este nevoie.

- make modules_install - se instaleaza modulele intr-un director si se realizeaza si o harta a dependintelor intre ele

- make install - face alte setari pentru noul kernel

- lilo - reinstaleaza lilo cuprinzand si noul kernel

Bootare fortata

Lilo este aplicatia care se starteaza de catre bios la pornirea calculatoruluil. Este un program simplu in care se poate alege una din mai multe optiuni. Fiecare optiune reprezinta un kernel si anumite optiuni (in afara cazurilor in care se starteaza sistemul de pe o partitie non-Linux). Lilo incarca kernelul si ii transmite cateva optiuni printre care partitia pe care sa o monteze ca root ('/') si programul pe care sa il lanseze din acea partitie. Pentru un kernel cu label 'lin' se poate da in lilo 'lin root=/dev/hda2 init=/bin/bash ro'. In acest caz linuxul va porni de pe partitie programul de shell (/bin/bash) si va exista o consola de administrator. La bootarea normala se starteaza programul /sbin/init, care lanseaza toate celelalte programe precum programul de login, daemonii (serverele), etc. Partitia astfel montata este read-only, de pe ea se poate rula un program care sa verifice si sa repare o partitie ajunsa inconsistenta din cauza unei caderi de curent de exemplul prin '/sbin/e2fsck -y /dev/hda2'. Se poate trece in read-write prin 'mount -n -o remount, rw /' pentru a face anumite modificari (schimba parola de root daca cea veche a fost uitata) . Inainte de restartare este bine sa se treaca partitia in read-only prin 'mount -n -o remount, ro /'. Este indicat sa se ruleze si comanda sync pentru salvarea din memorie a bufferelor pe disk.

De unde se obtin adresele IP routabile

Adresele routabile le asigneaza administratorul de retea al institutiei, din spatiul de adrese pe care il are la dispozitie deja sau pe care il obtine de la RIPE sau de la un 'redistribuitor' de adrese local, numit LIR, de exemplu RNC (http://www.rnc.ro). RIPE este autoritatea europeana care aloca IP-uri participantilor la Internet, astfel incat sa nu existe un IP asignat la doi utilizatori diferiti. RIPE aloca unor 'Local Internet Registry' (LIR) spatii de adrese pe care acestia le asigneaza catre utilizatori. Spatiul de adrese IPV4 (versiunea actuala de protocol IP, cu adrese IP pe 4 octeti) este asignat in proportie mare, astfel ca RIPE cere o argumentatie solida asupra lor, in cazul in care este posibila o solutie tip masquarade nu se aloca IP-uri routabile. Fiecare provider mare de Internet are un numar de clase C (de 256 IP-uri) pe care 'le anunta' in Internet printr-un protocol numit BGP. Aceste sunt clasele pe care el si clientii sai le au alocate de catre RIPE (in cazul Europei). Protocolul BGP (Border Gateway Protocol) realizeaza transmiterea de catre un router catre vecinii sai a routelor pe care le cunoaste. In acest fel, dupa un scurt timp fiecare router afla fiecare routa din Internet. Routerele de la 'periferia' Interetului (care separa cateva retele de restul Internetului) agrega routele din Internet intr-o singura routa (routa default sau 0.0.0.0/0), ignorand spatiile libere (clasele de adrese nefolosite inca). El are uzual o singura conexiune la Internet, iar routerul cu care este conectat ii este 'default gateway'. Orice pachet care nu este in lista celor cateva retele pe care le separa de Internet este trimis catre default gateway. Astfel se face ca un pachet spre o destinatie inexistenta in Internet se duce prin cateva routere, pana la un 'core' router care cunoaste exact ce clase de adrese sunt accesibile in Internet si abia in acel punct pachetul este dropat si uzual se semnaleaza printr-un pachet ICMP special faptul ca nu exista routa catre acea destinatie.

Domenii DNS

Pentru a putea fi accesat din Internet printr-un anumit nume de host (nu numai prin IP) trebuie sa existe o 'intrare DNS' continand acel nume si pointand catre IP-ul tau. Aceasta inregistrare se realizeaza pe un nameserver responsabil cu un anumit domeniu, in care se doreste acel nume de host. De exemplu daca se doreste numele www.unibuc.ro trebuie realizata inregistrarea pe nameserverele care sunt responsabile pentru acest domeniu (standardul cere ca pentru fiecare domeniu sa existe cel putin doua nameservere, pentru backup in cazul in care unul din ele devine nefunctional). In cazul in care domeniul nu existe (de exemplu se doreste numele www.ecuatii.ro) domeniul trebuie creeat pe nameserverul care se ocupa de domeniile '.ro'. Autoritatea care creeaza domenii '.ro' este tot RNC (cea care poate asigna si IP-uri). Pentru un pret modic, care ii asigura autofinantarea, RNC poate delega catre doua nameservere un anumit domeniu. In acel moment orice modificare din acel domeniu se face pe cele doua nameservere, eventual se pot face subdomenii. Daca unul din nameservere poate fi usor Linux-ul folosit si ca router instaland un program din distributia standard numit named, celalalt nameserver nu este intotdeauna disponibil. Se poate folosi un nameserver al providerului sau chiar ambele nameservere ale providerului (orice provider care se respecta are macar 2 nameservere). Se pot configura nameserverele providerului sa incarce informatiile despre domeniu din nameserverul proprietarului domeniului. Informatiile despre un domeniu mai sunt numite si 'zone' iar nameserverul configurat sa incarce 'zona' de la alt nameserver este numit 'slave' fata de cel de pe care se incarca zona care este numit 'master' pe respectiva zona. Aceste denumiri sunt relative, un server 'master' poate fi 'slave' la ransul sau altui nameserver. Rezolvarea unui domeniu se poate verifica cu comanda host. De exemplu: 'host www.yahoo.com' rezolva adresa de host in IP, 'host -t mx yahoo.com' afiseaza serverele de email care deservesc domaniul yahoo.com, 'host -t ns yahoo.com' afiseaza nameserverele care sunt responsabile cu domeniul 'yahoo.com'. Aceste raspunsuri sunt cerute de la nameserverul setat default (in /etc/resolv.conf), in cazul in care se doresc informatii de la un alt nameserver se adauga nume sau la sfarsitul comenzii, de exemplu 'host -t ns unibuc.ro ns.rnc.ro' verifica la RNC pe ce nameservere sunt definite informatiile despre domeniul unibuc.ro. Acest lucru este util deoarece un nameserver in care este configurat un domeniu si este declarat master pe acesta raspunde din fisierul propriu de configuratie pentru acest domeniu, chiar daca el nu este inregistrat in Internet ca responsabil pentru domeniu. Restul Internetului (cei care nu il folosesc ca nameserver direct) nu il vor intreba despre domeniu si vor avea o alta viziune asupra domeniului (data de realele nameservere responsabile).

Serverul de email

In momentul in care exista un domeniu, se pot creea si casute postale de tip user@domeniu. Pentru a putea folosi aceste adrese de email trebuie sa exista in zona care se refera la acest domeniu o inregistrare de tip 'IN MX' (inregistrarile despre IP-ul unui host sunt de tip 'IN A'). Ip-ul care este trecut in acesta inregistrare va fi accesat pe portul 25 pentru a i se livra emailul pentru acest domeniu. Se pot definii mai multe intrari MX, pentru cazul in care unul din servere nu este disponibil. Exista prioritati, numarul mic inseamna prioritate mai mare. Serverul de email este si el in distributiile standard de Linux, exista chiar mai multe (sendmail, qmail, postfix). Scopul serverului de email este sa primeasca si sa trimita mesaje email. Mesajele pot fi catre domeniul pentru care are definite casutele postale sau pot fi mesaje trimise de utilizatori (detinatorii casutelor postale) catre alte servere de email din Internet. Actiunea prin care un server de email primeste un mesaj care nu ii este adresat pentru a-l forwarda mai departe se numeste 'relay'. Serverul de email trebuie sa faca 'relay' doar pentru utilizatorii care au casute postale acolo, altfel cineva poate trimite email nesolicitat ('spam') prin acel server email, pentru a-si ascunde identitatea fata de destinatar. Primirea emailului si trimiterea lor sunt lucruri distincte, pe care le poate face un singur server de email sau doua separate. Emailul primit se poate citi local de pe server cu un client de email ('mail', 'pine') sau se poate citi remote cu un client special de email prin POP3 sau IMAP din Netscape Communicator, Outlook Express, etc. Trimiterea se face din acesti clienti, specificand-use un server. De remarcat faptul ca daca in cazul citirii emailului se cere un username si o parola, in cazul trimiterii nu se cere uzual vreo parola, si chiar se pot trimite emailuri cu orice sursa, singura cerinta fiind ca domeniul adresei sursa sa se poata 'rezolva' - sa existe pentru el o intrare 'MX'.



Proxy

De multe ori, mai multi utilizatori acceseaza aceleasi pagini, facand acelasi transfer de mai multe ori inutil. Pentru a se folosi mai eficient conexiunea la Internet s-a proiectat un server 'proxy' care are rolul de a prelua cererile de la browser si de a intoarce pagina ceruta, fie accesand Internet-ul, fie accesand 'cache'-ul pe care il face pe hard-disk cu paginile accesate anterior. Se fac verificari ale datei de modificare pentru paginile care au termen de expirare. Proxy-ul poate fi si o varianta la masquarade, dar are dezavantajul ca poate fi folosit doar pentru anumite protocoale pentru care este proiectat (http, ftp, etc). Browser-ele au de obicei implementat protocolul de interogare a proxy-urilor, nu trebuie decat configurat IP-ul masinii proxy si portul pe care 'asculta' serverul de proxy. Unele proxy-uri pot fi setate sa ceara si o autentificare username/password. Exista si o varianta mai speciala de proxy numita 'transparent proxy' prin care pachetele care au plecat spre Internet sunt redirectate de catre routerul Linux spre portul pe care 'asculta' proxy-ul, iar acesta raspunde la cererea pe care browserul crede ca o face serverului web din Internet. Avantajul ar fi ca nu mai trebuie instruiti utilizatorii sa seteze/deseteze proxy-ul din browser. Redirectarea catre portul de proxy se face tot cu utilitarul care configureaza firewall-ul ('ipchains' sau 'iptables'), o linie de redirect ar arata cam asa:

ipchains -I input -s 192.168.101.0/24 -d 0.0.0.0/0 80 -p tcp -j REDIRECT 3128

unde 3128 este portul pe care asculta proxy-ul, 0.0.0.0/0 reprezinta reteaua continand orice IP, 80 reprezinta portul de http, tcp reprezinta tipul de protocol IP.

Securitate

In momentul conectarii la Internet problema securitatii devine mult mai complexa, posibilitatea conectarii in orice punct al Internet-ului aduce cu sine si posibilitatea unui atac din Internet. In momentul in care exista doar o retea locala izolata, numarul celor posibil interesati de a eluda securitatea sistemului este limitat, atat prin numarul mic de persoane care au acces la aceasta retea cat si prin faptul ca eventuale incercari de atac pot fi descoperite si se pot lua masuri impotriva atacatorului. In cazul atacurilor din Internet, atacatorul poate fi greu descoperit, si chiar descoperit se poate dovedii greu fapta acestuia. In plus, atacatorul (numit si hacker) din Internet nu are nici un interes in comun cu institutia al carui calculator a fost atacat, deci nu vor manifesta prea multe scrupule. Hacker-ii pot distruge date importante fara sa aiba un interes direct in aceasta, pot insa si accesa date confidentiale si pot aduce prejudicii financiare prin 'furt electronic'. In cazul unei institutii non-profit nu exista prea multe date secrete, in afara de parolele de acces in sisteme. Hacker-ii pot folosi aceste sisteme ca punct de plecare pentru atacul altor sisteme, pentru a fi mult mai greu localizati. Ei pot distruge si date importante pentru a isi demonstra puterea sau din neglijenta. Protectia sistemelor conectate la Internet se face in special la demarcatia intre reteaua locala si Internet. In momentul in care atacurile din Internet sunt controlate, securitatea revine la simplitatea administrarii unui retele locale. Pentru a realiza o astfel de securitate reteaua se proiecteaza astfel incat iesirea in Intrenet (sau fiecare iesire daca exista mai multe) sa treaca printr-un firewall (de obicei un router) care sa contina niste reguli stricte in privinta pachetelor care intra din Internet in retea locala (uneori si pentru pachetele care pleaca in Internet). Acest firewall poate fi facut foarte usor pe routerul Linux, care are deci inca un rol in retea. Trebuie spus ca nu se poate aprecia securitatea dupa existenta sau nu a firewall-ului. Exista firewall-uri mai bune (mai restrictive) si mai putin bune (mai permisive). Firewall-urile mai restrictive pot adauga anumite dificultati pentru utilizatori (de exemplu accesul la FTP), de aceea chiar avand firewall sistemul poate fi totusi vulnerabil la anumite atacuri. Exista doua extreme, firewall-ul care permite orice (echivalent cu lipsa lui) si firewall-ul care nu permite accesul niciunui pachet (echivalent cu intreruperea cablului intre reteaua locala si Internet. Acest ultim caz este complet sigur din punct de vedere al securitatii dar nu permite nici accesul in Internet dinspre reteaua locala. De aici se poate pleca insa, permitand pe rand numai pachetele care sunt neaparat necesare.

Cele mai utilizate atacuri sunt de tip Deny of Service (DoS) si de tip 'remote shell'. Primul tip de atac urmareste aducerea in stare de nefunctionare a sistemului, supraincarcand-ul de obicei, cel de-al doilea urmareste accesul la resursele sistemului, fiind mai destructiv. Atacul DoS se poate face de exemplu trimitand cereri foarte multe unui server. De exemplu se se poate face un flood (inundare) cu pachete de deschidere a conexiunii (SYN). Sistemul aloca resurse pentru fiecare conexiune, dar conexiunile sunt abandonate deschise. In scurt timp tabela de conexiuni creste foarte mult, la fiecare pachet trebuind facute un numar de operatii proportional cu numarul de conexiuni. Daca algoritmul de cautare nu este optimizat sistemul de operare poate sucomba in scurt timp. In plus, daca aplicatia-server atacata deschide o instanta a sa pentru fiecare conexiune, va umple foarte repede memoria disponibila. In cazul in care numarul de conectari este limitat se poate proteja incarcarea sistemului, dar il face sa respinga si conexiuni valide. Daca atacul vine de pe o IP-sursa fix se poate pune o regula in firewall care sa respinga aceste pachete, dar daca atacul vine de pe mai multe surse (false) nu se poate face decat restrictionarea accesului de la un numar de IP-uri prestabilite. In cazul unui server web acest lucru echivaleaza cu nefunctionarea sa.

De obicei protectiile pentru atacuri DoS sunt dificil de facut, aceste atacuri umplu de obicei banda catre Internet a celui atacat, facand-o impracticabila, singura sansa este identificarea atacatorului si reclamarea sa la providerul sau. De obicei atacul se face de pe un server care nu ii apartine, pe care a obtinut acces prin mijloace nelegale, deci proprietarul serverului poate fi atentionat sa ii ingradeasca accesul. Totusi, atacurile DoS nu sunt extrem de multe, avand in vedere ca se presupune ca trebuie sa existe o motivatie, o razbunare (se practica intre utilizatorii de chat in momentul in care se cearta dintr-un oarecare motiv). Pentru identificarea unui astfel de atac in Linux se pot spiona pachetele care vin din Internet pe interfata ('tcpdump -i eth0 -n'). Pentru atacurile cu deschidere de conexiuni se poate verifica si tabele cu conexiuni deschise prin 'netstat -na'.

Atacurile de tip 'remote shell' sunt mai complicate, dar consecintele lor sunt mai grave. Scopul atacului este obtinerea privilegiului de administrator pe un calculator, deci accesul deplin la resursele acestuia. Ca scop intermediar poate fi obtinerea unui cont de utilizator obisnuit, urmand ca atacul sa continue 'din interior'. Un astfel de acces se poate obtine fie prin autentificare cu un username/password valide, fie 'pacalind' un server care contine o greseala de programare. Primul caz este mai putin probabil, el poate fi evitat instruind utilizatorii sa nu instraineze parolele lor de acces si sa nu se conecteze 'din Internet' printr-o metoda necriptata. De multe ori pe parcursul legaturii se afla programe care spioneaza conexiunile si stocheaza parolele trimise in clar. Este si cazul accesului la email prin POP3. Daca parola de autentificare la casuta postala este aceeasi cu a utilizatorului de pe server, parola poate fi folosita pentru accesul din exterior. O posibilitate de protectie este si limitarea accesului shell din exteriorul retelei doar cu anumite surse. O posibilitate mai speciala de interceptare a parolelor chiar daca sunt cryptate printr-un algoritm cu chei publice este 'Man in the midle attack'. Daca nu se realizeaza la prima conectare insa, clientul care se conecteaza criptat (de ex. ssh) va detecta schimbarea cheii publice a serverului si va afisa un avertisment. Este posibil ca acest avertisment sa provina din reinstalarea serverului ssh, caz in care se poate sterge inregistrarea clientului din '.ssh/know_hosts'.

Accesul prin pacalirea unui program pare la prima vedere putin probabil, dar practica a demonstat ca astfel de atacuri sunt cele mai periculoase. Majoritatea se bazeaza pe 'buffer overflow', adica trimiterea unor date peste capacitatea bufferului definit in program. Daca nu exista o verificare a datelor care se copiaza in buffer, datele care sunt in plus sunt scrise in memorie (in stiva program de exemplu) peste o portiune de program executabil. Cand executia programului ajunge in acel loc, programul executa acea instructiune (de exemplu deschiderea unei sesiuni shell). Cum majoritatea serverelor ruleaza cu privilegii de administrator (root), shell-ul obtinut va avea si el privilegii absolute. Exista si alte posibilitati de pacalire, dar dintre toate aceasta este cea mai folosita. Ca protectie este nevoie in primul rand ca versiunile de program sa fie cat mai noi, bug-urile descoperite se repara in noi versiuni, la scurt timp dupa descoperire. In plus, cu cat exista mai putine servere accesibil din Internet, cu atat este mai mica probabilitatea sa existe unul 'atacabil'. Un sistem fara nici un serviciu/server ruland este extrem de sigur chiar si fara firewall, din pacate este nevoie sa existe anumite servicii lansate. Daca accesul este necesar doar din reteaua locala (citire email prin POP3) se poate pune un firewall care sa nu permita accesul decat din reteaua locala. Daca accesul se face si din exterior (server email care trebuie sa primeasca mesaje) nu se poate face restrictionarea accesului, trebuie avut grija ca serverul in sine sa fie foarte sigur, eventual se poate pune separat serviciul nesigur pe un alt calculator decat firewall-ul, asfel incat un posibil atac reusit impotriva acestuia sa nu puna in pericol intreaga retea. Log-urile sunt de asemenea utile pentru detectarea incercarilor de intruziune, unele din ele putand fi descoperite inainte sa reuseasca. De obicei hacker-ii streg logurile pentru a nu se descoperi sursa atacului, deci o idee buna este exportarea log-urilor pe un server fara acces din exterior.

Dupa securizarea serviciilor oferite, firewall-ul vine ca o protectie suplimentara, putand restrictiona accesul la diferite servicii de la anumite surse si face mai dificila instalarea de catre un hack-er care a spart sistemul a unui server care sa-i permita sa patrunda in viitor in sistem chiar daca parolele se schimba si problema de securitate este rezolvata. El va trebui sa modifice firewall-ul astfel incat sa permita accesul la serverul sau, ceea ce se poate observa mai usor. Firewall-ul este in principal o metoda de protectie a calculatoarelor din spatele sau, care pot fi mai nesigure ca securitate (Windows) sau care ruleaza servicii care nu sunt updatate la ultima versiune. In plus, existenta unor reguli de 'DROP' a pachetelor care nu sunt adresate serviciilor instalate poate face mai dificila scanarea tuturor porturilor in cautarea unuia mai putin securizat. Scanerul trebuie sa intuiasca dupa cat timp trebuie sa considere lipsa raspunsului ca lipsa a accesului la port, in mod default sistemul da un feedback negativ care da posibilitatea programului de scanare sa treaca mai departe. Ca regula, cu cat se dau mai putine informatii in momentul in care accesul este restrictionat, cu atat este mai bine. Daca un program de conectare spune cand este userul inexistent si cand este parola gresita, un hack-er poate scana pana gaseste un user, apoi poate incerca mai multe parole pentru aceste. In cazul in care nu se specifica daca userul exista, hack-erul trebuie sa incerce combinatii user/password, deci complexitatea spargerii prin aceast metoda creste foarte mult. Se recomanda si consultarea pe Internet a listelor de discutie pe care se publica bug-uri noi descoperite care afecteaza securitatea (vezi http://msgs.securepoint.com/bugtraq/ , http://www.securityfocus.com/ ). Noutatile se pot primi automat prin email, aceasta varianta fiind foarte convenabila.

Firewall-ul in Linux

In Linux firewall-ul este implementat printr-un sistem de 'chain-uri'. Exista trei chain-uri default: input, output si forward. Prin aceste chain-uri se considera ca trec pachetele, chain-urile continand suite de reguli prin care pachetul poate fi acceptat sau nu sa treaca prin acel chain. In kernel-ul 2.2.x orice pachet care vine pe o interfata spre linux trece prin chain-ul input. Orice pachet care pleaca pe o interfata trece prin chain-ul output. In plus, pachetele care tranziteaza un router catre o alta destinatie trec prin chain-ul forward. In kernelul 2.4.x pachetele care nu sunt destinate routerului sau care nu sunt originate de router nu trec prin chainurile INPUT si OUTPUT, ci doar prin FORWARD. Se observa faptul ca in kernelul 2.4.x chainurile au numele modificat in majuscula.

In ambele cazuri, pachetele trec prin chain-uri. Chain-urile contin o suita de perechi regula-actiune si cate o regula default. La inceput chain-urile nu au decat regula default care este ACCEPT, deci toate pachetele sunt acceptate. In chain-uri se pot adauga diverse regului bazate pe informatii din headerul pachetului (IP, port, etc) si interfata pe care a venit/pleaca. Fiecare regula contine o conditie si o decizie pentru pachetele care se potrivesc ('fac match') pe acea regula. Regulile se parcurg in ordine de catre fiecare pachet, in cazul in care un pachet nu a 'facut match' pe nici o regula, i se aplica regula default. De exemplu un firewall care nu accepta nici o conexiune TCP/IP venita din Internet (pe interfata eth0) are o singura linie:

ipchains -I input -i eth0 -p tcp -y -j DENY

De fapt regula spune ca pentru pachetele TCP care au bitul sYn (de cerere deschidere conexiune) setat sa se ia decizia de DENY (adica pachetul se DROP-eaza). Exista posibilitatea sa se trimita o avertizare despre filtrare sub forma unui ICMP 'admin filter' inlocuind DENY cu REJECT. Celelalte pachete (de exemplu pachetele SYN care pleaca in exterior) nu vor face match pe aceasta regula si vor intra in regula default (ACCEPT). Daca dorim ca totusi de la adresa 193.226.52.1 sa se poata face o conectare ssh (pe portul 22) catre masina locala (193.226.51.54) se va insera (folosind '-I') o regula inaintea celei de mai sus:

ipchains -I input -i eth0 -p tcp -y -s 193.226.52.1 -d 193.226.51.54 22 -l -j ACCEPT

Se observa folosirea obtiunii '-l' prin care se face log-area headerului pachetelor care fac match pe aceasta regula pentru urmarirea accesului. Pachetele de SYN cu sursa 193.226.52.1 si destinatia 193.226.51.54 port 22 vor face match pe aceasta regula si vor fi acceptate, nemaifacand match pe urmatoarea regula care le-ar fi DROP-at. Adaugarea unei reguli la sfarsitul sirului de reguli se face inlocuind -I cu -A (append).

Cu acest firewall nu se poate incerca nici un atac TCP impotriva serverului decat pe portul de ssh (22) de la adresa 193.226.52.1. Serverul va continua insa sa raspunda la ping (pachete ICMP) si mai este totusi vulnerabil la atacuri catre servicii bazate pe pachete UDP (nameservere, portmap, nfs). Pe cat posibil aceste servicii nu se vor starta sau vor fi protejate de firewall.

Trebuie avut in vedere ca daca intr-un firewall se da DENY la toate pachetele care vin pe interfata din Internet, atunci nu vor putea veni nici pachetele de rapuns la cererile din interior. Solutia este deci sa se filtreze pachetele SYN (dintr-o conexiune singurul pachet care are bitul SYN setat este pachetul de deschidere a conexiunii). Filtrarea in cazul UDP-urilor este mai complexa, ar trebui stabilit de UDP-uri sunt necesare (de obicei doar acces DNS pe portul 53 al nameserverelor).

Firewall-ul curent poate fi vizualizat cu 'ipchains -L -n' sau cu 'ipchains -L -n -v' (cu informatii suplimentare, de exemplu numarul de match-uri facute pe fiecare regula). Firewall-ul se poate goli cu comanda 'ipchains -F'. Atentie, un chain gol nu va permite trecerea pachetelor daca are politica default DENY, de aceea este recomandat ca in loc de schimbarea politicii default sa se appendeze la sfarsitul sirului de reguli o regula de DENY pentru orice:

ipchains -A input -j DENY

Cum s-a observat deja, in loc de ACCEPT, DENY, REJECT pot exista si alte decizii mai speciale, de a masquarada conexiunea (-j MASQ) sau de a redirecta pachetul spre un port local (-j REDIRECT <numar_port>). Mai multe informatii despre configurarea firewall-ului cu ipchains se pot afla din manualul sau ('man ipchains'). Configurarea cu iptables este asemanatoare, oferind in plus si alte facilitati.


PARTEA A DOUA

- Reprezentare firewall -


Introducere

Odata cu aparitia Internet-ului care a interconectat retelele locale a numeroase firme si institutii, problema securitatii datelor impotriva accesului neautorizat a devenit mult mai acuta. Informatii extrem de importante sunt expuse acum nu numai accesului neautorizat din incinta institutiei, ci si accesului din afara sa, practic din orice colt al lumii. Un posibil atacator poate accesa date cu caracter strict secret, poate modifica informatii extrem de importante (sume de bani din conturi) sau pot distruge informatii care exista intr-un singur exemplar. El nu trebuie sa patrunda in incinta institutiei, trebuie doar sa "pacaleasca" sistemele de securitate ale "victimei". Sistemele de securitate sunt variate, cea mai cunoscuta fiind protejarea accesului cu username si parola. Cel care doreste sa acceseze o anumita informatie trebuie sa-si introduca username-ul si o anumita parola, altfel i se refuza accesul. De multe ori insa aceasta protectie nu este suficienta, cineva poate incerca mai multe parole, avand sanse sa o ghiceasca pe cea corecta. Sistemele vor considera de multe ori ca utilizatorul a tastat gresit sau a incurcat parola cu alta, deci va permite mai multe incercari. Exista si sisteme cu blocarea accesului acelui username in cazul in care parola este introdusa gresit de un numar de ori. Totusi, protectia tot nu este foarte sigura, parola poate intra in posesia unui rauvoitor din cauza neglijentei unui utilizator care a scris-o pe un carnetel si atacul poate fi lansat din oricare colt al Internet-ului, fara a fi necesar accesul in incinta institutiei. Parola poate fi interceptata si pe parcursul transmiterii ei prin medii care nu sunt sub jurisdictia respectivei institutii, in cazul in care accesul se face din afara retelei locale. Tehnicile cryptografice moderne fac extrem de dificila interceptarea unui parole, dar nu imposibila. Cu algoritmii cunoscuti decriptarea ar dura ani sau zeci de ani, dar pot apare algoritmi mai performanti care sa reduca timpul de decriptare la limite de timp rezonabile, astfel incat un atac sa fie posibil.

Se impune deci o solutie mai sigura, o protectie in plus. Unele institutii au ales ca unele zone din reteaua lor sa nu fie legata de loc la Internet (de exemplu bancile). Impreuna cu securitatea accesului in Institutie aceasta protectie este destul de eficienta. Totusi, unele institutii prin insasi natura activitatii lor au nevoie sa fie conectate la Internet pentru a receptiona informatii sau chiar pentru a oferii informatii in Internet (prezentarea produselor firmei cu preturile aferente de exemplu). Chiar daca informatiile circula intr-un singur sens, nu se poate intrerupe transmiterea de informatii in celalalt sens, deoarece comunicarea presupune existenta unui feed-back de la destinatar, pentru a se retransmite eventual portiuni de informatie distruse pe drumul dintre sursa si beneficiar. Solutia ar fi deci supravegherea informatiilor care se schimba intre reteaua locala si Internet, astfel incat sa nu se accepte incercari de conectare cu sursa din afara institutiei sau sa se accepte doar din anumite puncte ale Internetului. Accesul se poate restrictiona si diferentiat pe servicii, de exemplu pe un computer exista informatii publice accesibile prin sistemul WWW si informatii confidentiale accesibile prin FTP. Se poate da accesul catre servicul WWW oricarui utilizator Internet, dar accesul FTP sa fie permis doar din reteaua locala. Aceasta limitare a accesului se poate face pe fiecare serviciu in parte sau global, la nivelul sistemului de operare. Implementarea la nivelul sistemului de operare este mult mai eficienta, datorita faptului ca este centralizata, unitara si nu depinde de aplicatiile utilizate (aceste pot sau nu sa aibe sisteme de limitare a accesului).

O astfel de protectie este asa-numitul "firewall" (zid impotriva raspandirii focului). El realizeaza o protectie la nivelul unitatii fundamentale de transfer a informatiei - pachetul. Protocolul utilizat actualmente in Internet este IPV4 (IP versiunea 4), pachetul IP fiind fiind unitatea informationala fundamentala. El contine obligatoriu destinatia (un numar reprezentat pe 32 de biti care identifica unic destinatia in Internet) si sursa (numarul reprezentat pe 32 de biti care identifica in Internet sursa). Un firewall ar putea deci sa nu permita primirea niciunui pachet care are ca sursa un IP din afara listei de IP-uri care identifica calculatoarele utilizatorilor autorizati. Exista intr-adevar o mica posibilitate ca rauvoitorul sa pretinda ca are IP-ul unuia din calculatoarele autorizate, dar actiunea cere ca el sa se afle pe traseul dintre calculatorul autorizat si tinta atacului, altfel raspunsul la cerere ar ajunge pe traseul normal la calculatorul care detine intr-adevar acel IP, el neputand-ul intercepta. In plus trebuie sa detina privilegii de adminstrator pentru a realiza aceasta actiune, deci sfera de vulnerabilitate se reduce simtitor. Impreuna cu alte protectii (autentificare cu semnaturi criptografice, autentificare cu parola) se poate realiza o protectie eficienta a informatiilor importante ale institutiei. Criteriile de acceptare ale pachetelor pot fi combinate, acceptarea se poate face prin testarea mai multor conditii precum serviul caruia i se adreseaza, tipul pachetului, interfata fizica pe care a venit pachetul, etc.

In plus, firewall-ul mai poate fi folosit pentru a restrictiona accesul utilizatorilor interni la anumite resurse din Internet, fie pentru a utiliza eficient latimea de banda pe care o are la dispozitie institutia pentru a comunica cu Internetul, fie pentru a limita accesul in timpul programului la informatii care nu tin de activitatea de productie (vizitare pagini web distractive, chat-uri, etc).  

Cum functioneaza un firewall

Pachetul IP

Un pachet IP contine obligatoriu IP-urile celor doi agenti care comunica. Alaturi de acestea el mai contine tipul de pachet si pentru fiecare TIP informatii specifice respectivului TIP de pachet. Tipurile de pachete IP sunt UDP, TCP, ICMP. UDP se foloseste pentru a realiza un canal nefiabil, unde pierderea unui pachet nu este foarte importanta dar intarzierea retransmiterii unui pachet este suparatoare (ca in cazul transmiterii frame-urilor video). Pachetele TCP se folosesc pentru realizarea de canale fiabile, cu retransmiterea pachetelor pierdute sau malformate. Pachetele ICMP se folosesc in general pentru managementul retelei si pentru transmiterea unor informatii despre evenimente speciale in retea (ex: destinatia nu este accesibila). Informatiile proriu zise se transmit in pachete UDP si TCP. Ambele contin un numar de "port sursa" si un numar de "port destinatie". Un numar de port este un identificator al "capatului de conexiune" pe un anumit calculator. Fiecare serviciu "asteapta" pe un anumit port, pentru a fi accesat, calculatorul client seteaza ca port destinatie acel numar de port. Numarul de port sursa este folosit pentru a identifica clientul de pe masina care a initiat conexiunea, de exemplu in cazul in care doua aplicatii acceseaza in paralel acelasi serviciu de pe un alt host.

Recapituland putem spune ca un canal de comunicatie in Internet este identificat unic in Internet de un cvadruplu format din IP sursa, PORT sursa, IP destinatie, PORT destinatie. IP-ul identifica hosturile care comunica, numarul de PORT identifica serviciul accesat in cazul serverului, in cazul clientului PORT-ul este ales dintr-un interval prestabilit, astfel incat sa fie unic. La aceste informatii se mai adauga ID-ul interfetei pe care a venit pachetul (o masina firewall standard are o interfata spre reteaua locala si una spre Internet). Pe baza acestor 5 informatii la care se mai adauga cativa biti precum bitul SYN sau bitii de TOS un firewall ia decizia daca un pachet este acceptat spre prelucrare sau este respins prin simpla ignorare sau prin emiterea unui pachet ICMP de eroare. Daca asociem pachetelor ICMP un port sursa si un port destinatie comform cu tipul de mesaj transmis si tinand seama ca un numar de PORT este reprezentat pe 16 biti, atunci pentru fiecare pachet se ia in considerare 32+32+16+16+8=104 biti. Putem adauga un octet (8 biti) pentru bitii suplimentari, deci 112 biti. Concatenarea acestor informatii o vom numi proprietate a pachetului. S-a considerat ID-ul intrerfetei reprezentat pe 8 biti.

Abstractizare firewall

Abstractizand, un firewall este o partitionare in doua a multimii ^112. Prima multime este multimea proprietatilor cu care pachetele se accepta, cea de-a doua este complementarea ei in multimea proprietatilor posibile ale pachetelor, deci multimea de proprietati care sunt inacceptabile si care genereaza respingerea pachetului. Reformuland, putem spune si ca firewall-ul este o functie pe multimea de proprietati ale pachetelor in multimea (acceptat, respins). Se pot utiliza insa si alte informatii din pachet pentru a decide acceptarea sau nu a unui pachet, in cazul in care o proprietate este specifica unui anumit tip de pachet, pentru celelalte tipuri de pachet se poate specifica o valoare impliciata. Daca consideram cazul general al proprietatii pachetului in n biti, pentru a reprezenta un firewall este suficient sa reprezentam multimea proprietatilor care conduc la acceptarea pachetului. Se pot proiecta firewall-uri mai complexe, cu mai multe decizii (de exemplu acceptare, ignorare pachet, trimitere unei notificari de interzicere, notificarea intr-un fisier log, etc), codomeniul functiei firewall fiind mai mare in acest caz (cardinalul ei este numarul de posibile decizii).

Limitari cunoscute

Caracteristicile de performanta ale unui algoritm care sa rezolve aceasta problema sunt:

Complexitatea computationala mica. Trebuie sa poata prelucra cateva mii de pachete pe secunda.

Memoria consumata sa nu fie foarte mare

Posibile reprezentari

Cea mai simpla reprezentare a partitiei multimii 2n in doua multimi este un sir de 2 n biti, semnificatia bitului k fiind: Ak=0 elementul care este reprezentarea binara a lui k apartine primei multimi, respectiv Ak=1 elementul care este reprezentarea binara a lui k apartine celei de-a doua multimi. Operatiile care trebuiesc efectuate se fac extrem de rapid. Verificarea apartentei unui element la una din cele doua submultimi se face cu un singur acces la memorie si selectarea unui bit din numarul care este stocat la acea locatie, daca se considera ca timpul de acces la locatiile de memorie este acelasi oricare ar fi locatia (cum se intampla in sistemele de calcul obisnuite), aceasta reprezentare face are timpul de rulare per pachet cel mai mic. Adaugarea sau stergerea unui element este la fel de simpla, constau in setarea/desetarea unui bit. Problema acestui sistem este insa spatiul de memorie pe care il cere. Este nevoie de 2n/8=2n-3 Bytes de memorie pentru acest tip de reprezentare, spatiu de memorie consumat indiferent de partitia reprezentata. Acest spatiu este spatiul minim in care se poate reprezenta orice partitie a multimii n , dar totusi, pentru tipurile de partitii folosite in mod curent se pot gasi reprezentari care folosesc mult mai putina memorie, desi anumite cazuri (care nu apar in practica) ar avea nevoie chiar de mai multa memorie . Daca ar fi sa facem o paralela cu teoria codurilor putem spune ca elementele elementele multimii n se pot codifica folosind cuvinte cod de lungime mai scurte pentru elementele mai des intalnite si cuvinte de cod mai lungi pentru elemente care apar rar. Trasand anumite limitari ale tipurilor de partitii pe care le vom reprezenta putem sa garantam faptul ca programul se va incadra intr-o anumita limita de memorie.

Reprezentarea cu masca

Aceasta este reprezentare uzuala folosita in prezent. Simplificat consta intr-o serie de perechi (a,m) a,m I n unde a il vom numi sablon iar m se numeste masca. Fiecare pereche defineste o submultime a multimii n astfel: elementul b este in multimea definita de perechea (a,m) daca b&m=a (unde & defineste operatia de "si" logic, bit cu bit intre b si m). Orice submultime a lui n se poate reprezenta ca o multime de astfel de perechi, multimea reprezentata fiind reuniunea multimilor reprezentate de respectivele perechi. Acest lucru se demonstreaza usor prin faptul ca exista o reprezentare pentru fiecare element "a" al multimii n, aceasta fiind (a,m) unde m are toti bitii 1, deci b&m=b si b&m=a a=b. Se poate deci reprezenta orice submultime a lui n ca reuniune de astfel de reprezentari ale elementelor, deci se poate reprezenta orice submultime, deci orice partitie. Pentru optimizare se asociaza o ordine acestor perechi si cate un bit de asociere cu una dintre multimi. Pentru a afla in care dintre submultimi se afla un anumit alement se parcurg in ordine perechile, bitul asociat primei perechi care verifica conditia b&m=a (se mai spune si ca "face match cu perechea") indicand din care dintre multimi face parte elementul. In cazul in care nici una din perechi nu "face match" elementul testat, elementul se considera a apartine uneia dintre multimi dinainte stabilite (numita "multime default") . Aceasta reprezentare este suficienta pentru a reprezenta orice partitie, de exemplu putem pune cate o regula care sa reprezinte fiecare element din prima multime (alegem masca m ca sir de n biti "1") si care sa trimita prin bitul asociat la prima multime, iar multimea default o alegem sa fie cea de-a doua multime. Este evident ca elementele din prima multime vor face match pe una dintre reguli si vor fi recunoscute ca facand parte din prima multime iar cele din cea de-a doua multime vor fi identificate corect pentru ca ajung in multimea default.



Reprezentare firewall printr-un automat

Putem reprezenta firewall-ul printr-un automat, in care alfabetul sa fie format din simbolurile , iar starile finale sa fie etichetate cu indicele deciziei care se ia in cazul in care se ajunge in acea stare pornind din starea initiala si urmand sirul de biti format de proprietatea unui pachet. Orice drum in acest automat nu trebuie sa fie mai mare decat numarul de biti din proprietate, deci complexitatea algoritmului ar fi chiar liniara cu numarul de pachete. Faptul ca un astfel de automat exista este usor de demonstrat, se poate creea de exemplu ca un arbore complet cu n nivele (n fiind numarul de biti pe care se reprezinta proprietatea). Nodurile frunza vor fi stari finale, etichetate cu indexul deciziei care se ia pentru pachet. Se poate astfel reprezenta orice firewall. Totusi, acest automat nu este cel minimal, algoritmi de minimizare existand deja. Pentru cazul obisnuit insa, in care se dispune de o reprezentare cu masca, se pot gasi si algoritmi mai simpli pentru minimizare (se presupune ca un firewall care se doreste optimizat este destul de complex, deci un algoritm standard ar folosi multa memorie si ar avea o complexitate computationala destul de mare.

Automat firewall minimal

Mai intai vom relaxa putin cerinta, cerand ca automatul sa fie minimal doar in multimea automatelor care au toate starile finale la distanta n de punctul de start. Vor exista deci n+1 nivele de noduri, pe ultimul nivel fiind starile finale. Numarul starilor finale va fi k=numarul de decizii pe care le poate lua firewall-ul. Cuvintele-proprietati cu care nu se ajunge intr-o stare finala (la un moment dat nu exista tranzitie din starea in care s-a ajuns cu simbolul curent) se considera clasificate in regula default. Este evident ca un astfel de automat exista, se poate face arborele complet in care starile finale cu aceeasi eticheta se reduc, aceasta fiind si ideea minimizarii in cazul automatului clasic. Acelasi algoritm se bazeaza si pe reducerea starilor echivalente, algoritmul clasic are insa complexitate computationala prea mare.

Vom considera cazul in care exista un automat minimal de acest tip (de exemplu automatul cu o singura stare, cea de start). La adaugarea fiecarei reguli automatul trebuie mentinut minimal. O regula este si ea un caz particular de automat. Acest automat se contruieste printr-un sir de n+1 stari ordonate, intre fiecare doua stari consecutive putand exista o tranzitie cu litera corespunzatoare din sablon (a) in cazul in care simbolul din masca este 1 si poate contine 2 tranzitii, cu 0 si 1, in cazul in care simbolul corespunzator din masca este 1. Conventia este ca bitul de pe pozitia j corespunde cu perechea de stari consecutive (j,j+1). In acest fel adaugarea unei reguli reprezinta de fapt o suma de automate, dar o suma mai speciale, cu urmatoarele proprietati (consideram automatele A1 si A2 care se insumeaza in automatul A1+>A2 si functia firewall F(A,w)=x).

F(A1,w)=x => F(A1+>A2,w)=x

F(A1,w)= , F(A2, w)=y => F(A1+>A2,w)=y

Deci in cazul in careprimul automat dadea deja un verdict neimplicit (prin regula default) pentru pachet, atunci automatul rezultat va da acelas rezultat. In caz contrar, daca in al doilea automat exista un verdict pentru pachet, acesta va fi verdictul dat de automatul final. In cazul in care nici in acesta nu exista dat un verdict, se va da verdictul dat de regula default (cuvantul nu va fi acceptat de automat).

Comform teoriei automatelor, minimizarea se face echivaland starile cu acelasi comportament. In acest caz, starile cu acelas comportament pot fi doar pe acelasi nivel, ele putand fi echivalate de jos in sus. Un automat minimal are starile finale echivalente, in acest caz fiind echivalente starile finale cu aceeasi eticheta. O proprietate speciala a unor astfel de automate minimale este ca orice nod-stare nu are decat maxim un predecesor care il are ca singur succesor, pentru fiecare din combinatiile de arce posibile (, , ). In caz contrar, doua astfel de stari ar avea acelasicomportament, deci automatul n-ar mai fi minimal. Importanta acestui fapt rezida in faptul ca in algoritmul de insumare se va porni "de jos in sus" prin echivalarea starilor cu acelas comportament. In automatul al doilea pentru orice stare nu exista predecesori care sa aiba mai multi succesori, deci incepand echivalarea automatelor cu starile finale, starea de pe nivelul m din al doilea automat va putea echivala cu o stare din primul automat daca si numai daca ele sunt pe acelasi nivel m si au ca unic succesor cu aceeasi configuratie de arce o stare care a fost obtinuta prin echivalarea a doua stari pe nivelul m+1. Pentru fiecare stare din automatul care se construieste com memora acei unici predecesori pentru fiecare configuratie de arce posibila (, , ). Acest lucru va scade mult din complexitatea algoritmului, nemaifiind nevoie sa se verifice proprietatea la toti predecesorii starii respective. Dupa aceasta echivalare a starilor, exista doua posibilitati. Daca s-a ajuns cu echivalarea starilor pana la starea initiala S inseamna ca automatul care se adauga este continut in primul automat, nu recunoaste alte cuvinte, deci automatul ramane in mod corect nemodificat. Daca nu s-a ajuns la echivalarea starilor initiale trebuie ca automatul sa fie facut determinist, cu o singura stare initiala. Aceasta se va face "muland" al doilea automat peste primul. Se va incepe cu cele doua radacini. Automatul al doilea are unul sau doua arce. Daca are unul singur, exista doua posibilitati: sa existe acest arc in primul automat, caz in care se trece la identificarea succesorilor pe ramura cu acel simbol sau sa nu existe arcul corespunzator, caz in care se adauga in primul automat portiunea pana care urmeaza (in jos) pana la starea care a fost echivalat cu una din automatul mare. In cazul in care exista doua arce catre succesor in al doilea automat, se va verifica daca si in primul automat exista un succesor dublu (si cu , si cu - ca in al doilea), caz in care se vor identifica succesorii dublii si se va merge mai departe cu succesorii lor. In caz contrar se vor identifica succesorul stang () al celui de-al doilea arbore cu cel corespunzator al primului si succesorul drept () al celui de-al doilea cu cel corespunzator din primul, dupa acelasi algoritm. Succesorul se va duplica deci, fara insa a fi nevoie de duplicarea fizica, bucati din acest subautomat vor apare eventual pe ambele ramuri din primul automat. In cazul in care una din ramuri nu exista in primul automat, se foloseste regula de mai sus (prin copierea ramurii respective din al doilea automat pana la starea care este echivalenta cu o stare din primul automat. Complexitatea acestei parti a algoritmului poate creste teoretic, dar practic probabilitatea sa existe o splitare a celui de-al doilea automat este mica, ea crescand liniar cu numarul de noduri cu doi succesori distincti, numar care creste logaritmic cu numarul de noduri.

Acest algoritm (sau varianta a sa usor modificata) se poate implementa in sistemul de firewall, rezultand un consum de calcul mult mai mic pentru cazuri in care firewall-ul este foarte mare. Pe de alta parte se poate folosi peste implementarea existenta, creand un sistem generand offline o reprezentare de acest tip a firewall-ului, si convertind-o apoi la o forma clasica, dar simuland prin multiple chain-uri referite imbricat aceasta structura.

PARTEA A TREIA

- Protocolul TCP/IP -

Protocolul IP (Internet Protocol)

Un loc potrivit pentru a porni studiul nivelului retea in Internet este insusi formatul datagramelor IP. O diagrama IP consta intr-o parte de antet si una de text(informatie). Antetul consta dintr-o parte de lungime fixa (20 octeti) si una (optionala) de lungime variabila. Campurile antetului sunt transmise in formatul big endian (cel mai semnificativ primul). Procesorul SPARC este de tip big endian, dar Pentiumul este de tip litle endian, deci el trebuie sa faca o conversie a campurilor atat la trimitere cat si la receptie. Asezarea campurilor in antet este urmatoarea:

32 biti


Versiune

IHL

Tip serviciu

Lungime totala

Identificare


DF

MF

Deplasamentul fragmentului

Timp de viata

Protocol

Suma de control a antetului

Adresa sursei

Adresa destinatiei

Portiune optionala

(zero sau mai multe cuvinte de 32 de biti)


Campul "Versiune" memoreaza carei versiuni de protocol ii apartine dadagrama. Prin includerea unui camp versiune in fiecare datagrama, devine posibil ca tranzitia dintre versiuni sa tina luni, poate chiar ani, cu unele masini ruland vechea versiune, si altele noua versiune.

Din moment ce lungimea antetului nu este constanta, un camp din antet, IHL, este pus la dispozitie pentru a spune cat de lung este antetul, in cuvinte de 32 de biti. Valoarea minima este 5, care se foloseste atunci cand nu exista opiuni. Valoarea maxima a acestui camp pe 4 biti este 15, ceea ce limiteaza antetul la 60 de octeti, si astfel campul de optiuni la 40 de octeti. Pentru unele optiuni (de exemplu cea care inregistreaza calea pe care a mers un pachet), 40 de octeti sunt prea putini, facand aceasta optiune nefolositoare.

Campul tip serviciu permite gazdei sa comunice subretelei ce tip de serviciu doreste. Sunt posibile diferite combinatii de fiabilitate si viteza. Pentru vocea digitizata livrarea rapida are prioritate fata de transmisia corecta. Pentru transferul de fisiere, transmisia fara erori este mai importanata decat transmisia rapida.

Campul insusi contine (de la stanga la dreapta), un camp de 3 biti Precedenta, trei indicatori (flags), D, T si R, plus 2 biti nefolositi. Campul Precedenta este o prioritate (de la 0 - normal pana la 7 - pachet de control al retelei). Cei trei biti indicatori permit gazdei sa specifice ce o afecteaza mai mult din multimea . In teorie, aceste campuri permit ruterelor sa ia decizii intre, de exemplu o legatura prin satelit cu o productivitate mare si o intarziere mare si o linie dedicata cu productivitate mica dar si cu intarziere scazuta. In practica, ruterele curente ignora campul Tip serviciu

Lungimea totala include totul din detagrama (inclusiv antetul). Lungimea maxima este de 65535 octeti. In prezent, aceasta limita superioara este tolerabila, dar in viitoarele retele cu capacitati de ordinul gigaoctetilor vor fi necesare detagrame mai mari.

Campul Identificare este necesar pentru a permite gazdei destinatie sa determine carei datagrame apartine un nou pachet primit. Toate fragmentele unei datagrame contin aceeasi valoare de identificare.

Urmeaza un bit nefolosit si apoi doua campuri de 1 bit. DF vine de la "Don't fragment" - A nu se fragmenta. Acesta este un ordin dat ruterelor sa nu fragmenteze datagrama, pentru ca destinatia nu este capabila sa le asambleze la loc. De exemplu, cand un calculator porneste, memoria sa ROM poate cere sa i se trimita o imagine de memorie ca o singura datagrama. Prin marcarea datagramei cu bitul DF, emitatorul stie ca acesta va ajunge intr-o singura bucata, chiar daca aceasta inseamna ca datagrama va trebui sa evite o retea cu pachete mai mici, dar mai rapida, pentru o ruta suboptimala. Este necesar ca toate masinile sa accepte pachete de 576 octeti sau mai mici.

MF vine de la More Fragments (fragmente aditionale). Toate fragmentele, cu exceptia ultimului, au acest bit activat. El este necesar pentru a a stii cand au ajuns toate fragmentele unei datagrame.

Deplasamentul fragmentulu spune unde este locul fragmentului curent in cadrul datagramei. Toate fragmentele dintr- datagrama, cu exceptia ultimului, trebuie sa aibe lungimea multiplu de 8 octeti - unitatea de fragmentare elementara. Din moment ce sunt prevazuti 13 biti, exista un maxim de 8192 de fragmente de datagrama, obtinandu-se o lungime maxima a datagramei de 65536 octeti, cu unul mai mult decat campul Lungime totala.

Campul Timp de viata este un contor folosit pentru a limita durata de viata a pachetelor. Este prevazut sa contorizeze timpul in secunde, permitand un timp maxim de viata de 255 secunde. El trebuie sa fie decrementat la fiecare salt (hop - trecerea dintr-o retea in alta) si se presupune ca este decrementat de mai multe ori cand sta la coada mai mult timp intr-un ruter. In practica, el contorizeaza doar salturile. Cand contorul ajunge la zero, pachetul este eliminat, trimitandu-se sursei un avertisment. Aceasta facilitate previne hoinareala la nesfarsit a pachetelor prin Internet, ceea ce se poate intampla daca tabelele de dirijare sunt incoerente.

Cand nivelul retea a asamblat o data grama completa, are nevoie sa stie ce sa faca cu ea. Campul Protocol spune carui proces de transport trebuie sa-l predea. TCP este o posibilitate, dar tot asa sunt si UDP si alte cateva. Numerotarea protocoalelor este globala pe intregul Internet si este definita in RFC 1700.

Suma de control a antetului verifica numai antetul. O astfel de suma de control este utila pentru detectarea erorilor generate de locatii de memorie proaste in interiorul unui ruter. Algoritmul este de a aduna toate jumatatile de cuvinte, de 16 biti, atunci cand acestea sosesc, folosind aritmetica in complement fata de unu si pastrarea complementului fata de unu al rezultatului. Pentru scopul acestui algoritm, suma de control a antetului este presupusa a fi zero dupa sosire. Acest algoritm este mai robust decat folosirea adunarii normale. Observati ca suma de control a antetului trebuie recalculata la fiecare salt, pentru ca cel putin un camp se schimba intotdeauna (campul timp de viata), dar se pot folosi trucuri pentru a accelera calculul.

Adresa sursei si Adresa destinatiei specifica numarul se retea si numarul de gazda. Adresele Internet se vor discuta intr-o sectiune ulterioara.

Campul Optiuni a fost proiectat pentru a oferi un subterfugiu care sa permita versiunilor viitoare ale protocolului sa includa informatii care nu sunt prezente in protocolul original, pentru a permite cercetatorilor sa incerce noi idei, si pentru a evita alocare unui numar de biti rar folositi. Optiunile sunt de lungime variabila. Fiecare incepe cu un cod de un octet, care identifica optiunea. Unele optiuni sunt urmate de un camp de un octet reprezentand lungimea optiunii, urmat de unul sau mai multi octeti de date. Campul Optiuni este completate pana la un multiplu de 4 octeti. In aceste moment sunt definite cinci optiuni, care sunt listate mai jos, dar nu toate ruterele le suporta pe toate.


Optiune         

Descriere

Securitate

Mentioneaza cat de secreta este datagrama

Dirijarea stricta pe baza sursei

Indica calea completa de parcurs

Dirijarea aproximativa pe baza sursei

Indica o lista a ruterelor ce nu trebuie sarite

Inregistreaza calea

Fiecare ruter trebuie sa-si adauge adresa IP

Amprenta de timp

Fiecare ruter sa-si adauge adresa si o amprenta de timp



Optiunea Securitate mentioneaza cat de secreta este informatia. In teorie, un ruter militar poate folosi acest camp pentru a mentiona ca nu se doreste o dirijare prin anumite tari pe care militarii le cansidera rauvoitoare. In practica, toate ruterele il ignora, deci singura "functie" practica este sa ajute spionii sa gaseasca lucrurile de calitate.da calea competa de la sursa la destinatie ca o succesiune de adrese IP.

Optiunea Dirijarea stricta pe baza sursei : Datagrama este obligata sa urmeze aceasta cale precisa. Ea este deosebit de utila pentru administratorii de sistem pentru a transmite pachete cand tabelele de dirijare sunt distruse, sau pentru a depana/configura reteaua.

Optiunea Dirijarea aproximativa pe baza sursei face posibila ocolirea anumitor regiuni geografice din motive politice sau de alta natura.

Optiunea Inregistreaza calea indica ruterelor de pe cale sa-si adauge adresele lor IP la campul optiune. Aceasta permite administratorilor de sistem sa localizeze pene in algoritmii de dirijare. Cand reteaua ARPANET a fost infiintata, nici un pachet nu trecea vreodata prin mai mult de noua rutere, deci 40 de octeti erau suficienti. Cum s-a mai spus, in prezent dimensiunea este prea mica.

Optiunea Amprenta de timp este similara cu optiunea Inregistreaza ruta, cu exceptia faptului ca in plus fata de inregistrarea adresei de 32 biti se adauga si o amprenta de timp de 32 biti. Si aceast aoptiune este folosita tot pentru depanarea algoritmilor de dirijare.

Adrese IP

Fiecare gazda si ruter din Internet are o adresa IP, care codifica adresa sa de retea si de gazda. Combinatia este unica: nu exista doua masini in Internet cu acelasi IP. Toate adresele IP sunt de 32 de biti lungime, si sunt folosite in campurile Adresa sursa si Adresa destinatie ale pachetelor IP. Masinile care sunt conectate la mai multe retele au adrese diferite in fiecare retea. Formatele folosite pentru adresele IP sunt urmatoarele :


32 biti



0

Retea

Gazda

10

Retea

Gazda

110

Retea

Gazda

1110

Adresa de trimitere multipla

11110

Rezervat pentru folosire viitoare


In functie de antetul adresei (0, 10, 110, 1110, 11110) adrese se impart respectiv in adrese de clasa A, B, C, D, E. Formatele de clasa A, B, C si D permit pana la 126 retele cu 16 milioane de gazde fiecare, 16.382 retele cu pana la 64.000 gazde fiecare, 2 milioane de retele cu pana la 254 gazde fiecare (de exemplu LAN-uri) si multicast (trimitere multipla).Zeci de mii de retele sunt conectate acum la Internet, si numarul se dubleaza in fiecare an. Numerele de retea sunt atribuite de NIC (Network Information Center) pentru a evita conflictele.

Adresele IP, care sunt numere de 32 de biti, sunt scrise in mod uzual in notatie zecimala cu punct. In aceste format, fiecare dintre cei 4 octeti este scris in zecimal, rezultand valori intre 0 si 255. De exemplu, adresa hexazecimala C0290614 este scrisa ca 192.41.6.20. Cea mai mica adresa IP este 0.0.0.0 si cea mai mare este 255.255.255.255.

Valorile 0 si -1 au semnificatii speciale. Valoarea 0 reprezinta reteaua curenta sau gazda curenta. Valoarea -1 este folosita ca o adresa de difuzare pentru a desemna toate gazdele din reteaua indicata.

Adresa IP 0.0.0.0 este folosita de gazde atunci cand sunt pornite, dar nu mai este folosita ulterior. Adresele IP cu 0 ca numar de retea se folosesc pentru a referi reteaua curenta. Astfel, o masina se poate referi la propria retea fara a cunoaste numarul acesteia (ea trebuie insa sa cunoasca clas aretelei, pentru a stii cate zerouri sa includa). Adresel care contin numai 1-uri sunt folosite pentru a difuza in reteaua curenta (de obicei este vorba de un LAN). Adresele cu numar de retea exact si cu numar de gazda format numai din 1-uri se folosesc pentru a trmite pachete tuturor gazdelor de la o anumita adresa de retea. In final, adresele 127.xx.yy.zz sunt rezervate pentru testari in bucla locala (loopback). Pachetele trimise catre aceasta adresa nu sunt trimise prin cablu; ele sunt prelucrate total si tratate ca pachete sosite. Aceasta permite ca pachetele sa fie trimise propriei gazde, fara ca emitatorul sa-i cunosaca adresa.