[FUG-BR] Portal Cativo
Jorge Aldo
jorgealdojr em bol.com.br
Quarta Junho 25 08:58:01 BRT 2008
Seguinte, desenvolvi uma aplicacao de portal cativo que autentica
usuarios contra um banco de dados sqlite (bem, depois posso mudar isso
pra outra tecnologia, não é muito complicado).
O processo se dá em algumas etapas :
1 - Requisição original é interceptada e enviada para o servico
redirecionador
O servico redirecionador analisa o pedido e envia uma página com uma tag
<meta http-equiv="refresh" bla bla bla, com o endereço original num
campo originalurl da query (para posterior uso) e com a query apontando
para o servico do portal
2 - o servico do portal envia uma tela de login (configuravel) para o
usuario (em https)
3 - o usuario loga, se por algum motivo não for autenticado, recebe uma
mensagem de erro.
4 - se for autenticado, eh enviado para uma nova página de
redirecionamento que decodifica o endereco originalmente requisitado e o
redireciona para lá com uma nova
meta tag.
o servidor mantem um "serviço pingador" que envia alguns pings para as
maquinas em estado "ativo" pra ver se elas ainda estao no ar. Quando uma
maquina é desligada, não responde o ping e é marcada novamente como não
logada.
na partida do servico ele chama um script chamado startall.sh e, para
cada cadastrada no banco de dados, chama um script start.sh com id e ip
como parametros
quando um usuario loga, o sistema chama um script chamado login.sh com
id, ip, bandadesubida e bandadedescida como parametros
quando um usuario eh derrubado (por algum motivo inclusive se nao
responder a 3 pings seguidos) o sistema chama um script chamado
logout.sh com id e ip como parametros
meu problema consiste no seguinte :
Preciso fazer esses scripts de forma eficiente, meu objetivo eh
desenvolver uma boa solução de portal cativo + controle de banda
individual + squid proxy/cache para pequenos provedores wireless.
não sei nem por onde comecar com esses scripts ! já fiz alguns, estou
botando eles em campo agora para fazer testes.
Fiz alguns testes nos servicos usando openload e o servidor suportou
+50k requisições no total (nao travou, eu que cansei de esperar hehe) e
parece estavel..
Para funcionar, ele de uma regra que faça os pacotes saindo da rede em
direcao a porta 80 sejam redirecionados para a porta do servico de
redirecionamento (configurei ele na porta 1932)
creio que o uso simultaneo do squid vai requerer que essa regra de
redirecionamento seja apagada assim que o usuario fique online,
substituindo-a por uma nova regra de redirecionamento desta vez
apontando para o squid (em modo transparente).
Bem, todo esse trabalho eu pretendo publicar na licença BSD, mas ainda
não posso faze-lo incialmente.
Mais detalhes sobre a lista de discussão freebsd