Ajuda para configurar o Shaper

1. Ajuda para configurar o Shaper

Thiago Boaventura
xtg

(usa Ubuntu)

Enviado em 23/03/2011 - 17:33h

Olá, tenho um colega de trabalho que tem um servidor Ubuntu e notei algumas configurações muito úteis. Ele controla todos os seus usuários por um único arquivo, onde define está definido, id nome, o endereço IP escolhido, a velocidade de conexão, a taxa de download, a taxa de upload, o endereço MAC, a prioridade e por fim, "A", ativo ou "B", bloqueado.

Porém acho que o tutorial está incorreto, então gostaria da ajuda de vocês para resolver esse problema.

Segue o tutorial:


Cadastramento dos Clientes

Os seus clientes serão cadastrados no arquivo "/etc/provedor/clientes". Crie esse arquivo:

# pico /etc/provedor/clientes

Agora preencha esse arquivo como exemplo:

0010|novo-teste|192.168.0.7|128|12|8|00:E0:06:EF:7F:D8|3|A
0011|teste|192.168.0.3|256|30|15|00:0B:CD:A4:AE:2C|5|B


Cada linha corresponde a um cliente. Os campos são separados com "|" (pipe-line). O primeiro campo é o código do cliente, inicie a partir de 0010, sempre com 4 dígitos. Em seguida o nome, o endereço IP escolhido, a velocidade de conexão, a taxa de download, a taxa de upload, o endereço MAC, a prioridade (quanto mais baixo mais prioridade) e por fim, "A", ativo ou "B", bloqueado.

O script que lê essas informações será o "configurador.sh", crie-o na mesma pasta e depois dê permissão de execução

# touch /etc/provedor/configurador.sh
# chmod +x /etc/provedor/configurador.sh
# pico /etc/provedor/configurador.sh

A explicação do seu funcionamento vem em seguida. Cole o conteúdo:

#!/bin/bash
# script criado por Tiago Andre Geraldi - virgulla@gmail.com

