. Sistemul de Operare Linux Si In Protocoalele din Internet
CAP I INTRODUCERE IN
SISTEMUL DE OPERARE LINUX SI IN PROTOCOALELE DIN INTERNET
Ce este Linux ?
Linux este un sistem de operare modern. Ruleaza pe arhitecturi 32-bit, foloseste multitasking preemptiv, memorie protejata, suporta utilizatori multipli si are suport extensiv pentru retele, inclusiv TCP/IP. Linux a fost conceput intai pentru arhitectura 386 de la Intel, dar acum ruleaza pe o varietate de sisteme, incluzand intreaga familie x86, ca si Alpha, SPARC si PowerPC. Linux ruleaza toate aplicatiile de care un sistem Unix are nevoie, inclusiv servere de web ca Apache, aplicatii de transport email ca Sendmail si baze de date precum Oracle, Informix sau cele sub licenta GPL ca MySQL si Postgres. Linux suporta un numar mare de sisteme de fisiere, si cu ajutorul programelor gen Samba poate chiar inlocui cu succes NT ca server de fisiere Windows. Prin folosirea tehnologiei de clustering, Linux poate fi configurat sa raspunda cerintelor mari ale multor aplicatii stiintifice si de inginerie din laboratoarele de cercetare. El se bazeaza in intregime pe comenzile si "look and feel"-ul UNIX, deci cine stie Linux stie si UNIX si invers.
Are suport pentru retea (TCP/IP), Internet, este unul dintre cele mai folosite sisteme de operare pentru servere internet si intranet.
Scurt istoric al sistemului de operare Linux.
In 1991 studentul Linus Torvalds a scris prima versiune de Linux. Apoi a facut publice sursele pe internet, si o multime de oameni au inceput sa-i raspunda, sa-i aduca imbunatatiri, noi sugestii, etc.
Intre timp acest sistem de operare a devenit complex, au aparut (si inca mai apar) noi facilitati, iar performanta este remarcabila.
In prezent sunt estimati peste 8 milioane de utilizatori Linux, iar nucleul Linuxului are peste 200 de autori. Pe langa acesti 200 de autori ar trebui adaugate cele cateva mii de persoane care testeaza si gasesc buguri.
Caracteristici
Linux este un sistem de operare multitasking si multiuser: mai multi utilizatori se pot conecta in sistem si pot rula simultan mai multe programe fiecare; are console virtuale, ce permit o comutare usoara intre sesiuni de lucru multiple; nucleul insusi emuleaza coprocesorul matematic 387-FPU; suporta diferitele tipuri de sisteme de fisiere pentru inmagazinarea datelor (incluzand sistemul de fisiere – FS (File System) – MS-DOS, NFS, HPFS (OS/2 doar in citire), respectiv ISO 9660 CD-ROM – un tip de FS ce permite citirea tuturor CD-ROM cu format standard); ofera un suport complet pentru comunicatii (incluzand protocoalele TCP/IP, SLIP, PLIP, CSLIP) oferind servicii cu FTP, Telnet, NNTP si SMTP.
Fiecarui utilizator al sistemului i se creaza un cont personal in care se va tine evidenta drepturilor de acces (a numelui, parolei, numele grupului din care face parte etc) precum si alte informatii legate de acest utilizator (directorul de lucru, SHELL-ul implicit etc). Pe orice sistem UNIX (deci si Linux) exista un utilizator privilegiat, cel insarcinat cu administrarea sistemului, un utilizator care nu este, si nici nu poate fi supus nici unei restrictii din partea oricarui alt utilizator, singurul in masura de a crea utilizatori noi, cu acces nelimitat la toate informatiile din sistem. Acest utilizator privilegiat intra in sesiune de lucru cu numele root (radacina). El este insarcinat cu intretinerea sistemului, singurul care poate modifica – daca este cazul – chiar si nucleul sistemului (prin modificarea si recompilarea surselor acestor functii), cel care supervizeaza toate procesele din sistem (si intervine la nevoie). In plus, fiecare sistem UNIX are asociat si un asa numit "Host-name", un nume prin care se identifica sistemul intr-un context de retea (orice retea omogena format din astfel de sisteme sau orice retea eterogena cu subsisteme capabile de intercomunicare).
Fiecare utilizator – gestionar al unei console (format cel putin dintr-o tastatura si un monitor) poate deschide sesiuni multiple – prin intermediul unor console virtuale, sa lucreze la un moment de timp dat sub diferite nume (sau cu acelasi nume pe terminale virtuale diferite).
Nucleul sistemului de operare a fost astfel conceput incat sa utilizeze facilitatile oferite de modul de lucru protejat al procesorului. Linux foloseste un management al memoriei bazat pe descriptori precum si multe alte facilitati oferite de un sistem cu un procesor minim 386, lucru ce face posibila o adresare a intregii memorii RAM existente precum si multitaskingul. Nucleul suporta modul de lucru "demand paging" (incarca pagina la cerere) cu memoria ceea ce inseamna ca numai acele segmente ale unui executabil se incarca in memorie care sunt folosite pe moment. Deasemenea este adeptul politicii de partajare a unor pagini comune, frecvent folosit in cazuri in care se lanseaza mai multe instante ale aceluiasi program. (care vor partaja codul comun – reducandu-se astfel incarcarea memoriei). Pentru marirea spatiului de memorie disponibila Linux aplica si procedura "disk-paging" alocand un asa numit "swap area" pe hard-disk unde vor fi inmagazinate, temporar, anumite portiuni ale unui program care rezida in memorie si nu este pe moment utilizat.
Executabilele sub Linux folosesc foarte frecvent rutine standard legate in mod dinamic (biblioteci DLL), in sensul ca, codul subrutinelor respective se incarca in memorie doar in momentul apelarii lor, astfel reducandu-se considerabil dimensiunea unui executabil.
Nucleul Linux este aproape integral modularizat. Acest lucru permite ca driverele sa fie compilate separat de nucleu iar incarcarea/descarcarea lor in/din memorie se poate face cu comenzi simple.
Avantajele utilizarii Linux-ului
Stabilitate. Din cauza ca sursele Linux sunt distribuite in mod deschis, Linux a fost "curatat" de bug-uri cu multa minutiozitate. Fiecare noua versiune a sistemului de operare este rapid vazuta si testata de mii de programatori din toata lumea. Arhitectura pe care este bazat Linux creeaza de asemenea un sistem mai stabil. Sistemele de operare care folosesc memoria protejata si multitasking preemptiv sunt in mod inerent mai stabile. Memoria protejata impiedica o eroare dintr-o aplicatie sa blocheze intregul sistem de operare, si din folosirea multitaskingului adevarat rezulta ca o gatuire intr-o aplicatie nu inseamna ca intregul sistem este oprit. Linux de asemenea face o distinctie clara intre procesele utilizatorilor si cele ale kernelului. In timp ce si alte sisteme de operare folosesc memoria protejata, acest lucru nu conteaza daca aplicatii prost scrise au voie sa suprascrie spatiul kernelului cu procesele lor.
Economie. Pentru ca Linux este "open source", costurile initiale sunt mici. Nu exista licente per-user, sau taxe asociate cu folosirea sistemului de operare. Linux a fost de asemenea conceput pentru arhitectura Intel, acest lucru insemnand ca ruleaza rapid si eficient pe o multitudine de configuratii ieftine capabile sa functioneze ca server.
Adevaratele economii in privinta Linux vin insa din TCO (Total Cost of Ownership – Costul total de proprietate). Imbunatatirile vin repede si sunt distribuite in mod liber, asa ca utilizatorii nu mai sunt fortati sa astepte pana ce o firma decide ca intr-adevar exista o problema. In cazul unor probleme, rezolvarea lor este rapida, existand nenumarati programatori gata sa dea o mana de ajutor, sau, dupa caz, firme care fac acest lucru contra cost. Rezultatul este ca problemele sunt identificate si rezolvate mult mai repede, noi facilitati sunt implementate mult mai rapid, si toate acestea la un pret extrem de scazut, reducand dramatic costul total. Dovezile ca Linux este intr-adevar viabil vin din statisticile recent realizate: Apache detine aproximativ 60% din piata serverelor de web, si este in crestere. Sendmail este cotat cu aproximativ 80% pe piata programele de transport mail. In consecinta, Linux isi merita cu adevarat laudele, fiind sistemul de operare din clasa server cu cea mai rapida dezvoltare.
Cerinte hardware ale utilizarii SO Linux
De la inceput, Linuxul a avut nevoie de resurse hardware minime pentru a rula. Acest lucru nu s-a schimbat in timp: e nevoie de minim un calculator Intel 386 cu 4 Mb RAM si 50 Mb spatiu liber pe harddisk; daca se alege si optiunea utilizarii sistemului X-Windows, minimul de memorie RAM este de 8 MB.
Este posibil ca unele programe complexe sa necesite foarte multa memorie. Linux are posibilitatea de a simula memoria RAM folosind un fisier de swap pe harddisk, dar este mult mai lent.
Evident, cu cat este mai bun hardware-ul cu atat performanta obtinuta la rularea sistemului de operare va fi mai mare.
Software disponibil sub Linux
Majoritatea distributiilor Linux includ compilatoare pentru diverse limbaje de programare, utilitare pentru retea (email, telnet, ftp, www), creare si manipulare documente, tiparire, arhivare, si multe altele.
Pe langa acestea exista disponibile pe Internet o mare varietate de programe, unele gratuite, altele nu, iar mai nou marile case de software au inceput sa porteze softurile lor pe Linux.
Iata cateva exemple:
-Staroffice (foarte asemanator cu MS-Office, gratuit pentru folosire non-comerciala)
-WordPerfect (Cunoscutul procesor de text, disponibil si sub Linux)
-Netscape Navigator, Opera (browsere Web)
-Oracle (baze de date)
-Mathematica (calcul simbolic si nu numai).
Componentele Sistemului de Operare Linux
Sistemul de operare Linux foloseste un sistem de procese numit multitasking pentru a aloca timpul de lucru al procesorului mai multor utilizatori in acelasi timp. In realitate nu este vorba de procese care se ruleaza in acelasi timp ci unele dupa altele la intervale de timp de ordinul milisecundelor.
Sistemul de operare aloca timpul in asa fel incat sa lase impresia de continuitate pentru fiecare utilizator. In timp ce unul dintre acestia lucreaza la terminalul sau el imparte cu ceilalti resursele de calcul.
Linux, ca oricare alt sistem de operare, este un set de programe care administreaza toate operatiile sistemului de calcul. El asigura de asemenea o interfata intre utilizator si resursele sistemului convertind cererile care vin de la mouse sau tastatura in operatii de efectuat in sistemul de calcul.
Majoritatea sistemelor de operare, inclusiv Linux, au trei mari componente: Kernel-ul, Shell-ul si Sistemul de Fisiere. Kernel-ul administreaza operatiile computerului. Shell-ul asigura o interfata pentru interactiunea dintre utilizator si calculator iar sistemul de Fisiere asigura un mijloc de organizare si gestionare a informatiilor pe discurile hard ale calculatorului.
FIG. 1 Componentele Sistemului de Operare
Kernel-ul sistemului de operare
Kernel-ul este inima sistemului de operare si ofera mijloacele primare necesare ca un sistem de calcul sa functioneze. Kernel-ul se afla cel mai aproape de CPU si hardware. Este un fisier executabil care se incarca atunci cand porneste calculatorul. Odata ce kernelul a fost incarcat el realizeaza urmatoarele functii:
gestioneaza dispozitivele, memoria, si procesele.
controleaza interactiunea (transmisia informatiei) dintre programele aplicatie (utilitati) si hardware-ul sistemului. Administreaza functii precum: spatiul Swap, Demoni, si Sistemele de Fisiere.
Spatiul Swap – Este o parte rezervata de pe hard disk pentru kernel, acesta utilizand-o in timpul procesarii. Portiuni de programe care ruleaza pot fi “aruncate” hard disk-ului si apoi, la nevoie, aduse inapoi. Acest spatiu swap se afla in realitate pe hard disk, insa seamana cu o memorie aditionala sau RAM aditional, uneori fiind numit memorie virtuala.
Daemonii – Programe sau procese care realizeaza o sarcina particulara sau monitorizeaza discurile sau executia programelor. Demonii sunt procese speciale care pornesc dupa ce se incarca sistemul de operare. Demonii asteapta apoi sa faca ceva in sprijinul sistemului de operare. Pot fi porniti sau opriti daca este necesar. Un exemplu este cel al demonului imprimantei, lpsched (line printer scheduler). Acesta se lanseaza cand sistemul porsched (line printer scheduler). Acesta se lanseaza cand sistemul porneste si apoi asteapta in fundal pana cand cineva are nevoie sa tipareasca ceva. Demonii din lumea Linuxului sunt similari cu Serviciile din Windows NT/2000 sau cu NetWare Loadable Modules (NLMs) din Novell NetWare.
Sistemele de fisiere – Reprezinta o ierarhie de directoare, subdirectoare si fisiere care organizeaza si administreaza informatia pe hard disk-uri. Sistemele de fisiere pot fi locale sau pe alta masina (de obicei server).
Shell-ul
Un shell este o interfata intre utilizator si kernel. Actioneaza ca un interpretor sau ca un translator. Cu alte cuvinte, shell-ul accepta comenzi scrise de utilizator, le interpreteaza, si apoi executa programele corespunzatoare. Shell-urile pot fi linie de comanda sau grafice. Pentru a verifica ce shell se utilizeaza la un moment dat se poate folosi comanda ps (process status) (FIG. 3.3).
Shell-ul citeste si interpreteaza cererile introduse de utilizator. Apoi comunica instructiuni kernel-ului care duce la indeplinire cererile formulate de utilizator. Shell-ul este deci legatura directa, interfata directa a utilizatorului cu sistemul de operare. De obicei, cele mai multe cereri sunt pentru a rula programe.
FIG. 2 Shell-ul
Protocoale in Internet
Modelul de referinta TCP / IP
Este mult mai vechi decat modelul OSI si a fost utilizat drept model de referinta de catre stramosul tuturor retelelor de calculatoare, ARPANET si apoi succesorul sau Internetul. Modelul de referinta TCP / IP a aparut ca o necesitate de interconectare a retelelor de diferite tipuri, iar denumirea a fost data dupa cele doua protocoale fundamentale utilizate.
Modelul OSI Modelul TCP / IP
FIG 3 – Comparatie intre modelele ISO / OSI si TCP / IP.
Din figura de mai sus se poate observa diferenta dintre modelul de referinta ISO / OSI si modelul TCP / IP.
Nivelul gazda-la-retea (interfata – retea), despre acest nivel modelul TCP / IP nu spune mare lucru despre ceea ce ar trebui sa se intample aici, singura mentiune este aceea ca gazda trebuie sa se lege la retea, pentru a putea transmite date, folosind un anumit protocol. Acest protocol nu este definit si variaza de la gazda la gazda si de la retea la retea. Acest nivel face ca functionarea nivelului superior, numit Internet si respectiv retea, sa nu depinda de reteaua fizica utilizata in comunicatie si de tipul legaturii de date.
Nivelul Internet are rolul de a permite gazdelor sa emita pachete in orice retea si de a face ca pachetele sa circule independent pana la destinatie. Nivelul Internet defineste oficial un format de pachet si un protocol numit IP – Internet Protocol care asigura un serviciu de transmitere a datelor fara conexiune. Alte protocoale care pot functiona la acest nivel sunt: ICMP – Internet Control Message Protocol; ARP – Address Resolution Protocol si RARP – Reverse Address Resolution Protocol.
Nivelul transport permite conversatii intre entitatile pereche din gazdele sursa, si respectiv, destinatie, deci asigura comunicatia intre programele de aplicatie. Sunt definite doua protocoale: TCP – Transmission Control Protocol este un protocol punct – la – punct, orientat pe conexiuni care permite ca un flux de octeti trimisi de pe un sistem sa ajunga fara erori pe oricare alt sistem din inter – retea (asigura livrarea corecta, in ordine a mesajelor). Al doilea protocol, UDP – User Datagram Protocol este un protocol nesigur (nu asigura livrarea mesajului la receptie fara erori, fara pierderi, fara duplicate, in ordinea in care au fost emise), fara conexiuni, care foloseste IP pentru transportul mesajelor.
Nivelul aplicatie asigura utilizatorii retelei, prin intermediul programelor de aplicatie, o varietate de servicii. Aceste protocoale sunt : – terminal virtual TELNET, protocolul de terminal virtual permite unui utilizator de pe un sistem sa se conecteze si sa lucreze pe un alt sistem aflat la distanta. – transferul de fisiere FTP – File Transfer Protocol. Protocolul de transfer de fisiere pune la dispozitie o modalitate de a transfera eficient date de pe o statie pe alta, in ambele sensuri. – posta electronica SMTP – Simple Mail Transfer Protocol. Alte protocoale care au aparut ulterior: DNS – Domain Name Service, pentru a stabili corespondenta dintre numele gazdelor si adreselor retelelor; HTTP – HyperText Transfer Protocol – folosit pentru aducerea paginilor de pe Web.
Urmatoarea figura prezinta protocoalele si retelele din modelul TCP / IP.
FIG. 4 Protocoale ale modelului TCP/IP
Protocoalele modelului TCP/IP
Protocoalele nivelului Gazda-la-retea (X25, ARPANET)
A. Protocolul X25
Acesta a fost dezvoltat in anii ’70 de catre CCITT pentru a asigura o interfata intre retelele publice cu comutare de pachete si clientii acestor retele.
Majoritatea retelelor X25 lucreaza la viteze de pana la 64 Kbps, ceea ce le face nepotrivite pentru multe sarcini; cu toate acestea ele sunt inca foarte raspandite.
X25 este orientat pe conexiuni si suporta circuite virtuale atat comutate cat si permanente. Un circuit virtual comutat este creat atunci cand un calculator trimite retelei un pachet care ii cere sa apeleze un calculator aflat la distanta. Odata stabilita conexiunea, pachetele pot fi transmise prin conexiunea respectiva, urmand sa soseasca totdeauna in ordinea corecta. Pentru a se asigura ca un emitator rapid nu poate sa inece un receptor lent sau ocupat, X.25 asigura controlul fluxului.
Un circuit virtual permanent este folosit la fel ca unul comutat, cu deosebirea ca este instalat in avans, prin intelegere intre client si compania telefonica. El este prezent intotdeauna, nefiind nevoie sa fie configurat pentru a-l folosi. Circuitul virtual permanent este analog cu o linie inchiriata.
Deoarece lumea este plina, inca de terminale care nu cunosc X.25, a fost definit un alt set de standarde, care descriu cum comunica un terminal obisnuit (neinteligent) cu o retea publica X.25. Practic, utilizatorul sau operatorul retelei instaleaza o “cutie neagra” la care se pot conecta aceste terminale, numita “PAD” – Packet Assembler-Disassembler – Asamblor-Dezasamblor de Pachete si functia ei este descrisa int-un document cunoscut ca X3. Intre terminal si PAD a fost definit un protocol standard, numit X.28; intre PAD si retea exista un alt protocol standard, numit X.29. Toate aceste recomandari, impreuna, sunt deseori numite triplu X.
B. ARPANET-ul
Arpanet este o creatie a ARPA (Advanced Research Projects Agency) din Statele Unite. Pornita in anii ‘60 actiunea a inceput prin investitii facute in multe universitati americane, ducind in prima etapa la o retea cu patru noduri care a devenit functionala in 1969. Acesta se poate spune ca a fost nasterea Internet-ului.
Reteaua ARPAnet a aratat cercetatorilor cat este de utila comunicarea rapida intre echipele de cercetatori aflate in diverse orase ale SUA si s-a dorit conectarea cat mai multor universitati. La sfarsitul anilor '70, din initiativa Fundatiei Nationale de Stiinta (NSF), a demarat proiectul de conectare a universitatilor care nu aveau contract de colaborare cu ARPA. Initial au fost oferite servicii de posta electronica. In 1986 a fost creata o subretea care conecta sase centre de supercalculatoare din sase orase americane, fiecare supercalculator conectat fiind legat de un minicalculator LSI-11 (FUZZBALL), numit si "fratele mai mic". Fuzzball-urile au format subreteaua la care au fost conectate, in timp, 20 de retele regionale. Reteaua a fost denumita NSFNET.
La mijlocul anilor '80, retelele ARPAnet si NSFNET au "fuzionat" si, odata cu marirea exponentiala a numarului cererilor de conectare, lumea a inceput sa perceapa colectia de retele ca fiind o uriasa conexiune de retele. Putem spune ca este momentul nasterii retelei Internet. Aceasta cuprindea, in 1990, 3000 de retele si 200 000 gazde pentru a ajunge astazi la cateva zeci de mii de LAN-uri si milioane de gazde. Expansiunea spectaculoasa a retelei a inceput in 1992, dupa ridicarea interdictiei de a desfasura activitati comerciale pe Internet si odata cu aparitia WWW
Pornind de la experienta acumulata s-a pornit dezvoltarea altor structuri de retea si retele. MILNET este o retea militara realizata dupa prototipul ARPA cu mici imbunatatiri. Retelele prin satelit, SATNET si WIDEBAND au facut pioneratul in acest domeniu.
C. USENET-ul
Pe masura ce unix devenea un sistem de operare din ce in ce mai folosit datorita puternicelor sale mecanisme, a aparut problema transferului de fisiere intre doua masini unix iar cei de la Bell Labs au scris un programel micut numit uucp (unix to unix copy) care functiona folosind doar o linie seriala pina la masina destinatie. Linia seriala era realizata bazata pe reteaua telefonica existenta folosind un modem. Aceasta 'retea' a crescut rapid datorita faptului ca integrarea presupunea un efort minimal – un modem si o linie telefonica – din partea doritorilor. Astfel multe universitati au inceput sa dezvolte aceasta structura care astazi chiar daca ar parea de domeniul antichitatii inca mai rezista datorita serviciului implementat pentru prima oara in cadrul ei: network news. (ulterior s-a implementat acest serviciu si pe Internet alias ARPAnet insa traditia a prevalat in acest caz, cel putin pina acum)
Protocoale ale nivelului Internet (IP, ICMP, ARP)
A. Protocolul pentru Internet (Internet Protocol – IP)
Fiind folosit (dupa cum sugereaza si numele) in principal pentru Internet, acest protocol identifica diferitele dispozitive ale retelelor, afland pe ce retea se gasesc si care sunt elementele ce descriu acele dispozitive. Tuturor host-urilor dintr-o retea le sunt atasate niste indicative, numite adrese IP. Aceasta adresa contine o informatie care face posibila dirijarea unui pachet de date sau altor informatii catre dispozitivul careia ii este atasata. IP-ul preia segmentele de la nivelul superior (Host-to-Host) si le reimparte in portiuni mai mici, numite datagrame sau pachete (packets). Tot IP-ul pune cap la cap aceste datagrame in momentul receptiei. Pentru fiecare datagrama se atribuie o adresa IP a celui care transmite si una a celui care primeste. Fiecare element al retelei ce va primi un pachet il va dirija in functie de adresa de destinatie a acestuia.
B. Protocolul de control al mesajelor prin Internet (Internet Control Message Protocol – ICMP)
Pentru dirijarea informatiilor si cu oferirea de servicii pentru controlul mesajelor catre IP, se foloseste ICMP. De fapt, ICMP transmite periodic, sub forma de pachete IP, anunturi care sa fie receptionate de router, si care contin adrese de IP pentru diferite interfete de retea. O alta parte a ICMP o reprezinta mesajele de descoperire router (ICMP Router Discovery Messages) prin care se transmit statiilor de lucru mesaje privind caile catre portile de acces (gateways). Daca un router nu poate trimite datagrame catre o destinatie din diferite motive, va utiliza ICMP pentru a transmite catre emitator un mesaj prin care il va anunta de neputinta indeplinirii sarcinii. De asemenea, mesaje de atentionare vor fi trimise prin ICMP si atunci cand memoria routerului e plina sau cand informatia transmisa a depasit numarul de hopuri (routere) prin care a trecut.
C. Protocolul de rezolutie a adresei (Address Resolution Protocol – ARP)
Acest protocol realizeaza pentru IP gasirea adresei hardware a masinii de destinatie. IP-ul trebuie sa informeze nivelul imediat inferior (in cazul de fata, nivelul Acces Retea) de aceasta adresa. Daca IP-ul nu o stie, foloseste ARP pentru a o afla. ARP-ul gaseste masina ce are adresa IP specificata in pachetul transmis si interogheaza reteaua care este adresa hardware a acestei componente. Aceasta adresa hardware e cunoscuta sub numele de Media Access Control sau MAC. De asemenea, exista un protocol de aflare a adresei IP in cazul in care se cunoaste doar adresa MAC a componentei de retea (acea componenta nu poseda harddisk sau alt element de stocare a adresei IP). Acest protocol se numeste protocol de rezolutie inversa a adresei (Reverse Address Resolution Protocol – RARP) si foloseste algoritmi destul de complicati prin care combina informatiile despre adresa hardware a masinii respective si cele ale celorlalte componente de retea pentru a crea un portret de identificare a adre- sei IP de destinatie.
Protocoale ale nivelului Transport (TCP, UDP)
A. Protocolul de control al transmisiei (Transmission Control Protocol – TCP)
Acest protocol se ocupa cu depistarea si corectarea erorilor ce apar la transmisie. TCP-ul de pe dispozitivul emitator va realiza o legatura cu cel de pe dispozitivul receptor, acestea negociind cantitatea de date ce va fi transmisa, ansamblul fiind cunoscut sub denumirea de „circuit virtual”. Acest tip de comunicatie se numeste „comunicatie orientata pe conexiune”.
TCP este o conexiune full-duplex, foarte stabila si precisa, cu numarare de jetoane la receptie si corectie de erori. El preia blocuri de informatie, pe care le imparte in segmente, aceste segmente fiind ulterior numerotate. La destinatie, protocolul TCP existent acolo va fi astfel capabil sa reasambleze informatia primita de la emitator. Dupa trimiterea fiecarei secvente (segment numerotat), protocolul TCP emitator va astepta confirmarea de primire de la receptor, iar daca nu o primeste recurge la retrimiterea segmentului. Oricum, este important de cunoscut faptul ca folosirea TCP-ului nu este neaparat necesara decat atunci cand fiabilitatea este foarte stricta, acest protocol intarziind semnificativ transmisia de date. Pentru o transmisie mai rapida si mai putin stricta se foloseste un alt protocol, pe care-l vom prezenta mai jos.
B. User Datagram Protocol – UDP
La fel ca si la TCP, folosirea acestui protocol se face tot in scopul transferului de segmente, dar in cazul UDP transmisia se aplica la acele elemente ce nu necesita un control foarte exact. De foarte multe ori, folosirea TCP face ca o retea proiectata pentru viteze bune sa se transforme intr-una lenta, din cauza timpilor pierduti in scopul deschiderii, mentinerii si inchiderii unei conexiuni TCP. UDP-ul este mult mai rapid, fapt ce poate fi dedus din modul in care acesta lucreaza.
Asemanator cu TCP, UDP segmenteaza datele si asociaza cate un numar fiecarui segment, cu diferenta ca nu secventializeaza datele si nici nu este interesat in a afla modul in care ajung la destinatie. UDP nu are nici mecanism de confirmare de primire si nici verificare in timpul transferului, realizeaza doar numerotarea segmentelor si nu lucreaza in flux continuu de date, cum o face TCP. Dupa transmiterea mesajelor UDP uita de ele, le abandoneaza complet, acest lucru neinsemnand insa ca este ineficient ci doar ca nu are un mecanism de asigurare a controlului transmisiei.
UDP nu este un protocol orientat pe conexiune, el nu creeaza un circuit virtual, nici macar nu contacteaza destinatia.
Protocoale ale nivelului Aplicatie (FTP, SMTP, IMAP, DNS)
A. Protocolul pentru transferul fisierelor (File Transfer Protocol – FTP)
FTP (File Transfer Protocol) este serviciul care da posibilitatea utilizatorilor de a transfera fisiere de la un calculator aflat undeva in Internet, care se numeste host, pe calculatorul local. Aceasta este situatia cel mai des intalnita, dar se poate gestiona si transferul de date dintre doua calculatoare aflate la distanta.Port-urile folosite sunt 21, pentru trimiterea de comenzi, si 20 sau unul peste 1.024, negociat de client si server, pentru transferul de date. El are de fapt o structura duala, este atat protocol cat si program. Ca protocol, FTP deserveste aplicatiile iar ca program se foloseste pentru realizarea manuala de operatiuni cu fisiere. FTP face transparenta conectarea prin tehnologie de tip Telnet cu un server FTP, iar apoi creeaza suportul pentru operatiunile cu fisiere, cum ar fi listarea, manipularea directoarelor, vizualizarea sau transferul de fisiere intre statii. Bineinteles, pentru limitarea accesului, este necesar un proces de autentificare in momentul accesarii unui server FTP, proces caruia i se asociaza o parola. Majoritatea serverelor FTP permit si accesarea anonima (fara parola), dar optiunile pe care le aveti in acest caz sunt limitate.
B. Protocolul pentru transferul trivial al fisierelor (TFTP)
Acesta poate fi vazut ca un „frate mai mic” al FTP, realizand tot transferul de fisiere, dar in acest caz trebuie sa stiti exact ce cautati si unde sa gasiti acele informatii, TFTP fiind capabil doar de a receptiona fisiere. Nu mai are atat de multe functii ca FTP, dar deschide doar fisiere publice si nu are implementat un sistem de autentificare, lucru care scade siguranta si il face utilizabil doar in putine cazuri.
C. Protocolul pentru posta electronica (Simple Mail Transfer Protocol – SMTP)
Probabil cel mai utilizat protocol, acesta se ocupa cu trimiterea si receptia de informatii sub forma de mesaje de posta electronica, folosind in acest sens port-ul TCP 25 si un algoritm numit „spooling”. De fapt, SMTP insereaza informatia ce urmeaza a fi trimisa intr-o coada de mesaje, dupa care o expediaza. In momentul receptiei mesajul e stocat pe un dispozitiv, de obicei un disc, iar serverul retelei destinatie face o verificare periodica a acestui disc si va expedia mesajul catre statia destinatie.
Programul /usr/lib/sendmail implementeaza atat clientul cat si server-ul. Aceasta este denumirea celui mai folosit program de acest tip, cel implementat la Universitatea Berkeley. Alte variante existente sunt smail, MMDF sau PMDF.
In esenta, sendmail permite postei electronice sa fie livrata utilizatorilor individuali, sa fie distribuita unor liste de utilizatori, retransmisa unei alte masini, adaugata la un fisier. Exista numeroase probleme de securitate ale programului (foarte complex) sendmail. El este considerat de unii un adevarat cosmar pentru securitate. Contine zeci de mii de linii in C si se executa ca "root". Nu este de mirare ca aceasta violare a principiului minimei increderi are o lunga si deloc faimoasa traditie in istoria securitatii retelelor.
D. Protocolul IMAP (Internet Message Access Protocol)
IMAP este unul dintre cele mai evoluate protocoale client/server pentru manevrarea postei electronice. Prezentand cateva imbunatatiri fata de predecesorul sau, POP3, IMAP permite o mai mare flexibilitate in gestionarea mesajelor si posibilitatea de manevrare a cutiei postale de "la distanta". Mesajele nu sunt transferate direct de la server la client pentru a fi citite, ci intr-o prima faza sunt luate numai header-ele (antetele) mesajelor (informatii precum expeditorul, subiectul, dimensiunea etc.). Apoi, in functie de preferinte, sunt luate de pe server mesajele dorite. Cele de dimensiuni foarte mari pot fi sterse, fara a fi transferate prin modem (acest lucru nu este posibil la POP3, decat numai in cazul in care stergi un mesaj fara sa il citesti si asta numai folosind un anume procedeu, destul de complicat si incomod).
E. Protocolul DNS
Domain Name Server (DNS) este un serviciu format dintr-o baza de date distribuita, cu ajutorul careia se determina relatia adresa IP-nume de host precum si locul unde trebuie livrata posta electronica in interiorul organizatiilor. Acest serviciu utilizeaza port-ul TCP si UDP 53. Procesul folosit pentru rezolvarea acestor probleme se numeste resolver. Atunci cand DNS incearca sa localizeze un nume de host, calculatorul contacteaza mai multe server-e de nume. Unul sau mai multe dintre acestea vor raspunde daca vor gasi corespondenta nume-adresa IP.
In DNS se transmit mai multe tipuri de inregistrari care desemneaza:
-adrese IP (tip A) sau numele canonic pentru un alias de pe un host (tip CNAME);
-diferite calculatoare care pot primi posta pentru un anumit host (tip MX);
-fac legatura inversa, de la adresa IP la nume (tip PTR). De exemplu, daca, folosind DNS, un calculator cauta numele xyz.ro, el va primi un articol de tip A care ii va indica adresa IP a acestui calculator, 121.10.12.10. Daca se trimite o cerere MX privind adresa xyz.ro, se primeste un articol care arata ca posta poate fi livrata la masina xyz.ro si la host1.xyz.ro.
In afara rezolvarii cererilor exemplificate anterior, DNS mai furnizeaza posibilitatea transmiterii unor copii intregi ale bazelor de date ale server-elor de nume. Acest lucru se numeste transfer de zona si este procesul prin care server-ele secundare obtin copii ale bazelor de date din server-ele principale. Dupa cum s-a precizat, DNS foloseste protocolul UDP (mai rapid) pentru rezolvarea unor cereri individuale si TCP pentru transfemrile de zone.
In ceea ce priveste securitatea serviciului DNS, exista doua mari probleme:
• In primul rand este vorba de riscurile pe care le implica transferurile de zone. Ele reprezinta adevarate "ghiduri" despre ce calculatoare sunt conecate la o anumita retea organizationala. Se poate bloca transferul de zone folosind un ruter care sa interzica toate incercarile externe de conectare TCP la port-ul 53. Unele versiuni ale server-ului de nume facut de Berkeley permit plasarea unei directive xfrnets in fisierul letc/named.boot, directiva care indica host-urile de la care se permit cererile de transfer de zona;
• O a doua problema de securitate o reprezinta atacurile la server-ele de nume, care implica atat obtinerea controlului acestora, cat si modificarea continutului bazei de date. Exista doua cai prin care un atacator poate face ca un server de nume sa furnizeze informatie incorecta:
informatia gresita poate fi incarcata in memoria cache a server-ului, de la distanta, prin raspunsuri false la intrebari privind adresele;
prin schimbarea fisierelor de configurare a server-ului, pe calculatorul unde se executa acesta.
F. Protocolul HTTP
Protocolul HyperText Transfer Protocol (HTTP) este folosit pentru cererea si receptionarea unor documente de la server-ele WWW (World Wide Web). El foloseste port-ul TCP 80 si se caracterizeaza prin simplitate: atunci cand un client contacteaza un server WWW, clientul cere un fisier. Server-ul raspunde cu un document multimedia (MIME), in format ASCII sau intr-un limbaj specific, HTML (HyperText Markup Language). Apoi, documentul este afisat. Documentele HTML au trimiteri catre imagini si pot face legaturi de tip hipertext la alte documente.
HTTP a inceput sa fie proiectat si utilizat din anul 1990, dezvoltindu-se impreuna cu spatiul WWW. Prima versiune, referita ca HTTP/0.9, a reprezentat un simplu protocol de transfer de date prin Internet. Urmatoarea versiune, HTTP/1.0, definita de RFC 1945, a imbunatatit transferul de mesaje, permitindu-se mesaje in format MIME (Multipurpose Internet Mail Extensions), continind meta-informatii despre datele transmise si despre semantica dialogului cererilor si raspunsurilor dintre clientii si serverele Web.
A urmat HTTP/1.1 care ofera mai multe functionalitati suplimentare, precum mecanisme de cautare, adnotare si actualizare, avind suport pentru URI (Uniform Resource Identifier), specificind adresele ca locatie (prin URL) sau prin nume (via URN). HTTP de asemeni este utilizat ca protocol generic pentru comunicarea intre agentii utilizator si portile (gateways) catre alte sisteme Internet, incluzind suport pentru protocoale ca SMTP (Simple Mail Transfer Protocol), NNTP (Network News Transfer Protocol), FTP (File Transfer Protocol), Gopher. In acest mod, HTTP permite accesul hipermedia la resurse disponibile din diverse aplicatii.
CAP II Prezentarea sistemului firewall si a tipurilor acestuia
Definitia unui firewall
Termenul firewall provine din constructii, de la zidurile protejate la incendiu (aszbest) ce se construiesc pentru a impiedica raspandirea incendiului daca acesta are loc. Firewall-ul de retea este dispozitivul care – localizat intre reteaua interna si cele externe in punctul de conectare – controleaza traficul dintre retele. El se afla in pozitia de pe care poate vedea fiecare pachet, inspectandu-l poate vedea de unde vine si incotro merge s.a.m.d.
Prin definitie un firewall este o structura ce impiedica raspandirea. Tinand seama ca Internet-ul este, metaforic vorbind, un Iad, termenul pare potrivit: este nevoie de un astfel de parafoc pentru a proteja LAN-ul de flacarile si de demonii Internetului. Parafocul poate deveni in unele cazuri o “inchisoare” daca regulile sale nu sunt bine construite si nu sunt urmarile ambele sale scopuri: acela de a tine viermii, crackerii si hackerii in afara retelei si de a inchide utilizatorii, angajatii, copiii in interiorul LAN-ului.
Un firewall poate fi configurat sa blocheze tot traficul sau sa permita tot traficul. Evident, aceste doua cazuri extreme nu ne-ar ajuta la nimic, ca urmare configurarea unui firewall este o arta, unde actorul se balanseaza pe muchia de cutit dintre aceste doua prapastii.
Avantajul firewall-urilor este ca ele pot bloca traficul neautorizat care intra sau iese din reteaua noastra interna. Insa, ca pentru orice sistem informatic, se cuvine facuta precizarea ca firewall-urile nu pot fi in mod absolut sigure. In mod normal, un asemenea firewall este conectat la doua sau mai multe retele pe care le separa. Firewallul se comporta ca un politist de trafic de retea, permitand sau stopand pachetele din drumul lor.
O schema simplificata a unui firewall ar putea fi considerata aceasta:
FIG.5 Schema simplificata a unui sistem cu firewall
Necesitatea filtrarii pachetelor
Se face din 3 motive: pentru control, pentru securizare, pentru supraveghere.
a) Controlul: cand se foloseste o masina Linux pentru a conecta o retea interna la o alta retea (de exemplu Internet-ul) exista posibilitatea selectiei tipului de trafic permis. De exemplu, header-ul unui pachet contine adresa destinatie a pachetului , astfel incat se poate preveni trecerea unor pachete catre o anumita parte a retelei externe. De asemenea se pot controla , in acelasi mod, si pachetele ce vin din exterior.
b) Securitatea: cand masina Linux se interpune intre haosul Internetului si un LAN, este necesara restrictionarea si verificarea celor ce “bat” la usa retelei pentru a intra. De exemplu, se poate permite orice trafic generat din retea catre exterior insa, asa numitul "Ping of Death", provenit din surse extrerne rauvoitoare, poate ingrijora administratorul. Un alt exemplu:se poate considera periculoasa orice incercare de telnet pe masina Linux din exterior chiar daca cel ce incearca acest lucru detine parolele necesare; o masina Linux poate fi transformata intr-un "observator" in Internet, filtrand toate pachetele folorite la initierea conexiunii ce provin din exterior.
c) Supravegherea: uneori configurari gresite ale unor masinii din interiorul retelei pot duce la un trafic necorespunzator (cazul unor atacuri de gen smurf sau fraggle). Filtrul de pachete poate sesiza traficul anormal si poate genera log-uri.
Clasificarea firewall-urilor
Acestea, in literatura de specialitate sunt divizate astfel:
1. Firewall-uri cu filtrare de pachete (filtre de pachete);
2. Firewall-uri bazate pe aplicatii Proxy;
Filtrele de pachete
Acestea sunt construite in kernel-ul Linux. Acesta lucreaza la nivelul retea (conform standardului ISO-OSI). Datele au permisiunea de a “parasi” sistemul numai daca regulile impuse de firewall ii permit acest lucru. Pe masura ce pachetele de date sosesc, acestea sunt filtrate dupa tipul lor, adresa sursa, adresa destinatie si alte informatii referitoare la port continute in fiecare pachet.
Filtrele de pachete sunt de 2 tipuri: simple si avansate.
Filtre de pachete simple
Acest tip de firewall este de fapt un router bine configurat, cu liste de acces, filtre aplicate corespunzator. Reprezinta cea mai simpla forma de protectie. Ele verifica fiecare pachet ce trece si, pe baza unor reguli de filtrare, decide daca pachetele respective sunt lasate sa treaca sau sunt blocate. Examinarea pachetelor are ca scop analizarea informatiei primare din interior, detalii de genul adresa sursa sau destinatie, port sursa sau destinatie, protocol etc. Pentru fiecare pachet trebuie sa existe o regula pe baza careia sa se ia decizia. Daca nu este stabilita nici o regula, pachetul va fi blocat.
Avantajele oferite de acest tip de firewall sunt:
permite controlul la nivelul de jos asupra fiecarui pachet ce trece prin firewall;
fiecare camp al pachetului este verificat – de exemplu: pachete IP, sursa, destinatie, protocol (TCP sau UDP), port, tipul serviciului;
poate identifica pachetele cu adresa sursa falsificata; i
in mod normal, este singurul loc prin care poate trece traficul intre retele, fiind relativ greu de ocolit.
Filtrarea de pachete de acest fel este inclusa in majoritatea sistemelor de operare de pe routere, functionalitatea unui asemenea firewall putand fi realizata de un simplu router.
Printre dezavantaje ar fi de mentionat ca este relativ dificil de configurat. Mai trebuie mentionat faptul ca nu ofera protectie absoluta: de exemplu se poate sa se permita trafic http/web (port 80), dar nimeni nu garanteaza ca pe acelasi port nu se poate trafica si, de exemplu, IRC.
Pentru a folosi un asemenea firewall e nevoie de soft sau/si de echipament. In acest sens, producatorii majori de routere precum Cisco, 3Com, Bay networks, Lucent/Ascend ofera solutii complete. Se pot folosi, de asemenea, implementarile din sistemele de operare UNIX, cum ar fi Linux si BSD. Se pot folosi si solutii sub Windows, dar sunt destul de nesigure si instabile.
Filtre de pachete avansate
Un firewall de acest tip incearca sa tina pasul cu conexiunile de retea si pachetele ce il traverseaza, in sensul in care un set aditional de reguli si criterii poate fi definit pe baza carora sa permita sau blocheze traficul.
Cand un firewall de tipul filtru de pachete "vede" un pachet, acel pachet este izolat, nu are trecut si nici prezent, cel putin din punctul de vedere al firewall-ului. Pachetul putem sa-l consideram fara stare (stateless).
Un firewall dinamic (statefull) tine cont de starea pachetului. El inregistreaza informatie folositoare, de exemplu, cu privire la identificarea pachetului, incadrarea lui intr-o serie, daca e rezultat al unei cereri anterioare , daca e o cerere noua etc.
De exemplu, daca un pachet transporta un flux de date video, firewall-ul poate ca anterior sa fi inregistrat informatie despre o gazda particulara care sa fi facut cererea de flux video. Daca raspunsul se intoarce pentru aceeasi gazda el poate permite acest tip de trafic pe baza unei corespondente din tabela de filtrare.
Un asemenea firewall, in starea lui originara, blocheaza tot traficul de intrare si permite tot traficul de iesire. Cand se face o cerere din interior si firewallul vede, tine minte astfel incat numai raspunsului rezultat al unei cereri autorizate ii va fi permis tranzitul.
Avantajele unui asemenea firewall peste cele deja mentionate la cel simplu ar fi:
– posibilitatea de a verifica starea unui pachet pe baza informatiei de aplicatie care il foloseste;
– posibilitatea de inregistrare detaliata a informatiei despre fiecare pachet care il traverseaza. In mod normal, parametrii pe baza carora un asemenea firewall decide starea pachetului sunt aplicatia care cere pachetul, durata conexiunii, sistemele interne si externe ce sunt implicate in aceasta conexiune etc.
Dezavantajul ar fi ca toata aceasta prelucrare dureaza si asta poate cauza intarzieri in comunicatia care traverseaza firewall-ul.
Producatori de aceste tipuri de firewall-uri sunt: Cisco (cu PIX), Sonic Systems, Lucent/Ascend, Nortel Networks sau cu UNIX… si pachete specifice acestuia (FWTK adica firewall toolkit). Se mai pot folosi si pachetele de soft comerciale oferite de CyberGuard Corporation, CheckPoint, Network Associates Inc. si altii.
Multe routere de retea au capacitatea de a executa unele servicii de firewall. Filtrele de pachete pot fi gandite ca un tip de router; din aceasta cauza este nevoie de o profunda intelegere a structurii pachetului IP.
Deoarece volumul de date analizat este foarte mic, filtrele de pachete au o latenta scazuta in cadrul retelei. Acestea nu confera controlul accesului in sistem prin parole. Utilizatorii nu se pot identifica pe ei insisi. Singura identitate pe care o are utilizatorul este adresa IP asignata catre calculatorul lor. Aceasta poate constitui o problema daca se foloseste protocolul DHCP (Dynamic Host Configuration Protocol) – asignarea dinamica a adreselor IP, pentru ca regulile sunt bazate pe adrese IP.
Filtrele de pachete sunt mai transparente utilizatorului. Utilizatorul nu trebuie sa configureze aplicatiile lor pentru a accesa Internet-ul.
Firewall-urile bazate pe servere proxy
Acestea sunt folosite cel mai adesea in controlul sau monitorizarea traficului. Unele aplicatii ale acestora ascund informatia dorita. Acestea micsoreaza cerintele largimii de banda si scad accesul urmatorului utilizator la aceeasi informatie. De asemenea ofera o indiscutabila evidenta a ceea ce a fost transferat.
Exista 2 tipuri de servere proxy: de aplicatie si de tip SOCKS.
Proxy de aplicatie
Un Firewall Proxy de aplicatii nu permite in mod normal traficul dintre retelele la care este conectat. In loc de asta, el accepta trafic de la o anumita aplicatie client din reteaua interna si apoi el creeaza o conexiune diferita de la el insusi catre reteaua externa, mediind astfel pana la server. Clientul dinauntrul retelei noastre lucreaza comunicand direct cu Proxy Firewall-ul, care, la randul lui, lucreaza cu serverul extern. Astfel, nimeni din exterior nu poate atinge nimic din interior.
De asemenea, daca nu se instaleaza si configureaza corespunzator programe proxy pentru aplicatiile de care avem nevoie, serviciul nu este folosibil. Acest fapt impiedica realizarea conexiunilor ce apartin unor aplicatii si protocoale neconfigurate.
Aceste servere pot filtra chiar cuvintele “nepotrivite” din site-urile vizitate sau pot scana virusii.
Aplicatiile serverelor proxy pot autentifica utilizatorii. Inainte ca o conexiune catre afara sa fie facuta, serverul utilizatorului sa se logheze mai intai. Pentru un utilizator de Internet acesta va face fiecare site ca si cum ar cere o autentificare.
Un exemplu clasic al fi cel de web proxy firewall. Aplicatia browser client se conecteaza fie la portul 8080 al serverului http proxy, fie pe standardizatul port 80, fie pe 1080 sau orice alt port configurat. De aici incolo, proxy firewallul va prelua cererea si o va redirecta catre serverul apelat de client. Toata aceasta operatiune este transparenta pentru client, deoarece procesul are loc automat.
Cateva aplicatii comune pentru proxy firewalluri sunt cele de HTTP (web), HTTPS/SSL (secure web), SMTP (mail), POP3 (mail), IMAP (mail), NNTP (news), Telnet (shell), FTP (file transfer), IRC(chat).
Un firewall proxy de aplicatii poate fi configurat astfel incat sa accepte orice conexiuni din reteaua interna, dupa cum poate fi configurat sa permita accesul in exterior pe baza diverselor autentificari. Acest fapt aduce un vant nou de securitate, restrictionand conexiunile spre exterior doar la cele autorizate. Daca reteaua interna este compromisa, riscul de a fi folosita ca trambulina pentru lansarea de atacuri inspre alte retele este redus considerabil.
Avantajele acestuia sunt:
un control deplin asupra conexiunilor;
se poate permite sau bloca accesul la anumite servere pe baza de adrese IP ale sursei si destinatiei;.
eliminarea serviciilor inutile din reteaua proprie prin restrictionarea cererilor inspre exterior la anumite protocoale si aplicatii. Daca un serviciu nu este pornit, el nu poate fi folosit si nici atacat.
capacitatea de a inregistra date despre toate conexiunile, cu tot cu sursa, destinatia si durata lor.
Ar putea fi mentionat si un dezavantaj:
configurarea mai greoaie; aplicatiile client pot avea nevoie de configurari aditionale.
Un exemplu pentru intelegerea acestor tipuri de firewall-uri: un utilizator acceseaza un alt computer prin telnet iar de aici face telnet undeva in afara. Cu ajutorul unei aplicatii a serverului proxy acest proces este automatizat. La conectarea prin telnet in afara se face mai intai trimiterea la proxy. Apoi serverul proxy va face conexiunea cu serverul dorit (din afara) si va intoarce informatia catre respectivul utilizator.
Proxy-urile SOCKS
Un server SOCKS seamana mai mult cu un vechi switch. Pur si simplu incruciseaza sistemul direct printr-o conexiune cu exteriorul. Multe servere de acest gen lucreaza cu conexiuni de tip TCP (Transport Control Protocol). Si aidoma filtrelor de pachete, acestea nu vor autentificarea utilizatorilor. Acestea pot totusi inregistra de unde se conecteaza fiecare utilizator in parte.
Presupunand o oarecare familiaritate cu nivelurile de protocoale TCP/IP urmatoarele pagini se doresc o prezentare a parafocurilor in general, insistand asupra Linux-ului si a modului in care sunt implementate in acest SO parafocurile cu filtrare.
Arhitectura unui firewall
Exista o multime de cai de a structura o retea pentru a proteja sistemele folosind un firewall.
Daca exista legaturi dedicate catre Internet printr-un router, acesta din urma se poate pune direct in sistemul firewall. O alta modalitate este conectarea directa printr-un hub pentru a da acces total serverelor de dupa firewall.
Arhitectura dial-up.
Se foloseste in cazul unei conexiuni dial-up, asemanatoare unei linii ISDN. In aceasta situatie se poate folosi o a 3-a placa de retea pentru obtinerea unei asa-numite zone demilitarizate “DMZ”. Acest lucru confera un control stabil asupra tuturor serviciilor de Internet si, mai ales, separa eventualii “raufacatori” de reteaua locala. Un DMZ pe o retea este o zona protejata de firewall-uri, plasata intre Internet si reteaua privata a unei intreprinderi. Functiile unui DMZ sunt multiple, printre care si acelea de a asigura un nivel superior de securitate pentru reteaua privata a firmei (prin diverse tehnici implicand proxy-uri unidirectionale, mecanisme tip NAT/PAT si/sau filtre de pachete). Insa tot DMZ-ul este locul tipic in care "traiesc" serverele de Web ale firmei (este "nisa lor ecologica").
FIG. 6 Arhitectura dial-up
Arhitectura cu router
Daca exista exista un router intre reteaua locala si Internet, acesta se poate configura, exisitand posibilitatea de a adauga reguli de filtrare; daca routerul este sub administrarea providerului de Internet, acesta se va ocupa de acest lucru.
FIG. 7 Arhitectura cu router
Firewall cu server de proxy.
Este util in cazul in care se doreste monitorizarea utilizatorilor dintr-o retea locala de dimensiuni mici. Providerii de Internet se folosesc de aceasta facilitate in scopuri publicitare.
FIG. 8 Arhitectura cu server proxy.
Dupa preferinta, se poate pune serverul proxy in reteaua locala:
In acest caz firewall-ul ar trebui sa aiba reguli de permitere a accesarii Internetului doar de catre serverul proxy direct de la provider; utilizatorii il vor putea accesa doar prin proxy.
O configuratie de conectare redundanta
FIG. 9 Arhitectura cu server proxy
Se pot creea servicii cu disponibilitate 100% folosind tehnici avansate pentru routere si servere si mai multi provideri de Internet.
Politici de securitate
Introducere
Inainte de a se trece la construirea efectiva a parafocului se va stabili politica de securitate pe care parafocul o va deservi, politica ce va trebui sa includa un plan de securizare interna si externa, si, in conformitate cu acesta, un set de proceduri.
Definitie
Politica de securitate este un set de reguli formale pe care persoanele care au acces la tehnologia si informatiile organizatiei in care sunt angajate sunt obligati sa le adopte (RFC 2196).
Politicile Deny all/Allow all
Exista doua filozofii diametral opuse de abordare a planului de securizare. Ambele alternative sunt modele viabile, adoptarea unuia sau a altuia depinzand de situatie si de necesitatile de securitate.
Prima optiune este acceea de a inchide toate servicile si de a le permite apoi doar pe cele necesare. Acest model, denumit modelul "deny all", este , in general, mult mai sigur decat celalalt model descris in paragraful urmator. Este necesar un efort mai mare pentru implementarea configuratiei "deny all" si de o foarte buna cunoastere a servicilor si a protocoalelor. Permitand doar serviciile cunoscute se poate realiza a buna analiza a serviciilor/protocoalelor si a design-ului de maxima securitate potrivit cu nivelul de securitate al retelei.
Celalalt model, modelul "allow all", este mult mai usor de implementat dar este in general mult mai nesigur decat modelul "deny all". Sunt pornite toate serviciile si sunt permise toate protocoalele in limitele retelei. (Acesta este modelul default adoptat de routere.) Pe masura ce gaurile de securitate devin vizibile acestea sunt astupate prin restrictionare.
Fiecare din aceste modele pot fi aplicate diferitelor portiuni din retea, depinzand de cerintele de functionalitate, de controlul administrativ, etc. Este recomandat insa pentru legatura cu exteriorul (ex. Internet) alinierea la o politica puternic defensiva prin adoptarea modelului "deny all"
Crearea unei politici de securitate
Principiile ce determina politica de securitate sunt simple si pot fi urmarite in exemplul urmator ce pleaca de la modelul "deny all":
1. Se definesc serviciile necesare (interne si externe).
2. Se stabilesc persoanele care acceseaza aceste servicii.
3. Se atribuie fiecarui grup de persoane accesul la anumite sevicii.
4. Pentru fiecare serviciu sunt descrise modurile de securizare ale acestuia.
5. Orice alte forme de acces sunt declarate incalcari ale regulilor de securitate.
Filtrarea de pachete sub Linux
Kernel-ul Linux-ului a inclus suportul pentru filtrarea de pachete incepand cu versiunea 1.1 .Prima generatie, bazata pe ipfw (filtrul de pachete din BSD) a fost portata de Alan Cox la sfarsitul anului 1994. Aceasta a fost dezvoltata de Jos Vos si altii pentru versiunea 2.0; programul ipfwadm controla regulile de filtrare din kernel. In 1998 ,pentru kernelul 2.2 Rusty Russell si Michael Neuling au creat programul ipchains. A patra generatie de filtre de pachete iptables a aparut in 1999 odata cu rescrierea sa pentru kernel-ul 2.4. In mare parte va fi studiat pachetul iptables.
Este necesara configurarea in kernel a infrastructurii netfilter; netfilter este portul kernel-lui in care se insereaza alte module (cum ar fi iptables). Versiunea de kernel care permite acest lucru trebuie sa fie mai mare de 2.3.15; se va raspunde "Y" la optiunea CONFIG_NETFILTER din configuratia kernelului.
De precizat ca iptables face parte din categoria firewall-urilor care pot urmari conexiunile si pot realiza filtrari pe baza acestui lucru.
Modul in care pachetele traverseaza filtrul
Initial kernelul include trei liste de reguli; aceste liste se numesc: lanturi de parafoc (firewall chains) sau, simplu, doar lanturi. Aceste trei lanturi sunt: INPUT, OUTPUT si FORWARD. De notat ca aceste lanturi au alta menire decat lanturile intalnite in kernel-urile 2.0 si 2.4. Grafic lanturile INPUT , OUTPUT si FORWARD pot fi reprezentate astfel:
FIG.10 Modul in care pachetele traverseaza filtrul
Forward, Output si Input reprezinta cele trei lanturi mentionate anterior. Cand un pachet este captat de unul din cele 3 din diagrama, lantul este examinat si se decide soarta pachetului. Daca lantul decide oprirea pachetului (DROP), pachetul este eliminat, dar daca lantul decide acceptarea lui (ACCEPT) el continua parcurgerea diagramei.
Un lant este un set de reguli. Fiecare regula decide astfel: daca header-ul pachetului are forma specificata in regula ii va decide soarta. Daca forma specificate in regula nu se potriveste cu forma header-ului atunci urmatoarea regula din lant este consultata. In final daca nu mai exista nici o regula de consultat kernelul verifica politica lantului (chain policy) (default-ul pentru pachetele care nu se potrivesc nici unei reguli din lant) si decide soarta pachetului. In sistemele bine securizate de obicei politica pentru pachetele care nu s-au potrivit nici unei reguli indica eliminarea acestora (DROP).
Pentru intelegerea celor trei lanturi de reguli predefinite in kernel este necesara descrierea succinta a modului de manevrare a pachetelor de catre kernel:
1. Cand un pachet vine (de exemplu, printr-o placa de retea Ethernet) kernel-ul examineaza pentru inceput destinatia pachetului: acest proces este denumit routare.
2. Daca pachetul este destinat masinii, pachetul coboara in diagrama intalnind lantul INPUT. Daca trece de acest lant este destinat apoi unor procesari ulterioare si orice proces ce il asteapta il poate primi.
3. Altfel daca kernel-ul nu are activata optiunea de forward-are sau nu stie sa forward-eze, pachetul este eliminat. Daca forward-area este activata, si pachetul este destinat unor alte interfete (daca exista alta interfata), atunci pachetul isi continua drumul intrand in lantul FORWARD. Daca este acceptat el este trimis mai departe.
4. In final, un program ruland pe masina Linux poate trimite pachete in retea. Aceste pachete trec prin lantul OUTPUT; daca ele sunt acceptate atunci pachetul poate fi trimis catre interfata careia ii este destinat.
Managementul unui sistem firewall
Primii pasi în tehnologia firewall au fost facuti ca o necesitate de expertii în sisteme de operare si de protectie. Setul de instrumente din domeniul public a devenit baza pe care s-au construit sistemele firewall de larg interes. Din fericire, nu este nevoie de o modificare la nivelul de utilizator si de expertiza. Multe dintre sistemele de acces si protectie (firewall) testate au oferit excelente interfete de utilizator, care permit oricarui manager de retea sa-si configureze în liniste un firewall.
Firewall for UNIX (Digital) are cea mai inteligenta si cea mai puternica interfata de management dintre produsele analizate. Dispozitivul firewall si sistemul de operare sunt gestionate cu "Netscape Navigator", pus pe un display "Sistem Windows X", atasat local, care modifica usor o configuratie sau alta. Digital a inclus toata documentatia sa on-line (activa, gata de lucru) ca hipertext, ceea ce este un ajutor considerabil.
BorderWare (Border) a lansat, de asemenea, o interfata usor de manevrat. Deoarece interfata se bazeaza pe modul de lucru ecran, o biblioteca de ecran UNIX este preferabila uneia "Windows X", având mai putine artificii la dispozitie, fiind si mai accesibila, mai usor de înteles.
Ambele produse folosesc o singura interfata pentru coordonarea sistemului de operare si a proceselor de configurare a firewall-ului, lucru de luat în seama.
O solutie similara este Firewall-1 (Check Point), care utilizeaza tot "Windows X", dar care are o interfata mai opaca. O parte din complexitatea sa se datoreaza gamei mai largi de capacitati produse de Check Point. Ca o concluzie, cu Firewall-1 poti executa anumite functii care nu sunt compatibile cu Firewall for UNIX sau cu BorderWare.
Black Hole (Milkyway) si SNG (IBM) au si ele interfete de gestiune competitive, bazate tot pe "Windows X", dar sunt produse mult mai dificil de utilizat decât altele. Sunt înzestrate cu o buna documentatie, Black Hole în format carte, iar SNG on-line.
Gauntlet, Sidewinder si Cyber Guard ofera interfete de gestiune bazate pe modul ecran, destul de simplu de manevrat. Totusi, acest trio ne cere sa patrundem în UNIX mai mult decât vrem noi, pentru configurarea command-line a fiecarui firewall sau a optiunilor sistemelor de operare. Interfata Sidewinder a fost mai instabila: "a cazut" în câteva rânduri, în faza de configurare software.
Chiar mai rau, atunci când s-a ajuns în situatia de a fi fortati sa se editeze manual un fisier de configurare – asa cerea documentatia -, un singur spatiu pus unde nu trebuia în fisier a facut dispozitivul firewall inutilizabil, fiind necesare doua ore si pentru restabilire.
Interfetele command-line ale produselor Security Router (HSC) si Firewall IRX (Livingstone) au fost si acestea inoperante, desi tipurile de operatii necesare le-au facut usor de configurat. Astfel, marja de eroare a fost semnificativ mai mare. Aceste sisteme cer mai multa analiza si întelegere a protectiei de retea, decât alte sisteme firewall.
Experientele cele mai nereusite au fost cu interfetele de management oferite de Brimstone (SOS) si de FireWall/Plus (Network-1), care au avut nevoie de sprijin ingineresc uman considerabil, înainte de "a muri" pur si simplu. FireWall/Plus a fost fascinant prin puterea sa si prin limbajul de comanda oferite, dar designul sistemului era confortabil doar pentru un expert, si aceasta dupa ceva timp de practica si testare.
În general, documentatiile au urmat îndeaproape interfetele de utilizator, putând fi caracterizate prin "complete" si "explicite". Milkyway si SOS au avut generoasa idee de a include în manual separat pentru utilizatorii finali situati intern si în afara firewall-ului. Digital si IBM au cea mai buna documentatie on-line.
CAP III
Configurarea sistemului de operare Linux ca FIREWALL
Introducere
Pentru inceput, instalarea sistemului trebuie sa fie minimala; introducerea strictului necesar prevenind unele probleme ulterioare, eliberand sistemul de task-uri inutile si facand administrarea mai usoara. Cu cat mai putin software instalat cu atat mai putine gauri de securitate, backdoor-uri si bug-uri in sistem. Dupa instalare se pot extrage serviciile care nu sunt necesare din /etc/inetd.conf, asta in cazul in care se decide ca severul inetd sa fie pornit si se va trece la recompilarea kernelului deoarece de cele mai multe ori kernel-urile cu care vin distributiile Linux sunt generice si modulare. Kernel-ul trebuie sa fie si el specific si specializat in task-urile ce ii vor fi dedicate.
Pachetul "iptables"
Ultima versiune a pachetului iptables este iptables-1.2.6a. Instalarea este intuitiva si nu comporta mai mult de 6-7 pasi:
a) bunzip2 iptables-1.2.6a.tar.bz2
b) tar xvf iptables-1.2.6a.tar
c) cd iptables-1.2.6a
d) make pending-patches KERNEL_DIR=<directorul in care se afla sursa kernelului>; se introduc apoi noi optiuni in configurarea kernelului si sunt remediate bug-urile din versiunile anterioare
e) Se recompileaza kernelul;
f) make KERNEL_DIR=<directorul in care se afle sursa kernelului>
g) make install KERNEL_DIR=<directorul in care se afle sursa kernelului>.
Noua comanda iptables, disponibila dupa instalare, va realiza interfatarea intre user si kernel. Cu ajutorul acestei comenzi se vor crea noi reguli, se vor lista sau se vor sterge regulile deja existente, se va seta politica de manevrare a pachetelor, etc ceea ce inseamna ca pentru crearea parafocului vor fi necesare o serie de comenzi iptables. De remarcat aparitia altor doua comenzi: iptables-save si iptables-restore a caror utilizare va fi descrisa in document. In acest moment de mare ajutor sunt si paginile de manual ale comenzii.
Compilarea kernel-ului
Versiunea stabila de kernel pentru care sunt prezentate optiunile de configurare a parafocului este 2.4.18. Vizualizarea optiunilor este asemanatoare cu meniul optinut in urma comenzii make menuconfig in directorul ce contine sursa kernel-ului:
Din meniul principal selectand "Networking options–>":
<*> Packet socket
[*] Packet socket:mmapped IO
<*> Netlink device emulation
[*] Network device filtering (replaces ipchains)
[*] Network packet filtering debugging
[*] Socket Filtering
<*> Unix domin sockets
[*] TCP/IP networking
[ ] IP: multicasting
[*] IP: advanced router
[*] IP: policy routing
[“] IP: use netfilter MARK value as routing key
[“] IP: fast network address translation
[ ] IP: equal cost multipath
[“] IP: use TOS value as routing key
[ ] IP: verbose route monitoring
[ ] IP: large routing tables
[ ] IP: kernel level autoconfiguration
< > IP: tunneling
< > IP: GRE tunnels over IP
[ ] IP: ARP daemon support (EXPERIMENTAL)
[ ]IP: TCP Explicitit Congestion Notification support
[“] IP: TCP syncookie support (disabled per default)
IP: Netfilter Configuration–>
< > The IPv4 protocol (EXPERIMENTAL)
< > Kernel httpd acceleration (EXPERIMENTAL)
[ ] Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)
< > 802.1Q VLAN Support(EXPERIMENTAL)
–
< > The IPX protocol
< > Appletalk protocol support
< > DECnet Support
< > 802.1d Ethernet Bridging
< > CCITT X.25 Packet Layer (EXPERIMENTAL)
< > LAPB Dta Link Driver (EXPERIMENTAL)
[ ] 802.2 LLC (EXPERIMENTAL)
[ ] Frame Diverter (EXPERIMENTAL)
< > Acorn Econet/AUN protocols (EXPERIMENTAL)
< > WAN router
[ ] Fast switching
[ ] Forwarding between high speed interfaces
QoS and/or fair queueing –>
In general au fost marcate doar optiunile absolut necesare cu 'Y'. Semnul “ a fost pus pentru a marca unele optiuni facultative legate de iptables. O singura optiune insa ar trebui sa ramana dezactivata: [ ] IP: TCP Explicit Congestion Notification support. Daca aceasta optiune este activata, masina Linux nu va putea sa comunice cu aproximativ 8% din Internet. Cand ECN este activ, unele pachete pe care masina Linux le trimite vor avea bitul ECN setat; acest bit “sperie” o serie de routere din Internet si de aceea este important ca ECN sa fie dezactivat. Este posibila si dezactivarea ECN ulterioara configurarii kernel-ului prin folosirea interfetei /proc cu sistemul:
if [ -e /proc/sys/net/ipv4/tcp_ecn]
then
echo 0 > /proc/sys/net/ipv4/tcp_ecn
fi
Meniul "Netfilter Configuration": (dupa instalarea pachetului iptables-1.2.6a)
<*> Connection tracking (required for masq/NAT)
<*> FTP protocol support
<*> IRC protocol support
<*> Userapace queueing via NETLINK (EXPERIMENTAL)
<*> IP tables support (required for filtering/masq/NAT)
<*> Limit match support
<*> Mac Address match suport
<*> netfilter MARK match support
<*> Multiple port match support
<*> TOS match support
<*> AH/ESP match support (NEW)
<*> LENGTH match support
<*> TTL match support
<*> tcpmss match support
<*> Connection state match support
<*> Unclean match support (EXPERIMENTAL)
<*> Owner match support (EXPERIMENTAL)
<*> Packet filtering
<*> REJECT target support
<*> MIRROR target support
<*> Full NAT
<*> MASQUERADE target support
<*> REDIRECT target support
[*] NAT of local connections (NEW)
<*> Basic SNMP-ALG support (EXPERIMENTAL)
<*> Packet mangling
<*> TOS target support
<*> DSCP target support (NEW)
<*> MARK target support
<*> LOG target support
<*> ULOG target support (NEW)
<*> TCPMSS target support
Este recomandabila citirea help-ului fiecarei optiuni din meniul "Netfilter Configuration". Sunt transcrise toate optiunile selectate pentru a face posibila apoi exporarea tuturor posibilitatilor pachetului netfilter.
Urmeaza recompilarea :
make dep; make clean; make bzImage; make modules; make modules_install, instalarea noului kernel si reboot-area (repornirea) sistemului.
Configurari ulterioare
Pentru a completa pregatirea sistemului in vederea implementarii parafocului mai trebuie configurate placile de retea, gestionate adresele de retea si testata reteaua. Daca masina Linux va fi folosita drept router, este necesara activarea forward-arii IP, setare ce va da kernel-ului posibitatea sa permita pachetelor sa traverseze sistemul.
echo 1> /proc/sys/net/ipv4/ip_forward
Firewall-urile avansate
Configurarea SysCTL
Kernel-ul contine o serie de variabile ce pot fi setate prin intermediul interfetei /proc (/proc/sys/net/ipv4). Modificarea unora dintre aceste variabile determina modul in care se vor lua anumite decizii de filtrare. Astfel:
a) (/proc/sys/net/ipv4/*)
-ip_forward 0 -inactiv,diferit de 0 activ. Permite forward-area intre interfete;
-ip_default_ttl (ttl=time-to-live) numar natural
-ip_conntrack_max . urmarirea conexiunii se face pentru un numar finit de conexiuni. Acest nr. are o valoare default, dependenta de dimensiunea memoriei: 64Mb – 4096 , 98Mb – 6136, 128Mb – 8192. Se poate creste aceasta limita insa trebuie retinut ca fiecare conexiune urmarita ocupa 350 bytes din memoria kernel-ului.
-tcp_syncookies – aceasta variabila poate fi setata doar daca kernel-ul a fost compilat cu optiounea CONFIG_SYSCOOKIES. Este folosita pentru prevenirea atacurilor de tip "syn flood". Aceasta facilitate este periculoasa daca este folosita pentru server-e foarte incarcate deoarece se pot confunda conexiunile legale nerealizate cu un atac ceea ce va duce la degradarea serviciilor. Alte variabile: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow (BOOLEAN).
-tcp_max_syn_backlog nr. maxim de cereri de conexiuni retinute care inca nu au primit aprobarea(acknowledgement) clientului.
-tcp_ecn -activeaza Explicit Congestion Notification
-ip_dynaddr
-icmp_echo_ignore_all;
-icmp_echo_ignore_broadcasts;
-icmp_destunreach_rate, icmp_paramprob_rate, icmp_timeexceed_rate, cmp_echoreplay_rate -limiteaza rata de trimitere a pachetelor icmp (nr. natural);
-icmp_ignore_bogus_error_responses
b) (conf/interface/*) ->
c) (conf/all/*) sunt modificate setarile tuturor interfetelor:
-log_martians -BOOLEAN. Pachetele cu adrese imposibile vor fi logate de catre kernel;
-accept_redirects -BOOLEAN. Sunt acceptate mesaje ICMP redirectate.Default TRUE (host), FALSE (router).
-forwarding -BOOLEAN Este permisa forward-area intre interfete.
-secure_redirects -BOOLEAN. Sunt acceptate mesajele ICMP redirectate doar pentru gateway-uri(in lista de gateway-uri default)
-send_redirects -BOOLEAN. Pot fi trimise mesaje redirectate. Default: TRUE
-accept_source_route – BOOLEAN . Sunt acceptate pachete cu optiunea SRR. Default TRUE (router) FALSE (host)
-rp_filter Boolean 1: se face validarea sursei (RFC1812), 0: nu se face validarea sursei.Valoarea default este 0.
Cu ajutorul aceleiasi interfete se pot lista:
-conexiunile mascaradate sau urmarite: cat /proc/net/ip_conntrack
-toate tabelele disponibile: cat /proc/net/ip_tables_names
Urmarirea conexiunilor
Reamintim faptul ca scopul unui firewall este aceea de a preveni ca traficul nedorit sa ajunga din punctul A in puncul B. Exista reguli generale care pot specifica: "daca pachetul este destinat portului 23 acesta poate trece"; exista reguli ,mai subtile, care pot preciza: "atata vreme cat pachetul are bitul FIN setat poate trece" . Astfel de reguli nu pot deosebi inceputul, continutul sau sfarsitul nici unei sesiuni TCP/UDP/ICMP; ele verifica fiecare pachet in parte fara a le distinge rolul in 'conexiune' (canal de comunicatie). Este foarte posibil ca pachetul cu flag-ul FIN setat sa apartina unuei scanari FIN iar pachetul destinat portului 23 sa fie o incercare de atacare a sesiunii telnet. Odata cu pachetul iptables a fost introdusa si posibilitatea de urmarire a conexiunilor si de a distinge scanarea de porturi si atacurile DoS de conexiunile legale prin modulul Conntrack:
IP: Netfilter Configuration
<Y> Connection tracking (required for masq/NAT)
<Y> Connection state match support
Router-ele Cisco au clauza "established" pentru a permite recunoasterea sesiunilor tcp stabilite; si pentru ipfw exista clauza "established". Ipfwadm permite recunoasterea starilor conexiunilor prin clauzele "setup/established". De fapt, in aceste cazuri nu se realizeaza o urmarire a conexiunilor ci doar sunt citite flag-urile TCP (din acest motiv nu pot fi folosite aceste clauze si pentru protocoalele UDP si ICMP). Oricine poate crea pachete cu flaguri setate care pot rece prin firewall.
Tehnologia linux a urmaririi conexiunilor (connection tracking) trateaza schimburile de pachete ca entitati logice retinandu-le inceputul, cuprinsul si incheierea; iata de ce, chiar si comunicatiile UDP si ICMP, care nu sunt bazate pe conexiuni, pot fi tratate. Conntrack poate face chiar mai mult decat recunoasterea conexiunilor; poate clasifica fiecare pachet pe care il analizeaza in una din cele patru stari ale conexiunii: NEW, INVALID, RELATED si ESTABLISHED astfel incat, in cadrul firewall-ului se pot lua acum decizii prin recunoasterea starii.
Plecand de la modelul "deny all" se va institui politica de securitate:
iptables –table filter -P $CHAIN DROP ,
unde CHAIN = "INPUT OUTPUT FORWARD", care va usura constructia regulilor bazate pe verificarea si urmarirea conexiunii.
Starea NEW: Cand se incearca o conexiune la un server extern, (care nu se afla pe aceeasi masina), un pachet, sau un set de pachete, sunt initiate de masina care solicita conexiunea. Aceste pachete sunt in starea NEW. Totusi in momentul in care este primit chiar si un singur pachet ca raspuns toate pachetele acestei conexiuni nu se mai afla in starea NEW. Astfel un pachet este considerat in starea NEW doar cand este implicat in stabilirea unei noi conexiuni si nici un trafic provenit de la server nu a fost primit.
Starea ESTABLISHED: In momentul in care s-a realizat intr-o conexiune trafic bidirectional, pachetele ulterioare apartinand conexiunii se afla in starea ESTABLISHED.
Starea RELATED: A treia stare posibila a unei conexiuni este starea RELATED. Pachetele RELATED sunt pachetele care initiaza o noua conexiune, dar aceasta noua conexiune este inrudita cu o conexiune deja realizata. Starea RELATED este folosita pentru reglarea conexiunilor realizate pe baza unui protocol multi-conexiune (cum ar fi protocolul ftp) si pentru tratarea mesajele de eroare (ICMP) legate de conexiuni existente .
Starea INVALID: Aceasta include toate pachetele care nu pot fi clasificate in nici una din clelelalte stari. De remarcat ca un pachet considerat invalid nu este automat inlaturat si este necesara specificarea deciziei.
Exemplu:
iptables –policy INPUT DROP
iptables –append INPUT –match state –state ESTABLISHED, RELATED –jump ACCEPT
Aceasta singura regula din lantul INPUT , va permite stabilirea unor conexiuni cu serverele. Astfel, in momentul in care se va incerca conectarea remote prin ssh la un server, masina va trimite pachete in scopul initierii conexiunii. Aceste pachete se vor afla in starea NEW iar firewall-ul le va permite trecerea deoarece nu sunt blocate pachetele pe lantul OUTPUT. In momentul in care se primeste un raspuns de la server aceste pachete sunt preluate de lantul INPUT. In momentul in care kernel-ul inspecteaza pachetele acesta recunoaste apartenenta lor la o conexiune deja existenta, le atribuie starea ESTABLISHED si le permite trecerea conform target-ului regulii din lant. Daca insa se incearca conectarea din exterior pe masina, pachetele initiale sunt clasificate NEW iar kernel-ul le va decide soarta conform politicii lantului (DROP): le va inlatura.
Acest tip de firewall este recomandat workstation-urilor. Se vor putea folosi programele de tip server-client : netscape, ftp, ping, etc si orice conexiune initiata de masina va putea trece prin firewall spre exterior (Internet de exemplu) insa orice conexiune solicitata din exterior va fi refuzata in afara de cazul in care aceasta conexiune este inrudita cu o conexiune deja existenta. Atata vreme cat nu este necesara asigurarea unor servicii catre exterior acest firewall este aproape perfect.
LOG si ULOG
Modulul LOG:
Target-ul LOG activeaza log-area pachetelor cu facilitatea kern si prioritatea 4 (warning) de catre daemon-ul de log al kernel-ului: klogd-ul (default). Pentru un control ulterior al log-urilor se poate studia documentatia pachetului syslog sau se pot folosi alti daemoni a caror configurare permit o mai buna selectie si cautare a log-urilor (syslog-ng).
Configurare kernel:
IP: Netfilter Configuration
<Y> LOG target support
Target-ul LOG nu opreste verificarea pachetului; pachetul logat va continua sa fie verificat de regulile din lant pana cand una din reguli i se va potrivi si va fi inlaturat . Daca se doreste logarea tuturor pachetelor inlaturate se poate crea un nou lant (LOG_DROP) care sa contina doar doua reguli, lant ce va fi specificat ca target pentru pachetele care vor fi logate si inlaturate (-j LOG_DROP):
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG
iptables -A LOG_DROP -j DROP
Optiunile acestui target sunt :
–log-level <nivel>: indica prioritatea cu care vor fi log-ate pachetele debug, info, notice, warning, warn (warning), err(error), crit, alert, emerg (panic).
–log-prefix <prefix> – adauga un prefix mesajelor logate (de pana la 29 de litere) cu ajutorul caruia se pot procesa ulterior log-urile.
–log-tcp-sequence si –log-tcp-options; logheaza optiunile din header-ul pachetului TCP
–log-ip-options; logheaza optiunile din header-ul pachetului IP
De cele mai multe ori utilizarea target-ului LOG este restrictionata cu ajutorul optiunii –match limit:
(IP: Netfilter Configuration
<Y> limit match support),
deoarece densitatea mare de pachete logate poate incarca nejustificat procesorul. Uneori este necesara doar o singura intrare in loguri pentru a descoperi un posibil atac.
Formatul log-urilor:
Exemplu de camp extras din /var/log/messages
Apr 15 11:51:24 root kernel:
IN=
OUT=eth0
SRC=211.251.142.65
DST=203.164.4.223
LEN=84
TOS=0x00
PREC=0x00
TTL=64
ID=0
DF
PROTO=ICMP
TYPE=8
CODE=0
ID=13070
SEQ=4096
Mai jos este prezentat un mesaj ipotetic generat de netfilter. Provine dintr-o inregistrare reala careia i-au fost adaugate toate flag-urile posibile IP si TCP in scop didactic. (Se poate studia structura header-elor IP, TCP si UDP in RFC-urile 791, 793 si respectiv 768).
1) Apr 15 11:51:24 root kernel
Prefix-ul adaugat de syslog. Nu este prezent cand mesajele sunt generate in consola
2) NF: D(I,Priv)
Activat cu optiunea –log-prefix <prefix>. Un prefix definit de utilizator pentru recunoasterea ulterioara a pachetelor.
3) IN=eth1
Interfata pe care a fost primit pachetul. Daca pachetul a fost generat local camplul are valoarea nesetata.
4) OUT=
Interfata prin care pachetul a fost trimis. Daca pachetul a fost primit local campul are valoarea nesetata.
5) MAC=00:80:8c:1e:12:60: 00:10:76:00:2f:c2: 08:00
Adresa MAC destinatie 00:80:8c:1e:12:60
Adresa MAC sursa 00:10:76:00:2f:c2
Tipul 08:00 (frame ethernet purtand datagrama ipv4)
6) SRC=211.251.142.65
Adresa sursa IP.
7) DST=203.164.4.223
Adresa destinatie IP;
8) LEN=60
Lungimea totala a pachetului IP in bytes
9) TOS=0x00
Tipul de seviciu: campul "Type". Tot mai des inlocuit cu campul DS si ECN.
10) PREC=0x00
Tipul de seviciul: campul "Precedence". Tot mai des inlocuit cu campul DS si ECN
11) TTL=44
Time to live
12) ID=31526
Indentificatorul unic pentru datagrama IP; daca datagrama este fragmentata toate fragmentele contin acelasi identificator
13) CE
Flag-ul "ECN Congestion EXPERIENCED"
14) DF
Flag-ul : "Don't Fragment"
15) MF
Flag-ul : "More fragments following"
16) FRAG=179
Offset-ul fragmentului in unitati de "8-bytes". In acest caz offset-ul pentru date in acest pachet este 179*8=1432 bytes.
17) OPT (072728CBA404DFCBA40253CBA4032ECBA403A
2CBA4033ECBA402C1180746EA18074C52892734A200)
Activat cu optiunea IP –log-ip-options. Acest camp de lungime variabila este rareori folosit. Unele optiuni IP (de exemplu source routing) sunt deseori dezactivate de administratorii de sistem. Chiar optiuni inofensive ca "Record Route" pot fi dezactivate daca protocolul de transport este ICMP.
18) PROTO=TCP
Numele sau numarul protocolului. Netfilter foloseste nume pentru TCP, UDP, ICMP, AH si ESP. Alte protocoale sunt identificate dupa numere. Lista protocoalelor si a numerelor asignate lor se gaseste in fisierul /etc/protocols.
19) SPT=4515
Port-ul sursa (UDP sau TCP). O lista cu numerele porturilor si cu serviciile standard deservite pe aceste porturi se gaseste in fisierul /etc/services.
20) DPT=111
Port-ul destinatie (UDP sau TCP).
21) SEQ=1168094040
Activat cu optiunea –log-tcp-sequence. Retine numarul secventei TCP. Alegand cu grija acest numar, poate fi implementata o secventa criptografica "cookie" care satisface cerintele protocolului TCP. Aceste "SYN-cookies" pot ajuta la evitarea unor atacuri DoS de tip syn-flood.
22) ACK=0
Nr. secventei TCP pentru celalalt capat al conexiunii.
23) WINDOW=32120
Dimensiunea ferestrei primite TCP.
24) RES=0x03
Biti rezervati. Flag-urile ECN "CWR" si "ECNE" vor apare in setate in ultimii biti ai acestui camp.
25) URG
Flag-ul Urgent.
26) ACK
Flag-ul Acknowledgement.
27) PSH
Flag-ul Push.
28) RST
Flag-ul RST (reset).
29) SYN
Flag-ul Syn , folosit la stabilirea conexiunilor TCP
30) FIN
Flag-ul Fin , folosit la intreruperea conexiunilor TCP
31) OPT (020405B40402080A05E3F3C40000000001030300)
Activat cu optiunea TCP –log-tcp-options. Acest camp de lungime variabila este foarte folositor. Optiunile importante sunt: Window Scaling, Selective Acknowledgement si EXplicit Congestion Notification
Din pacate regula din lant care a gasit pachetul nu este inregistrata din motive arhitecturale in mesajele de log. Se poate insa apela la trasatura –log-prefix pentru a marca pachetele. Modulul ULOG remediaza aceasta problema.
Modulul ULOG:
Acest patch, introdus de Harald Welte adauga un nou target care permite un mecanism de logare a pachetelor mult mai avansat decat target-ul LOG. ULOG/ulogd foloseste un concept diferit. Pachetele sunt copiate de un daemon de logging special, care poate face o logare in detaliu catre diferite tinte (fisiere, baze de date-Mysql…). ULOG include o librarie usor de folosit (libipulog) pentru scrierea proceselor userspace ce primesc pachetele; ULOG suporta plugins-uri pentru adaugarea unor interpretoare de pachete , a unor diferite formate si a unor noi protocoale. Cand acesta tinta este specificata pentru un pachet, kernel-ul Linux va trimite acest pachet printr-un socket netlink. Este necesara includerea in kernel a suportului ethertap si netlink:
Code maturity level options
[Y] Prompt for development and/or incomplete code/drivers
Networking options
[Y] Kernel/User netlink socket
<Y> Netlink device emulation
Network device support
<Y> Universal TUN/TAP device driver support
<Y> Ethertap network tap
IP: Netfilter Configuration
<Y> ULOG target support
<Y> Userspace queueing via NETLINK (EXPERIMENTAL) – CONFIG_IP_NF_QUEUE=Y
Unul sau mai multe procese userspace pot subscrie la diferite grupuri multicast pentru a primi pachetul.
Optiuni ULOG:
–ulog-nlgroup <nlgrup>
Specifica grupul netlink (1-32) catre care pachetul este trimis. Valoarea prestabilita (default) este 1.
–ulog-prefix <prefix>
Este adaugat un prefix mesajelor log-ate de pana la 32 de caractere necesar pentru selectia mesajelor in log-uri.
–ulog-cprange <dimensiune>
Nr. de biti copiati in userspace. Valoarea 0 indica copierea intregului pachet, indiferent de dimensiunea sa. Valoare prestabilita 0.
–ulog-qthreshold <dimensiune>
Nr. de pachete adunate in coada kernel-ului. Setand aceasta valoare la n , sunt acumulate n pachete in kernel inainte ca acestea sa fie trimise toate intr-un mesaj catre userspace. Valoarea prestabilita este 1.
Utilizarea comenzii ipchains
Exista citeva tipuri de operatii care se pot face cu ipchains.
Initial exista trei built-in chain-uri: INPUT, OUTPUT si FORWARD – care nu pot fi sterse. Primele operatii sunt cele prin care se aplica chainurilor in intregime:
– crearea unui chain nou (-N)
– stergerea unui chain (-X)
– schimbarea politicii (policy) unui chain buit-in (-P)
– listarea regulilor dintr-un chain (-L)
– stergerea regulilor dintr-un chain (-Z)
Exista de asemenea comenzi prin care manipulam regulile dintr-un chain:
– adaugarea unei noi reguli intr-un chain (-A)
– inserarea unei noi reguli intr-un chain (-I)
– stergerea unei reguli dintr-un chain (-D)
Situatia firewall-ului la initializarea sistemului
Inainte de a fi aplicata orice regula cu iptables, chain-urile built-in (INPUT, OUTPUT si FORWARD) nu contin nici o regula, chain-urile INPUT si OUTPUT au policy-ul ACCEPT, iar FORWARD policy-ul DENY (ultima optiune poate fi schimbata prin modificarea forward=1 in modulul iptables)
Operatii asupra unei reguli
Aceasta reprezinta partea cea mai importanta a operatiilor de filtrare de pachete; cel mai des va fi utilizata optiunea de adaugare (-A) si stergere (-D). Celelalte (-I pentru inserare si -R pentru inlocuire) sunt simple extensii ale optiunilor primare.
Fiecare regula contine un set de conditii pe care un pachet trebuie sa le indeplineasca si ce se intimpla in cazul acestea sunt indeplinite. Pentru exemplu, vom lua cazul in care se doreste sa se arunce (DROP) toate pachetele ICMP care vin de la adresa de IP 127.0.0.1. In acest caz, datele problemei sunt urmatoarele: protocolul -ICMP, adresa sursa-127.0.0.1, tinta (target-ul) DROP.
In exemplul dat 127.0.0.1 este interfata loopback, existenta chiar si in cazul in care nu exista reteaua. Comanda 'ping' genereaza acest tip de pachete (ping trimite un pachet ICMP tip 8-echo request- la care interfetele care primesc acesta cerere raspund cu un pachet ICMP tip 0-echo reply). Vom folosi pentru testare acest exemplu.
#ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms
– 127.0.0.1 ping statistics –
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms
# iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
– 127.0.0.1 ping statistics –
1 packets transmitted, 0 packets received, 100% packet loss
Dupa cum se observa ping-ul are succes (optiunea '-c 1' spune ping-ului sa trimita un singur pachet)
Se introduce (-A) in chainul INPUT; aceasta este o regula care va specifica sa arunce (“-j DROP”) pachetele cu sursa 127.0.0.1 (“-s 127.0.0.1”), protocol ICMP (“-p icmp”):
#iptables -A input -p icmp -s 127.0.0.1 -j DROP
Se testeaza apoi cu ping pentru a doua ora pentru a verifica regula proaspat introdusa.
Stergerea regulei se poate face in doua moduri. Primul mod, deoarece stim ca este singura regula din chain-ul INPUT, este de a sterge utilizind numerotarea, cum ar fi:
#iptables -D INPUT 1
A doua metoda este de a scrie aceeasi comanda prin care s-a introdus regula, inlocuind -A cu -D. Aceasta metoda este folositoare in momentul in care exista un numar mare de reguli intr-un chain si numerotarea lor este dificila.
#iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
Sintaxa pentru a sterge o regula prin aceasta metoda trebuie sa fie exacta cu cea prin care s-a introdus, singura diferenta fiind inlocuirea -A (sau -I sau -R) cu -D. Daca exista mai multe reguli identice in acelasi chain, numai prima va fi stearsa.
Specificatii de filtrare
In paragraful trecut s-a vazut cum se pot utiliza optiunile -p pentru a specifica protocolul si -s pentru a indica adresa sursa, dar exista si alte optiuni de filtrare care vor fi descrise in randurile urmatoare
Specificarea adreselor de IP sursa si destinatie.
Sursa (“-s”, “–source” sau “–src”) si destinatia (“-d”, “–destination” sau “–dst”) pot fi precizate in trei moduri :
1. specificarea numelui in intregime, cum ar fi “localhost” sau “www.linux.org”.
2. scrierea adresei de IP, ex : 127.0.0.1
3. specificarea unui grup de adrese IP, de genul: “199.95.207.0/24” sau “199.95.207.0/255.255.255.0”. Cifrele aflate dupa semnul “/” indica masca (care parte a adresei de IP este semnificativa). “/32” sau “255.255.255.255” sunt default. Toata clasa de adrese poate fi tradusa prin “/0”, de ex :
#iptables -A INPUT -s 0/0 -j DENY
Acest caz este rar intilnit (intr-un chain) si regulile de tipul asta pot fi introduse fara specificarea sursei.
Inversarea.
Multe optiuni, incluzind si “-s” si “-d” pot avea argumente precedate de semnul “!“ (not). De exemplu, “-s ! localhost” inseamna orice pachet care nu are sursa localhost.
Protocolul.
Se foloseste optiunea “-p” pentru precizarea protocolului. Valorile luate in considerare pot fi numerice (in cazul in care se cunoaste numarul protocolului din stiva de protocoale IP) sau numele: “TCP”, “UDP”, ICMP”. Denumirile in acest caz pot fi scrise cu litere mici sau mari, nu conteaza, “tcp” fiind sinonim cu “TCP”. Numele protocolului poate avea in fata “!”, pentru a inversa valoarea, cum ar fi “-p ! TCP”.
Specificarea interfetei.
Optiunile “-i” (sau “–in-interface”) si “-o” (sau “–out-interface”) primesc ca valori nume de interfete. O interfata reprezinta placa fizica prin care pachetul intra (“-i”) sau iese (“-o”). Se foloseste comanda ifconfig pentru listarea interfetelor active pe calculator. Pachetele care traverseaza chainul INPUT nu au o interfata de iesire, de aceea orice regula care include optiunea “-o” in acest chain nu va functiona niciodata. Similar, pachetele care traverseaza chainul OUTPUT nu au o interfata de iesire, orice regula care include “-i” fiind inutila. Doar pachetele care traverseaza chain-ul FORWARD pot avea si ambele interfete, de intrare si de iesire.
Este corecta specificarea unor interfete care la momentul introducerii unei reguli, nu exista; Regula nu va filtra pachete pina in momentul in care interfata devine activa. Aceste reguli se intilnesc des in cazurile utilizarii legaturilor de dial-up PPP. In mod special, utilizarea unei reguli in care numele interfetei se termina cu semnul “+” precizeaza toate interfetele (chiar daca exista sau nu) care incep cu acest nume. De exemplu, vom folosi optiunea “-i ppp+” daca dorim sa includem toate interfetele PPP intr-o singura regula. Utilizara lui not ( “!”) este valabila si pentru optiunea “-i”.
Specificarea fragmentelor.
Cateodata un pachet este prea mare pentru a fi adus in intregime. In astfel de cazuri, pachetul este impartit in fragmente, si transmis ca o suma de pachete. La capatul transmisiei, fragmentele sunt reasamblate si pachetul este refacut. Daca se face connection tracking sau NAT, atunci toate fragmentele vorfi reasamblate inainte de a ajunge sa fie aplicate regulile de filtrare. Altfel, se poate insera modulul “ip_defrag.o” care va indeplini aceleasi sarcini (Nota: acest lucru este valabil numai in cazul existentei unei conexiuni dintre doua retele). Este foarte importanta intelegerea modului cum sunt filtrate fragmentele de catre regulile dintr-un chain. Primul fragment este tratat la fel ca un pachet normal. Al doilea si urmatoarele sunt tratate in mod diferit. O regula “-p TCP -sport www” (portul sursa www) nu va indeplini criteriile nici unui fragment (in afara de primul). Acelasi efect intilnim si in cazul revers, al regulii “-p TCP -sport ! www”. Pentru astfel de situatii se pot utiliza reguli specifice pentru acest tip de fragmente, utilizand optiunea “-f” (sau “-fragment”). Se accepta si utilizarea lui not pentru regulile care nu se aplica fragmentelor 2 si urmatoare, precedand “-f” cu “!”.
De obicei, se considera ca a lasa libera trecerea celui de-al doilea fragment si a urmatoarelor nu afecteaza securitatea sistemului, din moment ce filtrarea va afecta primul fragment si in felul asta se previne reasamblarea fragmentelor pe calculatorul tinta. Oricum, se cunosc cazuri in care serverele au fost sparte numai prin trimiterea de fragmente din exterior. Nota: pachetele malformate (pachete TCP, UDP si ICMP prea scurte pentru ca firewall-ul sa poata citi portul sau codul si tipul ICMP) sunt aruncate imediat ce sunt descoperite.
Prezentam un exemplu de regula care arunca orice fragment care provine de la adresa 192.168.1.1:
# iptables -A OUTPUT -f -d 192.168.1.1 -j DROP
Operatii asupra unui intreg chain
O facilitate foarte utilizata a iptables-ului este posibilitatea de a grupa regulile intr-un chain-uri. Se pot crea chain-uri noi si se pot denumi dupa preferinta., fiind recomandata utilizarea literelor mici (maxim 16) pentru a fi deosebite cu usurinta de chain-urile built-in.
Operatii intalnite:
a) crearea unui chain nou: se foloseste optiunea -N
#iptables -N test
Acum putem adauga reguli in chain-ul test.
b) stergerea unui chain: se foloseste optiunea “-X” sau “–delete-chain”.
# iptables -X test
Exista citeva restrictii la stergere unui chain: chain-ul respectiv trebuie sa fie gol (sa nu contina nici o regula) si nu trebuie sa fie utilizat ca tinta intr-o alta regula. Chain-urile built-in nu pot fi sterse. Daca nu este specificat dupa “-X” nici un chain, atunci, in limita posibilului, toate chain-urile create de utilizator vor fi sterse.
c) golirea chain-urilor: se foloseste optiunea “-F” sau “—flush”
#iptables -F FORWARD
Daca nu se precizeaza un chain, atunci toate chain-urile vor fi golite.
d) listarea unui chain. Listarea tututor regulilor intr-un chain se face utilizand optiunea “-L”; “Refcnt” listat pentru fiecare chain creat de utilizator reprezinta numarul de reguli care au chain-ul respectiv ca tinta. Aceast numar trebuie sa fie 0 inainte de a sterge chain-ul. Daca optiunea “-L” este utilizata fara precizarea vreunui chain, atunci vor fi listate toate regulile din toate chain-urile.
Exista 3 optiuni care pot insoti “-L”:
“-n” – listarea numerica (nu traduce adresele de IP in nume), optiune utilizata in cazurile in care translatarea IP-urilor in nume dureaza prea mult, si acest timp de asteptare incomodeaza.
“-v” – prezentare detaliata a regulilor, cum ar fi contoarele de pachete si bytes pentru fiecare regula, compararea TOS si interfetele. Aceste valori sunt omise in cazul in care nu este folosit “-v”.
“-x” – expandare numerica. Printarea numerelor se face complet, indiferent cit de mari sunt. Daca aceasta optiune nu este utilizata, valorile prezentate de contoare sunt afisate cu sufixe “K”, “M” sau “G”, reprezentind 1.000, 1.000.000 sau 1.000.000.000.
e) resetarea contoarelor: se utilizeaza optiunea “-Z” sau “—zero”. Problema exista in momentul in care se doreste cunoasterea valorilor contoarelor imediat inainte de resetare, asta deoarece in timpul dintre cele doua comenzi (“iptables –L” si “iptables –Z”) pot exista pachete care traverseaza filtrul. In aceste cazuri, se folosesc “-L” si “-Z” impreuna, pentru a reseta contoarele in timp ce sunt citite.
Setarea politicii de chain
In cazul in care pachetul parcurge toate regulile dintr-un chain si nici una ditre aceste nu il afecteaza (nu ii stabileste o tinta), atunci soarta pachetului va fi determinata de politica chain-ului respectiv.
Doar chain-urile built-in (INPUT, OUTPUT, FORWARD) au politici, deoarece daca pachetul traverseaza in intregime un chain creat de utilizator atunci el se intoarce la chain-ul anterior.
Politica unui chain poate fi ACCEPT sau DROP.
Extensii ale comenzii iptables. Teste noi
Iptables este extensibil, adica si kernelul si iptables pot fi completate cu noi module. Unele extensii sunt standard, altele sunt doar de forma.
Extensiile pentru kernel se gasesc in subdirectorul pentru modulele de kernel, cum ar fi /lib/modules/2.4.2/net. Extensiile pentru iptables sunt librariile aflate in mod normal in /usr/local/lib/iptables, iar in alte distributii se gasesc in /lib/iptables sau /usr/lib/iptables.
Extensiile sunt de doua tipuri: noi tinte (target-uri) si teste noi; mai jos vom discuta despre cele de tipul noi tinte. Citeva protocoale ofera automat noi teste: in mod curent, acestea sunt TCP, UDP si ICMP. Pentru acestea se specifica noile teste in linia de comanda, dupa optiunea “-p”, extensia fiind incarcata in acest fel. Pentru noi teste explicite, se utilizeaza optiunea “-m” pentru a incarca extensia, dupa care optiunile extinse vor fi disponibile. Pentru a obtine help pentru o extensie, se foloseste optiunea care incarca extensia (“-p” sau “-m”) urmata de “-h” sau “–help”.
Extensii TCP
Acestea sunt incarcate automat daca “-protocol tcp” este specificat. Urmatoarele optiuni sunt valabile:
a) –tcp-flags
Aceasta optiune poate fi urmata optional de semnul “!”, apoi de doua siruri de flag-uri; permite filtrarea pachetelor TCP dupa flag-ul pe care il au. Primul sir de flaguri reprezinta masca (“mask”): o lista de flag-uri care se doresc a fi examinate. Al doilea sir de flag-uri indica care flag din primul sir trebuie setat.
De exemplu,
# iptables -A INPUT –protocol tcp –tcp-flags ALL SYN,ACK -j DENY
Aceasta regula indica faptul ca toate flag-urile ar trebui sa fie examinate (“ALL” este sinonim cu “SYN, ACK, FIN, RST, URG, PSH”), dar doar SYN si ACK trebuiesc setate. Daca dorim ca nici un flag sa nu fie examinat, atunci folosim argumentul “NONE”.
b) –syn
Este prescurtarea de la “–tcp-flags SYN,RST,ACK SYN”. Poate fi urmat optional de semnul “!”.
c) –source-port
Optional poate fi urmat de semnul “!”, apoi de un singur port TCP sau de un domeniu de porturi. Porturile pot fi reprezentate prin nume, asa cum sunt listate in fisierul /etc/services, sau numeric. Domeniile sunt reprezentate prin doua porturi separate prin semnul “-”, sau (pentru a specifica mai mare sau egal cu un port anume) un port urmat de semnul “-”, sau (pentru a specifica mai mic sau egal cu un port anume) un port precedat de semnul “-”.
d) –sport
Este sinonim cu “–source-port”
e) –destination-port si –dport
Aceleasi optiuni ca la “–source-port”, doar ca filtrarea se aplica pentru porturile destinatie.
f) –tcp-option
Optiunea poate fi urmata optional de semnul “ !” si un numar. Regula verifica pachetele cu optiunea TCP egala cu acest numar. Un pachet care nu are header-ul TCP complet este aruncat automat daca exista o regula care ii examineaza optiunile TCP.
Extensiile UDP
Aceste extensii sunt incarcate automat daca in regula este specificat –protocol udp, iar optiunile –source-port, –sport,
–destination-port, –dport pot fi utilizate la fel ca la protocolul TCP.
Extensiile ICMP
Utilizam –protocol-icmp pentru a filtra pachete de acest tip. Exista o singura optiune pentru acest protocol: –icmp-type. Optiunea poate fi umata optional de semnul “!”, apoi ori de un nume de tip icmp (ex. host-unreachable), ori de un numar (ex. “3”), ori de un numar si cod separate de “/” (ex: “3/3”). O lista cu toate numele de tipuri icmp este obtinuta folosind -p icmp –help.
Diferente intre iptables si ipchains
Prima diferenta majora intre cele doua este aceea ca denumirile chain-urilor bult-in sunt scrise cu litere MARI, deoarece chain-urile INPUT si OUTPUT sunt traversate numai de pachete generate de sistem sau destinate local sistemului
Optiunea “-i” semnifica interfata sursa si poate fi utilizata numai in chain-urile INPUT si FORWARD. Regulile din FORWARD sau OUTPUT care utilizeaza “-i” se schimba in “-o”.
Porturile TCP si UDP trebuiesc precizate cu optiunile “–sport”, “–dport” (sau “–source-port”, “–destination-port”) si pot fi folosite intr-o regula numai dupa ce a fost precizat “-p tcp” sau “-p udp” pentru a incarca extensiile TCP si UDP respective.
Flag-ul TCP -y este acum –syn si poate fi folosit numa dupa ce in regula a fost activata optiunea “-p tcp”.
Tinta DENY este DROP la iptables; pot fi resetati contorii de pachete in timp ce sunt listati
Tintele REJECT si LOG sunt la iptables module extinse, asta insemnand ca ele se incarca ca module kernel separate
Denumirile chain-urilor pot contine pana la 16 caractere la iptables
CAP IV Scripturi de firewall pentru distributiile Linux
Script RC care foloseste GFCC
#!/bin/bash
#
# descriere: script firewall pentru kernel-urile 2.2.x
# Scriptul este scris pentru Linux Redhat 6.1 sau distributiile
# mai noi.
#
#
# INSTALARE:
# 1. se scrie acest fisier in /etc/rc.d/init.d ca root, si i se # da un nume #sugestiv
# se face cu drepturi depline de root "chown root.root
# (nume_fisier)"
# se face executabil –> "chmod 755 (nume_fisier)"
#
# 2. se foloseste GFCC pentru crearea regulilor in firewall care # se vor exporta intr-un fisier numit
# /etc/gfcc/rules/firewall.rule.sh.
#
# 3. se aduce firewall-ul in structura de initializare RH –>
# "chkconfig –add (nume_fisier)"
################################################
# Libraria functiilor sursa.
. /etc/rc.d/init.d/functions
# Configuratia retelei sursa.
. /etc/sysconfig/network
# Se verifica daca reteaua este functionabila.
[ ${NETWORKING} = "no" ] && exit 0
case "$1" in
start)
# Furnizarea accessului
action "Starting firewall: " /bin/true
/etc/gfcc/rules/firewall.rule.sh
echo
;;
stop)
action "Stoping firewall: " /bin/true
echo 0 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
echo
;;
restart)
action "Restarting firewall: " /bin/true
$0 stop
$0 start
echo
;;
status)
# Afisarea setarilor
/sbin/ipchains -L
;;
test)
action "Test Mode firewall: " /bin/true
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
# Se activeaza forwardarea pachetului IP, cu regulile de rigoare
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -A input -j ACCEPT
/sbin/ipchains -A output -j ACCEPT
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -i $PUBLIC -j MASQ
echo
;;
*)
echo "Usage: $0 {start|stop|restart|status|test}"
exit 1
esac
Script RC fara GFCC
#!/bin/bash
#
# chkconfig: 2345 09 99
# descriere: script firewall pentru kernel-urile 2.2.x
#
# NOTE:
#
# Scriptul este scris pentru Linux Redhat 6.0 sau mai nou.
#
# Acest script firewall este functionabil pentru majoritatea
# arhitecturilor dial-up sau a acelor cu router
#
#
# INSTALARE:
# 1. Acest fisier este gandit pentru distributia Redhat a
# Linux-ului; este valabil si pentru alte distributii
#
# 2. se scrie acest fisier in /etc/rc.d/init.d ca root, si i
# se da un nume sugestiv; se face cu drepturi depline de root
# "chown root.root (nume_fisier)"
# se face executabil –> "chmod 755 (nume_fisier)"
#
# 3. se fac setarile necesare pentru interfata externa si
# interfata interna a retelei precum si pentru serverul DNS
# se verifica daca lui "eth0" i s-a asignat adresa placii de
# retea interne
# se testeaza –> "/etc/rc.d/init.d/<nume_fisier> start"
# se listeaza regulile din ipchains –> "ipchains -L -n"
#
# 4. se adauga firewall-ul la structura de initializare a
# sistemului "chkconfig –add <filename>"
#
#################################################################
# Se completeaza valorile neceasre pentru reteaua locala
PRIVATENET=xxx.xxx.xxx.xxx/xx
PUBLIC=ppp0
PRIVATE=eth0
# se completeaza serverele DNS
DNS1=xxx.xxx.xxx.xxx
DNS2=xxx.xxx.xxx.xxx
#################################################################
# setarea valorilor generice
ANY=0.0.0.0/0
ALLONES=255.255.255.255
# Libraria functiilor sursa.
. /etc/rc.d/init.d/functions
# Configuratia retelei sursa.
. /etc/sysconfig/network
# Se verifica daca reteaua este functionabila.
[ ${NETWORKING} = "no" ] && exit 0
case "$1" in
start)
# Furnizarea accesului
action "Starting firewall: " /bin/true
##
##
# Activarea tuturor listelor
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
# Activarea tuturor interfetelor
/sbin/ipchains -I input 1 -j DENY
# setarea politicii de deny (default este ACCEPT)
/sbin/ipchains -P input DENY
/sbin/ipchains -P output ACCEPT
/sbin/ipchains -P forward ACCEPT
# Activarea forward-arii
echo 1 > /proc/sys/net/ipv4/ip_forward
##
## Instalarea Modulelor
##
# Se activeaza modulul ftp.
if ! ( /sbin/lsmod | /bin/grep masq_ftp > /dev/null );
then /sbin/insmod ip_masq_ftp
fi
##
## Cateva setari de siguranta
##
# se activeaza optiunea Verificarea Adresei Sursa pentru a obtine
# o protectie mai eficienta pe interfetele curente si viitoare
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ];
then
for f in /proc/sys/net/ipv4/conf/*/rp_filter;
do
echo 1 > $f
done
else
echo
echo "PROBLEMS SETTING UP IP SPOOFING PROTECTION. BE WORRIED."
echo
fi
# Se interzic adresele „broadcast” ininterfetele ramase
/sbin/ipchains -A input -d 0.0.0.0 -j DENY
/sbin/ipchains -A input -d 255.255.255.255 -j DENY
# Alte negari
/sbin/ipchains -A input -p udp -d $ANY 137 -j DENY
# Setari pentru NetBIOS
/sbin/ipchains -A input -p tcp -d $ANY 137 -j DENY # ""
/sbin/ipchains -A input -p udp -d $ANY 138 -j DENY # ""
/sbin/ipchains -A input -p tcp -d $ANY 138 -j DENY # ""
/sbin/ipchains -A input -p udp -d $ANY 67 -j DENY # bootp
/sbin/ipchains -A input -p udp -d $ANY 68 -j DENY # ""
/sbin/ipchains -A input -s 224.0.0.0/8 -j DENY
##
## Permiterea iesirii retelei private afara
# permiterea tuturor pachetelor pe interfata loopback
/sbin/ipchains -A input -i lo -j ACCEPT
# permiterea tuturor pachetelor provenite de la interfata interna # sigura
/sbin/ipchains -A input -i $PRIVATE -s $PRIVATENET -d $ANY -j ACCEPT
/sbin/ipchains -A input -i $PRIVATE -d $ALLONES -j ACCEPT
##
## permiterea tuturor serviciilor provenite din afara in firewall
##
# permiterea pachetelor ICMP
/sbin/ipchains -A input -p icmp -j ACCEPT
# permiterea pachetelor TCP
/sbin/ipchains -A input -p tcp ! -y -j ACCEPT
# permiterea tuturor interfetelor catre DNS
/sbin/ipchains -A input -p udp -s $DNS1 domain -d $ANY 1023: -j ACCEPT
/sbin/ipchains -A input -p udp -s $DNS2 domain -d $ANY 1023: -j ACCEPT
# sau se configureaza un server DNS caching DNS folosindu-se
# comenzile:
# /sbin/ipchains -A input -p udp -s $DNS1 domain -d $ANY domain -# j ACCEPT
# /sbin/ipchains -A input -p udp -s $DNS2 domain -d $ANY domain -# j ACCEPT
# permiterea accesului in sistem prin ssh (secure shell)
/sbin/ipchains -A input -p tcp -d $ANY 22 -j ACCEPT
# permiterea accesului in sistem prin telnet
/sbin/ipchains -A input -p tcp -d $ANY telnet -j ACCEPT
# permiterea protocolului NTP (network time protocol) spre router
# /sbin/ipchains -A input -p udp -d $ANY ntp -j ACCEPT
# permiterea protocolului SMTP (doar pentru server, nu si pentru # e-mail)
/sbin/ipchains -A input -p tcp -d $ANY smtp -j ACCEPT
# permiterea protocolului POP3 (pentru e-mail)
/sbin/ipchains -A input -p tcp -d $ANY 110 -j ACCEPT
# permiterea accesului cu autentificare pentru trimiterea de
# e-mail-uri sau pentru transferul de fisiere prin ftp
/sbin/ipchains -A input -p tcp -d $ANY auth -j ACCEPT
# permiterea protocolului HTTP in (doar in cazul in care este
# pornit un server de web
/sbin/ipchains -A input -p tcp -d $ANY http -j ACCEPT
# permiterea transferului de fisiere prin FTP
/sbin/ipchains -A input -p tcp -d $ANY ftp -j ACCEPT
##
## Cateva setari pentru mascaradare
##
# forward-area pachetelor mascaradate provenite din reteaua
# interna
/sbin/ipchains -A forward -s $PRIVATENET -d $ANY -j MASQ
##
## interzicerea oricaror alte servicii si postarea logurilor in
# /var/log/messages
/sbin/ipchains -A input -l -j DENY
# mutarea „dopului”
/sbin/ipchains -D input 1
;;
stop)
action "Stoping firewall: " /bin/true
echo 0 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
echo
;;
restart)
action "Restarting firewall: " /bin/true
$0 stop
$0 start
echo
;;
status)
# Afisarea optiunilor
/sbin/ipchains -L
;;
test)
action "WARNING Test Firewall: " /bin/true
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -A input -j ACCEPT
/sbin/ipchains -A output -j ACCEPT
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -i $PUBLIC -j MASQ
echo
;;
*)
echo "Usage: $0 {start|stop|restart|status|test}"
exit 1
esac
Script complex (cu setari de proxy, NAT, etc…)
#!/bin/bash
#################################################################
# Variabile de amplasare a programului
# Amplasarea programelor
IFCONFIG="`whereis -b ifconfig | cut -d \" \" -f2 `"
IPTABLES="`whereis -b iptables | cut -d \" \" -f2 `"
# Amplasarea firewall-ului
FIREWALL_DIR="/etc/firewall"
FIREWALL_DB_DIR="$FIREWALL_DIR/db"
FIREWALL_LAN_DB_DIR="$FIREWALL_DIR/db/lan"
FIREWALL_TMP_DIR="$FIREWALL_DIR/tmp"
FIREWALL_DOC_DIR="$FIREWALL_DIR/doc"
FIREWALL_REPORT_DIR="$FIREWALL_DIR/report"
FIREWALL_REPORT_DATA_DIR="$FIREWALL_DIR/report/data"
#################################################################
# Activarea optiunii de inregistrarea a logurilor firewall-ului
# Aceasta portiune creaza un fisier numit firewall.log in
# directorul /var/log de fiecare data cand firewall-ul este
# pornit. Pentru activarea acestei optiuni se va pune 1; pentru # dezactivare, 0
FIREWALL_LOG=1
# Pentru salvare se pune 1 si 0 daca nu se doreste acest lucru
FIREWALL_SAVE_DATA=1
# Amplasarea directorului in care se vor salva logurile
LOG_DIR="/var/log"
# Fisierul in care pot fi gasite logurile
FIREWALL_LOG_FILE="$LOG_DIR/firewall.log"
DATE="`date`"
MSG1="Program Started at $DATE"
MSG2="Start Reading Firewall Configuration…"
echo "$MSG1"
echo "$BLANK_LINE"
echo "$MSG2"
if ! [ -e $FIREWALL_TMP_DIR/conf.init.d ]
then
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
echo "$BLANK_LINE" >> $FIREWALL_LOG_FILE
echo "$MSG2" >> $FIREWALL_LOG_FILE
fi
fi
#################################################################
# Lista de variabile
MSG1=" Setting up Variables…"
echo "$MSG1"
if ! [ -e $FIREWALL_TMP_DIR/conf.init.d ]
then
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
fi
#################################################################
# Activarea optiunii de verificare a integritatii; pentru
# activare se da valoarea 1
SANITY_CHECK=1
#################################################################
# Optiuni de raport
# Amplasarea fisierului de loguri unde vor fi puse mesajele
# kernelului
KERN_LOG_DIR="/var/log"
KERN_MESSAGES="$KERN_LOG_DIR/messages"
# Nivelul la care se va face logarea
LOG_LEVEL="7"
# Amplasarea rapoartelor
REPORT_FILE="/etc/firewall/report/firewall_report-"
LINE1="########################################################"
LINE2="–––––––––––––––––––"
BLANK_LINE="###################################################”
# Variabile ale LAN-ului
# Activarea retelei locale se va face dand valoarea 1; pentru
# interfetele cu # o singura conexiune se va da valoarea 0
LAN_STATUS=1
# Blocarea/activarea retelei locale (0 pentru dezactivare-
# default)
LAN_BLOCK=0
# Activarea LAN-urilor multiple (0 pentru dezactivare-default)
LAN_MULTIPLE=0
if [ $LAN_STATUS == 1 ]
then
# de exemplu LAN_IFACE="eth1"
# se schimba de asemenea si interfata LAN-ului
LAN_IFACE="eth1"
LAN_IP="`$IFCONFIG $LAN_IFACE | grep inet | cut -d : -f 2 | cut -d \ -f 1`"
LAN_MASK="`$IFCONFIG $LAN_IFACE | grep Mask | cut -d : -f 4`"
LAN_BCAST="`$IFCONFIG $LAN_IFACE | grep Bcast | cut -d : -f 3 | cut -d \ -f 1`"
LAN_NET=$LAN_IP/$LAN_MASK
MSG1=" LAN Interface Configuration"
MSG2=" Interface: $LAN_IFACE"
MSG3=" IP Address: $LAN_IP"
MSG4=" Subnet Mask: $LAN_MASK"
MSG5=" Broadcast: $LAN_BCAST"
MSG6=" Network: $LAN_NET"
echo "$MSG1"
echo "$MSG2"
echo "$MSG3"
echo "$MSG4"
echo "$MSG5"
echo "$MSG6"
if ! [ -e $FIREWALL_TMP_DIR/conf.init.d ]
then
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
echo "$MSG2" >> $FIREWALL_LOG_FILE
echo "$MSG3" >> $FIREWALL_LOG_FILE
echo "$MSG4" >> $FIREWALL_LOG_FILE
echo "$MSG5" >> $FIREWALL_LOG_FILE
echo "$MSG6" >> $FIREWALL_LOG_FILE
fi
fi
fi
if [ $LAN_MULTIPLE == 1 ] && [ $LAN_STATUS == 1 ]
then
LAN_INTERFACES_FILE="$FIREWALL_DB_DIR/lan_interfaces"
if [ -e $LAN_INTERFACES_FILE ]
then
LAN_INTERFACES="`echo | cat | sed -e '/###/d' $LAN_INTERFACES_FILE`"
else
MSG1="File: $LAN_INTERFACES_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
#################################################################
# Variabile pentru Internet
# Exemplu INET_IFACE="eth0", care se va schimba si ea pe
# interfata catre Internet
INET_IFACE="eth0"
# Daca adresa IP este asignata dinamic de catre ISP, se vor anula # urmatoarele 2 comenzi-se vor face comentarii
INET_IP="`$IFCONFIG $INET_IFACE | grep inet | cut -d : -f 2 | cut -d \ -f 1`"
INET_MASK="`$IFCONFIG $INET_IFACE | grep Mask | cut -d : -f 4`"
IP_DYNAMIC_ADDRESS=0
INET_BCAST="`$IFCONFIG $INET_IFACE | grep Bcast | cut -d : -f 3 | cut -d \ -f 1`"
# De asemenea, tot in cazul unei adrese dinamice se vor “activa” # urmatoarele 2 linii de comanda – prin stergerea #
#INET_IP="0.0.0.0"
#INET_MASK="255.255.255.0"
#IP_DYNAMIC_ADDRESS=1
MSG1=" Configurarea Interfetei Internet "
MSG2=" Interfata: $INET_IFACE"
if [ "$INET_IP" == "0.0.0.0" ]
then
MSG3=" IP Address: Asignata Dinamic "
else
MSG3=" IP Address: $INET_IP"
MSG4=" Subnet Mask: $INET_MASK"
MSG5=" Broadcast: $INET_BCAST"
fi
echo "$MSG1"
echo "$MSG2"
echo "$MSG3"
echo "$MSG4"
echo "$MSG5"
if ! [ -e $FIREWALL_TMP_DIR/conf.init.d ]
then
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
echo "$MSG2" >> $FIREWALL_LOG_FILE
echo "$MSG3" >> $FIREWALL_LOG_FILE
echo "$MSG4" >> $FIREWALL_LOG_FILE
echo "$MSG5" >> $FIREWALL_LOG_FILE
fi
fi
#################################################################
# Variabile pentru zona demilitarizata; pentru activare se da
# valoarea 1; 0=default
DMZ_STATUS=0
# Activarea zonelor DMZ multiple – se va da valoarea 1
DMZ_MULTIPLE=0
if [ $DMZ_STATUS == 1 ]
then
# Exemplu DMZ_IFACE="eth2" – se va schimba si catre interfata DMZ
DMZ_IFACE="eth2"
# Continuarea configurarii scriptului
DMZ_IP="`$IFCONFIG $DMZ_IFACE | grep inet | cut -d : -f 3 | cut -d \ -f 1`"
DMZ_BCAST="`$IFCONFIG $DMZ_IFACE | grep Bcast | cut -d : -f 2 | cut -d \ -f 1`"
DMZ_MASK="`$IFCONFIG $DMZ_FACE | grep Mask | cut -d : -f 3`"
DMZ_NET=$DMZ_IP/$DMZ_MASK
MSG1=" Configurarea Interfetei DMZ "
MSG2=" Interfata: $DMZ_IFACE"
MSG3=" IP Address: $DMZ_IP"
MSG4=" Broadcast: $DMZ_BCAST"
MSG5=" Subnet Mask: $DMZ_MASK"
MSG6=" DMZ Network: $DMZ_NET"
echo "$MSG1"
echo "$MSG2"
echo "$MSG3"
echo "$MSG4"
echo "$MSG5"
echo "$MSG6"
if ! [ -e $FIREWALL_TMP_DIR/conf.init.d ]
then
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
echo "$MSG2" >> $FIREWALL_LOG_FILE
echo "$MSG3" >> $FIREWALL_LOG_FILE
echo "$MSG4" >> $FIREWALL_LOG_FILE
echo "$MSG5" >> $FIREWALL_LOG_FILE
echo "$MSG6" >> $FIREWALL_LOG_FILE
fi
fi
fi
if [ $DMZ_MULTIPLE == 1 ] && [ $DMZ_STATUS == 1 ]
then
DMZ_INTERFACES_FILE="$FIREWALL_DB_DIR/dmz_interfaces"
if [ -e $DMZ_INTERFACES_FILE ]
then
DMZ_INTERFACES="`echo | cat | sed -e '/###/d' $DMZ_INTERFACES_FILE`"
else
MSG1="File: $DMZ_INTERFACES_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
#################################################################
# Variabile pentru loopback
LO_IFACE="lo"
LO_IP="`$IFCONFIG $LO_IFACE | grep inet | cut -d : -f 2 | cut -d \ -f 1`"
LO_MASK="`$IFCONFIG $LO_IFACE | grep Mask | cut -d : -f 3`"
LO_NET=$LO_IP/$LO_MASK
MSG1=" Configurarea Interfetei Loopback"
MSG2=" Interfata: $LO_IFACE"
MSG3=" IP Address: $LO_IP"
MSG4=" Subnet Mask: $LO_MASK"
MSG5=" Network: $LO_NET"
echo "$MSG1"
echo "$MSG2"
echo "$MSG3"
echo "$MSG4"
echo "$MSG5"
if ! [ -e $FIREWALL_TMP_DIR/conf.init.d ]
then
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
echo "$MSG2" >> $FIREWALL_LOG_FILE
echo "$MSG3" >> $FIREWALL_LOG_FILE
echo "$MSG4" >> $FIREWALL_LOG_FILE
echo "$MSG5" >> $FIREWALL_LOG_FILE
fi
fi
#################################################################
# Variabile de cronometrare
# Enumerarea variabilelor de cronometrare.
LOG_TIME="2/s"
SYN_TIME="20/s"
PING_TIME="1/s"
SCAN_TIME="3/m"
HACKER_TIME="5/m"
TROJAN_TIME="5/m"
UNCLEAN_TIME="5/m"
#################################################################
# Variabile de “izbucnire”
# Numarul pachetelor inainte de blocare sau logare
SCAN_BURST="2"
TROJAN_BURST="2"
#################################################################
# Clasificari
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"
CLASS_D="224.0.0.0/4"
CLASS_E="240.0.0.0/5"
#################################################################
# Variabile pentru politica de “cadere” Drop
# Politici de cadere default
# 1. LOG_TCP_RESET_REJECT – Va rejecta, loga, si trimite tcp-
# reset
# 2. LOG_REJECT – Va rejecta si va loga
# 3. LOG_DROP – Va cadea si va loga
# 4. TCP_RESET_REJECT – Va rejecta si va trimite tcp-reset
# 5. REJECT – Va rejecta
# 6. DROP – Va cadea
# 7. MIRROR – Va retrimite pachetul inapoi la sursa lui
DROP_POLICY="LOG_TCP_RESET_REJECT"
TROJAN_DROP_POLICY="LOG_TCP_RESET_REJECT"
DENY_ACCESS_DROP_POLICY="DROP"
BLACK_LIST_DROP_POLICY="DROP"
HOSTS_DENY_DROP_POLICY="DROP"
ADDRESS_SPOOF_DROP_POLICY="DROP"
PING_FLOOD_DROP_POLICY="DROP"
SCAN_BLOCK_DROP_POLICY="LOG_TCP_RESET_REJECT"
HACKER_DROP_POLICY="LOG_TCP_RESET_REJECT"
SPAM_DROP_POLICY="TCP_RESET_REJECT"
#################################################################
# Variabile pentru NAT
# Se activeaza mascaradarea cu 1; cu 0 se dezactiveaza – default
MASQUERADE=0
# Se seteaza sursa NAT; se activeaza dand valoarea 1
SOURCE_NAT=1
# Activarea/Dezactivarea forward-arii pachetelor dintre interfete, in cazul
# folosirii NAT-ului; se seteaza 1 pentru activare (default)
IP_FORWARDING=1
#################################################################
# Setari pentru serverul DHCP; se activeaza daca acesta este prezent, cu 1
DHCP_SERVER=1
#################################################################
# Variabile pentru Proxy-ul transparent
# Se seteaza adresa ip si portul serverului proxy pentru a avea tot traficul
# fltrat prin acesta
# De exemplu 192.168.0.243:3333 – tot traficul va fi filtrat via proxy prin adresa
# respectiva
TRANSPARENT_PROXY=""
#################################################################
# Variabile de protectie
# Protectia “SynFlood”; se activeaza cu 1 – default.
TCP_SYNCOOKIES=1
# Protectia “ANTI Spoof”. Validarea Sursei; se activeaza cu 1
ROUTE_VERIFICATION=1
# Protectia “Denial of Service” – aici se poate reduce riscul unui atac DoS;
# activarea acestei optiuni se face dand valoarea 1
DENIAL_OF_SERVICE=1
# Protectia la pingul de tip “flood”; se activeaza cu 1 – default
PING_FLOOD=1
# Protectia la atacurile de tip “spoofing”; se activeaza cu 1 – default
ADDRESS_SPOOF=1
# Blocarea adresei “Spoof”; se activeaza cu 1 – default
ADDRESS_SPOOF_BLOCK=1
# Nefiltrarea Pachetelor – optiune valabila doar de la variantele de
# kernel 2.4.17 sau mai recente; se activeaza cu 1; se dezactiveaza cu 0 –
# default
UNCLEAN=1
#################################################################
# Timpul de viata al unui pachet
# TTL – Time To Live – numar de hopuri pe care-l strabat pachetele in LAN; se
# masoara in milisecunde
TTL=""
#################################################################
# Variable de logare
# Sa inregistreze pachetele cu adrese imposibile (1 pentru activare – default)
LOG_IMPOSSIBLE=1
#################################################################
# Variabile ICMP
# Acceptarea redirectarii pachetelor ICMP – se seteaza cu 0 daca se foloseste si # ca router; pentru activare se pune 0
ACCEPT_ICMP_REDIRECTS=0
#################################################################
# NET-uri rezervate
# Aceasta optiune va bloca adresele rezervate de catre IANA.
# Amplasarea fisierului cu adresele rezervate
RESERVED_NET_FILE="$FIREWALL_DB_DIR/reservednets"
if ! [ -e conf.new ]
then
if [ -e $RESERVED_NET_FILE ]
then
RESERVED_NETS="`echo | cat | sed -e '/###/d' $RESERVED_NET_FILE`"
else
MSG1="File: $RESERVED_NET_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
#################################################################
# Destinatia pachetelor forward-ate prin porturi din NAT
# Permite forward-area informatiei destinate unui port catre un alt port si
# adresa IP. Vezi fiierul /etc/firewall/dnat pentru informatii despre configurare
# Amplasarea fisierului dnat; pentru activare optiune, se pune 1.
DESTINATION_NAT_FILE="$FIREWALL_DB_DIR/dnat"
DESTINATION_NAT_STATUS=0
if [ $DESTINATION_NAT_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $DESTINATION_NAT_FILE ]
then
DESTINATION_NAT="`echo | cat | sed -e '/###/d' $DESTINATION_NAT_FILE`"
else
MSG1="File: $DESTINATION_NAT_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Adrese IP “scutite”; aceasta optiune va permite adreselor IP listate in fisierul de “scutiri” sa fie scutite de toate regulile firewall-ului
# Amplasarea fisierului “de scutiri”; pentru activare, se da valoarea 1
EXEMPT_FILE="$FIREWALL_DB_DIR/exempt"
EXEMPT_STATUS=0
if [ $EXEMPT_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $EXEMPT_FILE ]
then
EXEMPT="`echo | cat | sed -e '/###/d' $EXEMPT_FILE`"
else
MSG1="File: $EXEMPT_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG_FILE == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Lista neagra de adrese IP
# Aici se fac setarile pentru blocarea celor 10 cele mai atacate adrese IP care # se gasesc in “lista neagra”;
# Amplasarea listei negre; pentru activare optiune se da valoarea 1 (default)
BLACK_LIST_FILE="$FIREWALL_DB_DIR/blacklist"
BLACK_LIST_STATUS=1
if [ $BLACK_LIST_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $BLACK_LIST_FILE ]
then
BLACK_LIST="`echo | cat | sed -e '/###/d' $BLACK_LIST_FILE`"
else
MSG1="File: $BLACK_LIST_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Negarea accessului adreselor IP listate in fisierul hosts.deny
# Daca se va activa aceasta optiune, se vor lua toate adresele IP din fisierul
# hosts.deny si li se vor interzice acestora accesul in sistem; se vor bloca toate adresele IP din hosts.deny cu ajutorul prefixului ALL:
# Amplasarea fisierului hosts.deny
HOSTS_DENY_FILE="/etc/hosts.deny"
# Amplasarea fisierului hosts.deny.active; pentru activare se da valoarea 1;
HOSTS_DENY_FILE_ACTIVE="$FIREWALL_TMP_DIR/hosts.deny.active"
HOSTS_DENY_STATUS=1
if [ $HOSTS_DENY_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $HOSTS_DENY_FILE ]
then
TCP_WRAPPERS_BLOCK="`cat $HOSTS_DENY_FILE | grep ALL: | cut -d : -f 2`"
else
MSG1="File: $HOSTS_DENY_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Negarea adreselor IP
# Aceasta optiune va nega adresa IP listata in fisierul denyaccess; este ca o negare fara limite.
# Amplasarea fisierului denyaccess; pentru activare se da valoarea 1; DENY_ACCESS_FILE="$FIREWALL_DB_DIR/denyaccess"
DENY_ACCESS_STATUS=0
if [ $DENY_ACCESS_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $DENY_ACCESS_FILE ]
then
DENY_ACCESS="`echo | cat | sed -e '/###/d' $DENY_ACCESS_FILE`"
else
MSG1="File: $DENY_ACCESS_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Negarea accesului porturilor specifice adreselor IP
# Aceasta optiune va nega accesul adreselor IP din fisierul denyportaccess in
# alte sisteme printr-un port specific
# Localizarea fisierului denyportaccess; pentru activare se da valoarea 1.
DENY_PORT_ACCESS_FILE="$FIREWALL_DB_DIR/denyportaccess"
DENY_PORT_ACCESS_STATUS=0
if [ $DENY_PORT_ACCESS_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $DENY_PORT_ACCESS_FILE ]
then
DENY_PORT_ACCESS_PORT="`echo | cat | sed -e '/###/d' $DENY_PORT_ACCESS_FILE`"
else
MSG1="File: $DENY_PORT_ACCESS_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Permiterea accesului printr-un port specific al unei adrese IP
# Aceasta optiune va permite adreselor IP listate in fisierul allowportaccess
# conexiunea la sistem printr-un port specific.
# Amplasarea fisierului allowportaccess; pentru activare se da valoarea 1.
ALLOW_PORT_ACCESS_FILE="$FIREWALL_DB_DIR/allowportaccess"
ALLOW_PORT_ACCESS_STATUS=0
if [ $ALLOW_PORT_ACCESS_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $ALLOW_PORT_ACCESS_FILE ]
then
ALLOW_PORT_ACCESS="`echo | cat | sed -e '/###/d' $ALLOW_PORT_ACCESS_FILE`"
else
MSG1="File: $ALLOW_PORT_ACCESS_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Protectia la Troieni
# Activarea acestei optiuni va duce la logarea activitatii tuturor fisierelor
# troiene intr-un fisier specific
# Amplasarea fisierului de loguri a activitatii troienilor; pentru activarea acestei optiuni se da valoarea 1; pentru dezactivare – 0 (default)
TROJAN_FILE="$FIREWALL_DB_DIR/trojan"
TROJAN_STATUS=1
# Se va realiza blocarea troienilor cu optiunea urmatoare (1 pentru activare)
TROJAN_BLOCK=0
# Aceasta va folosi o lista a troienilor cunoscuti.
# Atentie: Acest lucru va duce la blocarea multor porturi din Internet; va fi necesara editarea fisierului trojan.intensive pentru a schimba statusul acestor blocari
TROJAN_INTENSIVE=0
if [ $TROJAN_INTENSIVE == 1 ]
then
TROJAN_FILE="$FIREWALL_DB_DIR/trojan.intensive"
fi
if [ $TROJAN_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $TROJAN_FILE ]
then
TROJAN="`echo | cat | sed -e '/###/d' $TROJAN_FILE`"
else
MSG1="File: $TROJAN_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Protectia la atacuri
# Activarea acestei optiuni va duce in mod obligatoriu la
# necesitatea recompilarii kernelului; pentu verificarea
# functionabilitatii acestei optiuni se verifica mai intai
# modulul ipt_state din iptables.
# Pentru activarea acestei optiuni se va da valoarea 1; pentru
# dezactivare 0 (default)
HACKER_STATUS=1
# Urmatoarea comanda va aduce informatii in fisierul de loguri cand Iptables
# detecteaza un hacker
# Se activeaza dand valoarea 1; 0 este default – dezactivata
HACKER_LOGGING=1
# Urmatoarea optiune va duce la distrugerea pachetului atunci cand incearca
# hackerul; se da valoarea 1 pentru activarea acestei optiuni;
HACKER_BLOCK=1
# Amplasarea fisierului “hacker”
HACKER_FILE="$FIREWALL_DB_DIR/hacker"
if [ $HACKER_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $HACKER_FILE ]
then
HACKER="`echo | cat | sed -e '/###/d' $HACKER_FILE`"
else
MSG1="File: $HACKER_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Blocarea adreselor IP care fac Spamming
# Aceasta optiune face setarile necesare pentru a bloca accesul
# celor 10 mai atacate adrese IP, listate in DSHIELD.org
# Amplasarea fisierului cu lista neagra
SPAM_FILE="$FIREWALL_DB_DIR/spam"
# Pentru activare se da valoarea 1 – default
SPAM_STATUS=1
# Pentru inregistrarea logurilor cu incercarile de spam se da
# valoarea 1 la optiunea urmatoare (default)
SPAM_LOGGING=1
if [ $SPAM_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $SPAM_FILE ]
then
SPAM="`echo | cat | sed -e '/###/d' $SPAM_FILE`"
else
MSG1="File: $SPAM_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Scanarea porturilor
# Aceasta optiune va aduce informatii utile in fisierul de loguri # cand Iptables det. o scanare de porturi; se activeaza cu 1
SCAN_LOGGING=1
# Urmatoarea optiune va duce la incetarea scanarii porturilor
# cand Iptables detecteaza acest lucru; se activeaza dand
# valoarea 1
SCAN_BLOCK=1
#################################################################
# Informatii despre TCP
# Se aduc informatii in fisierul allowtcp in vederea activarii
# porturilor TCP
# amplasarea fisierului; pentru activare se da valoarea 1
ALLOW_TCP_FILE="$FIREWALL_DB_DIR/allowtcp"
ALLOW_TCP_STATUS=1
if [ $ALLOW_TCP_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $ALLOW_TCP_FILE ]
then
ALLOW_TCP="`echo | cat | sed -e '/###/d' $ALLOW_TCP_FILE`"
else
MSG1="File: $ALLOW_TCP_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Informatii pentru UDP
# Se aduc informatii in fisierul allowudp pentru activarea
# porturilor UDP
# Amplasarea fisierului; pentru activare se da val. 1
ALLOW_UDP_FILE="$FIREWALL_DB_DIR/allowudp"
ALLOW_UDP_STATUS=1
if [ $ALLOW_UDP_STATUS == 1 ]
then
if ! [ -e conf.new ]
then
if [ -e $ALLOW_UDP_FILE ]
then
ALLOW_UDP="`echo | cat | sed -e '/###/d' $ALLOW_UDP_FILE`"
else
MSG1="File: $ALLOW_UDP_FILE is Missing."
echo "$MSG1"
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
fi
exit 1
fi
fi
fi
#################################################################
# Variabilele pachetului Chain
# Lista de chain-uri
CHAINS="INET_IN INET_OUT LAN_IN LAN_OUT DMZ_IN DMZ_OUT TCP_ACCEPT LAN_TCP_ACCEPT UDP_ACCEPT LAN_UDP_ACCEPT LOG_DROP LOG_REJECT TCP_RESET_REJECT LOG_TCP_RESET_REJECT"
#################################################################
# Sfarsit
DATE="`date`"
MSG1="Finished Reading Firewall Configuration…"
MSG2="Program Completed at $DATE"
echo "$MSG1"
echo "$BLANK_LINE"
echo "$MSG2"
if ! [ -e $FIREWALL_TMP_DIR/conf.init.d ]
then
if [ $FIREWALL_LOG == 1 ]
then
echo "$MSG1" >> $FIREWALL_LOG_FILE
echo "$BLANK_LINE" >> $FIREWALL_LOG_FILE
echo "$MSG2" >> $FIREWALL_LOG_FILE
fi
fi
Concluzii
Internetul nu mai e ce-a fost odata. A fost o vreme cand marea retea comuna (pe-atunci inca nu chiar asa de mare) era un taram pasnic, in care oamenii comunicau civilizat sau, cel putin, singurele manifestari mai putin civilizate erau poate la nivelul controverselor aprinse purtate prin e-mail. Era pe atunci obiceiul ca administratorii de sistem sa ofere tot felul de informatii despre masinile lor, plus multiple servicii lasate la bunul plac si bunul simt al primului venit. In acele vremuri idilice inca nu se punea problema criptarii comunicatiilor in retea.
Am sa incep prin a spune ca modalitatile prin care un server Internet poate fi atacat sunt numeroase, si zilnic se concep altele noi. O incercare de a formaliza acest subiect este dificila, cu destule sanse de a lasa pe dinafara parti esentiale ale chestiunii. De asemenea, singurele informatii valabile sunt doar cele de ultima ora – orice mai vechi decat ziua de azi este deja depasit, si orice actiune intreprinsa in baza unor astfel de informatii are toate sansele sa nu mai fie eficace.
Indiferent de metoda de atac folosita, obiectivele vizate de un atacator sunt clare si nu foarte numeroase:
-obtinerea de acces direct (drepturi de administrator, root sau alt user) pe masinile atacate; atacatorul poate atinge aceste obiective fara a executa comenzi pe server.
-atacuri "stupide" tip Denial-of-Service (DoS) sau flooding: atacatorul se multumeste sa inunde masina atacata cu o avalansa de cereri de servicii sau cu simple pachete IP mai mult sau mai putin aleatoare. Scopul in primul caz este de a determina un serviciu anume sa epuizeze resursele masinii (SYN flood, Stacheldracht), in al doilea de a epuiza banda de trecere a conexiunii la Internet a masinii respective (IP flood); este posibil ca uneori ambele obiective sa fie vizate simultan.
-"spargerea" unor conturi de e-mail, prin aflarea parolei acestora sau prin alte metode. Insa tot aici pot sa intre actiuni mult mai grave, cum ar fi obtinerea accesului la baze de date cu caracter confidential, conturi bancare etc.
– "sniffing-ul" – consta in citirea pasiva a fluxului de date vehiculat de unele servicii (cum ar fi aflarea continutului mesajelor de e-mail chiar in timp ce acestea parcurg o retea).
-"troienizarea" masinilor si programelor; sunt deosebit de periculoase prin faptul ca ofera celui atacat impresia falsa ca totul e in ordine, in timp ce masina sa este compromisa.
In mod evident, nu este deloc prudent ca un server de Web sa aiba interfete de retea expuse direct Internet-ului. Intotdeauna intre server si restul retelei globale trebuie sa se interpuna masini specializate, care controleaza accesul la server. Cunoscute sub termenul generic (si deja folcloric) de "firewall", acestea permit sau interzic utilizarea anumitor servicii oferite de servere, conform anumitor criterii.
Este clar, in aceste conditii, ca topologia retelei are un rol important in controlul accesului. Practic, conexiunile intre masinile implicate trebuie astfel concepute incat sa confere firewall-ului maximum de eficacitate, oferind in acelasi timp siguranta eliminarii altor potentiale probleme.
Odata implementat, un astfel de mecanism permite modificari extrem de profunde ale comportamentului sistemului, cum ar fi:
interzicerea manipularilor la nivel de kernel (inserare/dezactivare de module);
interzicerea accesului raw la discuri, memorie si porturi;
protejarea oricarui fisier impotriva modificarilor;
notificare in cazul tentativelor de a efectua operatii interzise;
ascunderea oricarui proces sau fisier, autoprotejarea mecanismului de monitorizare in sine;
inghetarea tabelelor de rutare, de firewall, de montare;
protejarea serviciilor impotriva semnalelor si, in general, control complet asupra semnalelor si apelurilor-sistem;
redirectarea accesului la anumite fisiere catre alte fisiere;
Pe langa un control superior asupra a tot ceea ce se intampla in retea, acesta va permite accesul din exterior doar la un numar restrans de computere, si anume la serviciile si resursele pe care administratorul de retea le alege. Sunt folosite una sau mai multe din cele trei posibilitati de a controla traficul. Si anume:
• filtarea pachetelor – pachetele primite sunt analizate in functie de diverse criterii (adresant, continut, etc.) si trimise sau nu destinatarului;
• serviciul proxy – informatia de pe/spre Internet este trimisa prin intermediul firewall-ului si monitorizata;
• inspectia pachetelor – este o metoda mai noua care consta in examinarea doar a anumitor pachete cheie si compararea informatiilor cu cele aflate intr-o baza de date. Daca o suita de pachete apar drept nesigure, nu li se va permite accesul in sistem.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: . Sistemul de Operare Linux Si In Protocoalele din Internet (ID: 148995)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
