Montando um servidor PPPoE com autenticacao por radius + controle de volume de usuarios (Parte 3)

<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } –>

3) Montagem do controle de volume de usuários. (IPA – IP Accounting Software)
—————————————————————————

Primeiramente vou explicar o que é controle de volume de usuários.

Essa parte pode ser uma das mais uteis para empresas e para serviços de
banda larga, isso porque traves do IPA ( IP Accounting Software ) que eh
o programa q utilizaremos aqui e também está em anexo, nós podemos controlar o
trafego dos usuários por IP ( por isso eh tão importante setar o IP do
usuário no radius).

Por ex, vamos supor que você gostaria q o usuário joao que sempre conecta
com o IP 192.168.3.3 (setado no radius) só pudesse trafegar 15MB por dia,
e que se ele ultrapasse esse limite ele seria bloqueado, sendo
desbloqueado automaticamente no outro dia e ainda seria direcionado
para uma pagina falando q ele ultrapassou o seu limite diário.

Com o IPA isso q foi descrito acima eh possível, eh o que veremos abaixo.

Primeiro pegue o ipa em http://www.simon.org.ua/ipa e descompacte-o e instale-o:

# tar zxfv ipa-1.1.3.tar.gz
# cd ipa-1.1.3
# make
# make install
# cd /usr/local/etc/rc.d; mv ipa.sh.sample ipa.sh

O arquivo de configuração do ipa fica em /usr/local/etc/ipa.conf eh
nele que são colocadas todas as configurações.

Usaremos no arquivo de configuração o exemplo citado acima, mas você pode
muda-lo de acorda com suas necessidades.

Edite e coloque no /usr/local/etc/ipa.conf as seguintes linhas:

global {
update_db_time = 1m
}
rule 192.168.3.3 {
ipfw = 214 215
startup {
exec = /sbin/ipfw add 214 allow all from 192.168.3.3 to any
exec = /sbin/ipfw add 215 allow all from any to 192.168.3.3
}
limit 15m {
byte_limit = 15m
info = 15 Mbytes por dia
zero_time = +d
reach {
exec = /sbin/ipfw add 210 fwd 192.168.1.1,80 tcp from 192.168.3.3 to any 80
exec = /sbin/ipfw add 211 deny tcp from any to 192.168.3.3
}
expire {
expire_time = +d
exec = /sbin/ipfw del 210
exec = /sbin/ipfw del 211
}
}
}

Salve o arquivo.

Vou agora explicar parte por parte da configuração para que caso você queira
mudar/adicionar mais coisas, fique fácil:

global {
update_db_time = 1m
}

# Essa linha como o próprio nome diz, ela eh global, será lida
# por todas as regras. O update_db_time significa de quanto em quanto
# tempo será feito o update do volume de dados trafegados pelo(s) IP(s).

————————

