-NEW: Starea pachet nou (NEW) ne spune c, pachetul este primul pachet pe care l vedem dontr-o conexiune. Aceasta nseamn c, primul pachet pe care modulul conntrack l vede ntr-o conexiune specific, se va potrivi acestei stri. De exemplu dac vedem un pachet SYN, si acesta este primul pachet dintr-o conexiune pe care pe care o urmrim, acest pachet se va potrivi acestei stri. Se poate ca pachetul s nu fie SYN i cu toate acestea el se va potrivi starii NEW. Acest lucru poate duce la anumite probleme, dar este foarte util atunci cnd dorim s restabilim o conexiune pierdut de la alte firewalluri, sau atunci cnd o conexiune este deja expitat (time out), dar in realitate ea nu este nchis.
-ESTABLISHED: Starea ESTABLISHED ne spune c, exist trafic n ambele direcii si ea se va potrivi continuu acelor pachete. Singura cerina pentru a se ajunge in starea ESTABLISHED este ca un host care a trimis un pachet, s primeasc raspuns la acesta.. Mesajul de eroare ICMP poate fi considerat m starea ESTABLISHED, asta dac am generat un pachet care la rndul lui genereaz un mesaj ICMP.
-RELATED: O conexiune este n starea RELATED cand este nrudit cu o alta conexiune aflat in starea ESTABLISHED. Un exemplu de astfel de conexiune este conexiunea de date de tip FTP(File Transfer Protocol), care se sonsider a fi nrudit cu portul de control FTP. Aceast stare poate fi utilizat pentru a permite respuns la ICMP, transfer FTP care s functioneye printr-un firewall.
-INVALID: Starea INVALID spune c, pachetul nu poate fi identificat, sau c el nu are nici o stare. Acest lucru poate s apar din mai multe motive cum ar fi: sistemul nu mai are memorie disponibil, sau un mesaj de eroare ICMP care nu provine de la nici o conexiune cunoscut. n general este bine s blocam tot ceea ce se afl in aceast stare.
2 Mecanismul de stare a conexiunii
2.1. Intrarile conntrack
Urmrirea conexiunii este realizat cu ajutorul unui pachet disponibil n kernelul linux, numit conntrack. Acesta poate fi ncarcat ca i modul, sau ca parte intern a kernelului. Urmele de conexiune sunt inute n lanul PREROUTING, cu excepia pachetelor generate local, care sunt inute n lanul de ieire (OUTPUT). Aceasta nseamn c iptables va recalcula starile conexiunii n interiorul lanului PREROUTING. Dac de exemplu trimitem pachetul iniial ntr-un stream, starea conexiunii va fi setat ca fiind NEW n interiorul lanului OUTPUT, i cnd primim un pachet de raspuns la pachetul pe care l-am trimis, starea conexiunii se schimba n ESTABLISHED n lanul PREROUTING. Dac primul pachet nu are ca origine calculatorul pe care ne aflam, starea va fi NEW n interiorul lanului PREROUTING. Astfel starea unei conexiuni se schimb, iar calculele sunt facute n lanurile PREROUTING i OUTPUT ale tabelei nat.
Pentru a vedea intrarile conntrack se executa comanda cat /proc/net/ip_conntrack. Aceasta va furniza o list a intrarilor din baza de date conntrack.Forma acestora este:
t cp 6 117 SYN_SENT sr c=192. 168. 1. 6 dst =192. 168. 1. 9 spor t =32775 \ dpor t =22 [ UNREPLI ED] sr c=192. 168. 1. 9 dst =192. 168. 1. 6 spor t =22 \ dpor t =32775 use=2
Modulul conntrack ine o astfel de intrare pentru a ti n ce stare se afl o conexiune la un moment dat. n exemplul de mai sus, pe primul loc avem protocolul, care n cazul nostru este tcp. Apoi este aceeai valoare dar n cod zecimal. Urmatoarea valoare specific timpul de via al acestei intrri. n cazul nostru 117 secunde din momentul actual, valoare care urmeaz s fie decrementat pan in momentul cnd se recepioneaz mai mult trafic. Aceast valoare este apoi resetat la valoarea iniiala a unei stari, specifica unui anumit moment de timp. Urmeaz apoi starea actual a conexiunii pe care aceast intrare o are n momentul de fa. Valoarea SYN_SENT ne spune ca ne uitam la o conexiune care a vazut un singur pachet TCP SYN ntr-o singur direcie. Urmeaz adresa IP surs iar apoi cea destinaie, portul surs apoi portul destinaie. Cuvnt cheie UNREPLIED(fara raspuns), ne spune c nu avem trafic n sens invers pentru aceast conexiune. n urmatorii parametri se poate citi ceea ce asteptam s primim ca rspuns. Se specific adresa IP surs i cea destinaie (care sunt inversate faa de cele anterioare deoarece pachetul este directat spre noi de aceast dat) iar apoi urmeaz porturile sursa si destinaie, care la fel sunt inversate. Cnd o conexiune vede trafic n ambele direcii, intrarea conntrack va sterge flagul UNREPLIED, apoi l va reseta i l va nlocui cu flagul de asigurare a conexiunii (ASSURED). Flagul ASSURED specific faptul c, aceast conexiune este asigurat, i ea nu va fi eliminat, dac se va atinge numarul maxim de conexiuni urmarite. Numrul maxim de conexiuni urmrite depinde de o variabil care poate fi setat cu ajutorul funciilor ip-sysctl folosit n kernelurile mai recente. Aceasta variabil poate fi setat in fisierul ip_conntrack_max care se gaseste n directorul /proc/sys/net/ipv4.
2.2 Conexiuni TCP
n acest capitol i n urmatoarele, vom analiza n detaliu strile n care se poate gasi un pachet i ce nseamn aceste stari pentru cele trei protocoale de baz i anume TCP, UDP, ICMP. O conexiune TCP este initiat tot timpul prin 3 numii i pai de handshake, care stabilesc i negociaz conexiunea prin care se vor transmite date. ntreaga sesiune este inceput cu un pachet SYN, apoi un pachet SYN/ACK i n cele din urm un pachet de confirmare de pachet(ACK), care aprob intreaga conexiune. n acest punct conexiunea este stabilit i gata s transmit date. ntrebarea care se pune este, cum se reuseste sa se urmareasc aceast conexiune? Cand se vede un pachet (pachetul SYN), se consider c, avem o conexiune NEW. Cand avem i un pachet de raspuns (SYN/ACK), se consider, c avem conexiunea n starea stabilit (ESTABLISHED). Cu aceast observaie, rezult c putem implementa un firewall n care s permitem pachetelor NEW i ESTABLISHED, s paraseasc reeaua local, si s permitem doar pachetelor ESTABLISHED s intre n reteaua noastr.
Figura 3.1
Dup cum se vede, lucrurile funcineaz destul de simplu din punctul de vedere al utilizatorului. Cu toate acestea privind lucurile din punctul de vedere al kernelului, problema este puin mai dificil. S privim un exemplu. Prima stare este cea raportata de existenta primului pachet SYN ntr-o conexiune.
t cp 6 117 SYN_SENT sr c=192. 168. 1. 5 dst =192. 168. 1. 35 spor t =1031 \ dpor t =23 [ UNREPLI ED] sr c=192. 168. 1. 35 dst =192. 168. 1. 5 spor t =23 \ dpor t =1031 use=1
Dup cum se vede, din cele de mai sus, avem o stare precizat, n care un pachet SYN a fost trimis (flagul SYN_SENT este setat), la care nca nu avem un raspuns (flagul UNREPLIED este setat). Urmatoarea stare intern, va fi atins, atunci cnd vedem un alt pachet venind din direcie opus.
t cp 6 57 SYN_RECV sr c=192. 168. 1. 5 dst =192. 168. 1. 35 spor t =1031 \ dpor t =23 sr c=192. 168. 1. 35 dst =192. 168. 1. 5 spor t =23 dpor t =1031 \ use=1
Acum am primit ca raspuns un pachet SYN/ACK corespondent pachetului anterior trimis. Atata timp ct acest pachet a fost recepionat, starea se schimb n SYN_RECV. Acest nou flag ne spune ca pachetul SYN original a fost livrat corect, i c pachetul returnat SYN/ACK a trecut prin firewall. Ultimul pas va fi atins cand va apare cel de-al treilea ACK.
t cp 6 431999 ESTABLI SHED sr c=192. 168. 1. 5 dst =192. 168. 1. 35 \ spor t =1031 dpor t =23 sr c=192. 168. 1. 35 dst =192. 168. 1. 5 \ spor t =23 dpor t =1031 use=1
Dupa primirea celui de-al treilea ACK, conexiunea intr n starea ESTABLISHED (conexiune stabilita). Dupa inca cateva pachete, conform mecanismului de funcionare iptables, conexiunea va fi considerat asigurat (ASSURED)
nchiderea conexiunii TCP urmeaz pasii prezentai n figur, i ia urmtoarele stri:
Figura 3.2
Dup cum se vede, conexiunea nu este niciodat nchis, pan cand nu se trimite ultimul ACK. De notat este faptul c n figura de mai sus este prezentat cazul nchiderii conexiunii n circumstane normale. O conexiune poate de asemenea s fie nchis cnd se trimite un RST (reset), dac cnexiunea este refuzat de exemplu. n acest ultim caz, conexiunea este nchisa dup un timp predeterminat. Cnd o conexiune TCP a fost nchis, conexiunea intr n starea de asteptare (TIME_WAIT) care este n mod normal setat la dou minute. Aceast stare este utilizat astfel nct, toate pachetele care din anumite motive nu au fost primite, s mai poat ajunge la destinaie chiar dac conexiunea a fost nchis. Este ca i cum am avea un buffer temporar astfel nct pachetele care au fost intrziate ntr-un router care este congestionat s mai poat trece n firewall, sau n celalalt capt al conexiunii. Dac conexiunea este resetat de pachetul de reset (RST), starea este schimbata in CLOSE.Conexiunea va continua s mai existe timp de zece secunde, dup care este nchis definitiv. Pachetele RST, nu primesc ACK n nici un sens, iar conexiunea este efectiv rupt.
Intrebari Lucrarea 2:
1) Cand este o conexiune in starea RELATED? Dati un exemplu. 2) Unde sunt tinute urmele conexiunii? 3) Ce particularitati intalneste o conexiune inchisa printr-un pachet de reset?