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: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 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> [EMAIL PROTECTED] 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 ------------------------- Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd