Implementando prioridade nos serviços com TOS no Iptables

O conceito de TOS (Type Of Service) permite aplicarmos regras no Iptables para que nosso firewall possa realizar um controle na prioridade dos pacotes que saem e chegam na nossa rede. Dessa forma, podemos garantir que aplicações "úteis" não fiquem prejudicadas pelo tráfego gerado por outros serviços.

[ Hits: 102.866 ]

Por: Jonatas Almeida Brisotti em 11/08/2006


Trabalhando com TOS



O Iptables é um gerenciador das tabelas do Netfilter e é um firewall de quarta geração para Linux. Possui em sua estrutura 3 tabelas padrões:
  • Filter
  • NAT
  • Mangle

cada uma com suas regras específicas para uma determinada função.
  • A tabela Filter contém regras de fluxo de dados aplicadas à função de filtro de pacotes;
  • A tabela NAT regras direcionadas a um firewall NAT e ao encaminhamento e roteamento de pacotes;
  • A tabela Mangle tem funções mais complexas no tratamento de pacotes, como o TOS, por exemplo.

Todas essas tabelas trabalham com situações de entrada e saída de dados para a realização de seus objetivos.

Este artigo pressupõe que você tenha conhecimento de Iptables e será abordada apenas a tabela Mangle, que proporcionará o controle por Tipo de Serviço (TOS). Se você quer saber mais a respeito do Iptables, sugiro primeiro ler outros artigos sobre o seu funcionamento e comandos básicos na Internet ou aqui no site.

Para eficiência no controle por TOS o Firewall tem que ser o ponto de indução da rede e deve usar as regras da tabela Mangle.

Teremos em mente então que TOS será o nome dados a um alvo, como DROP, ACCEPT e REJECT. Esse alvo combinado com o argumento --set-tos vai então aplicar o conceito do controle de tráfego por Tipo de Serviço.

Essa prioridade será setada conforme um bit que será alterado no pacote, e para saber o que é mais importante e o que deve ser tratado como normal temos uma tabela especificando os valores que deverão ser seguidos:


Observamos então que o valor menos significativos nesta tabela na verdade se trata da prioridade normal de um serviço.

Página anterior     Próxima página

Páginas do artigo
   1. Como funciona?
   2. Trabalhando com TOS
   3. Tráfego de saída
   4. Tráfego de entrada
Outros artigos deste autor

Como recuperar a senha de root usando uma live distro

Instalando o VMware no Conectiva 10

Leitura recomendada

Ensinando seu servidor a ler emails e liberar acesso SSH

Desvendando as regras de Firewall Linux Iptables

NAT com firewall - simples, rápido e funcional

Utilizando a ferramenta Iptstate

L7-filter (funcionando) no Slackware 10.2

  
Comentários
[1] Comentário enviado por fabio em 11/08/2006 - 12:32h

Excelente! Acabei de implementar aqui, finalmente poderei navegar e baixar e-mails normalmente sem precisar configurar limite de velocidade de download no meu aMule :P

Um abraço

[2] Comentário enviado por morvan em 11/08/2006 - 14:13h

Excelente, mundoguero. Muito bem explicado. Parabéns pela clareza e pelo detalhamento.

[3] Comentário enviado por arauto em 13/08/2006 - 11:54h

também gostei do artigo. Gostaria de fazer isso pro meu asterisk, mas ainda preciso pesquisar mais um pouquinho.

[4] Comentário enviado por gelemeurer em 13/08/2006 - 14:56h

legal, foi pros favoritos...

valeu!


[5] Comentário enviado por Guesser em 13/08/2006 - 19:59h

Olá,


Exelente artigo, tenho algumas perguntas relacionadas ao seu tópico.

Em qual distribuição será mais facíl de fazer esta configuração?

Esta implementação que você postou se aplica para Internet ou para rede local? Ou os dois?

Desculpe a iguinorância é que sou novato no linux

Valeu obrigado

[6] Comentário enviado por solucoesnandor em 14/08/2006 - 00:16h

Muito bom, em poucas palavras você descreveu o que eu procurava a tempos na internet. :-)
Valew !!

[7] Comentário enviado por fabiolima em 10/11/2006 - 17:09h

Muito bom esse artigo do mundoguero, já estou implementando aqui, parabéns!!!

[]'s

[8] Comentário enviado por eduardofraga em 10/03/2007 - 11:42h

Parabéns pelo artigo. Vou implementar no meu servidor.

[9] Comentário enviado por lanaf em 07/08/2008 - 12:51h

Blz de artigo, bem explicado.
Uma duvida que tive, se eu especificar o Ip e a porta na minha regra do iptables priorizando o trafego desta regra funcionar normalmente ou não.

[10] Comentário enviado por edinhow em 28/10/2008 - 17:13h


esse é realmente um ótimo artigo, retirado de um ótimo livro. que recomendo a todos.
Valeu.

Abraço.





[11] Comentário enviado por wasleyalmeida em 10/02/2009 - 10:48h

Otimo Artigo, vai me ajudar e muito.

