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.