Advanced Linux & INFOSEC

DOCUMENTATIE CURS

Marcare trafic, filtre si clase

Clasele HTB exista doar impreuna cu o disciplina (qdisc) clasful. O clasa poate contine una sau mai multe clase copil (child class). O clasa frunza (leaf class) este acea clasa care nu detine alte clase copil (clasa terminala).

Un filtru este o alta componenta a controlului traficului in Linux. Rolul unui filtru este de a clasifica traficul si a-l atasa de o clasa si un qdisc.
Pentru ca un filtru sa poata clasifica traficul acesta trebuie anterior sa fie marcat (il clasifica in functie de marcaj). Exista mai multe posibilitati de a marca traficul cea mai la indemana si flexibila fiind cu iptables.

Exemplu
1. Creare clasa
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 30kbit ceil 1000kbit prio 2
Observatii:
- clasa se identifica prin id-ul 1:20 (major:minor), 1 reprezinta majorul clasei parinte;
- clasa se creeaza pentru traficul interfetei eth0;
- clasa parinte este 1:1;
- banda minim garantata pentru traficul clasei este 30kbit;
- traficul clasei poate ajunge la 1000kbit (prin imprumut de tokeni si deci trafic de la clasa parinte) daca celelalte clase nu servesc trafic;
- traficul clasei are prioritatea 2 in a imprumuta trafic de la clasa parinte;

2. Marcare trafic
iptables -A OUTPUT -t mangle -o eth0 -p tcp --sport 22 -j MARK --set-mark 1
Observatii:
- traficul se marcheaza folosind tabelul mangle si chainul OUTPUT (este traficul generat de host);
- se foloseste targetul MARK, iar traficul ssh (are portul sursa 22) se marcheaza cu "1". Marcarea traficului nu presupune modificarea headerelor pachetului. Este doar o marcare interna in Kernel;

3. Atasare trafic la clasa folosind un filtru
tc filter add dev eth0 parent 1: protocol ip handle 1 fw classid 1:20
Observatii:
- orice filtru chiar daca se refera la traficul unei clase frunza se ataseaza de root (are intotdeauna parent 1:);
- filtrul clasifica traficul marcat cu "1" de iptables (handle 1);
- traficul este atasat clasei cu id-ul 1:20;

Nota: traficul SSH generat de host va avea garantat 30kbs dar poate ajunge la 1000kbs daca celelalte clase de pe acelasi nivel cu aceasta (clasele cu acelasi parinte) nu necesita trafic.


Nota
Partajarea si limitarea sau garantarea traficului in functie de anumite criterii este un subiect dificil si complex. Recomandarea este sa incepeti cu exemple cat mai simple, iar abia dupa intelegerea in profunzime si testarea acestora sa treceti la exemple complexe.

Exemplu mod abordare:
Pas 1: Se creeaza un script care simuleaza o conexiune de 1000kbit (pentru o testare exacta) si se limiteaza traficul egress ssh la 500 kbit.
Se incepe copierea unui fisier folosind scp pe un alt calculator in timp ce se observa comportamentul folosind iftop
Pas 2: Se adauga in script o noua clasa care primeste traficul egress http si care are garantat 300kbit dar poate urca la 1000kbit daca celelalte clase nu necesita trafic.
Se instaleaza pe host un server Apache, iar de pe un alt calculator se porneste downloadul unui fisier de pe serverul Apache. In acelasi timp ssh consuma trafic (cu scp se copiaza un fisier).
Se observa folosind iftop ca ssh consuma doar 500kbit, http tot 500 (are garantat 300, dar poate creste la 1000, nu foloseste 1000 fiindca si ssh necesita trafic). Se opreste copierea cu scp in timp ce fisierul se downloadeaza prin http. Se observa cum http sare la 1000kbit.

Atentie: managementul traficului se refera doar la traficul egress, cel generat de host. In exemplul de mai sus este traficul care pleaca de la serverul ssh respectiv http care sunt instalate pe host.
© 2006-2010 Crystal Mind Academy. All rights reserved