Agora uma pergunta (talvez ate idiota) após a implementação tem como testar se a regra TOS esta funcionando corretamente, ou seja se esta tendo prioridade no trafego a ela destina.

Agradeço desde já

Abraços

[12] Comentário enviado por andriopj em 01/03/2009 - 19:19h

exemplo de QoS:
#Esta configuração esta priorizando o tráfego nas portas 80, 53, 3128 e 443, de entrada e saida da rede.
#Caso queira priorizar outros pacotes, mude as portas e set para 16 ou 0x10, que é a mesma coisa.

#saida
iptables -t mangle -A OUTPUT -o eth1 -p tcp --dport 80 -j TOS --set-tos 16
iptables -t mangle -A OUTPUT -o eth1 -p tcp --dport 443 -j TOS --set-tos 16
iptables -t mangle -A OUTPUT -o eth1 -p udp --dport 53 -j TOS --set-tos 16
iptables -t mangle -A OUTPUT -o eth1 -p tcp --dport 3128 -j TOS --set-tos 16
iptables -t mangle -A OUTPUT -o eth1 -p udp --dport 3128 -j TOS --set-tos 16

#entrada
iptables -t mangle -A PREROUTING -i eth1 -p tcp --sport 80 -j TOS --set-tos 0x10
iptables -t mangle -A PREROUTING -i eth1 -p udp --sport 53 -j TOS --set-tos 0x10
iptables -t mangle -A PREROUTING -i eth1 -p tcp --sport 443 -j TOS --set-tos 0x10
iptables -t mangle -A PREROUTING -i eth1 -p tcp --sport 3128 -j TOS --set-tos 0x10
iptables -t mangle -A PREROUTING -i eth1 -p udp --sport 3128 -j TOS --set-tos 0x10

[13] Comentário enviado por eduardofraga em 02/03/2009 - 19:56h

Uma dica é sempre inserir as regras da tabela "mangle" no inicio do script, pois estas são lidas primeiro pelo iptables.

[14] Comentário enviado por danistation em 21/12/2010 - 15:20h

Parabéns pelo post. Fui sucinto na explanação além de utilizar vocabulário simples e boa analogia.

Gostaria de fazer apenas um apelo: Poderia nos explicar melhor a diferença entra as opções da tabela ToS? Qual a diferença entre:

Espera mínima, processamento máximo, confiança máxima, custo mínimo?? Fisicamente, se eu entregar diversos pacotes com diversos ToS setados, como o router iria trabalhar esse monte de pacotes com prioridades diferentes? Quem seria privilegiado entre o outro? Julgo isso importante pois dependendo do tipo de dados que queremos priorizar, alguma regra não poderia não ser tão recomendada quanto alguma outra... Pode nos explicar melhor sobre a diferença entre essas prioridades??? Grande abraço!

[15] Comentário enviado por lpossamai em 06/09/2011 - 17:22h

Boa tarde.

Eu quero priorizar o tráfego em algumas portas, tanto na saída como na entrada.
Seria certo por assim?:

echo "Priorizando o trafego. Tabela mangle"
## PRIORIZANDO OS TRAFEGOS ##

iptables -t mangle -A OUTPUT -o $EXT -p tcp --dport 22 -j TOS --set-tos 16 ## Priorizando porta ssh
iptables -t mangle -A PREROUTING -i $EXT -p tcp --sport 22 -j TOS --set-tos 16

iptables -t mangle -A OUTPUT -o $EXT -p tcp --dport 5947 -j TOS --set-tos 16 ## Priorizando porta vnc Anderson
iptables -t mangle -A PREROUTING -i $EXT -p tcp --sport 5947 -j TOS --set-tos 16

iptables -t mangle -A OUTPUT -o $EXT -p tcp --dport 5948 -j TOS --set-tos 16 ## Priorizando porta vnc Lucas
iptables -t mangle -A PREROUTING -i $EXT -p tcp --sport 5948 -j TOS --set-tos 16

iptables -t mangle -A OUTPUT -o $EXT -p tcp --dport 5949 -j TOS --set-tos 16 ## Priorizando porta vnc Ricardo
iptables -t mangle -A PREROUTING -i $EXT -p tcp --sport 5950 -j TOS --set-tos 16

iptables -t mangle -A OUTPUT -o $EXT -p tcp --dport 5950 -j TOS --set-tos 16 ## Priorizando porta vnc Rodrigo
iptables -t mangle -A PREROUTING -i $EXT -p tcp --sport 5950 -j TOS --set-tos 16

iptables -t mangle -A OUTPUT -o $EXT -p tcp --dport 5951 -j TOS --set-tos 16 ## Priorizando porta vnc Fernando
iptables -t mangle -A PREROUTING -i $EXT -p tcp --sport 5951 -j TOS --set-tos 16

iptables -t mangle -A OUTPUT -o $EXT -p tcp --dport 5500 -j TOS --set-tos 16 ## Priorizando porta VNC
iptables -t mangle -A PREROUTING -i $EXT -p tcp --sport 5500 -j TOS --set-tos 16

Fazendo isso, eu deixo as outras portas, como por exemplo 53, não prioritárias, isso?
Obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts