Tag Archive for Dicas

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.

Nota de utilidade pública.

Bom dia senhores, estou meio off em relação ao blog, mas isso é por bons motivos (pelo menos para a minha pessoa) e em breve estarei postando coisas boas aqui neste cantinho. x)

O motivo deste tópico foi para tentar avisar as pessoas do email que recebi.
Assino uma lista, e recebi um e-mail um tanto preocupante, veja o e-mail e tire suas conclusões, quem conhecer essas pessoas, por favor, avisem.

Saudações,

Preciso falar urgentemente com os Classificados Excedentes do Concurso UFS
de 2008 (para o cargo de Analista de TI), do Edital 13/2008, listados nesse
link:
http://www.ccv.ufs.br/concursogrh/resultado/classificados/cs05.txt
principalmente com:

FABRICIO FERNANDES DE OLIVEIRA DALTRO – 15o.
FELIPE DE OLIVEIRA LIMA – 17o.
RODRIGO GUSMAO DE CARVALHO ROCHA – 18o.
RODRIGO ANDRADE ROCHA DE ALMEIDA – 19o.
HARLEI VASCONCELOS ROSA – 20o.

O concurso ainda está vigente até meados de junho de 2010 (foi prorrogado no
ano passado) mas a Universidade está querendo licitar serviço terceirizado
através do *pregão eletrônico 157/2009* ferindo, portanto, a legislação, já
que nenhum serviço terceirizado referente a cargo de concurso que ainda
esteja em vigência pode ser licitado, pelo menos até o fim da vigência do
concurso se ainda houver classificados excedentes, o que é o caso desse
concurso.

Aqui o Edital de Licitação do Pregão 157/2009:
http://www.ufs.br/editais/125854215174.zip

Aqui as informações do Pregão, que será aberto agora dia 02/12, no site da
UFS:
http://www.ufs.br/?pg=licitacao&id=1085

Por favor, divulguem isso nas comunidades do concurso da UFS existentes no
orkut e em outras redes sociais, para que possamos ganhar força e que
quaisquer interesses diversos não possam sobrepujar o direito dos cidadãos.

Omiti o nome do autor do e-mail, com o intuito de evitar problemas… Como disse, por favor, avisem a essas pessoas se vocês conhecerem.

PS.: Em breve novidades. x)

Leitura do mês!

Durante o SFD em Aracaju, fui ao Shopping Rio Mar (acho que é esse o nome), e acabei comprando o primeiro livro que vi e já fazia um tempo que estava querendo comprar, é um pouco “velho”. Mas a leitura é recomendada.

O livro “A cabeça de Steve Jobs – As lições do líder da empresa mais revolucionária do mundo” de Leander Kahney.

A cabeça de Steve Jobs

Façam bom proveito da leitura.

Quero aprender programar. E agora José?

Já estava planejando este post a um bom tempo, mas devido à alguns contra tempos e preguiça para abordar o assunto, acabei deixando de lado.

Parece coisa até de destino, MAS… Hoje, já estava programado em meu cronograma/horário no sunbird, uma galerinha no #archlinux-br do IRC, estavam falando sobre o assunto. Pois bem, aí vai a minha opinião, que para a maioria não vale de nada. HUhUHUhuHuhUhUHuhUhUH!!!!!!!!!!!

Não tem problema, mesmo assim vou falar.

Inicialmente a pessoa que hoje quer aprender a programar, tem que ter em mente é: Aprender L-Ó-G-I-C-A!

É isso mesmo, lógica de programação, pois sem isso não vai sair do canto. Independente disso, alguns tentam sempre falar, “Ah, usa python”, outros “que python que nada, vai de java” e os mais afoitos (como eu), “vai de C, C é o poder”! Se olharmos bem a situação, chega a ser engraço. 😉

Sendo que muitas vezes você só vai aprender a programar, ou seja, aprender a lógica da “coisa”, pegando uma linguagem e “caindo pra dentro”. Um passo importante é sempre ater-se aos conceitos de programação e aos da linguagem diferenciando um do outro. Isso só vai acontecer estudando.

Contudo, para iniciarmos essa jornada é preciso pegar várias literaturas e ler, ler muito, além disso é claro, PROGRAMAR, E MUITO.

