[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