iptables не умеют шейпить сами по себе. тебе надо tc.
Пример такой:
#!/bin/bash
tc qdisc del dev eth0 root
tc qdisc del dev eth0 ingress
tc qdisc add dev eth0 handle ffff: ingress
tc qdisc add dev eth0 root handle 1: cbq avpkt 10000 bandwidth 100mbit
tc class add dev eth0 parent 1: classid 1:1 cbq rate 10mbit allot 1500 prio 1 bounded isolated
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 5555 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip sport 5555 0xffff flowid 1:1
tc class add dev eth0 parent 1: classid 1:2 cbq rate 1024kbit allot 1500 prio 8 bounded isolated
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.254.121 flowid 1:2
tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src 192.168.254.121 police rate 512kbit burst 10k drop flowid :1
Т.е. мы не шейпим общение клиента с гейзером, и шейпим юзера с адресом 192.168.254.121: вход - мегабит, исход - 0,5 мегабита
Если очень интересно: http://www.lartc.org/howto
З.Ы. этот скрипт генерится автоматически, т.е. можно для разных юзеров делать разные ограничения, основываясь на тарифных планах, группах и т.п.