Tempo de leitura: 3 minutos
Abaixo, irei fornecer um script simples de implementação para Traffic Shapping utilizando HTB, de forma a controlar upload e download na interface que está diretamente conectada a internet.
O Traffic Shapping, é um forma de controlar o tráfego de rede priorizando recursos de rede e garantindo a largura de banda, com base nas regras criadas utilizando o comando tc. Toda modelagem de tráfego usa conceitos de classificação de tráfego, regras de política, disciplinas de filas e qualidade de serviço (QOS).
Não veremos nesse post, mas através do Traffic Shapping, podemos além de limitar a largura de banda disponível para download e upload, podemos controlar o uso de serviços, garantir largura de banda (QOS) e obviamente o já dito, controle de banda.
Uma explicação bem rápida e sucinta, para melhor entendermos como funciona. Todo trafego que entra ou sai, se acomoda em uma fila, que também chamamos de disciplina de fila (nossa qdisc). Essa fila normalmente é gerenciada pelo algoritmo FIFO (First IN First Out) ou Primeiro que entra , primeiro que sai. Bem essa estratégia até funciona bem, mas por exemplo, um pacote VOIP vai sair com prioridade igual a de um cliente FTP fazendo download por exemplo.
Então seu uso é bem interessante nesse caso. Há vários outros algoritmos que podem fazer isso, como CBQ e HTB. Neste Post irei disponibilizar um script para controle de Download e Upload, mas caso queira conhecer um pouco mais a ferramenta, visite o Post Controle de Tráfego usando QOS (HTB) e iptables, e tenha acesso a um vídeo aula do Curso Linux Security.
Antes de qualquer coisa, é necessário ter instalado a ferramenta iproute e tc.
Abaixo o script para controle de download e upload.
#!/bin/bash
# # tc usa as seguintes unidades quando passado um parâmetro. # kbps: Kilobytes por segundo # mbps: Megabytes por segundo # kbit: Kilobits por segundo # mbit: Megabits por segundo # bps: Bytes por segundo # Quantidade de dados pode ser especificados em: # kb or k: Kilobytes # mb or m: Megabytes # mbit: Megabits # kbit: Kilobits # Para ter o Byte a partir do bit, divida o número por 8, 1B = 8b # # # Comando de traffic Control TC=/sbin/tc # a Interface de rede que vamos controlar a banda. IF=eth0 # Interface # Limit Download (em mega bits) DNLD=1mbit # Limte de DOWNLOAD # Limit Upload (em mega bits) UPLD=1mbit # Limite de UPLOAD # Endereço IP da interface que iremos controlar IP=200.0.0.1 # Host IP # Opções de Filtro para limiar a interface pretendida. U32=”$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32″ start() { # Iremos Usar Hierarchical Token Bucket (HTB) para controle de banda. $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 # A primeira linha cria a fila qdisc root, e as próximas duas # linhas criam duas filas filhas que será usada para fazer o e used # shapping de download e upload. # A quarta e quinta linha criam p filtro que da um match na # interface. # O dst IP addres é usado para limitar a velocidade de download, # e o src IP Address é usado para limitar a velocidade de upload. } stop() { # Parando Traffic shapping $TC qdisc del dev $IF root } restart() { stop sleep 1 start } show() { # Exibi status do traffic shapping $TC -s qdisc ls dev $IF } case “$1” in start) echo -n “Iniciando traffic shaping: “ start echo “done” ;; stop) echo -n “Parando Traffic Shapping: “ stop echo “done” ;; restart) echo -n “Reiniciando Traffic Shapping: “ restart echo “done” ;; show) echo “Status para controle de Banda em $IF:” show echo “” ;; *) pwd=$(pwd) echo “Usage: tc.bash {start|stop|restart|show}” ;; esac exit 0 |
Link permanente
OLa, obrigado pelo ensinamento , gostaria de tira uma duvida , vi que no script , esta controlando somente um IP , porem se caso for necessário pegar um range de ips, tipo, pega o range de ips do meu DHCP , eu sei que se no lugar do =IP eu declara um diretório com os ips, da certo, porem meu dhcp tem mais de 4 mil ips !!!
Grato:
Link permanente
Bem, você pode colocar o range inteiro, algo como 192.168.0.0/22, ou ainda fazer um for ou while para isso….algo como
for (i=0;i<255;i++);do
comando 192.168.0.$i
done