iptables + tc: limitare dwnload da un sito

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

iptables + tc: limitare dwnload da un sito

Messaggio da joe »

Dunque...l'argomento di per se è abbastanza vasto e per nulla banale. Ma con questo post vorrei solamente chiaedervi un'applicazionepiuttosto mirata e concettualmente banale.
Vorrei fissare il limite massimo della banda in ingresso per i pacchetti provenienti da un sito.
Da quanto ho capito ci sono diverse strade tra cui squid, o iptables + tc.
Vorrei riuscirci con la seconda, ma sono parecchio indietro in fatto di firewall e qos....tanto da trovarmi un po' a disagio anche con la documentazione presentein grande quantità in rete. C'è parecchia roba, è vero....ma l'argomento è talmente vasto e le potenzialita di questi strumenti sono assai spinte a tal punto che molte guide spiegano esempi ben più complessi rispetto a quel poco che basterebbeora come ora a me.
Premesso questo (lo so, sfacciatamente...) vi chiederei se poteste postrmi in risposta le regole essenziali per marcare con iptables i pacchetti provenienti dall'ip noto del sito che vorrei limitare. Inoltre anche le poche righe per impostare tc in modo tale che prenda quei pacchetti e ne limiti la velocità.
Alcuni dati:

ip del sito: $iplimited
interfaccia di connessione ad internet ppp0
bada massima 8 KB/s (Byte)

Da quanto ho scritto si può capire che qualcosa in merito ho letto...in perticolar modo in alcuni documenti si pone l'accento sul fatto che non sia possibile limitare i pacchetti in ingresso, ma solo quelli in uscita. Però il fatto non è così chiaro...se vi andasse di scambiare 4 chiacchere in merito, ve ne sarei grato.
Anche perchè pensandoci bene spesso utilizzo wget con l'opzione --limit-rate="tot."k. Qunidi dovrebbe essere possibile limitare òa banda in qualche modo anche con "tc"...o no?

Infine...a quale scopo tutto ciò?
- a volte scarico dei filmati da "veoh"
- la mia connessione è parecchio instabile soprattutto se saturo la banda e spesso cade la limea
- ho la necessitàdi scaricare con strumenti che supprtano il resume tipo wget
- ho trovato una soluzione interessande per scaricare video da veoh: si tratta di VeohProxy, inpratica un proxy scritto in python. Come funziona: si avvia e sta in ascolto su una prota in locale. Per scaricare un file uso wget dandogli in pasto 127.0.0.1:porta/linkalvideo
dove "linkalvideo" lo estraggo a mano dal sorgente della pagina dove sta il video.,,,va bè in pratica è una stringa alfanuerica,,,
Già che ci sono metto questo link: http://faredisfare.wordpress.com/2008/06/26/104/
In pratica lanciando wget senza limiti noto che la velocità resta un po' a zero, poi schizza a valori di 40/70 KB/s. incompatibili con la mia connessione via cellulare....se limito wget, allora tende a scaricare costantemente al valore impostato, Ne ho dedotto che il proxy inizia a richiedere il video a tutta banda, in qualche modo forse lo tiene in cache o qualcosa del genere e quindi piano piano lo passa in locale a wget.
Io voglio assicurarmi che il download dal sito veoh al mio PC ppp0 avvenga in modo realmente controllato rispettando il limite imposto così da non rendere la connessione instabile, E qui entrerebbe in gioco iptables e tc...cosa ve ne pare?
Dico anche che l'argomento qos e firewall mi interessa in generale e allora avrei volenieri colto l'occasione per iniziare a vedere come funziona e allo stesso tempo avrei provato a risolvere il problema descrtto.
Devo ammettere che mi sono scontrato con argomenti un po' fuori dalla mia portata almeno in termini generali. Penso anche però così a naso, che l'applicazione dei concetti di shaping applicati al mio caso banale non siano poi troppo difficili da sintetizzare con 4 righe di comandi mirati...perlomeno da chi conosce quegli strumenti. Per questo, dopo varie letture che mi hanno spaesato non poco, mi sono deciso a scrivere qui. Sperando che qualcuno con pazienza, possa rispondere con un esempio chiarificante.
Vi ringrazio in anticipo sperando nella vostra disponibilità. Spero l'argomemto possa essere utile anche ad altri.
Saluti :)

Avatar utente
shark1500
Linux 3.x
Linux 3.x
Messaggi: 785
Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: iptables + tc: limitare dwnload da un sito

Messaggio da shark1500 »

L'argomento e' molto ampio ed interessante (come hai detto tu), nel tuo caso specifico ti consiglio di andarti a leggere il lartc (Linux Advance Routing and Traffic Control), e c'e' la sezione 9 che sembra fatta apposta per le tue esigenze :-).

