ATUALIZAÇÃO 01/06/2018: Se você chegou até este post, escrito em 2011, procurando informações atualizadas sobre como realizar autenticação do pfSense no Microsoft Active Directory, sugiro fortemente que você leia ou conheça melhor o UserAuth. Entendo que é a forma mais eficiente e atual de se fazer isso, especialmente em nível corporativo. O Squid3 e principalmente o SquidGuard são pacotes relativamente antigos e pouco performáticos em redes maiores ou muito assediadas (muitas conexões).
Este tutorial demonstra como utilizar os recursos da biblioteca squid_ldap_group para que o Squid autentique os usuários por grupos cadastrados no Active Directory.
Autor: Ricardo Pardim Claus (ricardodru em yahoo.com.br)
Tags: Squid, pfSense, Active Directory, AD, openldap-client, squid_ldap_group, squid_ldap_auth, squid.inc
Verão do sistema e pacotes utilizados:
- pfSense versão 2.0 RC3
- Squid versão 2.7
- Windows 2003 R2
Existe um bug no squid e no openldap-client, ambos nas versões anteriores à 2.0 do pfSense. Caso o seu pfSense esteja em produção, e não tem como fazer uma nova instalação, deverá primeiro resolver estes problemas seguindo estes tutoriais:
- http://www.fug.com.br/content/view/689/77/
- http://www.vivaolinux.com.br/dica/Corrigindo-a-opcao-de-Delay-Pools-e-autenticacao-Ldap-do-Squid-2.7.8_1-no-PfSense-1.2.3Release
Bases de Referencias:
- http://forum.pfsense.org/
- http://www.squid-cache.org.br/index.php?option=com_content&task=view&id=50&Itemid=27
- http://www.cyberciti.biz/tips/howto-configure-squid-ldap-authentication.html
- http://www.papercut.com/kb/Main/ConfiguringSquidProxyToAuthenticateWithActiveDirectory
- http://forum.pfsense.org/index.php/topic,20208.0.html
- http://www.digipedia.pl/man/doc/view/squid_ldap_auth.8
Mãos a obra:
Primeiramente, o squid não pode estar configurado em modo proxy transparente. Neste modo, não é possível nem ao menos configurar as opções de autenticação no webgui do pfSense, já que proxy transparente não faz autenticação.
No Active Directory, crie uma OU, com o nome “Internet”.
Nesta OU, crie 2 grupos “Internet-TI”, e “Internet-Bancos”, ou qualquer nome que mais lhe agradar.
O grupo Internet-TI, tem acesso full, sem nenhum bloqueio.
Já o internet-bancos, ira navegar apenas em sites cadastrados em uma lista (lista branca).
Na OU “Users”, crie um usuário com qualquer nome, aqui utilizei o usuário squid.
Defina uma senha para este usuário, e lembre de marcar a opção para não expirar a senha deste usuário.
Após concluir toda a configuração indicada neste tutorial, você poderá criar quantos grupos desejar, e seguir com os bloqueios e liberação para cada um deles.
Suponho que o seu Squid já esteja funcionando com os bloqueios desejados.
Antes, é necessário alterar as regras de firewall, para que as estações clientes sejam obrigadas a utilizarem o proxy local para ter acesso a internet.
No menu Firewall > Rules, as regras devem ficar conforme imagem abaixo:
OBS: A regra importante que desabilitei, foi a segunda regra, pois ela permite acesso total a qualquer endereço de destino. Note que no final das regras, eu criei uma regra semelhante.
Figura 1 – Regras de firewall
Agora vamos as configurações do squid.
Acesse o menu Services > Proxy Server.
Na guia “General”, desabilite a opção de “Proxy Transparente”.
Em seguida, acesse a guia “Auth Settings”.
Altere as regras conforme a imagem abaixo:
Figura 2 – Configuração da guia Auth Settings do Squid
Explicando os valores que utilizei, para servir como referencia:
Meu dominio: dominio.com.br
Servidor AD: 10.0.0.2
Usuário: squid (Este usuário que fará a autenticação no AD, para efetuar as pesquisas na base de dados ldap).
Nota: Muitos tutoriais existentes na internet, indica para utilizar um usuário Administrator para pesquisar na base de dados ldap. Mas não é necessário que o usuário seja administrador. Crie um usuário com um nome qualquer, sem que este seja administrador do sistema. Isto aumenta a segurança, já que a autenticação é feita em texto puro, sem nenhum tipo de encriptação. (Vide seção “Testes e resultados”)
Após efetuar as alterações e salvar, e inclusive o proxy configurado no navegador da maquina cliente, o Squid já ira solicitar autenticação para navegar.
Autenticação por Grupo
Falta configurar o squid para autenticar por grupo, e não por usuário ou IP.
Lembrando que nenhuma alteração deve ser feito no arquivo squid.conf (/usr/local/etc/squid/squid.conf), como é feito em outras distribuições linux.
Estas configurações são sobre escritas sempre que o pfSense for reiniciado, ou qualquer alteração feita pela webgui.
O correto é alterar diretamente o arquivo squid.inc.
Este arquivo se encontra neste diretorio: /usr/local/pkg/squid.inc
O código gerado após configurar a autenticação na guia “Auth Settings” do squid, ira gerar estas linhas no squid.conf:
auth_param basic program /usr/local/libexec/squid/squid_ldap_auth -v 3 -b dc=dominio,dc=com,dc=br -D cn=squid,cn=Users,dc=dominio,dc=com,dc=br -w 1234 -f “cn=%s” -u uid -P 10.0.0.2:389
Todas as alterações que for feita no squid.inc, após salvar, poderá ver no arquivo squid.conf, como esta ficando as configurações, para efeitos didáticos
Localize estas linhas no squid.inc:
auth_param basic children $processes
auth_param basic realm $prompt
auth_param basic credentialsttl $auth_ttl minutes
acl password proxy_auth REQUIRED
Após localizar, insira estas linhas, para que a autenticação seja feita por grupo, e inclusive, ativa os bloqueios/liberação nos grupos desejados:
#AUTENTICACAO POR GRUPOS DO AD
external_acl_type ldap_group children=30 %LOGIN /usr/local/libexec/squid/squid_ldap_group -v 3 -R -b “dc=dominio,dc=com,dc=br” -D “cn=squid,cn=Users,dc=dominio,dc=com,dc=br” -w “1234” -f “(&(objectclass=person) (sAMAccountName=%v) (memberof=cn=%a,ou=Internet,dc=dominio,dc=com,dc=br))” -h 10.0.0.2 -p 389
#LIBERAÇÃO/BLOQUEIO DOS GRUPOS
#Grupo Acesso Padrao Acesso Limitado
acl ldapInternet-Bancos external ldap_group Internet-Bancos
#Grupo Acesso Full Acesso Full
acl ldapInternet-TI external ldap_group Internet-TI
#acl bloqueio url_regex -i “/var/squid/acl/bloqueio.acl”
acl liberado url_regex -i “/var/squid/acl/liberado.acl”
http_access allow ldapInternet-TI
http_access deny ldapInternet-Bancos !liberado
Note que para fins de testes, eu deixei desabilitado a ACL “bloqueio”, já que neste ambiente, irei utilizar apenas 2 grupos. Um com acesso total, e outro com acesso limitado.
O grupo Internet-Bancos, definido na ACL ldapInternet-Bancos, irá acessar apenas os sites cadastrados no arquivo liberado.acl (ACL liberado), comumente chamado de “lista branca”.
Mas nada impede que seja utilizado mais grupos, e outros tipos de bloqueio, ficando a critério de cada um.
Não esqueça de criar os arquivos bloqueio.acl, e liberado.acl, e colocar algumas URL’s no seu conteúdo.
Testes e resultados:
Antes de alterar o pfsense da empresa onde trabalho, efetuei testes em 3 maquinas virtuais (WinXP, pfSense 2.0 RC3 e Win2003 R2 Standard Edition).
Na VM, não foi necessário colocar um usuário administrador para efetuar as pesquisas no LDAP. Mas já no pfSense instalado na empresa, isso não funcionou. Assim tive que colocar o usuário Administrator do Win2003 para pesquisar no LDAP deste servidor. Portanto, caso não funcione com usuário comum, troque pelo usuário administrator, na guia Auth Settings, e tambem na linha em que “external_acl_type ldap_group” no arquivo squid.inc.
No pfSense (empresa), as configurações da guia “Auth Settings” do squid, foi necessário alterar a opção LDAP search filter, de cn=%s, para sAMAccountName=%s, ficando assim:
Authentication server
10.0.0.2
Authentication server port
389
LDAP server user DN
cn=Administrator,cn=Users,dc=dominio,dc=com,dc=br
LDAP password
senha
LDAP base domain
dc=dominio,dc=com,dc=br
LDAP username DN attribute
uid
LDAP search filter
sAMAccountName=%s
Finalizando:
Depois de algumas semanas pesquisando na internet, estes foram os passos que segui para que o Squid do pfSense autenticasse por grupos no Active Directory.
Atualização 11/01/2012: Acaba de ser publicado, pelo colega de fórum Zeon, um tutorial mais atualizado explicando como fazer seu pfSense autenticar (através de uma conta pré-definida) diretamente no seu servidor MS Active Directory. O texto é bem didático e merece uma leitura atenta. 😉
Estetutorialdemonstracomoutilizarosrecursosdabibliotecasquid_ldap_groupparaqueo SquidautentiqueosusuáriosporgruposcadastradosnoActiveDirectory.
Por: RicardoPardimClaus
29/07/2011
Tags: Squid, pfSense, Active Directory, AD,openldap-client, squid_ldap_group, squid_ldap_auth, squid.inc
Verão do sistema epacotesutilizados:
pfSenseversão 2.0 RC3
Squidversão 2.7
Windows 2003 R2
Existeumbugnosquidenoopenldap-client, ambosnasversõesanterioresà 2.0 dopfSense.
CasooseupfSenseestejaemprodução, enãotemcomofazerumanovainstalação, deveráprimeiro resolver estes problemas seguindoestestutoriais:
http://www.fug.com.br/content/view/689/77/
BasesdeReferencias:
http://www.squid-cache.org.br/index.php?option=com_content&task=view&id=50&Itemid=27
http://www.cyberciti.biz/tips/howto-configure-squid-ldap-authentication.html
http://www.papercut.com/kb/Main/ConfiguringSquidProxyToAuthenticateWithActiveDirectory
http://forum.pfsense.org/index.php/topic,20208.0.html
http://www.digipedia.pl/man/doc/view/squid_ldap_auth.8
Mãosaobra:
Primeiramente, osquidnãopodeestarconfigurado em modo proxytransparente. Nestemodo, nãoépossívelnemaomenosconfigurarasopçõesdeautenticaçãonowebguidopfSense, já que proxy transparente não faz autenticação.
NoActiveDirectory, crieumaOU, comonome “Internet”.
NestaOU, crie 2 grupos “Internet-TI”, e “Internet-Bancos”, ouqualquernomequemaislheagradar.
OgrupoInternet-TI, temacessofull, semnenhumbloqueio.
Jáointernet-bancos, iranavegarapenasemsitescadastradosemumalista (listabranca).
NaOU “Users”, crieumusuáriocomqualquernome, aquiutilizeiousuáriosquid.
Definaumasenhaparaesteusuário, elembredemarcaraopçãoparanãoexpirarasenhadesteusuário.
Apósconcluirtodaaconfiguraçãoindicadanestetutorial, vocêpoderácriarquantosgruposdesejar, eseguircomosbloqueioseliberaçãoparacadaumdeles.
Suponhoqueoseu Squidjáestejafuncionandocomosbloqueiosdesejados.
Antes, énecessárioalterarasregrasdefirewall, paraqueasestaçõesclientessejamobrigadasautilizaremoproxylocalparateracessoainternet.
NomenuFirewall > Rules, asregrasdevemficarconformeimagemabaixo:
OBS: Aregraimportantequedesabilitei, foiasegundaregra, poiselapermiteacessototalaqualquerendereçodedestino. Notequenofinaldasregras, eucrieiumaregrasemelhante.
Figura 1 – Regrasdefirewall
Agoravamosasconfiguraçõesdosquid.
AcesseomenuServices > ProxyServer.
Naguia “General”, desabiliteaopçãode “ProxyTransparente”.
Emseguida, acesseaguia “AuthSettings”.
Altereasregrasconformeaimagemabaixo:
Figura 2 – ConfiguraçãodaguiaAuthSettingsdoSquid
Explicandoosvaloresqueutilizei, paraservircomoreferencia:
Meudominio:dominio.com.br
ServidorAD: 10.0.0.2
Usuáriosquid:
EsteusuárioquefaráaautenticaçãonoAD, paraefetuaraspesquisasnabasededadosldap.
Nota: Muitostutoriaisexistentesnainternet, indicaparautilizarumusuárioAdministratorparapesquisarnabasededadosldap. Masnãoénecessárioqueousuáriosejaadministrador. Crieumusuáriocomumnomequalquer, semqueestesejaadministradordosistema. Istoaumentaasegurança, jáqueaautenticaçãoéfeitaemtextopuro, semnenhumtipodeencriptação. (Vide seção “Testes e resultados”)
Apósefetuarasalteraçõesesalvar, einclusiveoproxyconfiguradononavegadordamaquinacliente, oSquidjáirasolicitarautenticaçãoparanavegar.
AutenticaçãoporGrupo
Faltaconfigurarosquidparaautenticarporgrupo, enãoporusuárioouIP.
Lembrandoquenenhumaalteraçãodeveserfeitonoarquivosquid.conf (/usr/local/etc/squid/squid.conf), comoéfeitoemoutrasdistribuiçõeslinux.
EstasconfiguraçõessãosobreescritassemprequeopfSenseforreiniciado, ouqualqueralteraçãofeitapelawebgui.
Ocorretoéalterardiretamenteoarquivosquid.inc.
Estearquivoseencontranestediretorio: /usr/local/pkg/squid.inc
Ocódigogeradoapósconfiguraraautenticaçãonaguia “AuthSettings” dosquid, iragerarestaslinhasnosquid.conf:
auth_parambasicprogram /usr/local/libexec/squid/squid_ldap_auth –v 3 –bdc=dominio,dc=com,dc=br –Dcn=squid,cn=Users,dc=dominio,dc=com,dc=br –w 1234 –f “cn=%s” –uuid –P 10.0.0.2:389
Todasasalteraçõesqueforfeitanosquid.inc, apóssalvar, poderávernoarquivosquid.conf, comoestaficandoasconfigurações, paraefeitosdidáticos
Localizeestaslinhasnosquid.inc:
auth_parambasicchildren $processes
auth_parambasicrealm $prompt
auth_parambasiccredentialsttl $auth_ttlminutes
aclpasswordproxy_authREQUIRED
Apóslocalizar, insiraestaslinhas, paraqueaautenticaçãosejafeitaporgrupo, einclusive, ativaosbloqueios/liberaçãonosgruposdesejados:
#AUTENTICACAOPORGRUPOSDOAD
external_acl_typeldap_groupchildren=30 %LOGIN /usr/local/libexec/squid/squid_ldap_group –v 3-R –b “dc=dominio,dc=com,dc=br” –D “cn=squid,cn=Users,dc=dominio,dc=com,dc=br” –w “1234” –f “(&(objectclass=person) (sAMAccountName=%v) (memberof=cn=%a,ou=Internet,dc=dominio,dc=com,dc=br))” –h10.0.0.2 –p 389
#LIBERAÇÃO/BLOQUEIODOSGRUPOS
#GrupoAcessoPadraoAcessoLimitado
aclldapInternet–Bancosexternalldap_groupInternet–Bancos
#GrupoAcessoFullAcessoFull
aclldapInternet–TIexternalldap_groupInternet–TI
#aclbloqueiourl_regex –i “/var/squid/acl/bloqueio.acl“
aclliberadourl_regex –i “/var/squid/acl/liberado.acl“
http_accessallowldapInternet–TI
http_accessdenyldapInternet–Bancos !liberado
Notequeparafinsdetestes, eudeixeidesabilitadoaACL “bloqueio”, jáquenesteambiente, ireiutilizarapenas 2 grupos. Umcomacessototal, eoutrocomacessolimitado.
OgrupoInternet-Bancos, definidonaACLldapInternet-Bancos, iráacessarapenasossitescadastradosnoarquivoliberado.acl (ACLliberado), comumentechamadode “listabranca”.
Masnadaimpedequesejautilizadomaisgrupos, eoutrostiposdebloqueio, ficandoacritériodecadaum.
Nãoesqueçadecriarosarquivosbloqueio.acl, eliberado.acl, ecolocaralgumasURL’snoseuconteúdo.
Testeseresultados:
Antesdealteraropfsensedaempresaondetrabalho, efetueitestesem 3 maquinasvirtuais (WinXP, pfSense 2.0 RC3 eWin2003 R2 StandardEdition).
NaVM, nãofoinecessáriocolocarumusuárioadministradorparaefetuaraspesquisasnoLDAP. MasjánopfSenseinstaladonaempresa, issonãofuncionou. AssimtivequecolocarousuárioAdministratordoWin2003 parapesquisarnoLDAPdesteservidor. Portanto, casonãofuncionecomusuáriocomum, troquepelousuárioadministrator, naguiaAuthSettings, etambemnalinhaemque “external_acl_typeldap_group” noarquivosquid.inc.
NopfSense (empresa), asconfiguraçõesdaguia “AuthSettings” dosquid, foinecessárioalteraraopçãoLDAPsearchfilter, decn=%s, parasAMAccountName=%s, ficandoassim:
Authenticationserver
10.0.0.2
Authenticationserverport
389
LDAPserveruserDN
cn=Administrator,cn=Users,dc=dominio,dc=com,dc=br
LDAPpassword
senha
LDAPbasedomain
dc=dominio,dc=com,dc=br
LDAPusernameDNattribute
uid
LDAPsearchfilter
sAMAccountName=%s
Finalizando
Depoisdealgumassemanaspesquisandonainternet, estesforamospassosqueseguiparaqueoSquid dopfSenseautenticasseporgruposnoActiveDirectory.