Tenha sempre em mente que uma boa literatura, para aqueles que querem aprender a programar é claro, tem abordar desde o início, do básicão, o que são dispositivos de E/S e outras coisinhas, estimular você a pensar!

Outra coisa, não adianta eu, você, o fulaninho que manja de php, ou de python, ou de java ficar indicando a linguagem preferida, pois nem sempre vai dar certo, você vai acabar não gostando da linguagem e vai acabar pegando desgosto por programar (como acontece na velha briga das distros). Antes de mais nada leia sobre as linguagens, tenha em mente o que você quer fazer quando se está programando. Assim fica mais fácil de obter resultados e começou não pare no meio do caminho, termine.

Uma dica sobre o que falei acima é ler o livro “Concepts of Programming Languages”, dica passada pelo Robson Peixoto no #archlinux-br.

Então, aqui vão algumas sugestões de literatura (não vou comentar sobre elas) para C, Shell Script e Java. Não vou postar sobre Python, PHP e muito menos sobre Ruby on Rails, pois não procurei nada sobre essas coisas, se algum leitor tiver algo, pode comentar aqui.

C:

1. Aprendendo a programar programando em linguagem C;
2. Curso de C da UFMG;
3. C Completo e Total;
4. The C Programming (ANSI C);
5. The C Book (Esse livro tenho em pdf perdido nos arquivos, mas tinha lido algumas páginas e achei interessante).

Shell Script:

1. Shell Script Profissional;
2. Programação Shell Linux;
3. Bash Guide for Beginners;
4. ABS (Advanced Bash-Scripting Guide).

Java:

1. Java: Como Programar.

Bom, acho que por enquanto é só… E mais um recado, depois que aprender a programar aprenda sobre Engenharia de Software, não seja mais um ‘POG’ramador.

UPDATE:

Dica passada pelo Estevão: uma dica interessante pra quem tá começando tb… é ler código, ler muito código e pensar em programação como solução de problemas, imaginar um problema, bolar uma solução, escrever no papel, visualizar bem a coisa, e depois implementar…

UPDATE 2:

Dica passada pelo Rodrigo Flores: Saber lógica e algoritmos, estuda o Sedgewick ou o Cormen. E resolver problemas de olimpíadas de programação, a linguagem seja C, Java, Cobol, Ada, Fortran, Haskell é o de menos.

A coisa tá ficando boa… Valeu ao pessoal que tá passando mais informações sobre o assunto.

Microsoft keyboard Elite Bluetooth

Bom dia,

Já tem um tempinho que não escrevo nada aqui, estava planejando postar umas dicas para iniciantes sobre como comecar a programar, dizendo quais livros, tutoriais, aulas que podemos encontrar por ai, são bons para entender os conceitos básicos (da programacão e da linguaguem que ele pretende aprender) e a syntax. Mas vai ficar para depois…

Agora vamos ao post realmente… Como tenho 2 mouses Microsoft, e estou gostando muito, resolvi comprar um teclado MS também. Um amigo tem alguns contatos e pedi a ele um teclado que fosse confortável e bom, para usar diariamente e dar aquela jogadinha no bom e velho CS.

Acabei pegando um “Microsoft keyboard Elite Bluetooth”. Quando peguei pensei, “como vou fazer pra esse infeliz funcionar no Arch também?”. Até que foi simples, veja como foi…

Vou precisar do dbus, bluez e bluez-hcidump instalados, como já tenho o GNOME instalado, consequentemente já tinha o dbus, mas não tinha o bluez, ou pelo menos, não sabia que tinha.

# pacman -Sy bluez bluez-hcidump

Vai retornar um “reinstall package”, quando vi, achei estranho pois não tinha instalado o bluez antes, quando executei:

$ pacman -Qi bluez

Retornou:

Required By : gvfs

Bom, como já tinha o pacote, só instalei o bluez-hcidump. Feito isso, comecou a brincadeira… Precisei configurar algumas coisas.

Primeiro verifiquei se o dispositivo estava ativo:

# hciconfig

Se ele retornar:

