-> Introdução
-> Baixando os arquivos
-> No kernel : Aplicando o path e compilando sem dor de cabeça
-> No Iptables : Aplicando o path e compilando
-> Regras de policiamento de tráfego do Iptables ( no Firewall )
-> O Sistema Pronto: Regras de qdisc e classes utilizando o HTB e as interfaces intermediárias IMQ*.
-> Concluindo
O IMQ, interface intermediaria de enfileiramento, trabalha junto as regras de qdisc a fim de suprir algumas limitações básicas destas regras. Estas limitações são caracterizadas por exemplo, pelo fato de não haver possibilidade de controle e configuração do tráfego INGRESS (UPLOAD, por exemplo), podendo haver controle apenas no tráfego de saída (egress), característica notável no HTB por exemplo . Além disso, a qdisc visualiza o tráfego de um única interface física.
O IMQ age implementando interfaces intermediárias virtuais , facilitando o policiamento do trafego, já que atua utilizando as Chains PREROUTING (alterando os pacotes no momento que em eles chegam) e POSTROUTING (para alterar os pacotes quando eles estão prestes a saírem) da tabela netfilter, ilustrando interfaces que servem como alvo para estas chains e tornando “manipulável” o trafego de entrada e saída, através destas intermediações ilustrado pelo trafego corrente nas chains.
Optar pela regra de qdisc HTB deve-se a sua estrutura compreensível e funcional no que diz respeito a prover qos , sendo mais visível a estruturação para as classes com organização hierarquica do controle de banda e o tratamento dado a banda ociosa. O HTB apesar da funcionalidade inteligente e a fácil compreensão de sua estrutura de regras e classes, é também dotado de limitações típicas a qdisc, necessitando trabalhar em conjunto com as interfaces virtuais intermediarias criadas através do IMQ.
Este artigo abordará desde a compilação e preparação do Kernel para utilização do sistema até a script pronto a ser utilizado .
Para este artigo foram utilizados:Kernel :
Versões mais atualizadas foram utilizadas pela necessidade de utilização de versões de programas com bugs e falhas corrigidos pela comunidade.
É interessante por medidas de organização que os fontes e paths sejam baixados em /usr/src/ . Desta forma:
- No kernel : Aplicando o path e compilando sem dor de cabeça
Alguns problemas típicos a compilação do Kernel podem ser evitados se algumas opções, necessárias a inicialização do sistema, forem habilitadas.Descompactando os fonstes do Kernel:
- # tar -xvjf linux-2.6.18.1.tar.bz2
Crie um link SIMBÓLICO para a pasta descompactada:
- # ln -s linux-2.6.18.1 linux
Entre na pasta :
Vamos adicionar o path do IMQ ao Kernel:
- # patch -p1 < ../linux-2.6.18-imq1.diff
E agora muita atenção, disponibilizo um arquivo config com as opções necessárias habilitadas, ainda sim é necessário compilar algumas opções de arcordo a sua realidade e necessidade como processador , hd , driver de dispositivos e também desmarcar o que não for necessário. Se não quiser alterar logo de início creio que funionará do mesmo jeito, vale a pena tentar . baixe o arquivo config e depois copie para a pasta dos fontes do kernel:
- # cp config /usr/src/linux/.config
Agora é Hora de adequar o Kernel a suas necessidades, vamos lá:
Na pasta de fontes do kernel digite :
Um menu aparecerá com as opções, para funcionamento do imq algumas opções devem estar habilitadas:
Em NETWORK –> NETWORK OPTIONS –> [*] NETWORK PACKET FILTERING (REPLACES IPCHAINS) –>
Em “Core Netfilter configuration” – Marcar todas opções como Modulo (M)”
Em “IP: Netfilter configuration” – é recomendavel marcar com Built in [*] as opções subsequentes a
“Connection Tracking ( required for fitering/masq/nat)”
Requisitos de redes e do iptables prontos.
No menu principal direcione-se a
“Device Drivers” –>”Network device support ” habilita-se a opção com built in “<*> IMQ (intermediate queueing device) Support “ .Encontra-se também as opções “IMQ BEHAVIOR (PRE/POSTROUTING )” selecionar a opção “(IMQ BB)” .
Há ainda outra opção referencte ao IMQ em Network device , a opção “( ) Number of IMQ device ” setar 2 nesta opção, pois iremos trabalhar com a imq0 e imq1 .
As configurações necessárias para funcionamento do IMQ estão habilitadas. Vale lembrar que no config que disponibilizei , estas opções já encontram-se devidamente habilitadas e configuradas
mas por caráter de conhecimento vale a pena navegar pelas opções.
É necessário certificar sobre as opções referentes as regras de qdisc , opções de prioridade e enfileiramento assim como o próprio taffic-control (tc) que age junto ao qdisc e seus filtros . Costumo habilitar todos como Built in .
No menu principal de configuração do Kernel : Networkin –> Networking options –> Qos and/or fair queueing .Ao compilar o Kernel é comum deparar-se com uma tela preta após escolher o escolher o sistema no gerenciador de inicialização , isso acontece devido a não habilitação da opção “SUPPORT FOR FRAME BUFFER DEVICES “ , esta opção encontra-se na opção no menu principal “Graphics devices “ onde são configurados as proprieadades que caracterizam seu dispositivo de Vídeo, por prover serviços destinados a rede, não é necessário esse tipo de configuração. Para isto recomendo que edite o lilo.conf (gerenciador de boot) da seguinte forma :
Modificando o valor de vga pra normal:
Feito isso , basta apenas digitar lilo para que o gerenciador seja atualizado.
É chegada a Hora de compilar o kernel, ainda dentro /usr/src/linux , após ter saído do menu de configuração do kernel e ter salvo as modificações:
- # make all && make modules_install
É gerada a imagem do Kernel e demais arquivos de configuração para inicialização do sistema. É necessário criar links simbólicos dentro do /boot para que seja carregado com exito a imagem do kernel:
- # cd /boot
- # ln -s /usr/src/linux/System.map System.map
- # ln -s /usr/src/linux/.config config
Caso os links já existam , exclua-os e crie como o exemplo acima. Não é necessário criar um link para a imagem do Kernel, torna-se propício a erros na inicialização do sistema caso o kernel esteja muito grande ( o que não é recomendável ), o link não gerencia a extrapolação do inodes resposáveis pelo setor ocupado pelo arquivo .
Hora de editar o /etc/lilo.conf
Adicionar as seguintes linhas correspondente ao novo Kernel:
image = /usr/src/linux/arch/i386/boot/bzImage
root = /dev/hdX
label = linux-2.6.18
read-only
Depois carregar as configurações do lilo:
- No Iptables : Aplicando o path e compilando
De volta ao diretório onde foram baixados os fontes é hora de descompactar o iptables,
- # cd /usr/src/
- # tar -xjfv iptables-1.3.6.tar.bz2
Cria-se um link simbólico para o iptables
- # ln -s iptables-1.3.6 iptables
- # cd iptables
Agora dentro da pasta com os fontes do iptables é hora de dar permissão de execução aos módulos que nos dará possibilidade de definirmos as interfaces imq como alvo para regras do iptables.
- # chmod +x extensions/.IMQ-test*
Compilando o iptables :
- # make KERNEL_DIR = /usr/src/linux
- # make KERNEL_DIR=/usr/src/linux install
É recomendável a remoção do antigo pacote do iptables instalado, já que a partir de agora o path para execução do iptables são distintos de acordo as versões instaladas , comprometendo a execução ou ainda acarretar em o nao reconhecimento de alguns modulos necessários .
Pronto! Iremos dar início ao processo de implementação , a partir do direcionamento do trafego as interfaces criadas no script de firewall. Podemos reiniciar o sistema.
- Regras de policiamento de tráfego do Iptables ( no Firewall )
O policiamento do tráfego de entrada é tratado pela chain PREROUTING seguindo a sintaxe seguir:
iptables -t mangle -A PREROUTING -i eth1 -j IMQ –todev 0
eth1 trata-se da interface da rede interna, lembre-se que as interfaces imq são interfaces virtuais que intermediam, o tráfego de entrada pro exemplo não é tratado na interface externa , em nosso caso eth0, o que identifica trafego de entrada e saída são as chains PRE/POSTROUTING.
O policiamento do tráfego de entrada é tratado pela chain POSTROUTING seguindo a sintaxe a seguir:
iptables -t mangle -A POSTROUTING -o eth1 -j IMQ –todev 1
- O Sistema Pronto: Regras de qdisc e classes utilizando o HTB e as interfaces intermediárias IMQ*.
O Script é organizado da seguinte forma :
Há arquivos com os ip´s de acordo o plano contratado 64kbits e 128kbits. A localização dos arquivos estão em : /etc/rc.d/hosts.64 e /etc/rc.d/hosts.128 .
Sugiro que leiam um artigo do br-linux para entender a sintaxe de classes e regras de htb para compartilhamento de banda e implementação dos aspectos hierárquicos entre as classes. Não recomendo apenas copiar e colar o script .
Será necessário dar permissão de execução para o arquivo, como o exemplo:
# chmod 711 /etc/rc.d/rc.controle
ou
# chmod +x /etc/rc.d/rc.controle
Para iniciar o controles :
# /etc/rc.d/rc.controle start
Para parar o controle:
# /etc/rc.d/rc.controle stop
Este Artigo abordou os aspectos de implementação de um controle de banda completo , desde o processo de compilação e configuração de Kernel , tendo o cuidado de falar sobre os possíveis erros no processo, feitos de passo a passo , até o script de controle pronto . O artigo não aborda as particularidades de implementação do HTB , apesar de apresentar o script de controle com htb e imq já implementados de forma funcional. Sugiro que leia um artigo do br-linux para maior compreensão, assim como a documentação oficial de ambas tecnologias usadas:
Documentação oficial e didática para o IMQ pode ser encontrada em : http://www.linuximq.net/
Documentação oficial e didática para o HTB pode ser encontrada em : http://luxik.cdi.cz/~devik/qos/htb/
Dúvidas ou contatos profissionais : algodas@gmail.com .