LightSquid mais Completo



  • Boa noite pessoal,

    Venho aqui para compartilhar uma melhoria nos relatórios do LightSquid.
    A tempos procuro uma forma de deixar o relatório um pouco mais completo do que o disponivel para edição pela interface web do pfSense.
    Por exemplo, na interface web do pfsense não consigo gerenciar a disponibilização de informação como "realname" e "grupos" e "skipusers" (não listar algum usuario especifico).

    Eu que possuo a integração ntlm single sign-on com o pf2ad do Luiz Gustavo, chegava a ser um pouco frustrante pois nos relatório só aparecia o login da pessoa, e juntamente o relatório ficava um pouco poluido devido a vir no mesmo acessos com nome das maquinas ex: micro$ ou então os IPs das estações, e o Lightsquid possui arquivos de configuração que permitem ajustar o "realname", "grupos" e "skipusers".

    Como possuo integração como AD devido ao pf2ad decidi bolar script que buscassem as informações que preciso e alimentasse esses arquivos de configuração de forma automatica.

    Vou deixar abaixo a forma que fiz os scripts e alguns prints para verem como ficou muito melhor a visualização e consulta, principalmente se passar o acesso para algum diretor ou gerente que precise disso.

    Bom vamos ao que interessa:

    Lembrando que só utilizei e testei essas formas de preenchimento automatico em um pfSense 2.3.3 + pf2ad

    1. Meu primeiro problema, não é listado grupo algum dos usuarios, quando eu clicava em Relatórios por grupo, era mostrado apenas o grupo "00 - Sem Grupo", vamos ajustar isso.

    1.1 Crie o script abaixo com o nome que deseja no diretório que desejar, no meu caso criei dentro de "/root" com o nome "ldap_group.sh"

    #!/bin/sh
    /usr/local/bin/ldapsearch -b "ou=Grupos,ou=Escritorio,dc=dominio,dc=localdomain" -D "dominio\firewall" -x -w SENHA -h dominio.localdomain "(&(cn=*)(objectclass=group))" | grep -i cn: | cut -f2 -d: > /usr/local/etc/lightsquid/group.cfg.tmp

    N=0
    while read LINE ; do
            N=$((N+1))
            #echo "Processando #$N = $LINE"
      /usr/local/bin/ldapsearch -b "ou=Escritorio,dc=dominio,dc=localdomain" -D "dominio\firewall" -x -w SENHA -h dominio.localdomain "(memberOf=CN=$LINE,OU=Grupos,OU=Escritorio,DC=dominio,DC=localdomain)" | /usr/bin/grep -i sAMAccountName | /usr/bin/sed "s/sAMAccountName: /0$N  $LINE ,/g" >> /usr/local/etc/lightsquid/group.cfg.lin
    done < /usr/local/etc/lightsquid/group.cfg.tmp

    /usr/bin/awk -F, '{print $2,$1}' /usr/local/etc/lightsquid/group.cfg.lin | /usr/bin/sed "s/CN=//g" > /usr/local/etc/lightsquid/group.cfg

    /bin/rm -f /usr/local/etc/lightsquid/group.cfg.lin
    /bin/rm -f /usr/local/etc/lightsquid/group.cfg.tmp

    Obs.: Substituir todos os campos em vermelho de acordo com sua estrutura

    Explicando o Script:
    ldapsearch inicial - Vai buscar todos os grupos do AD que estiverem no caminho especificado e salvar em um arquivo chamado "group.cfg.tmp". No meu caso eu busquei todos os grupo que estavam dentro da OU "Grupos".
    While - Vai buscar todos os usuarios que eu possuo cadastrado na OU Escritorio, incluindo nas Sub-OUs, de acordo com cada grupo que ele percorrer no While e salvar em um arquivo "group.cfg.lin"
    awk - Vai organizar a posição do texto de cada linha de acordo com o necessario e remover o que for lixo e salvar no arquivo final "group.cfg" que é o arquivo lido pelo LightSquid.
    rm - Vai remover os arquivos temporarios criados durante o processo.

    2. Meu segundo problema, não é listado o realname dos usuarios, apenas o login, o campo realname fica com "?", vamos ajustar isso.

    2.1 Crie o script abaixo com o nome que deseja no diretório que desejar, no meu caso criei dentro de "/root" com o nome "ldap_realname.sh"

    #!/bin/sh
    /usr/local/bin/ldapsearch -b "ou=Escritorio,dc=dominio,dc=localdomain" -D "dominio\firewall" -x -w SENHA -h dominio.localdomain "(objectclass=person)" | /usr/bin/grep -i sAMAccountName | /usr/bin/sed "s/sAMAccountName: //g" > /usr/local/etc/lightsquid/realname.cfg.tmp

    while read LINE ; do
            /usr/local/bin/ldapsearch -b "ou=Escritorio,dc=dominio,dc=localdomain" -D "dominio\firewall" -x -w SENHA -h dominio.localdomain "(sAMAccountName=$LINE)" | /usr/bin/grep -i dn: | /usr/bin/sed "s/dn: CN=/$LINE  ,/g" >> /usr/local/etc/lightsquid/realname.cfg.lin
    done < /usr/local/etc/lightsquid/realname.cfg.tmp

    /usr/bin/awk -F, '{print $1,$2}' /usr/local/etc/lightsquid/realname.cfg.lin > /usr/local/etc/lightsquid/realname.cfg

    /bin/rm -f /usr/local/etc/lightsquid/realname.cfg.lin
    /bin/rm -f /usr/local/etc/lightsquid/realname.cfg.tmp

    Obs.: Substituir todos os campos em vermelho de acordo com sua estrutura

    Explicando o Script:
    ldapsearch inicial - Vai buscar todos os logins do AD que estiverem no caminho especificado e salvar em um arquivo chamado "realname.cfg.tmp". No meu caso eu busquei todos os usuarios que estavam dentro da OU "Escritorio".
    While - Vai buscar todos os Nomes de usuarios que eu possuo cadastrado na OU Escritorio, incluindo nas Sub-OUs, de acordo com cada login que ele percorrer no While e salvar em um arquivo "realname.cfg.lin"
    awk - Vai organizar a posição do texto de cada linha de acordo com o necessario e remover o que for lixo e salvar no arquivo final "realname.cfg" que é o arquivo lido pelo LightSquid.
    rm - Vai remover os arquivos temporarios criados durante o processo.

    3. Meu terceiro e ultimo problema, o relatório vinha muito poluido, alem dos logins dos usuarios apareciam no relatório IPs das estações ou nome das maquinas ex:"micro$", e isso não era interessante, ja que os links acessados por essas maquinas dessa forma são poucos itens de sistema e atualização. E quando fui preencher as maquinas no Skipuser da web não encontrei campo para tal, e decidir criar o arquivo manualmente e ajustar isso.

    3.1 Crie o script abaixo com o nome que deseja no diretório que desejar, no meu caso criei dentro de "/root" com o nome "ldap_skipusers.sh"

    #!/bin/sh
    /usr/local/bin/ldapsearch -b "cn=Computers,dc=dominio,dc=localdomain" -D "dominio\firewall" -x -w SENHA -h dominio.localdomain "(objectcategory=computer)" | /usr/bin/grep -i cn: | /usr/bin/sed "s/cn: //g" > /usr/local/etc/lightsquid/skipuser.cfg.tmp

    IP=192.168.0

    /usr/bin/sed 's/$/$/' /usr/local/etc/lightsquid/skipuser.cfg.tmp | /usr/bin/tr [A-Z] [a-z] > /usr/local/etc/lightsquid/skipuser.cfg

    for i in $(seq 1 255);
    do
            /bin/echo $IP.$i >> /usr/local/etc/lightsquid/skipuser.cfg
    done

    /bin/rm -f /usr/local/etc/lightsquid/skipuser.cfg.tmp

    Obs.: Substituir todos os campos em vermelho de acordo com sua estrutura

    Explicando o Script:
    ldapsearch inicial - Vai buscar todos os nomes de maquinas no AD que estiverem no caminho especificado e salvar em um arquivo chamado "skipuser.cfg.tmp". No meu caso eu busquei todos os computadores que estavam dentro da OU "Computers".
    sed - vai adicionar ao final de todas as linhas o "$" para que pegue as maquinas como no Squid e colocar todas em minusculo.
    for - Vai adicionar todos os IPs do escritório na faixa desejava conforme definido na variavel ao final do arquivo skipuser.cfg
    rm - Vai remover os arquivos temporarios criados durante o processo.

    Prontinho!
    Basta agora criar um agendamento no CRON do pfSense para que execute esses script de uma forma frequente.
    O lightsquid ja le por padrão estes 3 arquivos editados/criados não é necessario modificar configurações do lightsquid.
    Segue prints do relatório depois das alterações nos scripts acima.

    Obs.: Não sou nenhum profissional porem se alguem tiver alguma duvida ou problema me avisa que eu tento ajudar.
    Obs2.: Utilizei o caminho completo dos comando pois se não for feito dessa forma o script da problema quando executado via CRON do pfsense, então de preferencia mantenham os caminhos completos.

    Att,






  • Vou fixar nos tutoriais.  :)



  • Maravilha Marcello,

    Espero que ajude o pessoal.  ;)



  • Show, vou testar !!!


Log in to reply