hci0: Type: USB
BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0
DOWN
RX bytes:0 acl:0 sco:0 events:0 errors:0
TX bytes:0 acl:0 sco:0 commands:0 errors:0

Será necessário você, levantar o infeliz com:

# hciconfig hci0 up

Para verificar se realmente subiu, use apenas o comando hciconfig, novamente. Agora a parte boa, procurar pelo teclado.

$ hidd scan
00:12:5A:9C:18:DD Microsoft A keyboard

A saída será algo semelhante a essa que você está vendo. Mas quero o teclado funcionando amigão, calma calma, é mais fácil ainda.

# hidd --connect 00:12:5A:9C:18:DD

Você pensou, “Pronto agora tenho meu teclado funcionando!!!! x)”… Ai que você se engana, o bluetooth no linux ainda é um lixo (essa é a minha opinião e já já vão descobrir o por que). Inocente o garotão vai lá e comeca a digitar e nada do teclado funcionar, mas fiz tudo certinho. Nem tudo amigão. x)

Depois que você conectou, verifique se realmente está conectado com:

$ hidd show
00:12:5A:9C:18:DD Microsoft A keyboard that runs over Bluetooth [045e:0099] connected

Tem que mostrar aquela palavrinha mágica ali, connected, “ahhhhh mas não funcionou”. Tente:

# hidd --search
Searching ...
Connecting to device 00:12:5A:9C:18:DD

Pronto, agora você já pode digitar e sair pulando de alegria. x)

Se você quer ter seu teclado funcionando depois do boot, faca o seguinte… Edite o arquivo /etc/conf.d/bluetooth, procure pela variáveis HIDD_ENABLE e HIDD_OPTIONS, descomente ambas e adicione a elas…

HIDD_ENABLE="true"
HIDD_OPTIONS="--connect 00:12:5A:9C:18:DD"

Adicione ao rc.conf no DAEMONS, o bluetooth. Quando reiniciar teoricamente você já deveria ter seu teclado funcionando né??? Mero engano… Aqui só funcionou na base da gambiarra e mesmo assim, tive que botar o bluetooth depois do dbus no rc.conf. Para ter funcionando corretamente, vá ao seu rc.local e adicione “sleep 20” e “/usr/bin/hidd –search”.

Tiveram 3 coisas que não agradou muito, primeiro que precisei dessa bela “gambe”, a segunda é, passou de 3 a 5 minutos sem usar o teclado preciso usar e a terceira, é que preciso usar o outro teclado pra acessar a bios (isso já era esperado) e como fallback quando o bluetooth não funcionar. x)

Se alguém tiver alguma solucao para esses inconvenientes, ficarei grato.

Já ia esquecendo, veja este guia de bluetooth, essa dica e mais esse link do wiki, caso tenha dúvidas.

PS.: Se você sentiu falta dos cedilhas na minha escrita, não se assuste… ele tá saindo assim, ć, por isso não usei. 😉

Nobreak SMS Net3+ Expert

Olá,

Quem tem um nobreak sabe o quanto esse equipamento é essencial para o dia-a-dia de quem é Geek. x)

Pois bem, comprei o meu já tem 1 ano e a minha belezinha é esse aqui. O interessante do mesmo é que ele tem gereciamento via software o que é muito útil para você que se preoculpa com seu(s) querido(s) HD(s).

Através desse gerenciamento, posso programar a hora de desligamento do mesmo e do meu PC, sem causar danos ao meu hardware, além de prover outros recursos como acesso remoto, testes em geral para o nobreak e alerta sobre o que está acontecendo com a energia da sua casa/empresa via SMS. x)

O mesmo estava instalado e funcionando tranquilamente, até ter a idéia de testar o Gentoo quando o Arch estava em “TPM”, como não tive paciência para tá baixando pacotes no Gentoo (lembrando que o tempo de compilação dos pacotes é menor do que baixar os infelizes na velox 300Kbps) resolvi reinstalar o Arch (pois já tinha os pacotes em cache) que levou menos de 10 minutos pra ter o meu sistema básico atualizado e também, com X, Gnome e outras firulas.

Passei mais de um mês sem instalar o software do nobreak e vi que realmente não dá pra viver sem ele, vou demonstrar os passos de instalação e comentar algumas partes.