rule 192.168.3.3 {

# “rule” no caso seria o nome da regras, ai fica a critério de cada um
# dar o nome que quiser a regras, mas em nosso caso eh melhor dar o nome
# da regra o numero IP para que não fique confuso.

———————-

ipfw = 214 215
startup {
exec = /sbin/ipfw add 214 allow all from 192.168.3.3 to any
exec = /sbin/ipfw add 215 allow all from any to 192.168.3.3
}

# Essas regras sao iniciadas na inicialização do ipa, elas são muito
# importantes pois eh atraves delas eh q se faz a contagem do numero de
# bytes utilizado pelo IP.

————————

limit 15m {
# Caso queira mudar o limite você pode alterar para Nk, Nm, Ng onde “N” eh o
# numero de limite “k” kbytes, “m” mgbytes e “g”, gigabytes.

byte_limit = 15m
# Caso queira mudar o limite você pode alterar para Nk, Nm, Ng onde “N” eh o
# numero de limite “k” kbytes, “m” mgbytes e “g”, gigabytes.

info = 15 Mbytes por dia
# Somente uma informação para controle. você pode alterar com o seu limite
# desejado.

zero_time = +d
# zero_time, significa quando sera zerada a contagem de bytes, +d significa
# que sera zerada no próximo dia, você pode usar Ns, Nm, Nh, +d, +m onde
# “N” eh o tempo, “s” segundos, “m” megabytes e “h” hora, +d dia e +m mes.

reach {
# Caso atinja o limite executar os comandos abaixo:

exec = /sbin/ipfw add 210 fwd 192.168.1.1,80 tcp from 192.168.3.3 to any 80
# Essa linha de execução do ipfw eh importante pois eh ela que redireciona
# o usuário para a pagina do servidor falando q ele ultrapassou o seu
# limite. Troque o IP 192.168.1.1 para o IP do seu servidor e o IP
# 192.168.3.3 para o IP do seu cliente. Com isso quando chegar ao limite dele
# ele ao tentar acessar uma pagina cairá diretamente na pagina do
# servidor.

exec = /sbin/ipfw add 211 deny tcp from any to 192.168.3.3
# Essa linha bloqueia qualquer pacote tcp vindo de qualquer
# cliente de IP 192.168.3.3

————————

expire {
# expiracao

expire_time = +d
# tempo de expiracao, esse sera quanto tempo o usuário ficara bloqueado,
# por ex: como acima esta “+d” significa que ele sera desbloqueado, para
# que possa acessar novamente somente no outro dia. Pode ser usado também Ns,
# Nm, Nh onde “N” eh o tempo, “s” segundos, “m” minutos e “h” hora.

exec = /sbin/ipfw del 210
exec = /sbin/ipfw del 211
# Depois um dia bloqueado, eh liberado novamente o acesso do usuário eh
# deletando-se a regras 210 e 211 do ipfw

Agora seu ipa esta pronto para ser usado. Eh importante ressaltar que no
arquivo ipa.conf você pode acrescentar quantos IPs quiser basta criar uma
nova “rule” para cada IP. Por ex vamos supor que quero criar regras para
3 IPs 192.168.2.1, 192.168.2.2 e 192.168.2.3 ai neste caso ficaria assim:

global {
update_db_time = 1m
}
rule 192.168.2.1 {
ipfw = 214 215
startup {
exec = /sbin/ipfw add 214 allow all from 192.168.2.1 to any
exec = /sbin/ipfw add 215 allow all from any to 192.168.2.1
}
limit 100k {
byte_limit = 100k
info = 100 Kbytes por dia
zero_time = +d
reach {
exec = /sbin/ipfw add 210 fwd 192.168.1.1,80 tcp from 192.168.2.1
to any 80
exec = /sbin/ipfw add 211 deny tcp from any to 192.168.2.1
}
expire {
expire_time = +d
exec = /sbin/ipfw del 210
exec = /sbin/ipfw del 211
}
}
}

rule 192.168.2.2 {
ipfw = 224 225
startup {
exec = /sbin/ipfw add 224 allow all from 192.168.2.2 to any
exec = /sbin/ipfw add 225 allow all from any to 192.168.2.2
}
limit 10m {
byte_limit = 10m
info = 10m Mbytes por dia
zero_time = +d
reach {
exec = /sbin/ipfw add 220 fwd 192.168.1.1,80 tcp from 192.168.2.2
to any 80
exec = /sbin/ipfw add 221 deny tcp from any to 192.168.2.2
}
expire {
expire_time = 1h
exec = /sbin/ipfw del 220
exec = /sbin/ipfw del 221
}
}
}

rule 192.168.2.3 {
ipfw = 234 235
startup {
exec = /sbin/ipfw add 234 allow all from 192.168.2.3 to any
exec = /sbin/ipfw add 235 allow all from any to 192.168.2.3
}
limit 1g {
byte_limit = 1g
info = 1 Gbytes por dia
zero_time = 1h
reach {
exec = /sbin/ipfw add 230 fwd 192.168.1.1,80 tcp from 192.168.2.3
to any 80
exec = /sbin/ipfw add 231 deny tcp from any to 192.168.2.3
}
expire {
expire_time = 10s
exec = /sbin/ipfw del 230
exec = /sbin/ipfw del 231
}
}
}

Caso você queria informa coes sobre como esta um determinado IP, pode-se usar
o ipastat que mostra estatísticas de cada IP, a sintaxe de uso eh:

# ipastat -r regras -l limite

Ex:

# ipastat -r 192.168.2.1 -l 100k
+————-+———–+——-+——————–+
| Rule | Rule.Info | Limit | Limit.Info |
+————-+———–+——-+——————–+
| 192.168.2.1 | | 100k | 100 Kbytes por dia |
+————-+———–+——-+——————–+
+——-+————+——–+————+
| Cntr | Byte_limit | Cntr | Byte_limit |
| Bytes | Bytes | Mbytes | Mbytes |
+——-+————+——–+————+
| 0 | 102400 | 0 | 0 |
+——-+————+——–+————+
+——–+———————+
| Status | Date |
+——–+———————+
| Start | 2001.07.11/18:36:59 |
| Zero | 2001.07.12/00:00:00 |
+——–+———————+

Para outras regras do ipastat digite:
# ipastat –h

Para maiores detalhes sobre o ipa recomendo as manpages dele
# man ipa
# man ipa.conf

Há também otimos exemplos de configuração do IPA em:
/usr/local/share/ipa/examples

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: