Tag Archive for Endian

Problemas de Proxy com AD no Endian Firewall.

Ano passado, no mês novembro depois de vários dias tentando resolver um problema que estava tendo ao ingressar o Endian Firewall 2.4.0 no AD, para controlar as políticas de acesso da internet por grupos, consegui resolver o problema.

E aqui, descrevo como resolvi o problema, apesar desse tempo todo sem postar esta solução, a mesma se encontrava no fórum da comunidade brasileira do Endian, neste link e no Bugs do Endian, neste outro link.

A ocorrência deste bug, era um tanto inconsistente e foi meio complicado ter que reproduzir o mesmo, já que o firewall estava em produção.
Após várias tentantivas, análise de log, força de vontade e tempo, consegui parar os serviços e resolver esta pendência.

Depois de várias tentativas de aplicar as políticas de acesso no proxy o mesmo deixava de funcionar adequadamente, aplicando políticas erradas ou bloqueando tudo.

Depois de várias análises de log e de arquivos de configuração, ficou evidente que o problema estava no script restartdansguardian.py (feito em python).
O problema estava basicamente na listagem de diretórios, que estava sendo considerada como string.

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

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 fez com que o dansguardian gerasse 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/^\(.\)$/0\1/” | sort | sed “s/^0\(.\)$/\1/” [ Aqui vimos como a listagem deveria ser. ]

OBS.: A listagem pode ser feita usando, sort -n.

Mesmo ao ler o script, não foi achado nada.
Ao executar o comando com a opção de debug, 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. (Tirado das referências do python.)

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 realizados e mostraram que as políticas agora estavam sendo aplicadas corretamente.

Gostaria de agradecer ao Enderson Maia, que ajudou a debugar o script python. x)

Em brever, mais algumas coisas sobre Endian, Oracle e Arch Linux. Enjoy and happy Arching.

Restaurando backup no Endian em um novo hardware.

Olá,

Hoje tive um contratempo ao tentar restaurar as configurações do Endian Firewall, através de um backup feito.

A máquina a qual o Endian estava instalado apresentou problemas na placa mãe e foi necessário a troca de hardware. Sendo assim, instalei o Endian e fiz a restauração do backup. Ao tentar logar o sistema não funcionava e fui verificar onde o problema estava.

Ao executar o comando ifconfig constatei que as interfaces tinham sido renomeadas para eth3, eth4 e eth5. Ao pesquisar um pouco, achei esta solução.

O problema estava sendo causado pelo /etc/busbusinfotab gerado pelo ethconfig que fica armazenado no arquivo de backup. Editei o arquivo, deixando apenas as interfaces eth3, eth4 e eth5 e modificando os nomes para eth0, eth1 e eth2. Executei um reboot, pronto. Nosso Endian voltando ao seu funcionamento normal.
Caso tenha interesse em remover este arquivo dos próximos backups, faça:

# vi /var/efw/backup/exclude.system

E adiciona a seguinte linha:

etc/businfotab

Até a próxima!

PS.: Tenho algumas dicas, que vou postando aos poucos, pois tem muita informação atrasada para ser colocada no blog. Este ano foi corrido. 😉