Antes de começar precisamos do software, não é? Vá ao site alerta24.com.br e baixe o arquivo SMS_Power_View_Linux.tar.gz

Se você possui a versão que vem com a conexão USB (no meu caso) é interessante saber qual o módulo do nobreak que é, cypress_m8.

Precisamos instalar o jdk (afim de evitar possíveis dores de cabeça vamos instalar também o jre) para ter o software funcionando, como estamos no Arch:

pacman -Sy jre jdk

OBS.: Na antiga instalação usava jdk e como a distribuição migrou para o openjdk, acabei usando esse. Você pode até perguntar se funciona, sim funciona, mas não da mesma forma que o jdk da SUN, tive instabilidade no software, logo recomendo usar o jdk que está no community.

Instalando o SMS Power View

  1. A instalação será feita no diretório /opt/sms;
  2. Efetue o download do arquivo SMS_Power_View_Linux.tar.gz e salve-o dentro de qualquer diretório de sua preferência e após isso descompacte-o (#tar –xzvf SMS_Power_View_Linux.tar.gz);
  3. Entre     na    pasta    onde      os    arquivos      foram    descompactados (# cd /installSMSPowerView) e execute o arquivo install.sh (#./install.sh);
  4. Você será questionado sobre o local onde se encontra instalado o JDK (java);
  5. Após informar o local onde o java esta instalado, você será questionado o valor da variável DISPLAY, se o valor for o default pressione a tecla Enter.
  6. Informe o local onde deseja instalar o SMS Power View (passo 1, /opt/sms);

Como executar o SMS Power View O software SMS Power View poderá ser configurado através do Console ou Ambiente Gráfico (navegador), conforme descrito abaixo.

Modo Texto (Console):

  1. Acesse o diretório SMS (cd /opt/sms) e execute o comando abaixo utilizando letras maiúsculas:  ./RODAR_SMS.sh
  2. Aguarde alguns instantes para que o sistema termine de carregar o software e execute o seguinte comando: ./CONSOLE.sh
  3. Escolha a opção “3.Configuração” e configure a porta de comunicação onde o cabo USB.

Ambiente Gráfico (navegador):

  1. Abra uma janela de “console” e acesse o diretório SMS (cd /opt/sms). Execute o comando abaixo utilizando letras maiúsculas: ./RODAR_SMS_POWERVIEW.sh
  2. Abra um navegador de seu sistema e digite o  seguinte endereço: http://localhost:8080/sms/
  3. Clique no item “Configurações”;
  4. Configure a “porta de comunicação” onde o cabo do nobreak foi conectado;
  5. Para finalizar clique em “Salvar”.

OBS.: Para acessar via browser precisei fazer ./RODAR_SMS.sh e depois ./RODAR_SMS_POWERVIEW.sh Para carregar o software Power View automaticamente na inicialização do sistema operacional, acrescente a linha abaixo no arquivo “rc.local”:

su root /opt/sms/RODAR_SMS.sh

OBS.: O procedimento acima foi testado e homologado na distribuição Ubuntu Kernel: 2.6.15-23-386. Arch Linux: kernel26 2.6.29.3-1.

UPDATE

Os trexos “Modo Texto” e “Ambiente Gráfico”, foram usados até a versão 2.04.00 (que eu conheça), ontem (24/05/09) atualizei pra versão 2.07.00 a qual já vem com uma novidade interessante. A versão 2.07.00 já tem systray, coisa que só tinha na versão para windows e, a parte de instalação continua a mesma, mudou só na parte de executar o software.

Para executar o mesmo, basta entrar no /opt/sms e digitar:

./powerview

Será mostrado um help com as opções que você precisa para iniciar o mesmo, usando GUI (systray) ou não. Para usar o “rc.local” para iniciar o software do nobreak basta adicionar:

su root /opt/sms/powerview start

Até a próximo, essa a minha dicazinha… Lembrando que os passos aqui apresentados foram retirados do manual de instalação e quando possíveis, modificados para as minhas necessidades. Creio que o próximo post será alguma coisa relacionada a programação. 😉

Saudações, Leandro “skate_forever” Inácio