Hi all, I am running Slackware 10.1 with Kernel 2.6.14.3 includes iptables 1.3.4 with layer 7 My network diagram below: - INTERNET --- LINUX_ROUTER_FW --- PCs Below is my simple iptables script: - echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t mangle -A POSTROUTING -m layer7 --l7proto applejuice -j MARK --set-mark 1 iptables -t mangle -A POSTROUTING -m layer7 --l7proto ares -j MARK --set-mark 1 iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 1 iptables -t mangle -A POSTROUTING -m layer7 --l7proto directconnect -j MARK --set-mark 1 iptables -t mangle -A POSTROUTING -m layer7 --l7proto edonkey -j MARK --set-mark 1 iptables -t mangle -A POSTROUTING -m layer7 --l7proto fasttrack -j MARK --set-mark 1 iptables -t mangle -A POSTROUTING -m layer7 --l7proto gnucleuslan -j MARK --set-mark 1 iptables -t mangle -A POSTROUTING -m layer7 --l7proto gnutella -j MARK --set-mark 1 iptables -t mangle -A POSTROUTING -m layer7 --l7proto napster -j MARK --set-mark 1 iptables -t mangle -A POSTROUTING -m layer7 --l7proto openft -j MARK --set-mark 1 Below is my simple tc script: - tc qdisc del dev eth1 root tc qdisc add dev eth1 root handle 1: htb default 20 tc class add dev eth1 parent 1: classid 1:1 htb rate 10240kbit ceil 10240kbit tc class add dev eth1 parent 1:1 classid 1:11 htb rate 32kbit ceil 512kbit tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 1 fw classid 1:11 tc qdisc add dev eth1 parent 1:11 sfq perturb 10 I have no problem shaping the "PCs" p2p download bandwidth rate. How can I control the "PCs" p2p upload bandwidth rate? Please help...thanks, :) Regards, ro0ot
Seems like eth0 is your IF connected to the itnernet, you need to do shaping on that for the upload. Modifying the rates and using the same tc comands but on eth0 would likely do it. Also your script is flawed, the layer7 matching for most if not all of those protocols will only match on the first packet or two. After that the data for those connections won''t match. I suggest you look into using CONNMARK target/matching so you can match all of the data, not just the first few packets. With your setup it''d be used something along these lines: #before setting mark: #restores any saved mark iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark #accepts the packet if it has a mark besides the default 0 and prevents the saved mark from being changed iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT #use "-j MARK --set-mark #" here #after all the --set-mark''s iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j CONNMARK --save-mark iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT Without this, I''m not really sure how you were matching all packets for your download shaping. Normally, only the first packet or two will have matching data in the TCP connection, and if you don''t somehow mark the whole connection using the above, the majority of the bandwidth won''t be shaped correctly. - Jody On 12/22/05, ro0ot <ro0ot@phreaker.net> wrote:> > Hi all, > > I am running Slackware 10.1 with Kernel 2.6.14.3 includes iptables 1.3.4 > with layer 7 > > My network diagram below: - > INTERNET --- LINUX_ROUTER_FW --- PCs > > Below is my simple iptables script: - > > echo 1 > /proc/sys/net/ipv4/ip_forward > iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE > iptables -t mangle -A POSTROUTING -m layer7 --l7proto applejuice -j MARK > --set-mark 1 > iptables -t mangle -A POSTROUTING -m layer7 --l7proto ares -j MARK > --set-mark 1 > iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK > --set-mark 1 > iptables -t mangle -A POSTROUTING -m layer7 --l7proto directconnect -j > MARK --set-mark 1 > iptables -t mangle -A POSTROUTING -m layer7 --l7proto edonkey -j MARK > --set-mark 1 > iptables -t mangle -A POSTROUTING -m layer7 --l7proto fasttrack -j MARK > --set-mark 1 > iptables -t mangle -A POSTROUTING -m layer7 --l7proto gnucleuslan -j > MARK --set-mark 1 > iptables -t mangle -A POSTROUTING -m layer7 --l7proto gnutella -j MARK > --set-mark 1 > iptables -t mangle -A POSTROUTING -m layer7 --l7proto napster -j MARK > --set-mark 1 > iptables -t mangle -A POSTROUTING -m layer7 --l7proto openft -j MARK > --set-mark 1 > > Below is my simple tc script: - > > tc qdisc del dev eth1 root > tc qdisc add dev eth1 root handle 1: htb default 20 > tc class add dev eth1 parent 1: classid 1:1 htb rate 10240kbit ceil > 10240kbit > tc class add dev eth1 parent 1:1 classid 1:11 htb rate 32kbit ceil 512kbit > tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 1 fw > classid 1:11 > tc qdisc add dev eth1 parent 1:11 sfq perturb 10 > > I have no problem shaping the "PCs" p2p download bandwidth rate. How > can I control the "PCs" p2p upload bandwidth rate? Please help...thanks, > :) > > Regards, > ro0ot > > > > > > _______________________________________________ > LARTC mailing list > LARTC@mailman.ds9a.nl > http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc >_______________________________________________ LARTC mailing list LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
Jody,
I have a script that makes connections for every user with his auth. So, in this
script, I have two mark tags. Can I use this tip you give to ro0ot? My doubt is
if I use this every time some user log it will be all executed again, it will
not make me trouble?
Now I mark all packts from a client and forward this to some cbq/htb band
control rules. It is working fine, but I have never made a test for longer
time...
Thanks for your cooperation.
Att,
Nataniel Klug
----- Original Message -----
From: Jody Shumaker
To: lartc@mailman.ds9a.nl
Sent: Thursday, December 22, 2005 5:48 PM
Subject: Re: [LARTC] control p2p upload bandwidth rate
Seems like eth0 is your IF connected to the itnernet, you need to do shaping
on that for the upload. Modifying the rates and using the same tc comands but
on eth0 would likely do it.
Also your script is flawed, the layer7 matching for most if not all of those
protocols will only match on the first packet or two. After that the data for
those connections won''t match. I suggest you look into using CONNMARK
target/matching so you can match all of the data, not just the first few
packets.
With your setup it''d be used something along these lines:
#before setting mark:
#restores any saved mark
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
#accepts the packet if it has a mark besides the default 0 and prevents the
saved mark from being changed
iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT
#use "-j MARK --set-mark #" here
#after all the --set-mark''s
iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j CONNMARK
--save-mark
iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT
Without this, I''m not really sure how you were matching all packets
for your download shaping. Normally, only the first packet or two will have
matching data in the TCP connection, and if you don''t somehow mark the
whole connection using the above, the majority of the bandwidth won''t
be shaped correctly.
- Jody
On 12/22/05, ro0ot <ro0ot@phreaker.net> wrote:
Hi all,
I am running Slackware 10.1 with Kernel 2.6.14.3 includes iptables 1.3.4
with layer 7
My network diagram below: -
INTERNET --- LINUX_ROUTER_FW --- PCs
Below is my simple iptables script: -
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t mangle -A POSTROUTING -m layer7 --l7proto applejuice -j MARK
--set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto ares -j MARK
--set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK
--set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto directconnect -j
MARK --set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto edonkey -j MARK
--set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto fasttrack -j MARK
--set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto gnucleuslan -j
MARK --set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto gnutella -j MARK
--set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto napster -j MARK
--set-mark 1
iptables -t mangle -A POSTROUTING -m layer7 --l7proto openft -j MARK
--set-mark 1
Below is my simple tc script: -
tc qdisc del dev eth1 root
tc qdisc add dev eth1 root handle 1: htb default 20
tc class add dev eth1 parent 1: classid 1:1 htb rate 10240kbit ceil
10240kbit
tc class add dev eth1 parent 1:1 classid 1:11 htb rate 32kbit ceil 512kbit
tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 1 fw
classid 1:11
tc qdisc add dev eth1 parent 1:11 sfq perturb 10
I have no problem shaping the "PCs" p2p download bandwidth rate.
How
can I control the "PCs" p2p upload bandwidth rate? Please
help...thanks, :)
Regards,
ro0ot
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
------------------------------------------------------------------------------
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
#accepts the packet if it has a mark besides the default 0 and prevents the saved mark from being changed iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT That section after the restore-mark rule will cause any saved marks to skip the rest of the chain. This results in only the first packets of a tcp connection having to hit their individual --set-mark rule. If you do have concerns about cpu usage or some such, I''d suggest trying trying out the ipp2p match module instead of the more generic l7match module. It''s more specific to p2p and tends to be much faster than doing regular expressions. On 1/10/06, Nataniel Klug <nata@cnett.com.br> wrote:> > I have a script that makes connections for every user with his auth. So, > in this script, I have two mark tags. Can I use this tip you give to ro0ot? > My doubt is if I use this every time some user log it will be all executed > again, it will not make me trouble? >I''m not sure exactly what you mean by this. If my above explanation doesn''t apply, could you possibly explain or give an example? - Jody _______________________________________________ LARTC mailing list LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
Jody,
My question is not about P2P filters. This is working fine at my gateway box. My
question concerns to my autentication gateway, where I use PPPoE to autenticante
my LAN clients at a Radius server into my DMZ.
This PPPoE server, when I have a new conection, make some rules using IPTABLES
and CBQ/HTB to control my clients internet speed. The script I use when a client
conects is this:
=== /etc/ppp/ip-up ==#! /bin/bash
IPT="/usr/local/sbin/iptables"
interface=$1
remoteIP=$5
download=`grep Download /var/run/radattr.$interface | awk ''{ print $2;
}''`
upload=`grep Upload /var/run/radattr.$interface | awk ''{ print $2;
}''`
cliente=`grep Cliente /var/run/radattr.$interface | awk ''{ print $2;
}''`
contamark=`echo $interface | cut -c 4-99`
mark=`expr $contamark + 500`
echo "$download" > /tmp/$interface.download
echo "$upload" > /tmp/$interface.upload
echo "$cliente" > /tmp/$interface.cliente
#if [ $cliente == "cliente" ]
#then
#$IPT -I FORWARD -d $remoteIP -p tcp --dport 1:1024 -j DROP
#$IPT -I FORWARD -d $remoteIP -p tcp --dport 6000:9000 -j DROP
#fi
/sbin/tc qdisc add dev $interface root handle 1 cbq bandwidth 10Mbit avpkt 1000
cell 8
/sbin/tc class add dev $interface parent 1: classid 1:$mark cbq bandwidth 10Mbit
rate "$download"Kbit weight `expr $download / 10`Kbit prio 5 allot
1514 cell 8 maxburst 20 avpkt 1000 bounded
/sbin/tc qdisc add dev $interface parent 1:$mark handle $mark sfq perturb 10
/sbin/tc filter add dev $interface parent 1:0 protocol ip prio 200 handle $mark
fw classid 1:$mark
$IPT -t mangle -A POSTROUTING -d $remoteIP -j MARK --set-mark $mark
/sbin/tc qdisc add dev eth0 root handle 1 cbq bandwidth 10Mbit avpkt 1000 cell 8
/sbin/tc class add dev eth0 parent 1: classid 1:$mark cbq bandwidth 10Mbit rate
"$upload"Kbit weight `expr $upload / 10`Kbit prio 5 allot 1514 cell 8
maxburst 20 avpkt 1000 bounded
/sbin/tc qdisc add dev eth0 parent 1:$mark handle $mark sfq perturb 10
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 200 handle $mark fw
classid 1:$mark
$IPT -t mangle -A FORWARD -s $remoteIP -j MARK --set-mark $mark
echo "PPP started at $(date):
interface = $interface
Remote IP = $remoteIP
download = $download
upload = $upload
mark = $mark
" >/tmp/$interface
=== END ==
My doubt is, what you said is that only one package in a mark will me matched
without that other comands, so, the lines I have put in red are correct? Today
it is working fine, but I have never made a test longer than 20 or 30 minutes...
Att,
Nataniel Klug
----- Original Message -----
From: Jody Shumaker
To: Nataniel Klug
Cc: lartc@mailman.ds9a.nl
Sent: Wednesday, January 11, 2006 3:11 AM
Subject: Re: [LARTC] control p2p upload bandwidth rate
#accepts the packet if it has a mark besides the default 0 and prevents the
saved mark from being changed
iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT
That section after the restore-mark rule will cause any saved marks to skip
the rest of the chain. This results in only the first packets of a tcp
connection having to hit their individual --set-mark rule. If you do have
concerns about cpu usage or some such, I''d suggest trying trying out
the ipp2p match module instead of the more generic l7match module.
It''s more specific to p2p and tends to be much faster than doing
regular expressions.
On 1/10/06, Nataniel Klug <nata@cnett.com.br> wrote:
I have a script that makes connections for every user with his auth. So, in
this script, I have two mark tags. Can I use this tip you give to ro0ot? My
doubt is if I use this every time some user log it will be all executed again,
it will not make me trouble?
I''m not sure exactly what you mean by this. If my above explanation
doesn''t apply, could you possibly explain or give an example?
- Jody
_______________________________________________
LARTC mailing list
LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
> My doubt is, what you said is that only one package in a mark will me > matched without that other comands, so, the lines I have put in red are > correct? Today it is working fine, but I have never made a test longer than > 20 or 30 minutes... > > Att, > > Nataniel Klug > >It should perfectly fine. Since you''re just marking based on an ip match, there is no need for CONNMARK. CONNMARK is only needed when you want to mark a whole connection based on something you''ll only see once, like the p2p protocol''s headers. destination/source addresses will be present in every packet you want to mark. - Jody _______________________________________________ LARTC mailing list LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc