How can we help?


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



Contact our support team

+61 (7) 5357 6605