Lejupielāžu ierobežošana ar Iptables connbytes un iproute2
2009-03-21 14:24:00 UTC by maris in Linux,Web lapu pārlūkošanā katra savienojuma laikā ielādēto datu apjoms ir samērā neliels - līdz 10M, ja ir jāielādē kads flash objekts, bet lejupielādējot kādu failu savienojuma laikā pārraidīto datu apjoms ir vienāds ar faila apjomu. Ja organizācijā, kurā Jūs strādājat, ir "slikts" interneta pieslēgums, vai arī "truba" ir vienkārši aizsista ar lejupielādēm, tad ir diezgan vienkāršs, bet effektīvs risinājums - iptables modulis connbyte. Kas skaita savienojuma laikā pārraidīto datu apjomu un pēc norādītās robežas sasniegšanas kautko dara ar šo savienojumu. Labākais risinājums ir marķēt paketes un vēlāk traffic shaper'ī laist cauri lēnai caurulei (pipe).
iptables -A POSTROUTING -d jūsu_iekšējais_tīkls -m mark --mark 0x0 -m connbytes --connbytes 10485760:4294967295 --connbytes-mode bytes --connbytes-dir both -j MARK --set-mark 21
Dotajā piemērā tiks marķētas tikai nemarķētās paketes, kad savienojuma likā tiks pārraidīti vairāk nekā 10M. Vēlak konfigurējam šeiperi:
BW="8192kbit"
IF="eth0"
tc qdisc add dev $IF root handle 1:0 cbq avpkt 1000 bandwidth $BW
tc class add dev $IF parent 1:0 classid 1:1 cbq rate $BW allot 1500 prio 5 bounded isolated
tc qdisc add dev $IF parent 1:1 handle 16:0 sfq perturb 10
tc class add dev $IF parent 1:0 classid 1:4 cbq rate 64kbit allot 1500 prio 8 bounded isolated
tc filter add dev $IF parent 1:0 protocol ip prio 60 handle 21 fw flowid 1:4
BW ir jānorāda sava interneta pieslēguma reāla caurlaidība un IF interfeiss uz kura notiks šeipings.
tc qdisc add dev $IF root handle 1:0 cbq avpkt 1000 bandwidth $BW tiek uzstādīts galvenais paips kura caurlaidība ir jūsu interneta pieslēguma caurlaidība.
tc class add dev $IF parent 1:0 classid 1:1 cbq rate $BW allot 1500 prio 5 bounded isolated
tiek uzstādīta klasse, kas būs noklusētā, kuras caurlaidība ir vienāda ar saknes paipa caurlaidību.
tc qdisc add dev $IF parent 1:1 handle 16:0 sfq perturb 10
ar šo tiek pateikts, ka visiem savienojumiem vienāda prioritāte un truba tiek dalīta vienlīdzīgi.
tc class add dev $IF parent 1:0 classid 1:4 cbq rate 64kbit allot 1500 prio 8 bounded isolated
tc filter add dev $IF parent 1:0 protocol ip prio 60 handle 21 fw flowid 1:4 tad tiek izveidota jauna klasse kuras caurlaidība ir 64k, un visas markētas paketes tiek laistas caur šo klassi.
Komentāri:
Jautājums: Ir iespējams ar šo iptables, lai piemēram ja notiek antivīrusa updeitot vai parinstalējot to vajag updeitot jebkurā gadījumā, kur ir citreiz pat 50Mb, lai ātrums nesamazinātos, kamēr vēl nav lejuplādējis visus 50Mb, rezultātu gribās dabūt tādu, lai tieši ierobežojums nebūtu uz antivīrusa updeitu! Vai tas ir iespējams?
ja ir zināmi hosti no kuriem notiek antivīrusu update, tad var, marķējot paketes ar citu mark, un laist caur citu trubu.