Neste artigo apresento a criação de módulo de autenticação e controle de acesso para o Squid, acessando uma base de dados Firebird. Esta necessidade surgiu na empresa em que trabalho, e como não encontrei nada existente na Internet, a solução foi criar um pequeno módulo utilizando o Lazarus.
Não se esqueça de dar permissão de execução para o arquivo fb e copiar para a pasta /usr/lib/squid;
O arquivo "squid.conf" deve ser copiado para a pasta /etc/squid/.
Considerações finais
Neste artigo eu ensinei a instalar todas as ferramentas e criar um sistema de login do Squid baseado no banco de dados Firebird.
O banco de dados Firebird é muito utilizado em sistemas comerciais escritos em Delphi. Caso o seu sistema utilize o Firebird (ou InterBase), você pode integrar o controle de Internet no mesmo banco de dados.
O proposito do artigo foi mostrar que é possível fazer esta integração, mas algumas coisas não foram criadas da forma ideal, pois poderia ser muito complicado explicar o funcionamento.
Entre estas coisas posso, destacar:
O arquivo "squid.conf" foi configurado apenas para chegar o usuário e dar as permissões. Não foi criado sequer um sistema de cache (que é o ponto forte do Squid). Na verdade, você pode utilizar o código do "squid.conf" como ponto de partida e fazer as alterações que você julgar necessárias.
O banco de dados foi criado apenas para mostrar que é possível utilizar um banco de dados, mas sua estrutura chega a ser ridícula. Se for utilizar em produção crie alguma coisa de verdade.
No "squid.conf" utilizamos o módulo "fb" duas vezes, uma para autenticar e outra para criar uma ACL externa. Você pode, se quiser, utilizar apenas uma, nada obriga que sejam utilizados os dois comandos.
Conforme informado, o artigo foi escrito baseado no Debian 6. A instalação foi feita do zero apenas para escrever este artigo. Se você utilizar uma distribuição diferente provavelmente você deverá adequar seu código.
Uma das coisas que a gente costuma esquecer na hora de utilizar o Firebird é de criar o link simbólico da biblioteca cliente do Firebird. Não se esqueça isso!
O programa foi escrito originalmente em Delphi para ser executado em um servidor Windows 2003 Server. O código aqui apresentado pode ser compilado sem qualquer modificação para Windows, mas na hora de configurar o "squid.conf".
Você deve se lembrar que as barras invertidas são caracteres de escape. Para colocar o caminho do banco, de dados e os logs você deve utilizar a barra invertida duas vezes. Ex.: c:\\dados\\dados.fdb.
Apesar de ter sido muito mais fácil escrever este código para o Delphi 7 no Windows, observei que o Lazarus está muito estável. Já podemos olhar com mais atenção para esta excelente ferramenta de desenvolvimento.
Bom amigos, acho que isso é tudo. O artigo ficou um pouco extenso, talvez até cansativo, mas tentei ser o mais simples e objetivo possível, sem esquecer que usuários básicos podem querer testar também.
[1] Comentário enviado por wiskley em 05/04/2013 - 20:50h
Ola tudo Bem?
muito bom o seu tutorial porem encontrei problemas ao compilar o programa para o windows 2003, qualquer nome de usuario que eu digito da ERR. Fiz todas as modificações necessarias para colocar ele no windows 2003. pode dar uma ajuda?
[2] Comentário enviado por cruzeirense em 05/04/2013 - 22:40h
Prezado Wiskley,
Você fez o teste na linha de comando para saber se o módulo estava funcionando?
Tente utilizar essa sql:
select 1 from rdb$database where :a=1 or :b=1 or 1=1
Ela irá aceitar qualquer combinação de usuário e senha.
Se começar a retornar ok é porque o problema é no seu banco de dados ou consulta sql.
Neste caso verifique se os usuários estão cadastrados corretamente.
Se mesmo assim continuar dano err, poste o seu squid.conf para eu dar uma olhada.
[3] Comentário enviado por wiskley em 05/04/2013 - 22:50h
Quando eu compilo o programa no lazarus (para windows) ele gera um arquivo de 947Kb porem tb da um erro "project1.lpr(98,23) Warning: Variable "parametros" does not seem to be initialized" , ai quando digito para teste admin admin o programinha da um erro de sql mas so acontece quando coloco o admin o user da ERR , usei o mesmo BD no Debian e funcionou normalmente so que o computador usa o windows 2003, quanto ao meu squid.conf esta igualzinho ao seu. Obrigado pela ajuda mesmo:
[4] Comentário enviado por cruzeirense em 06/04/2013 - 06:41h
Prezado Wiskley,
Nas suas imagens reparei um erro nos caminhos dos arquivos.
Observe que os caminhos de arquivos no windows utilizam a barra invertida "\" e não a barra comum "/" como no linux.
faça o teste com o seguinte comando:
fb.exe "127.0.0.1;c:\dksoft\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\tmp\fb_auth.log"
Se o teste der ok, você vai ter que fazer uma modificação para incluir a linha no squid.conf, visto que para o squid a barra invertida "\" é caracter de escape. Então você vai ter que colocar duas barras invertidas "\\". Fica dessa forma:
fb.exe "127.0.0.1;c:\\dksoft\\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\\tmp\\fb_auth.log"
[5] Comentário enviado por cruzeirense em 06/04/2013 - 06:52h
[3] Comentário enviado por wiskley em 05/04/2013 - 22:50h:
Quando eu compilo o programa no lazarus (para windows) ele gera um arquivo de 947Kb porem tb da um erro "project1.lpr(98,23) Warning: Variable "parametros" does not seem to be initialized" , ai quando digito para teste admin admin o programinha da um erro de sql mas so acontece quando coloco o admin o user da ERR , usei o mesmo BD no Debian e funcionou normalmente so que o computador usa o windows 2003, quanto ao meu squid.conf esta igualzinho ao seu. Obrigado pela ajuda mesmo:
[6] Comentário enviado por wiskley em 06/04/2013 - 16:21h
Prezado Renato
Ja tinha pensado nisto tambem e ja havia trocado as barras porem continua o mesmo erro das imagens muito estranho isso. baixei outro Lazarus e tambem deu o mesmo problema, continuo tentando ate ver se consigo resolver o problema.
O log Auth.log esta retornando o seguinte:
--
127.0.0.1;c:\\dksoft\\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\\tmp\\fb_auth.log
user user
Retornou ERR
--
se eu dou um admin admin ela da o erro de sql da imagem, achei que poderia ser o bd porem o bd esta funcionando normal testei com o ibexpert
[4] Comentário enviado por cruzeirense em 06/04/2013 - 06:41h:
Prezado Wiskley,
Nas suas imagens reparei um erro nos caminhos dos arquivos.
Observe que os caminhos de arquivos no windows utilizam a barra invertida "\" e não a barra comum "/" como no linux.
faça o teste com o seguinte comando:
fb.exe "127.0.0.1;c:\dksoft\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\tmp\fb_auth.log"
Se o teste der ok, você vai ter que fazer uma modificação para incluir a linha no squid.conf, visto que para o squid a barra invertida "\" é caracter de escape. Então você vai ter que colocar duas barras invertidas "\\". Fica dessa forma:
fb.exe "127.0.0.1;c:\\dksoft\\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\\tmp\\fb_auth.log"
[8] Comentário enviado por wiskley em 08/04/2013 - 17:56h
127.0.0.1;c:\\dksoft\\dados.fdb;sysdba;masterkey;select 1 from usuario where usuario=:usuario and senha=:senha;2;c:\\tmp\\fb_auth.log
user user
Retornou ERR
so tem isso no log pelo que vi esta normal a linha de comando
[9] Comentário enviado por wiskley em 09/04/2013 - 23:20h
Prezado Renato pensei que o problema seria o Windows 2003 porem andei testando ele no windows xp, Windows 7 e tambem não funcionou a unica coisa que gera no log e a propria linha de execução do squid. achei estranho isso. comentei com minha professora ela disse que nao é normal que logicamente teria que funcionar. Estranho rsrsrsr