Traffic Shaping: come ti limito la banda con tc e iptables
Questa sera ho avuto l’esigenza di fare un po’ di traffic shaping casalingo per un piccolo progetto.
Dovevo limitare la banda globale (quella globale non quella del singolo file scaricato), del server ftp.
Soluzione al problema due comandi linux: tc e iptables.
Lo script che ci permetterà di fare tutto è questo:
# Change this to your link bandwidth
# (for cable modem, DSL links, etc. put the maximal bandwidth you can
# get, not the speed of a local Ethernet link)
REAL_BW='20Mbit'
# Change this to the bandwidth you want to allocate to FTP.
# We're talking about megabits, not megabytes, so 80Kbit is
# 10 Kilobytes/s
FTP_BW='600Kbit'
# Change this to your physical network device (or 'ppp0')
NIC='eth0'
# Change this to the ports you assigned for passive FTP
FTP_PORT_LOW="10000"
FTP_PORT_HIGH="20000"
tc qdisc add dev "$NIC" root handle 1: cbq \
bandwidth "$REAL_BW" avpkt 1000
tc class add dev "$NIC" parent 1: classid 1:1 cbq bandwidth "$REAL_BW" \
rate "$REAL_BW" maxburst 5 avpkt 1000
tc class add dev "$NIC" parent 1:1 classid 1:10 cbq \
bandwidth "$REAL_BW" rate "$FTP_BW" maxburst 5 avpkt 1000 bounded
tc qdisc add dev "$NIC" parent 1:10 sfq quantum 1514b
tc filter add dev "$NIC" parent 1: protocol ip handle 1 fw flowid 1:10
iptables -t mangle -A OUTPUT -p tcp --sport 20:21 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp \
--sport "$FTP_PORT_LOW":"$FTP_PORT_HIGH" -j MARK --set-mark 1
Nel mio caso specifico, ho forzato il mio server ftp (pureftpd) ad utilizzare come porte in uscita un range che va dalla porta 10000 alla 20000 (questo lo si fa lanciando pureftpd con il parametro -p 10000:20000 oppure modificando direttamente il file di configurazione), e su questo range ho effettuato lo shaping di banda, bloccandola di fatto a 600Kbit/s, circa 80KByte/s.
Evito di commentare lo script in quanto è già stato fatto in inglese.
Tratto da: http://download.pureftpd.org/pub/pure-ftpd/doc/FAQ
Saluti
Matteo
posted in Internet, Matteo, file sharing, firewall, howto, iptables, kernel, networking, server, servizi | 1 Comment

![Validate my CSS [Valid CSS]](wp-content/themes/silver-lexus-08/images/vcss.gif)
![Validate my RSS feed [Valid RSS]](wp-content/themes/silver-lexus-08/images/valid-rss.png)