Thiagosm’s Weblog

May 22, 2008

pysquidadmin

Filed under: python — thiagosm @ 4:05 pm

Geralmente quando ia bloquear ou liberar algum site ou extensão, eu tinha que editar arquivo dar um reload no squid, etc…. Um dia, fiz um serviço pra um colégio e o técnico do colégio gostaria de uma forma mais facil de gerenciar os alunos e conteudo sem precisar ficar editando arquivos ou digitando comandos.

Foi ai que eu pensei em criar um sistema web pequeno em python pra realizar o gerenciamento do Squid . Através de uma interface fácil, pode ser cadastrado os sites que os usuários não podem acessar, as extensões bloqueadas e também cadastrar os usuários informando a permissão ( liberado geral, acesso restrito a alguns sites, só pode acessar determinados sites ) . Com os dados gravados no PostgreSQL , são gerados acls, http_access e arquivos de configuração para o squid, e com isso realizando o controle de acesso.

Eu ia utilizar ldap, já que o squid tem suporte muito bem e o ldap é um banco leve e rápido para consulta, mas como eu sempre utilizo postgresql, coloquei o squid pra rodar autenticando no postgresql e o sistema ficou utilizando o pgsql mesmo.

Técnologias utilizadas :

TurboGears

SQLObject

PostgreSQL

Squid

Linux

Advertisements

8 Comments »

  1. Olá Tiago!!!

    Gostei dos teus sistemas, oq mais me interessou foi o pysquidadmin, pois tentei fazer algo parecido mais no obtive sucesso…
    hj tenho um painel de controle q usa base LDAP e manipulacao direto no arquivo de config do squid…
    Nao sei se é possivel vc disponibilizar esse seu sistema pra download ou mandar por email pra mim da uma estudada e ver como vc o fez…

    abraço e fico no aguardo.

    Comment by Rodrigo — October 3, 2008 @ 3:12 pm

  2. Posso disponibilizar sim. Esse ai é uma versão antiga, mas eu to terminando uma nova versão, com um código mais legível e passo para você na hora.

    Se quiser ir adiantando, em code.google.com/p/pycontrole, la tem o python_x86 . Esse ai é o python + tg 1.0.7 + sqlalchemy + psycopg + outras coisas.

    Ou então, instala o turbogears 1.0.7 e o sqlalchemy 0.4.7p1 pra ir adiantando.

    Comment by thiagosm — October 6, 2008 @ 3:32 am

  3. Ok Tiago, bricadão veio vo adiantando aqui e fico na aguardo..
    abraço

    Comment by Rodrigo — October 13, 2008 @ 7:22 pm

  4. Oi amigo será que voce pode me dar uma ajuda o meu problema e esse vide abaixo:

    root@lelenio:/home/lelenio# /etc/init.d/pycontrole start
    Aplicando as regras – PyControle 😀
    /usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/engine/default.py:253: SAWarning: Unicode type received non-unicode bind param value ‘wan’
    param[key.encode(encoding)] = processors[key](compiled_params[key])
    Traceback (most recent call last):
    File “boot.py”, line 120, in
    b.make()
    File “boot.py”, line 26, in make
    interfaces().updatefirewall()
    File “/Users/thiago/dev/python/tcc3/pycontrole/pycontrole/controllers/configuracoes/interfaces.py”, line 196, in updatefirewall
    File “/usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/orm/query.py”, line 938, in __iter__
    return self._execute_and_instances(context)
    File “/usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/orm/query.py”, line 941, in _execute_and_instances
    result = self.session.execute(querycontext.statement, params=self._params, mapper=self.mapper, instance=self._refresh_instance)
    File “/usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/orm/session.py”, line 628, in execute
    return self.__connection(engine, close_with_result=True).execute(clause, params or {})
    File “/usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/engine/base.py”, line 844, in execute
    return Connection.executors[c](self, object, multiparams, params)
    File “/usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/engine/base.py”, line 895, in execute_clauseelement
    return self._execute_compiled(elem.compile(dialect=self.dialect, column_keys=keys, inline=len(params) > 1), distilled_params=params)
    File “/usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/engine/base.py”, line 907, in _execute_compiled
    self.__execute_raw(context)
    File “/usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/engine/base.py”, line 916, in __execute_raw
    self._cursor_execute(context.cursor, context.statement, context.parameters[0], context=context)
    File “/usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/engine/base.py”, line 960, in _cursor_execute
    self._handle_dbapi_exception(e, statement, parameters, cursor)
    File “/usr/local/python/lib/python2.5/site-packages/SQLAlchemy-0.4.7p1-py2.5.egg/sqlalchemy/engine/base.py”, line 942, in _handle_dbapi_exception
    raise exceptions.DBAPIError.instance(statement, parameters, e, connection_invalidated=is_disconnect)
    sqlalchemy.exceptions.ProgrammingError: (ProgrammingError) ERRO: relação “interfaces” não existe
    ‘SELECT interfaces.id AS interfaces_id, interfaces.ip AS interfaces_ip, interfaces.interface AS interfaces_interface, interfaces.mascara AS interfaces_mascara, interfaces.ativa AS interfaces_ativa, interfaces.tipo AS interfaces_tipo, interfaces.nat AS interfaces_nat \nFROM interfaces \nWHERE interfaces.tipo = %(tipo_1)s ORDER BY interfaces.id’ {‘tipo_1’: ‘wan’}

    lelenio

    Comment by lelenio — October 30, 2008 @ 2:18 am

  5. raise exceptions.DBAPIError.instance(statement, parameters, e, connection_invalidated=is_disconnect)
    sqlalchemy.exceptions.ProgrammingError: (ProgrammingError) ERRO: relação “interfaces” não existe

    O erro provavelmente o sqlalchemy ( ORM ) não está conectando no banco de dados, ou na hora de criar o banco de dados, a tabela interfaces não foi criada e como o boot.py executa o updatefirewall() que realiza um select na tabela interfaces, ele apresenta este erro.

    Se você criou o banco e as tabelas antes, não era para ter esse tipo de problema. Se não criou, ai vai os comandos :

    cd /opt/turbogears/pycontrole
    /usr/local/python/bin/tg-admin shell

    from pycontrole import create
    create.make()

    depois

    Ctrl + D

    Tenta acessar o sistema:

    cd /opt/turbogears/pycontrole

    /usr/local/python/bin/python start-pycontrole.py

    Abre o navegador e tenta: http://localhost:8080

    veja se consegue acessar com o usuário admin e senha admin ( user e senha padrões no início )

    Comment by thiagosm — October 30, 2008 @ 2:49 am

  6. Complementando, tem que criar o banco de dados antes, em http://code.google.com/p/pycontrole em wiki tem um tuto mostrando como criar o banco de dados.

    Comment by thiagosm — October 30, 2008 @ 2:52 am

  7. Cara muito bom o seu trabalho, tem como eu testar?

    Comment by Renato — January 8, 2009 @ 11:35 am

    • Olá Renato,

      Esse projeto do pysquidadmin é bem antigo, eu estou terminando um chamado “pyrede”, ele envolve não só squid, mas também dns, QoS, firewall, roteamento, email, dhcp e muita coisa a +.

      Se quiser eu posso mandar esse sim, mas como esse é bem antigo, se quiser aguardar, acho q daqui a 1 semana no maximo eu to terminando o outro e lanço no code.google também.

      Comment by thiagosm — January 8, 2009 @ 4:01 pm


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: