[FUG-BR] RES: Captive Portal

Fabrício Fadel Kammer ffkammer em conchalnet.com.br
Quarta Julho 12 14:17:08 BRT 2006


Fiz um esquema parecido aqui, o shell script que roda no cron verifica a
última vez que um pcte "bateu" na regra do cliente, caso esse tempo seja
maior que o timeout (3600 segundos) o script apaga a regra IPFW do
cliente.

Para verificar a última vez que qq tráfego bateu em uma determinada
regra, vc pode usar o seguinte:

ultuso=`/sbin/ipfw -cT show $REGRA 2>&1 | awk '{print $4}' | sed '1q'`;

Dessa forma você armazena na variável ultuso o horário em que a $REGRA
foi executada pela última vez.

Aí basta vc comprar se está dentro do timeout esperado:

#Calcula qual é o horário limite para manter a regra ativa sem tráfego
(TIMEOUT)
limite=`date +%s`;
limite=$(($limite-3600));
if [ $limite -ge $ultuso ]; 
then
  #Exclui a $REGRA
  $ipfw_del $REGRA
  #Loga a exclusao da regra por timeout
  echo "`date "+%d/%m/%Y %H:%M:%S"` $ip TIMEOUT" >> $log
fi

Estou usando dessa forma aqui e está funcionando bem... faço um loop em
todos os IPs de minha rede e passo o nr da regra referente a cada IP
para exclusão.
Em meu caso tenho somente um regra para cada cliente pois todos possuem
IP válido para net e os IPs são fixos.

Espero não ter sido muito confuso na explicação

[]s

Fabrício F. Kammer

-----Mensagem original-----
De: freebsd-bounces at fug.com.br [mailto:freebsd-bounces at fug.com.br] Em
nome de m3 BSD Enviada em: quarta-feira, 12 de julho de 2006 13:52
Para: Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)
Assunto: [FUG-BR] Captive Portal


Eae galera.. tudo blz? :)

Seguinte... procurando por solucoes de captive portal, resolvi "tentar"
desenvolver uma solucao propria baseada em FreeBSD. Bom...
primeiramente, jah estao funcionando algumas coisas:
1) O cliente conecta fisicamente na rede, e por dhcp recebe ip, gw, dns.
2) Por padrao, todo o trafego eh bloqueado para a rede do dhcp, porem,
as solicitacoes de tcp porta 80 sao redirecionadas para um webserver (no
caso apache) que exibe a pagina de autenticacao.
3) Ao se autenticar (php+postgresql), o script php gera as regras do
firewall (ipfw) para liberar o trafego, fazer nat, proxy transp e
controle de banda (dummynet)

Bem.. ateh ai esta tudo ok.. tudo certinho.. funcionando corretamente.

Agora, estou comecando a implementar o software que vai monitorar a
tempo de vida das conexoes. Bem, a minha ideia eh essa: um script no
cron de 5 em 5 minutos, le a saida de ipfw show, na terceira coluna, e
verifica no postgresql a ultima contagem de pacotes, se num periodo
predeterminado de tempo os pacotes continuam iguais, ou seja, nao houve
trafego, apaga as regras do firewall e faz o sql colocando o cliente
como desconectado.

La vai: O que vcs acham dessa solucao? Alguem tem uma ideia melhor, mais
limpa, mais elegante?

PS: Essa solucao eh para um cliente que tem um provedor wireless. O
legal eh q se o cara logar e tiver com pendencia financeira, o sistemas
libera  o acesso por 15 minutos.. no maximo 3 vezes ao dia... ateh ele
acertar as contas hehehe.

Atenciosmente

Mario Augusto Mania <m3BSD>
m3.bsd.mania at gmail.com
Cel.: (43) 9938-9629
-------------------------
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd



Mais detalhes sobre a lista de discussão freebsd