Pular para o conteúdo principal

Traffic-Control

QOS com TC ( Traffic-Control )

Introdução


Utilizado para gerenciamento de filas do buffer com isso realizando QOS e compatível com diversos algoritmos como RED, WRED, SQF, CBMARK, HTB e entre outros. O próposito do post é utilizar o algoritmo HTB onde trabalha com a fila de disciplina class full onde podemos delimitar tamanho da banda utilizada.

Classes são responsáveis por classificar os dados de forma a controlar o tráfego.

Existe dois tipos de filas de diciplinas ( Qdisc -- Queuing Disciplines ) onde que os algoritimos trabalha, classfull e classless, classfull é possivel definir e adicionar classes de forma dinâmica pelo usuário e classless já existe classes definidas onde que podemos indicar determinado tráfego a elas.

O tc controla essas filas de disciplinas esse buffer ( armazenamento esperando para ser descarregado  ) é enfileiramento dos pacotes que espera ser descartados da interface de rede isso significa que o controle é aplicado apenas para o tráfego que sai da interface.

Então tenho duas placas de rede onde que preciso controlar o download da rede, eu aplicaria na interface ligada diretamente a ela controlando o tráfego que está saindo do firewall para a rede interna. Agora se eu quiser controlar o upload, bastaria aplicar na interface de internet onde controlaria tudo que está saindo pela interface.

Identificando tráfego


Para que possamos aplicar QOS em nossa rede precisamos saber o que realmente é tráfegado, no firewall iremos instalar uma aplicação que irá analisar:
# yum install iptraf


E iremos monitorar a interface LAN e olha o que iremos vizualizar:
# iptraf














Pronto o tráfego da rede analisada na imagem é muito extenso, mas iremos pegar os protocolos mais comum que exige mais atenção e aplicar QOS sobre eles e deixando todos em uma classe padrão.

Iremos verificar a banda que está disponível em nossa interface de rede para que possamos colocar métricas de utilização:













Então seguindo esse gráfico iremos delimitar o download em nossa rede da seguinte forma:

Serviços Porta Minimo (Mb/s) Maximo (Mb/s)
HTTP/HTTPS 80/443/TCP 4Mbit 5Mbit
FTP 21/TCP 1Mbit 1,5Mbit
POP 110/TCP 1Mbit 1,2Mbit
SMTP 25/TCP 1Mit 1,2Mbit
SSH 22/TCP 1,5Mbit 2Mbit
DNS 53/UDP 0,5Mbit 0,7Mbit
Default 5Mbit 7Mbit


Temos aqui uma tabela simples de valor minimo e valor máximo oque seria isso? Basicamente se um serviço esta precisando de mais banda ele pega emprestado da politica que estiver mais disponivel.

Quando realizamos um download é medido em Byte por segundo e iremos aplicar essas regras em bit por segundo para ser claro:

1 Byte = 8 bits

Então em um download em torno de 350KByte/s temos uma tranferencia em 2,800Kbit ( 350*8 = 2800 ). Então podemos continuar.

Aplicando


O tc trabalha com disciplinas de filas ( Queuing Disciplines ) que na linha de comando será “qdisc”, essa qdisc sempre será presente por se tratar de uma raiz da regra.

Dentro dessa raiz chamada root criamos ramificações que declaramos como classe, nessas classe podemos estipular tamanho do tráfego total que essa classe irá adquirir e dentro dela criar mais classes filhas onde podemos estipular uma banda minima e maxima.

Essas classes filhas já criadas iremos adicionar filtro de tráfego através do firewall para que entre nessas filas ( classes ) e obdecendo a politica de descarte de acordo com a classe.
Pronto já que entendemos a teoria iremos partir para prática, iremos basear em script de configuração para que torne futuras modificações mais flexível.

Nosso script chamará “QOS.sh” e configuramos para que sejá inicializado junto com o sistema:
# vi /etc/rc.local
/bin/bash /root/QOS.sh

Iremos criar nosso script dando permissão de execução:
# touch /root/QOS.sh
# chmod +x /root/QOS.sh

Logo após vamos começar a editar nosso script para que seja aplicado nosso QOS, lembrando que será todo documentado:
# vi /root/QOS.sh

# Scritpt de QOS – Projeto Uninove
# by: Rafael G. de Matos


################################################################
# Controle de DOWNLOAD
################################################################


# Variavel
export DOWN=eth0


# Apagando configuracao existentes
tc qdisc del dev $DOWN root


# Criando diciplina de filas raiz ( root ), especificando o default 1:10
tc qdisc add dev $DOWN root handle 1:0 htb default 10


# Adicionando classes pai, especificando a velocidade da placa 10/100/1000M
tc class add dev $DOWN parent 1:0 classid 1:1 htb rate 1000mbit


# Criando classes filhas
tc class add dev $DOWN parent 1:1 classid 1:10 htb rate 5mbit ceil 7mbit
tc class add dev $DOWN parent 1:1 classid 1:20 htb rate 4mbit ceil 5mbit
tc class add dev $DOWN parent 1:1 classid 1:30 htb rate 1mbit ceil 1500kbit
tc class add dev $DOWN parent 1:1 classid 1:40 htb rate 1mbit ceil 1200kbit
tc class add dev $DOWN parent 1:1 classid 1:50 htb rate 1mbit ceil 1200kbit
tc class add dev $DOWN parent 1:1 classid 1:60 htb rate 1500kbit ceil 2mbit
tc class add dev $DOWN parent 1:1 classid 1:70 htb rate 500kbit ceil 700kbit