Ad ogni modo in questo caso iptables non c'entra, puoi fare tutto con tc se non sbaglio.

PS: Non leggere il lartc tutto d'un fiato se ci tieni alla tua salute ;-)

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: iptables + tc: limitare dwnload da un sito

Messaggio da joe »

Ciao e grazie per la risposta. Avevo già messo mano al "linux advanced routing and traffic control howto": l'ho scaricato in formato testo nella mia directory di documentazione persoanle ;)
Il fatto è che è molto vasto e penso anche sia più adatto a chi ha qualche conoscenza sull'argomento, e l'assenza di una traduzione in italiano certo non facilita le cose....così alla fine l'ho solo "sfogliato un po'" buttandomi poi subito alla ricerca di documentazione più accessibile per le mie competenze. Dico anche che ho trovato della documentazione in teressante sul sito sistemistiindipendenti.org o qualcosa di simile
Detto questo, la tua indicazione è molto utile perchè stringe il campo. Mi sono messo a leggere il capitolo 9 "queueing disciplinesed for bandwidth managment" e nell'introduzione vi è già una risposta ad un mio dubbio espresso nel post precedente ("non si può limitare la velocità in ingresso"): in realtà è vero, non si può direttamente, bisognerebbe istruire il server remoto ad inviarci i dati alla velocità desiderata e ciò è impraticabile. Tuttavia osservando che gran parte del traffico usa il protocollo tcp/ip se noi limitiamo la banda in ingresso, il protocollo tcp adatta la velocità di trasmissione e i nostri limiti si riperquotono a monte verso il sito che ci sta inviando i pacchetti. I limiti si impongono sempre in trasmissione e diversi esempi di molta documentazione in rete fanno l'esempio del router/firewall su cui è installato linux (quindi una macchina dedicata con 2 o più interfaccie di rete di cui una collegata alla LAN e l'altra ad internet per esempio)....in pratica si limita la banda in uscita agendo sull'invio dei pacchetti attraverso l'interfaccia verso internet, mentre si limita labanda in ingresso verso la LAN agendo sulla trasmissione dei pacchetti attraverso l'interfaccia di comunicazione verso la LAN....Tutto ciò mi sembra chiao ma ho qualche dubbio su come fare a gestire la questione quando non si ha a che fare con una LAN e quindi lo shaper, è realizzato direttamente sulla macchina su cui si lavora.....sarà una questione di interfaccie immagino, ma non ho ancora bene chiaro nello specifico come si fà (spero che proseguendo nella lettura salti fuori la risposta. :D

Venendo alla questione iptables, io credevo che servisse per marcare i pacchetti...invece dici di no?

Chiedo scusa per la lunghezza dei miei post, ma vorrei mettere in chiaro, cosa ho capito e cosa no circa la questione.
Grazie ancora, mi fa piacere che l'argomento sia d'interesse.
Saluti

Avatar utente
shark1500
Linux 3.x
Linux 3.x
Messaggi: 785
Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: iptables + tc: limitare dwnload da un sito

Messaggio da shark1500 »

Quando arrivi a certi livelli nell'informatica e' fondamentale conoscere l'inglese.

Se non ricordo male avevo visto degli esempi sul lartc a proposito anche di qualcosa che potevi settare in locale, quindi prova a guardarci (e' pieno di esempi).

Al limite te lo stampi e te lo leggi quando vai al cesso :-)

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: iptables + tc: limitare dwnload da un sito

Messaggio da joe »

È vero, l'inglese è fondamentale anche e pesantemente nell'informatica avanzata. Il problema è che mi sa che sto affrontando un argomento che supera di gran lunga i miei livelli di conoscenza informatica. Metterò senz'altro mano agli esempi e alle spiegazioni del capitolo 9 del lartc. E magari quando sento l'esigenza di fare quattro chiacchere in merito a qualche aspetto particolare ve ne informo in questa discussione.
Per il resto non è un problema, stamparlo oppure no...non vorrei essere costretto a "sedute" così prolungate nei locali sanitari :lol: ;)
Bene...mi immergerò al più presto nella lettura consigliata. Saluti! :p

Avatar utente
shark1500
Linux 3.x
Linux 3.x
Messaggi: 785
Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: iptables + tc: limitare dwnload da un sito

Messaggio da shark1500 »

E' da un po' che non "gioco" con quelle cose, e ora purtroppo non ho il tempo per mettermi sotto e vedere di sistemare il tuo problema (non e' una cosa da due minuti se devi rispolverarla), spero comunque di averti dato una mano.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: iptables + tc: limitare dwnload da un sito

Messaggio da joe »

Allora, giusto per fare una prova ho trovato in rete uno script che riporta i comandi "tc" per creare delle "regole d'accodamento" e quindi filtrare i pacchetti redirigendoli verso le precedenti code. Circa questa seconda operazione ho parecchi dubbi inerenti il "punto di vista" che stiamo considerando.
Molti esempi descrivono la configurazione di un sistema interposto tra internet e una lan. In tal caso si agisce sui pacchetti inviati ad una macchina della lan per limitarne il download e sui pacchetti provenienti dalla stessa macchina per limitarne l'upload.
Il mio caso è fisicamente differente...
Il mio PC è uno ed è connesso ad internet direttamente... per questo il filtraggio dell'ip di destinazione e sorgente non mi è così chiaro.
Vediamo cosa ho provato a fare seguendo lo script presente al sito: http://www.topwebhosts.org/tools/traffic-control.php

Riepilogo ciò che vorrei fare:
sostanzialmente sono interessato a limitare la banda in download se il downloada avviene da un sito prestabilito, per esempio (88.88.88.88)
Dunque per prima cosa ho cereato una classe "radice" che venga gestita con l'algoritmo HTB...perchè HTB? Non saprei, ma mi pare d'aver capito che sia piuttosto preciso nella limitazione della banda...e poi era queloo che utilizzava lo script linkato sopra.

Il procedimento qual è?

- creo una nuova disciplina di accodamento "radice" comprendente 2 classi figlie: una per l'upload e l'altra per il download.

Codice: Seleziona tutto

# tc qdisc add dev ppp0 root handle 1: htb default 30
Agisce sull'interfaccia ppp0 e ha "etichetta" 1: il comando è "tc qdisc add".
Quel "default 30" sta a significare che il traffico non classificato viente instradato all'etichetta (o classe, o disciplina di accodamento ora non so di preciso cosa significhi...va bè) 30:

- bene, ora creo le classi figlie della disciplina di coda definita sopra. Satabilisco di utilizzare la stessa banda per download e upload e la imposto a 3 kilo byte al secondo:

Codice: Seleziona tutto

# tc class add dev ppp0 parent 1: classid 1:1 htb rate 3kbps
# tc class add dev ppp0 parent 1: classid 1:2 htb rate 3kbps
Tutto ciò sta a significare che si deve creare una classe (tc class add) che laovar sempre sull'interfaccia ppp0 ed è "figlia" della disciplina di accodamento "1:". A queste classi viene attribuita l'etichetta 1:1 e 1:2 rispettivamente (classid 1:1), anche per loro verrà utilizzata l'algoritmo htb ed infine si stabilisce la larghezza di banda entro cui dovranno essere limitate attrqverso il parametro "rate" settato a questo scopo a 3kbps che nella notazione di tc, se non sbaglio corrispondono a 3 kilo-byte al secondo.
Qua però mi viene un dubbio: tale larghezza di banda è da intendersi veramente come un limite o come un valore garantito? Penso più un limite, ma spero possiate confermarmi.

- adesso bisogna filtrare i pacchetti creando appunto 2 filtri in modo da dirigiere i pacchetti in download ad una classe e quelli in upload all'altra.

Codice: Seleziona tutto

# tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32 match ip src 88.88.88.88 flowid 1:1
# tc filter add dev ppp0 protocol ip parent 1:0 prio 1 u32 match ip dst 88.88.88.88 flowid 1:2
In questo modo dovrebbero essere filtrati i pacchetti diretti (upload verso il sito 88.88.88.88 e in download dallo stesso).
In pratica si considera sempre la solta interfaccia ppp0, intercettando i pacchetti che utilizzano il protocolo "ip" e gestendoli secondo la disciplina 1:0 con priorità 1 (questo parametro prio non lo conosco bene...veniva spiegato nel lartc, ma ora così su due piedi dovrei riverdermelo).
Quindi si specifica di filtrarli con il filtro di tipo u32, che vuol dire in pratica che vengono considerati tutte le intestazioni del pacchetto ip...quindi sarà possibile filtrarlo sulla base di diverse caratteristiche...a noi interessa in particolare l'indirizzo ip di destinazione e provenienza.
Nell'esempio sopra ho provato a filtrare specificando di ficcare i pacchetti che giungono dall'ip 88.88.88.88 nella classe 1:1 e quelli diretti all'ip 88.88.88.88 alla classe 1:2 limitando così sia l'upload che il download al rate delle 2 classi specificate prima e cioè 3 KB/s.

Secondo voi è giusto questo filtro impostato in questo modo? Intendo l'ip del sito da cui voglio limitare la banda in download?
Dovrebbe funzionare oppure manca ancora qualcosa?
Spero di avere messo un po' di informazioni in più sull'argomento anche in modo da rendere la questione di più facile consultazione restringendo un attimo i punti che non mi sono chiari e la. Non so se sono riuscito...
Saluti. :-)

Rispondi