Welcome,
Guest
. Please
login
or
register
.
Did you miss your
activation email?
pfSense Forum
International Support
»
Portuguese
»
[Resolvido] SquidGuard + LdapGroup (permissão por grupo no ad)
Username:
Password:
1 Hour
1 Day
1 Week
1 Month
Forever
Home
Help
Search
Login
Register
Pages: [
1
]
2
3
4
5
...
11
Go Down
« previous
next »
Print
Author
Topic: [Resolvido] SquidGuard + LdapGroup (permissão por grupo no ad) (Read 15874 times)
0 Members and 1 Guest are viewing this topic.
ccesario
Full Member
Offline
Posts: 156
[Resolvido] SquidGuard + LdapGroup (permissão por grupo no ad)
«
on:
March 10, 2012, 01:44:18 pm »
Olá pessoal.
Alguém sabe me dizer se existe alguma maneira de fazer o squidGuard realizar a autenticação Ldap por Grupo utilizando a interface do PFsense?
Usando as seguintes diretivas, creio que isso é possível
ldapbinddn cn=root, dc=example, dc=com
ldapbindpass myultrasecretpassword
# ldap cache time in seconds
ldapcachetime 300
src my_users {
ldapusersearch ldap://ldap.example.com/cn=squidguardusers,ou=groups,dc=example,dc=com?memberUid?sub?(&(objectclass=posixGroup)(memberUid=%s))
}
Mas a interface do Pfsense permite isso?
Obrigado
Carlos
«
Last Edit: March 15, 2012, 09:00:12 pm by marcelloc
»
Logged
Carlos
marcelloc
Moderator
Hero Member
Offline
Posts: 8111
Re: SquidGuard + LdapGroup
«
Reply #1 on:
March 10, 2012, 02:16:21 pm »
Você já olhou os tutoriais ou deu uma pesquisada no forum?
Tem um tópico praticamente idêntico ao seu logo abaixo
http://forum.pfsense.org/index.php/topic,47045.0.html
Logged
Have I helped you?
Donations are always welcome!
Te ajudei?
Doações são sempre bem vindas!
ccesario
Full Member
Offline
Posts: 156
Re: SquidGuard + LdapGroup
«
Reply #2 on:
March 10, 2012, 02:45:19 pm »
Já olhei sim.
O tópico menciona a autenticação feita diretamente pelo squid e não pelo squidGuard.
Obrigado
Logged
Carlos
marcelloc
Moderator
Hero Member
Offline
Posts: 8111
Re: SquidGuard + LdapGroup
«
Reply #3 on:
March 11, 2012, 07:45:07 am »
Ccesario,
Via gui o dvserg(que deve ser o mantenedor do pacote) já te deu um banho de água fria.
Mas, porém contudo todavia, você pode incluir esta configuração no arquivo que gera o squidguard.conf.
Se esta função não exigir novos parâmetros de compilação você pode até postar o resultado e transformar isso em um tutorial.
Att,
Marcello coutinho
«
Last Edit: March 11, 2012, 06:41:16 pm by marcelloc
»
Logged
Have I helped you?
Donations are always welcome!
Te ajudei?
Doações são sempre bem vindas!
ccesario
Full Member
Offline
Posts: 156
Re: SquidGuard + LdapGroup
«
Reply #4 on:
March 11, 2012, 09:35:38 am »
Pois é....
O dvserg foi bem claro
Marcelo, investigando um produto que tem como base o PFsense e tem essa "funcionalidade" implementada, vi que o pessoal fez umas alterações no squidGuard.
1- Criaram um "utilitario" para fazer a consulta do usuário e trazer os grupos:
ex:
Code:
# squidGuardGrupos.pl usuario
G_ACESSO_FULL G_ACESSO_REDES_SOCIAIS Domain Admins
2 - Fizeram uma alteração no squidGuard para executar esse "utilitario" e validar se o usuario pertence ao grupo
Code:
squidGuard %s started (%d.%03d)
squidGuard ready for requests (%d.%03d)
Verificando acesso do user - %s - %s
squidGuardGrupos.pl %s 2>/dev/null
Isso foi o que consegui descobrir
Segue abaixo o codigo do "utilitario"
Code:
#!/usr/local/bin/perl
use Data::Dumper;
use Net::LDAP;
$user = $ARGV[0];
$ldap = Net::LDAP->new( '192.168.x.x' ) or die "$@";
$mesg = $ldap->bind('CN=UserProxy,CN=Users,DC=dominio,DC=local', password => 'SENHA');
$mesg = $ldap->search(base=>"dc=dominio,dc=local", filter => "sAMAccountName=$user", attrs => "memberof");
$counter = $mesg->count();
@groups = $mesg->as_struct();
for ($i=0;$i<$counter;$i++) {
$entry = $mesg->entry();
@groups = $entry->get_value('memberof');
}
foreach(@groups){
$line = $_;
$line=~s/^CN=//;
@corte = split(",",$line);
printf ("%s ",$corte[0]);
}
print "\n";
E no PFSense, basta inserir o nome do Grupo ao invés do nome do usuario na ACL do squidGuard.
Será que existe algum programador na lista c++ (eu acho) na lista que possa contribuir ?
Desse modo, nao seria necessário interferir na GUI do pfsense, mantendo toda a estrutura intacta!
Abraço e obrigado
«
Last Edit: March 11, 2012, 10:01:54 am by ccesario
»
Logged
Carlos
marcelloc
Moderator
Hero Member
Offline
Posts: 8111
Re: SquidGuard + LdapGroup
«
Reply #5 on:
March 11, 2012, 11:43:34 am »
O script é em perl, o que é 100% compatível com o pfsense. O pacote postfix por exemplo usa o mesmo perl com integração ldap para buscar a lista de emails validos no domínio.
Posso ajudar nesta integração, mas por enquanto estou muito ocupado com o trabalho e tenhos algumas melhorias/desenvolvimento de pacotes na minha lista de tarefas.
Att,
Marcello coutinho
«
Last Edit: March 12, 2012, 09:39:55 am by marcelloc
»
Logged
Have I helped you?
Donations are always welcome!
Te ajudei?
Doações são sempre bem vindas!
ccesario
Full Member
Offline
Posts: 156
Re: SquidGuard + LdapGroup
«
Reply #6 on:
March 11, 2012, 12:16:54 pm »
Sim Marcelo, o script é em perl.
Porém a alteração é feita diretamente no código do squidGuard que chama esse "utilitário" (que pode ser refeito em php ou mesmo eh shell) para realizar a checagem.
Como lhe disse, a unica coisa que descobri foi através do comando strings diretamente no "binário" do squidGuard modificado.
Code:
#strings squidGuard
squidGuard %s started (%d.%03d)
squidGuard ready for requests (%d.%03d)
Verificando acesso do user - %s - %s
squidGuardGrupos.pl %s 2>/dev/null
Se você puder ajudar (posteriormente após seus trabalhos) a mudança no código do squidGuard muita gente agradeceria
Abraço e obrigado
Logged
Carlos
marcelloc
Moderator
Hero Member
Offline
Posts: 8111
Re: SquidGuard + LdapGroup
«
Reply #7 on:
March 14, 2012, 02:53:00 pm »
Pessoal,
O ccesario começou a alterar um script que extrai os usuarios de um grupo específico para aplica nas acls do squidguard.
Peguei com ele hoje e consegui integrar o script no pfsense.
squidguard_ldap.php
Code:
<?php
// based on http://samjlevy.com/2011/02/using-php-and-ldap-to-list-of-members-of-an-active-directory-group/
// pfsense integration by marcelloc and ccesario
# AD HOST (required)
$ldap_host
=
"192.168.3.1"
;
# AD DIRECTORY DN(required)
$ldap_dn
=
"DC=domain,DC=local"
;
# BIND USER(required)
$user_bind
=
"cn=squidguard,cn=Users,DC=domain,DC=local"
;
# PASSWORD BIND(required)
$password
=
"super_secret_password"
;
#if you need to apply any prefix or sufix to retreived user
#example: prefix user with domain(required)
#$user_mask="DOMAIN\USER";
$user_mask
=
"USER"
;
####################
# End of user options #
####################
require_once(
"/etc/inc/util.inc"
);
require_once(
"/etc/inc/functions.inc"
);
require_once(
"/etc/inc/pkg-utils.inc"
);
require_once(
"/etc/inc/globals.inc"
);
#mount filesystem writable
conf_mount_rw
();
function
explode_dn
(
$dn
,
$with_attributes
=
0
)
{
$result
=
ldap_explode_dn
(
$dn
,
$with_attributes
);
foreach(
$result
as
$key
=>
$value
) {
$result
[
$key
] =
$value
;
}
return
$result
;
}
function
get_ldap_members
(
$group
,
$user
,
$password
) {
global
$ldap_host
;
global
$ldap_dn
;
$LDAPFieldsToFind
= array(
"member"
);
$ldap
=
ldap_connect
(
$ldap_host
) or die(
"Could not connect to LDAP"
);
// OPTIONS TO AD
ldap_set_option
(
$ldap
,
LDAP_OPT_PROTOCOL_VERSION
,
3
);
ldap_set_option
(
$ldap
,
LDAP_OPT_REFERRALS
,
0
);
ldap_bind
(
$ldap
,
$user
,
$password
) or die(
"Could not bind to LDAP"
);
$results
=
ldap_search
(
$ldap
,
$ldap_dn
,
"cn="
.
$group
,
$LDAPFieldsToFind
);
$member_list
=
ldap_get_entries
(
$ldap
,
$results
);
$group_member_details
= array();
foreach(
$member_list
[
0
] as
$list
)
if (
is_array
(
$list
))
foreach(
$list
as
$member
) {
$member_dn
=
explode_dn
(
$member
);
$member_cn
=
str_replace
(
"CN="
,
""
,
$member_dn
[
0
]);
$member_search
=
ldap_search
(
$ldap
,
$ldap_dn
,
"(CN="
.
$member_cn
.
")"
);
$member_details
=
ldap_get_entries
(
$ldap
,
$member_search
);
$group_member_details
[] = array(
$member_details
[
0
][
'samaccountname'
][
0
]);
}
ldap_close
(
$ldap
);
array_shift
(
$group_member_details
);
return
$group_member_details
;
}
// Read Pfsense config
global
$config
,
$g
;
$id
=
0
;
$apply_config
=
0
;
if (
is_array
(
$config
[
'installedpackages'
][
'squidguardacl'
][
'config'
]))
foreach(
$config
[
'installedpackages'
][
'squidguardacl'
][
'config'
] as
$group
) {
$members
=
""
;
echo
"Group : "
.
$group
[
'name'
].
"\n"
;
$result
=
get_ldap_members
(
$group
[
'name'
],
$user_bind
,
$password
);
foreach(
$result
as
$key
=>
$value
) {
if (
preg_match
(
"/\w+/"
,
$value
[
0
]))
$members
.=
"'"
.
preg_replace
(
"/USER/"
,
$value
[
0
],
$user_mask
).
"' "
;
}
if (!empty(
$members
))
if(
$config
[
'installedpackages'
][
'squidguardacl'
][
'config'
][
$id
][
'source'
] !=
$members
){
$config
[
'installedpackages'
][
'squidguardacl'
][
'config'
][
$id
][
'source'
] =
$members
;
$apply_config
++;
}
$id
++;
}
if (
$apply_config
>
0
){
print
"user list from LDAP is different from current group, applying new configuration..."
;
write_config
();
include(
"/usr/local/pkg/squidguard.inc"
);
squidguard_resync
();
print
"done\n"
;
}
#mount filesystem read-only
conf_mount_ro
();
?>
Para executar o script no squiguard:
Copie/crie o arquivo par ao seu pfsense
Edite os parametros do inicio do script
Altere o nome dos grupos do squidguard para o mesmo nome do grupo no ad
execute o script via console
O procedimento no squidguard é manual/via cron para não 'atrapalhar' o timeline de um pacote suportado pelo core team(eu acho).
Claro que para o dansguardian, o script já estará integrado na interface gráfica e com suporte a multiplos servidores LDAP.
att,
Marcello Coutinho
«
Last Edit: March 14, 2012, 10:02:54 pm by marcelloc
»
Logged
Have I helped you?
Donations are always welcome!
Te ajudei?
Doações são sempre bem vindas!
ccesario
Full Member
Offline
Posts: 156
Re: [Resolvido] SquidGuard + LdapGroup (extraindo usuarios do ad)
«
Reply #8 on:
March 14, 2012, 06:10:45 pm »
Obrigado pela ajuda Marcello.
Pessoal, quem testar, por favor comente aqui
[]s
Carlos
Logged
Carlos
marcelloc
Moderator
Hero Member
Offline
Posts: 8111
Re: [Resolvido] SquidGuard + LdapGroup (extraindo usuarios do ad)
«
Reply #9 on:
March 14, 2012, 06:25:49 pm »
Você conseguiu testar?
Acho que da forma que o script ficou é até mais econômico na questão de consumo de recursos já que ele não vai no ad a cada acesso para verificar o grupo.
Logged
Have I helped you?
Donations are always welcome!
Te ajudei?
Doações são sempre bem vindas!
ccesario
Full Member
Offline
Posts: 156
Re: [Resolvido] SquidGuard + LdapGroup (extraindo usuarios do ad)
«
Reply #10 on:
March 15, 2012, 06:17:41 am »
Quote from: marcelloc on March 14, 2012, 06:25:49 pm
Você conseguiu testar?
Acho que da forma que o script ficou é até mais econômico na questão de consumo de recursos já que ele não vai no ad a cada acesso para verificar o grupo.
Olá Marcello!
Testado e aprovado.
Coloquei no cron a cada 1 minuto.
Ficou ótimo!
Obrigado pela ajuda!
Logged
Carlos
marcelloc
Moderator
Hero Member
Offline
Posts: 8111
Re: [Resolvido] SquidGuard + LdapGroup (extraindo usuarios do ad)
«
Reply #11 on:
March 15, 2012, 09:17:31 am »
Publiquei o script na minha conta do github para faciliar a configuração
https://github.com/downloads/marcelloc/pfsense-packages/squidguard_ldap.php
att,
Marcello Coutinho
«
Last Edit: March 15, 2012, 09:47:29 am by marcelloc
»
Logged
Have I helped you?
Donations are always welcome!
Te ajudei?
Doações são sempre bem vindas!
Luiz Gustavo
Jr. Member
Offline
Posts: 88
Re: [Resolvido] SquidGuard + LdapGroup (permissão por grupo no ad)
«
Reply #12 on:
March 15, 2012, 10:21:22 pm »
pegando o bonde andando.... eu fiz um script um tempo atras exatamente para suprir a necessidade de um cliente com isso, fazer acl por grupo, segue então como fiz:
Aplicar o patch no pfsense (com o pacote já instalado), com o comando abaixo:
Code:
fetch -q -o /tmp/ http://www.mundounix.com.br/~gugabsd/squidguard-ldap-search.patch && cd /usr/local/pkg && patch -p0 < /tmp/squidguard-ldap-search.patch
Execute em Diagnostics > command prompt
Vai aparecer uma opção nova na configuração do squidguard, conforme a figura abaixo:
Configure o seu Ldap DN e senha (igual ao do squid)
E crie uma acl baseada na da figura abaixo:
No exemplo acima, o grupo é o CN=ti (é tudo uma linha só, sem quebra)
Qualquer dúvida, da um grito ai.
Abraços
Logged
Luiz Gustavo - Suporte pfSense no Brasil
mundounix.com.br
marcelloc
Moderator
Hero Member
Offline
Posts: 8111
Re: [Resolvido] SquidGuard + LdapGroup (permissão por grupo no ad)
«
Reply #13 on:
March 15, 2012, 10:28:31 pm »
Excelente patch Luiz Gustavo!
Depois de aplicado, o squidguard vai buscar no ad o grupo do usuário a cada acesso ou a lista é extraída e aplicada nos arquivos?
De qualquer forma, lista de acesso por grupo já está 100% compatível com squidguard e dansguardian, basta escolher.
OFF topic:
Você tem alguma carta na manga para autenticar/logar o usuário do captive portal no squid/squidguard/dansguardian?
O pfsense esta ficando monstruosamente poderoso
«
Last Edit: March 15, 2012, 11:30:31 pm by marcelloc
»
Logged
Have I helped you?
Donations are always welcome!
Te ajudei?
Doações são sempre bem vindas!
Luiz Gustavo
Jr. Member
Offline
Posts: 88
Re: [Resolvido] SquidGuard + LdapGroup (permissão por grupo no ad)
«
Reply #14 on:
March 15, 2012, 10:58:00 pm »
Quote from: marcelloc on March 15, 2012, 10:28:31 pm
Depois de aplicado, o squidguard vai buscar no ad o grupo do usuário a cada acesso ou a lista é extraída e aplicada nos arquivos?
OFF topic:
Você tem alguma carta na manga para autenticar/logar o usuário do captive portal no squid/squidguard/dansguardian?
Depois de aplicado, ele busca na consulta, da forma original documentada no squidguard (
http://www.squidguard.org/Doc/authentication.html
)
o src fica sendo uma consulta ldap, na verdade, pode ser qualquer tipo de consulta, não só de grupo.
No exemplo que dei é exatamente pra ver se o cara bate no grupo especificado.
Você tem alguma carta na manga para autenticar/logar o usuário do captive portal no squid/squidguard/dansguardian?
Não entendi ? usando que base ? é fazer ficar transparente ? tipo o usuário do captive portal já estar logado no squid?
«
Last Edit: March 15, 2012, 11:31:14 pm by marcelloc
»
Logged
Luiz Gustavo - Suporte pfSense no Brasil
mundounix.com.br
Pages: [
1
]
2
3
4
5
...
11
Go Up
Print
« previous
next »
Jump to:
Please select a destination:
-----------------------------
Administrative
-----------------------------
=> Forum rules
=> Messages from the pfSense Team
=> Feedback
-----------------------------
pfSense English Support
-----------------------------
=> Installation and Upgrades
=> General Questions
=> 2.1 Snapshot Feedback and Problems
=> Post a bounty
===> Completed Bounties
===> Expired/Withdrawn Bounties
=> Hardware
=> Firewalling
=> NAT
=> CARP/VIPs
=> Routing and Multi WAN
=> Traffic Shaping
=> DHCP and DNS
=> IPv6
=> IPsec
=> PPTP
=> PPPoE Server
=> Captive Portal
=> webGUI
=> Wireless
=> SNMP
=> Packages
=> Virtualization installations and techniques
=> OpenVPN
=> Gaming
-----------------------------
Development/Documentation
-----------------------------
=> Documentation
=> Development
-----------------------------
General Category
-----------------------------
=> General Discussion
-----------------------------
International Support
-----------------------------
=> Indonesian
=> Deutsch
=> Español
=> Français
=> Italiano
=> Russian
=> Nederlands
=> Norwegian
=> Portuguese
=> Polish
=> Romanian
=> Swedish
=> Turkish
-----------------------------
Retired
-----------------------------
=> 1.2.3-PRERELEASE-TESTING snapshots - RETIRED
=> 1.2.1-RC Snapshot Feedback and Problems-RETIRED
=> 2.0-RC Snapshot Feedback and Problems - RETIRED
=> DNS Server testing area - RETIRED
Loading...