help centre
For more info visit

How can we help?

Search our knowledge base for answers to
common questions and latest updates.

My activities New request


Throttling Bandwidth using Traffic Controller for Linux

Nathan Salt -


I would like to throttle bandwidth using Traffic Controller for Linux.


  • On-Premise Server + WebMail Installations: Version 6.0 > Current Version
  • Webmail Only Installations: Version 6.0 > Current Version


Atmail is using too much bandwidth on our shared internet connection.


Traffic Controller (aka tc) is a command line utility which has the ability to throttle uploads and downloads. We suggest using a script to use  the tc command due to it's complexity. This script was taken from

  1. Using your chosen text editor, add the below script into a new file called `/etc/init.d/shaping`
    #  tc uses the following units when passed as a parameter.
    #  kbps: Kilobytes per second
    #  mbps: Megabytes per second
    #  kbit: Kilobits per second
    #  mbit: Megabits per second
    #  bps: Bytes per second
    #       Amounts of data can be specified in:
    #       kb or k: Kilobytes
    #       mb or m: Megabytes
    #       mbit: Megabits
    #       kbit: Kilobits
    #  To get the byte figure from bits, divide the number by 8 bit
    # Name of the traffic control command.
    # The network interface we're planning on limiting bandwidth.
    IF=eth0             # Interface
    # Download limit (in mega bits)
    DNLD=1mbit          # DOWNLOAD Limit
    # Upload limit (in mega bits)
    UPLD=1mbit          # UPLOAD Limit
    # IP address of the machine we are controlling
    IP=     # Host IP
    # Filter options for limiting the intended interface.
    U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"
    start() {
    # We'll use Hierarchical Token Bucket (HTB) to shape bandwidth.
    # For detailed configuration options, please consult Linux man
    # page.
    $TC qdisc add dev $IF root handle 1: htb default 30
    $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
    $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD
    $U32 match ip dst $IP/32 flowid 1:1
    $U32 match ip src $IP/32 flowid 1:2
    # The first line creates the root qdisc, and the next two lines
    # create two child qdisc that are to be used to shape download
    # and upload bandwidth.
    # The 4th and 5th line creates the filter to match the interface.
    # The 'dst' IP address is used to limit download speed, and the
    # 'src' IP address is used to limit upload speed.
    stop() {
    # Stop the bandwidth shaping.
    $TC qdisc del dev $IF root
    restart() {
    # Self-explanatory.
    sleep 1
    show() {
    # Display status of traffic control status.
    $TC -s qdisc ls dev $IF
    case "$1" in
    echo -n "Starting bandwidth shaping: "
    echo "done"
    echo -n "Stopping bandwidth shaping: "
    echo "done"
    echo -n "Restarting bandwidth shaping: "
    echo "done"
    echo "Bandwidth shaping status for $IF:"
    echo ""
    echo "Usage: tc.bash {start|stop|restart|show}"
    esac exit 0

  2. Edit the variables at the beginning of the file to suit your requirements.

  3. Change the permissions on the file to make it executable.
    chmod +x /etc/init.d/shaping
  4. Execute the script.
    /etc/init.d/shaping start


Have more questions? Submit a request


Contact our support team

+61 (7) 5357 6605