rm -f /etc/shaper/*
rm /etc/provedor/users.sh
touch /etc/provedor/users.sh
chmod +x /etc/provedor/users.sh

LISTA=`cat /etc/provedor/clientes`
for CLIENTE in $LISTA; do
CODIGO=`echo $CLIENTE | awk -F "|" '{print $1}'`
NOME=`echo $CLIENTE | awk -F "|" '{print $2}'`
IP=`echo $CLIENTE | awk -F "|" '{print $3}'`
CON=`echo $CLIENTE | awk -F "|" '{print $4}'`
DOWN=`echo $CLIENTE | awk -F "|" '{print $5}'`"kbit"
UP=`echo $CLIENTE | awk -F "|" '{print $6}'`"kbit"
MAC=`echo $CLIENTE | awk -F "|" '{print $7}'`
PRIO=`echo $CLIENTE | awk -F "|" '{print $8}'`
STAT=`echo $CLIENTE | awk -F "|" '{print $9}'`
# checa se esta ativado
if [ "$STAT" = "A" ]; then

UPLOAD="/etc/shaper/cbq-"$CODIGO"."$NOME"_upload"
DOWNLOAD="/etc/shaper/cbq-"$CODIGO"."$NOME"_download"
touch $UPLOAD
touch $DOWNLOAD
chown 755 /etc/shaper/*

# eth1 corresponde a interface de rede conectada aos usuarios
# mude se necessario

echo "DEVICE=eth1,100Mbit,10Mbit" >> $UPLOAD
echo "RATE=$CON""KBit" >> $UPLOAD
echo "WEIGHT=$UP" >> $UPLOAD
echo "PRIO=$PRIO" >> $UPLOAD
echo "BOUNDED=yes" >> $UPLOAD
echo "ISOLATED=yes" >> $UPLOAD
echo "MARK=30" >> $UPLOAD

echo "DEVICE=eth1,100Mbit,10Mbit" >> $DOWNLOAD
echo "RATE=$CON""KBit" >> $DOWNLOAD
echo "WEIGHT=$DOWN" >> $DOWNLOAD
echo "PRIO=$PRIO" >> $DOWNLOAD
echo "RULE=""$IP" >> $DOWNLOAD
echo "BOUNDED=yes" >> $DOWNLOAD
echo "ISOLATED=yes" >> $DOWNLOAD

echo "iptables -t nat -A POSTROUTING -s $IP"" -j MASQUERADE" >> /etc/nat/users.sh
echo "iptables -A FORWARD -s $IP"" -j ACCEPT" >> /etc/nat/users.sh
echo "iptables -A FORWARD -d $IP"" -j ACCEPT" >> /etc/nat/users.sh

arp -s $IP $MAC

fi

done

sh /etc/provedor/firewall.sh
/etc/init.d/shaper restart

## FIM DO ARQUIVO ##


O script trabalha com a pasta /etc/shaper onde fica o controle de banda, também usa o arquivo /etc/provedor/users.sh que será criado pelo script e que será lido pelo firewall que criaremos depois. Neste arquivo fica a habilitação de internet para os IPs cadastrados.

A primeira coisa que ele faz é apagar os arquivos atuais. Em seguida ele lê o "/etc/provedor/clientes" e guarda em variáveis, cria os arquivos do controle de banda e o "/etc/provedor/users.sh" atualizado. Dá o comando "arp" que prende o Ip ao MAC e por último reinicia o serviço de controle de banda e re-executa o firewall.

Sempre que fizer alguma alteração nos cadastros basta que você execute o configurador:

# sh /etc/provedor/configurador.sh

Mas calma, você ainda precisa criar o firewall, senão nada funcionará.


Firewall


Crie o arquivo "/etc/provedor/firewall.sh" com o conteúdo abaixo (fique atento nos comentários). Depois de salvar dê permissão de execução.

#!/bin/bash
# Esse script criado por Tiago André Geraldi é baseado
# no firewall criado por Carlos Morimoto para o Kurumin Linux

## limpa as tabelas das regras, nada a ser mudado aqui
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t filter -F
iptables -t filter -X
iptables -t mangle -F
iptables -t mangle -X

# habilita internet para os usuários cadastrados
sh /etc/nat/users.sh

# Marcacao de pacotes para controle de banda. Mude a faixa de IPs de acordo com a sua
for i in `seq 2 254`
do
iptables -t mangle -A POSTROUTING -s 192.168.0.$i -j MARK --set-mark $i
done

# Habilita roteamento
echo 1 > /proc/sys/net/ipv4/ip_forward

# Habilita PROXY TRANSPARENTE
# mude a interface rede se eth1 não for a interface conectada ao wireless
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128


# Abre uma porta (inclusive para a Internet). Neste caso apenas deixamos aberto o acesso para SSH, Proxy e DNS.

iptables -A INPUT -p tcp --destination-port 22 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 53 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 3128 -j ACCEPT
iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT

# Proteções diversas contra portscanners, ping of death, ataques DoS, etc.
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
iptables -A FORWARD -m unclean -j DROP

# Abre para a interface de loopback.
iptables -A INPUT -i lo -j ACCEPT

# BLOQUEA O QUE NAO SE ENCAIXA NAS REGRAS ACIMA
iptables -A INPUT -p tcp --syn -j DROP
iptables -P FORWARD DROP

## FIM DO ARQUIVO ##



Conclusão


Depois dos passos anteriores, seu servidor já pode ser executado:

# sh /etc/provedor/configurador.sh

Coloque essa linha sem o "#" no arquivo /etc/init.d/bootmisc.sh para que seja executado automaticamente na inicialização. Em distribuições não Debian você deve usar o "/etc/rc.d/rc.local".

Agora você precisa pegar o endereço MAC dos seus clientes definir um IP pra cada um e cadastrar todos. O gateway e DNS para os clientes é o IP do seu servidor, no exemplo 192.168.0.1.

Existe muitas possibilidades de implementação de um servidor para provedor. A forma que utilizei torna a configuração nos clientes trabalhosa mas infelizmente a tecnologia wireless não oferece segurança tolerável mesmo usando criptografia. Acredito ser essa a melhor opção.

Tratei aqui de forma abstrata os serviços como proxy, DNS e firewall. Eles são ferramentas poderosíssimas. Se procura soluções diferentes ou deseja implementar novos recursos você encontrará material abundante aqui mesmo neste site.


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts