Problemas com Content Filter

Este tópico contém respostas, possui 3 vozes e foi atualizado pela última vez por  thiagonmat 7 anos atrás.

  • Autor
    Posts
  • #687

    skate_forever
    Participante

    Bom dia senhores,

    Estou com um problema que está causando dores e cabeça.

    Estou com um Endian atualizado para a versão 2.4.1 (com o intuito de resolver esse problema mas o mesmo continua), o problema é o seguinte:

    Estou com proxy habilitado, utilizando políticas de acesso e autenticação via AD (Windows 2003), ele consegue passar um tempo funcionando corretamente, mas de forma aleatórias, o dansguardian acaba pegando um content filter diferente.

    Por exemplo, tenho filtros de 1 a 10 e também criado as políticas de acesso de 1 a 10 e aplicadas, uma hora ou outra o dansguardian começa a pegar políticas erradas.

    Por exemplo, tenho a regra 8, 9 e 10. Em determinada hora ao invés de pegar a política 10, o mesmo pega a política 9.

    Como resolvo? Pego e removo as regras, 9 e 10, tanto o filtro quanto a política de acesso. E recrio as regras na ordem inversa, o que era 10, vira 9, e o que era 9, vira 10.

    Ok, volta a funcionar por um tempo, mas depois, TODAS as políticas começam a usar a política 8 como filtro. Que pode ser visto no log do dansguardian.

    Já fiz pesquisa no bugs, fórum internacional e no google.

    E não achei nenhuma solução. Se alguém tiver uma ideia, agradeço.

  • #6433

    skate_forever
    Participante

    Ao aplicar as políticas no proxy o mesmo deixava de funcionar apropriadamente, aplicando políticas erradas ou bloqueando tudo.

    Após várias análises de log e arquivos de configuração ficou constatado um problema no script feito em python (restartdansguardian.py).

    O problema está na listagem de diretórios que está sendo considerada como string.

    Quando o número de content filters ultrapassava 9, chegando a 10 ou mais, a listagem ficava invertida.

    Listagem normal em numeral: 1, 2, 3, 4, 5, 6, 7, 8, 9 e 10.

    Listagem utilizando string: 1, 10, 2, 3, 4, 5, 6, 7, 8 e 9.

    Isso faz com que o dansguardian gere as configurações de forma incorreta, jogando para a variável groupname um valor totalmente diferente das configurações do content filter.

    Por exemplo, o arquivo de configuração dansguardianf10.conf responsável pelo grupo Segurança, tinha a variável groupname com o valor “Custo content2”.

    A resolução do problema se deu seguindo os seguintes passos, que deram norte para o debug do script python:

    # ls -1 /etc/dansguardian/profiles/ [ Aqui ele mostra a listagem como se fosse string. ]

    # ls -1 /etc/dansguardian/profiles/ | sed “s/^(.)$/01/” | sort | sed “s/^0(.)$/1/” [ Aqui vimos como a listagem deveria ser. ]

    OBS.: A listagem pode ser feita com sort -n.

    Após verificar o script, não foi achado nada.

    Ao executar o comando abaixo, tivemos a resposta:

    # restartdansguardian -d [ Mostrou onde se encontrava o erro do script. ]

    Agora ao entrar no arquivo /usr/local/bin/restartdansguardian.py

    # vi /usr/local/bin/restartdansguardian.py

    Procuramos pela linha que continha “.Include” e chegando a função, def getprofiles() responsável pela criação dos content filters.

    O processo de debug se deu ao executar linha por linha da função getprofiles.

    def getprofiles():

    if file_exists(DANSGUARDIAN_SETTINGS):

    profiles = glob(DANSGUARDIAN_SETTINGS)

    else:

    profiles = glob(DANSGUARDIAN_SETTINGS_DEFAULT)

    profiles += glob(“%s/*/settings” % DANSGUARDIAN_PROFILES)

    profiles = sorted(map(lambda p: os.path.dirname(p), profiles))

    debug(profiles)

    return profiles

    O processo.

    # python

    Python 2.4.6 (#1, Nov 10 2009, 07:02:03)

    [GCC 3.4.6 20060404 (e 3.4.6-10.endian8)] on linux2

    Type “help”, “copyright”, “credits” or “license” for more information.

    >>> import os

    >>> import glob

    >>> profile = glob.glob (“/var/efw/dansguardian/settings”)

    >>> profiles = glob.glob (“/var/efw/dansguardian/settings”)

    >>> profiles += glob.glob (“%s/*/settings” % “/var/efw/dansguardian/profiles”)

    >>> profiles

    [‘/var/efw/dansguardian/settings’, ‘/var/efw/dansguardian/profiles/content2/settings’,

    ‘/var/efw/dansguardian/profiles/content3/settings’, ‘/var/efw/dansguardian/profiles/content4/settings’,

    ‘/var/efw/dansguardian/profiles/content5/settings’, ‘/var/efw/dansguardian/profiles/content6/settings’,

    ‘/var/efw/dansguardian/profiles/content7/settings’, ‘/var/efw/dansguardian/profiles/content8/settings’,

    ‘/var/efw/dansguardian/profiles/content9/settings’, ‘/var/efw/dansguardian/profiles/content10/settings’,

    ‘/var/efw/dansguardian/profiles/content11/settings’, ‘/var/efw/dansguardian/profiles/content12/settings’,

    ‘/var/efw/dansguardian/profiles/content13/settings’, ‘/var/efw/dansguardian/profiles/content14/settings’,

    ‘/var/efw/dansguardian/profiles/content15/settings’, ‘/var/efw/dansguardian/profiles/content16/settings’]

    >>> profiles = sorted(map(lambda p: os.path.dirname(p), profiles))

    >>> profiles

    [‘/var/efw/dansguardian’, ‘/var/efw/dansguardian/profiles/content10’,

    ‘/var/efw/dansguardian/profiles/content11’, ‘/var/efw/dansguardian/profiles/content12’,

    ‘/var/efw/dansguardian/profiles/content13’, ‘/var/efw/dansguardian/profiles/content14’,

    ‘/var/efw/dansguardian/profiles/content15’, ‘/var/efw/dansguardian/profiles/content16’,

    ‘/var/efw/dansguardian/profiles/content2’, ‘/var/efw/dansguardian/profiles/content3’,

    ‘/var/efw/dansguardian/profiles/content4’, ‘/var/efw/dansguardian/profiles/content5’,

    ‘/var/efw/dansguardian/profiles/content6’, ‘/var/efw/dansguardian/profiles/content7’,

    ‘/var/efw/dansguardian/profiles/content8’, ‘/var/efw/dansguardian/profiles/content9’]

    A descoberta.

    >>> profile = glob.glob (“/var/efw/dansguardian/settings”)

    >>> profiles = glob.glob (“/var/efw/dansguardian/settings”)

    >>> profiles += glob.glob (“%s/*/settings” % “/var/efw/dansguardian/profiles”)

    >>> profiles

    [‘/var/efw/dansguardian/settings’, ‘/var/efw/dansguardian/profiles/content2/settings’,

    ‘/var/efw/dansguardian/profiles/content3/settings’, ‘/var/efw/dansguardian/profiles/content4/settings’,

    ‘/var/efw/dansguardian/profiles/content5/settings’, ‘/var/efw/dansguardian/profiles/content6/settings’,

    ‘/var/efw/dansguardian/profiles/content7/settings’, ‘/var/efw/dansguardian/profiles/content8/settings’,

    ‘/var/efw/dansguardian/profiles/content9/settings’, ‘/var/efw/dansguardian/profiles/content10/settings’,

    ‘/var/efw/dansguardian/profiles/content11/settings’, ‘/var/efw/dansguardian/profiles/content12/settings’,

    ‘/var/efw/dansguardian/profiles/content13/settings’, ‘/var/efw/dansguardian/profiles/content14/settings’,

    ‘/var/efw/dansguardian/profiles/content15/settings’, ‘/var/efw/dansguardian/profiles/content16/settings’]

    >>> profiles = map(lambda p: os.path.dirname(p), profiles)

    >>> profiles

    [‘/var/efw/dansguardian’, ‘/var/efw/dansguardian/profiles/content2’,

    ‘/var/efw/dansguardian/profiles/content3’, ‘/var/efw/dansguardian/profiles/content4’,

    ‘/var/efw/dansguardian/profiles/content5’, ‘/var/efw/dansguardian/profiles/content6’,

    ‘/var/efw/dansguardian/profiles/content7’, ‘/var/efw/dansguardian/profiles/content8’,

    ‘/var/efw/dansguardian/profiles/content9’, ‘/var/efw/dansguardian/profiles/content10’,

    ‘/var/efw/dansguardian/profiles/content11’, ‘/var/efw/dansguardian/profiles/content12’,

    ‘/var/efw/dansguardian/profiles/content13’, ‘/var/efw/dansguardian/profiles/content14’,

    ‘/var/efw/dansguardian/profiles/content15’, ‘/var/efw/dansguardian/profiles/content16’]

    >>>

    OBS.: The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell.

    E ao debugar a linha 174 do script, temos o responsável pelo problema, o sorted.

    A solução foi a seguinte. Substituímos a linha abaixo:

    profiles = sorted(map(lambda p: os.path.dirname(p), profiles))

    Por essas:

    #profiles = sorted(map(lambda p: os.path.dirname(p), profiles))

    profiles = map(lambda p: os.path.dirname(p), profiles)

    Restart no dansguardian e verificamos que as políticas estavam corretas.

    Testes foram feitos e mostraram que as políticas agora estão sendo aplicadas corretamente.

    PS.: Agradecer ao Enderson Maia, que ajudou no debug do script. x)

  • #6434

    skate_forever
    Participante

    Se alguém tiver mais alguma ideia sobre isso, seria bom acrescentar neste tópico.

    O código identado fica:

    def getprofiles():
    if file_exists(DANSGUARDIAN_SETTINGS):
    profiles = glob(DANSGUARDIAN_SETTINGS)
    else:
    profiles = glob(DANSGUARDIAN_SETTINGS_DEFAULT)
    profiles += glob("%s/*/settings" % DANSGUARDIAN_PROFILES)
    profiles = sorted(map(lambda p: os.path.dirname(p), profiles))
    debug(profiles)
    return profiles

  • #6435

    Bruno Vicente
    Participante

    skate_forever

    Muito interessante esta situação, eu havia iniciado uma pesquisa quando vi o post mas não encontrei nada que pudesse levar a uma solução.

    Agora está aí!

    Manda lá para a seção de Dicas.

    []’s

  • #6436

    skate_forever
    Participante

    Pois é Bruno, passei por maus bocados pesquisando até conseguir achar isso ai.

    Agora estou vendo pra reportar isso ao Endian para eles corrigirem isso.

    Espero que aceitem.

  • #6437

    skate_forever
    Participante

    Bruno, reportei o bug e eles já resolveram.

    Espero que lancem a versão final do 2.4.1, com essa correção.

    http://bugs.endian.com/view.php?id=3308

  • #6438

    Bruno Vicente
    Participante

    Good work, skate_forever!

    Sim, com certeza este virá corrigido.

    []’s

  • #6439

    thiagonmat
    Participante

    fis isso e não funcionou ps a linha do script que uso é a 200 e 201 é normal isso?

O tópico ‘Problemas com Content Filter’ está fechado para novas respostas.