# Pronto nosso script já está pronto, agora só precisamos aplicar os filtros com o “iptables”
# Limpando cadeia de regras
iptables -t mangle -F FORWARD


# Adiconando marcação de pacote para suas respectivas classes, lembrando que default nao precisa
iptables -t mangle -A FORWARD -o eth0 -p tcp --sport 80 -j CLASSIFY --set-class 01:20
iptables -t mangle -A FORWARD -o eth0 -p tcp --sport 443 -j CLASSIFY --set-class 01:20
iptables -t mangle -A FORWARD -o eth0 -p tcp --sport 21 -j CLASSIFY --set-class 01:30
iptables -t mangle -A FORWARD -o eth0 -p tcp --sport 110 -j CLASSIFY --set-class 01:40
iptables -t mangle -A FORWARD -o eth0 -p tcp --sport 25 -j CLASSIFY --set-class 01:50
iptables -t mangle -A FORWARD -o eth0 -p tcp --sport 22 -j CLASSIFY --set-class 01:60
iptables -t mangle -A FORWARD -o eth0 -p udp --sport 53 -j CLASSIFY --set-class 01:70


# Pronto

Agora devemos executar o script:
# /root/QOS.sh

Testando QOS


Agora veremos o que esta sendo utilizado em cada classe conforme o comando:
# tc -s -d class show dev eth0





























Na imagem podemos com mais detalhe cada classe criada e suas respectiva informações referente a banda minima e maxima, pacotes enviados, taxa de rate ( quanto esta sendo utilizado atualmente ) e outras informações adicionais

Para que nosso teste seja mais dinâmico iremos fazer um download de uma imagem do Debian antes e depois da aplicação do QOS:


















Na imagem conseguimos ver que o link bateu 1,318KB/s, após a ativação do QOS no momento do download olha o que podemos ver:


















O Download diminui e bateu 336KB/s multiplicando esse valor conseguimos 2688kbit, lembrando que no momento do teste estáva com contante tráfego em rede, mas o mesmo ficou abaixo do limite estipulado.

Conclusão


O TC é uma boa ferramenta para delimitar banda para os usuários em nossa rede, muito utilizado para empedir mal uso do link evitando que seja mal utilizado por programas de P2P e entre outros.

Bibliografia

Guia do Hardware - http://www.hardware.com.br/
Funtoo - http://www.funtoo.org/Traffic_Control
Linux Controle de Redes - André Stato Filho




Comentários

  1. Legal, é justamente isso que estou procurando para implementar em minha rede, obrigado por compartilhar seu conhecimento, será de grande valor!

    ResponderExcluir
  2. Aguarde que terá muito mais, muito obrigado.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

QOS Intermediário - Implantação em cliente real

Implantação de QOS - Intermediário Introdução Nessa etapa seguiremos novamente o caminho do controle de tráfego, mas com uma pitada mais avançada delimitando por classes e em tempo real. Nessa video aula trará um pouco de shell-script junto com controle de tráfego e passando um pouco que vai ser um dos próximos tópicos que é o ZABBIX. O video realmente ficou extenso, porque tentei documentar ao máximo cada parte e explicar o porque da utilização de cada função.

Zabbix - Entendendo Agentes

Zabbix Agente - Instalação e configuração Introdução O Zabbix trabalha em sua estrutura basicamente duas funções como: Gerente - Zabbix que armazena informações e entre outras, agindo como Servidor ) Agente - Zabbix instalado em hosts que coleta informações para serem enviadas ao gerente.  O que iremos entender nesse tutorial é os modos como os agentes trabalha ativo e passivo. Ativo - Ele envia os dados para o servidor ( gerente ), muito utilizado quando o host está em outras redes através de firewall. Passivo - Ele aguarda solicitação do servidor ( gerente ) para a entrega dos dados. A configuração do agente e de acordo com as nossas necessidades no momento.

IDS Sistema detecção de intrusão - FAIL2BAN

IDS com FAIL2BAN Introdução IDS é um sistema de detecção de intrusos que podemos implementar em dois segmentos em rede e sistema. Iremos abordar o fail2ban, uma poderosa ferramenta contra tentativas de força bruta ( meio de ataque através de diversas tentativas de acesso ), esse serviço é muito utilizado em servidores que respondem diretamente a internet, a configuração acaba sendo muito útil para bloqueio sendo sua principal vantagem a velocidade. Funcionamento Partindo de analises rigorosas de log como tentativas repetitivas de falhas como por exemplo em uma tentativa de acesso via SSH em nosso firewall: Jun 28 20:24:13 serv-firewall unix_chkpwd[1491]: password check failed for user (root) Jun 28 20:24:13 serv-firewall sshd[1489]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost= 192.168.122.1 user= root Jun 28 20:24:15 serv-firewall sshd[1489]: Failed password for root from 192.168.122.1 port