Pesquisar este blog

sexta-feira, 3 de julho de 2015

Instalando e configurando o Squid - Para Acessar o Active Directory da Microsoft

Conforme amplamente difundido na internet, o Squid é o servidor proxy mais usado no mundo, sua configuração é relativamente simples, não vou entrar muito em detalhes da sua instalação pois existem diversos artigos que tratam bem o assunto. A configuração que é o escopo desse, com autenticação dos usuários do Squid no Active Directory. Vamos instalar o Squid a partir dos repositórios oficiais do Debian:

# apt-get install squid3

Agora vamos fazer uma cópia do squid.conf substituindo-o pelo conteúdo abaixo:

# cd /etc/squid3
# cp -rpvf squid.conf squid.conf.default
# echo "" > squid.conf
# vi squid.conf


# /etc/squid3/squid.conf
#
# Autor: Leandro Moreira
#
# Licença: GPL - http://www.gnu.org/licenses/gpl.html
# Solicito apenas que informe a fonte original.
#
# Descrição:
# - Arquivo para configuração do squid
#
##########################################

# Portas (padrão 3128)
#########################################

http_port 172.16.10.253:3128

# OTIMIZANDO CONEXÕES
#########################################
hierarchy_stoplist cgi-bin ?
###acl QUERY urlpath_regex cgi-bin \? \& \%
###no_cache deny QUERY
####hosts_file /etc/hosts

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

# Logs
########################################
#logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
#access_log /var/log/squid3/access.log combined
access_log /var/log/squid3/access.log
cache_log  /var/log/squid3/cache.log

# ACLs
#########################################

# acls de origem
# =======================================
# qualquer rede
#acl all src 0.0.0.0/0.0.0.0
# rede loopback
acl localhost src 127.0.0.1/32
# rede dmz (rede servidores)
#acl dmz src 192.168.0.0/24
# rede administrativo (rede setor administrativo)
acl administrativo src 172.16.10.0/24
# rede acadêmica (rede setor acadêmico)
#acl academica src 172.16.0.0/24
### admins (IPs com acesso administrador do squid - não usam proxy para navegar)
#acl admins src 172.16.10.180/32

# acls de destino
# =======================================
acl allDest dst 0.0.0.0/0.0.0.0
acl to_localhost dst 127.0.0.0/8
# acls de portas
# =======================================
# portas seguras
acl SSL_ports port 443 563
# demais serviços
acl Safe_ports port 80 # http
acl Safe_ports port 8080 # tomcat
acl Safe_ports port 8443 # tomcat - ssl
acl Safe_ports port 10000 # webmin
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 631 # cups
acl Safe_ports port 777 # multiling http
#acl Safe_ports port 901 # SWAT
acl Safe_ports port 4500 # Biblioteca USP dedalus
acl Safe_ports port 2083 # CPANEL
acl Safe_ports port 2631 # Conectividade Social
acl Safe_ports port 1494 # Sigov
acl Safe_ports port 8333 # WMWARE SERVER
# acls default squid
# ========================================
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge

# acls de segurança
# =======================================
# proteção do cache
acl manager proto cache_object

# ========================================
# 1 - acl controlar sites (sites-proibidos)
# ----------------------------------------
acl sites_deny dstdomain -i "/etc/squid3/acls/sites-proibidos"
acl sites_allow dstdomain -i "/etc/squid3/acls/sites-permitidos"
acl caixa dstdomain -i .caixa.gov.br

# 2 - acl controlar palavras de sexo, baixo calão, etc
# ----------------------------------------
acl palavras_deny url_regex -i "/etc/squid3/acls/palavras-deny"
acl palavras_allow url_regex -i "/etc/squid3/acls/palavras-allow"

# 3 - acl controlar horário de expediente
# ----------------------------------------
#acl horario_allow url_regex -i "/etc/squid3/horario_allow"
#acl fora_expediente time MTWHFA 20:01-23:59
#acl fora_expediente2 time MTWHFA 00:00-05:59

# 4 - acl liberacao Windowsupdate
# ----------------------------------------
acl update dstdomain -i Windowsupdate.microsoft.com au.download.Windowsupdate.com

# acls de sites locais
# =======================================
acl sites_locais dst 192.168.0.100
#acl sites_locais dstdomain 192.168.0.100

# HTTP ACCESS
##########################################

# regras das acls de origem
# ========================================
# libera os administradores
#http_access allow admins

# regras das acls de portas
# ========================================
# bloqueia todas as portas não listadas
http_access deny !Safe_ports
# bloqueia conexões das portas seguras não listadas
http_access deny CONNECT !SSL_ports

# regras das acls de controle (bloqueio e políticas de rede)
# ========================================

http_access allow all AuthorizedUsers

# 1 - controle de acessos especiais
# ----------------------------------------
# bloqueia tudo com exceção do arquivo excecao
http_access allow update
http_access allow liberaexe

# 2 - controle de acesso de sites proibidos
# ----------------------------------------
http_access deny sites_deny !sites_allow

# 3 - controle de acesso da acl de palavras de sexo, baixo calão, etc
# ---------------------------------------
# bloqueia todas as palavras da lista de proibidas com exceção das
# palavras liberadas
http_access deny palavras_deny !palavras_allow

# 4 - controle de horário de expediente
# ----------------------------------------
# bloqueia utilização fora do expediente
#http_access deny !horario_allow fora_expediente
#http_access deny !horario_allow fora_expediente2
# 5 - controle de acesso ao site da caixa (Conectividade social)
# ---------------------------------------
# permite acesso direto ao site da caixa, sem restrições
http_access allow caixa
always_direct allow caixa
# 6 - controle de acesso da acl de palavras de sexo, baixo calão, etc
# ---------------------------------------
# bloqueia todas as palavras da lista de proibidas com exceção das
# palavras liberadas
http_access deny palavras_deny !palavras_allow

# HTTP REPLY ACCESS
#########################################
http_reply_access allow all

# ICP ACCESS
#########################################
icp_access allow all

# MISS ACCESS
#########################################
miss_access allow all

# MODO DE FTP PASSIVO
#########################################
#ftp_passive on

# DNS
#########################################
dns_nameservers 172.16.10.254

# SNMP
acl snmpro snmp_community local
snmp_access allow snmpro all
snmp_port 3401

# CONFIGS Diversas
########################################
# Email do administrador
cache_mgr leandro@leandromoreira.eti.br
# Host visível
visible_hostname proxy.dominio.local
# Linguagem dos erros
error_directory /usr/share/squid3/errors/Portuguese
# Evita que sejam feitos coredumps.
coredump_dir /var/spool/squid3
# Numero de arquivos de log rotacionados a guardar.
logfile_rotate 4

Salve o arquivo e saia.

# touch /etc/squid3/acls/sites-proibidos
# touch etc/squid3/acls/sites-permitidos
# touch etc/squid3/acls/palavras-deny
# touch etc/squid3/acls/palavras-allow


Vamos testar a configuração do Squid:

# squid3 -k parse

Se o comando acima não retornar erro basta reiniciar o Squid:

# /etc/init.d/squid3

Artigo retirado de: http://www.vivaolinux.com.br/artigo/Integrando-autenticacao-do-Squid-ao-Active-Directory?pagina=4
Autor:  Leandro Moreira 

PFSense – Configurando Squid Autenticando no Active Directory via LDAP

Neste Post veremos como configurar o nosso Squid dentro do PFSense, para buscar as autenticações dos nosso usuário em um Domínio Active Directory.
Esse processo é bem simples, bastando configurar algumas informações no próprio ambiente do PFSense.
Mas também é possível, utilizar autenticação dos Usuários no AD, mas vinculado a grupos do próprio AD, por exemplo, permitir Usuários de o Grupo TI acessar qualquer site, e usuários do Grupo Users terem limitações de acesso.
Num primeiro momento vamos ver como fazer a simples autenticação dos usuários no Active Directory.
O primeiro item a ser feito, pós-instalação do Squid, é a configuração do Proxy , para tanto vá em Services -> Proxy Server ->Auth Settings e altere os seguintes campos abaixo:

Authentication method : LDAP
LDAP version: 3
Authetication Server: 192.168.1.49
Authentication server port: 389
LDAP server user DN: cn=Administrator,cn=Users,dc=dominiostato,dc=net
LDAP Password: P@ssword
LDAP Base domain: dc=dominiostato,dc=net
LDAP Username DN Attribute: uid
LDAP search filter : SAMAccountName=%s

Neste caso acima, estou utilizando o domínio DOMINIOSTATO.NET, e utilizando o Administrar com senha P@ssword, como o usuário que irá buscar informações de autenticação.
O filter, é um filtro LDAP que irá buscar no AD o campo sAMAccountName, que na realidade é próprio nome do usuário no Schema do Active Directory.
Feita essa configuração, já está integrado com seu Active Directory. Veja abaixo a imagem:

pfsense1

PFSense2
Para verificar, feche o browser e acesse a Internet. Deverá ser solicitado nome de usuário e senha, que deverão ser colocadas de usuário do Active Directory.
O grande problema nesse modelo, são restrições por tipo de usuário, que não será possível, pela forma como é configurado o Squid no PFSense.
Poderíamos usar o campo Custom da Guia General, para criar configurações de Grupos associados a ACL, e não grupos do AD diretamente. Mas como é feito no PFSense, primeiro são colocados as configurações do Campo Custom do Squid, antes da autenticação no arquivo final de configuração squid.conf, de forma que você não poderá usar a autenticação, pois a mesma está abaixo ainda no arquivo de configuração.
Qual solução?
Usar somente o campo Custom do Squid PFSense.

Customizando as configurações do Squid no PFSense


Na guia General, no final da página existe um campo chamado Custom Option. Neste campo podemos fazer qualquer tipo de configuração ( desde que não misture com algumas opções da WEB como autenticação), tais como autenticação, Balance, QOS, etc. Veja abaixo a figura.
pfsense3

Através de um simples comando no console, ou no próprio PFSense, Diagnostics, podemos encontrar o arquivo squid.conf, e copiar as configurações prontas de autenticação LDAP.

find / | grep squid.conf

Uma vez pego essas configurações, basta copiarmos para o campo Custom. “Lembre-se que as linhas devem sempre terminar com “;” (ponto e virgula).
Num primeiro momento iremos usar somente a biblioteca squid_ldap_auth, e através do mesmo iremos improvisar para criamos usuários vinculados a uma acl, como se fosse um grupo. Vejamos a linha de autenticação:

auth_param basic program /usr/pbi/squid-amd64/libexec/squid/squid_ldap_auth -v 3 -b DC=DOMINIOSTATO,DC=NET -D CN=Administrator,CN=Users,DC=DOMINIOSTATO,DC=NET -w P@ssw0rd -f “sAMAccountName=%s” -u uid -P 192.168.1.49:389;auth_param basic children 5; auth_param basic realm Please enter your credentials to access the proxy;
auth_param basic credentialsttl 60 minutes;

A primeira linha com certeza a mais importante, é que faz a chamada para a bibliote squid_ldap_auth. Temos as seguintes opções:
-b   Base LDAP ( Nome do domínio no formato LDAP)
-D Usuário utilizado para fazer a consulta no Active Directory no formato LDAP. Esse usuário deverá fazer parte do grupo Domain Admins.
-w Senha do Usuário utilizado anteriormente
-f Filtro de consulta. (Campo que será comparado com que o usuário digitar no Browser)
-u Especifica o name do Atributo DN que contem o nome de usuário/Login .
-P Conexão LDAP, nome ou IP Servidor com sua respectiva porta.

Na segunda linha temos a quantidade de processos filhos que serão iniciados, em REALM a informação que será exibida na popup que solicita usuário e senha e por fim tempo de vida das credencias, que neste caso poderá ser de 60 minutos, ou até o browser fechar.
Uma vez configurado o método de autenticação, devemos criar agora as ACLs. É bem comum e padrão do PFSense deixar da seguinte forma:

acl password proxy_user REQUIREDhttp_access allow passoword

Neste item acima, criamos uma ACL chamada password, que exige somente uma autenticação válida. E logo abaixo permitidos acesso a tudo, de quem foi autenticado pela ACL password.
Mas muitas vezes necessitamos de mais controle, e não queremos simplesmente permitir acesso a tudo e a todos. Desta forma é possível criar ACLs, vinculados a usuários específicos.

acl usuarios proxy_user joao maria pedroacl diretoria proxy_user marcos fernando acl sites_proibidos url_regex –i facebook Microsoft
http_access deny sites_proibidos usuários
http_access allow usuarios
http_access allow diretoria
http_access deny all

Neste exemplo acima, criamos duas acls usuarios e diretoria, vinculados aos usuários joao, maria, Pedro, marcos e fernando. Criamos uma outra acl com alguns sites. Ao final proibimos a acl sites_proibidos aos grupos usuarios, posteriormente permitindo acesso total aos dois grupos e por fim bloqueamos o restante.
É um método válido, mas não a melhor forma, existe uma outra bibliote squid_ldap_group, que trás os grupos já prontos do Active Directory, dessa forma se torna muito mais fácil a administração, sendo gerenciada diretamente do AD da Microsoft.

Buscando grupos do LDAP através do squid_ldap_group


Podemos fazer uso dessa biblioteca para buscar os grupos do AD. A chamada é diferente da acima, por se tratar de uma entrada de acl, mas também diferente da anterior, pois trata-se de uma acl externa.
No exemplo abaixo, estou usando ainda o mesmo domínio e usuário de exemplo, bem como endereço IP. O mais diferente realmente é o filtro que agora faz referencia para variáveis.

external_acl_type ldap_users %LOGIN /usr/local/libexec/squid/squid_ldap_group -v 3 -R -b DC=DOMINIOSTATO,DC=NET -f “(&(cn=%v)(memberOf=cn=%a,cn=Users,dc=dominiostato,dc=net ))” -D CN=Administrator,CN=Users,DC=DOMINIOSTATO,DC=NET -w P@ssw0rd -P 192.168.1.49:389

External_ACL é a chamada para a biblioteca, ldapusers foi o nome dado a essa acl. Posteriormente quando formos utilizar para informar o grupo em particular, deveremos fazer referencia a esse nome.
Bom, o que é mais diferente, é o filtro. Primeiro usamos o cn=%v. Esse cn , significa common name, que será o nome digitado pelo usuário no Browser. Posteriormente temos memberOf=cn=%a,cn=Users,dc=dominiostato,dc=net, onde %a será o nome do grupo informado na acl, o restante é o caminho do meu grupo dentro do AD. Na realidade para quem já conhece LDAP, seria dn ( Distinguished Name). Esse valor deve ser exato, caso contrário o grupo não será encontrado.
E o restante é exatamente igual à autenticação vista anteriormente.
Uma vez feita a configuração correta da biblioteca, basta agora fazermos a chamada dela, junto ao grupo que queremos utilizar do AD.

acl ad_usuarios external ldap_users Usersacl ad_diretoria external ldap_users Diretoria acl sites_proibidos url_regex –i facebook Microsoft
http_access deny sites_proibidos ad_usuarios
http_access allow ad_usuarios
http_access allow ad_diretoria
http_access deny all

Podemos ver acima, que a sintaxe é muito similar em relação a uma ACL comum e uma ACL externa. Usamos a palavra reserva external seguida do nome da ACL externa que criamos anteriormente.
O processo é simples, porém deve-se prestar muita atenção, pois uma virgula a mais ou a menos, principalmente nos caminhos da base, grupo ou usuário LDAP já é o suficiente para não funcionar.
“E mais importante: Todo final de linha termina com “;” (ponto e virgula). NÃO ESQUEÇA.
O ponto e vírgula pra o PFSense informa onde termina a linha, deste forma ele poderá organizar de forma correta o squid.conf.
Espero que aproveitem, e não deixem de conferir o curso completo de PFSense, bem como a aula Integrando Squid + ActiveDirectory via LDAP e NTLM.


Artigo retirado de: http://www.stato.blog.br/wordpress/?p=1470

SQUID.CONF preparado para acessar o Active Directory da Microsoft

auth_param basic realm [PENSELINUX - Proxy Monitorado]
auth_param ntlm program /usr/bin/ntlm_auth PENSELINUX/SERVERAD --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 20 startup=0 idle=1
auth_param negotiate keep_alive on

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 20 startup=0 idle=1
auth_param basic credentialsttl 2 hours

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32

acl teste src 10.20.30.0/24
http_access allow teste

acl rede_local src 192.168.0.0/24

acl SSL_ports port 8081
acl SSL_ports port 8082
acl SSL_ports port 443
acl SSL_ports port 8443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 8080 # SMS SICS
acl Safe_ports port 8081 # SMS SICS
acl Safe_ports port 10000 # Porta de acesso ao WEBMIN

acl sites_liberados_full url_regex -i "/etc/squid3/sites_liberados_full"
http_access allow sites_liberados_full

acl sites_bloqueados_full url_regex -i "/etc/squid3/sites_bloquedos_full"
http_access deny sites_bloqueados_full

acl acesso proxy_auth REQUIRED
acl CONNECT method CONNECT

external_acl_type Grupos_AD children=10 %LOGIN /usr/lib/squid3/wbinfo_group.pl

acl net_diretoria external Grupos_AD net_diretoria
acl net_geral external Grupos_AD net_geral
acl net_compras external Grupos_AD net_compras
acl net_restritivo external Grupos_AD net_restritivo
acl net_rh external Grupos_AD net_rh

acl ipsliberados src "/etc/squid3/ipsliberados"
http_access allow ipsliberados

http_access allow net_diretoria

acl net_geral_blacklist url_regex -i "/etc/squid3/net_geral_blacklist"
http_access allow net_geral !net_geral_blacklist

acl net_compras_blacklist url_regex -i "/etc/squid3/net_compras_blacklist"
http_access allow net_compras !net_compras_blacklist

acl net_rh_blacklist url_regex -i "/etc/squid3/net_rh_blacklist"
http_access allow net_rh !net_rh_blacklist

acl net_restritivo_whitelist url_regex -i "/etc/squid3/net_restritivo_whitelist"
http_access allow net_restritivo net_restritivo_whitelist

# Bloqueio de tudo que não foi previamente liberado
http_access deny all

http_reply_access allow all

http_port 3128

# We recommend you to use at least the following line.
cache_mem 1 GB

maximum_object_size_in_memory 512 KB

# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid3 1024 16 256

minimum_object_size 0 KB

maximum_object_size 50 MB

access_log /var/log/squid3/access.log squid

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid3

# add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320

visible_hostname fw01.penselinux.local

error_directory /usr/share/squid3/errors/pt-br/
error_default_language pt-br

hosts_file /etc/hosts
 
Retirado de: http://penselinux.com.br/2014/07/15/integrando-o-squid-ao-ad/
Em : 03/07/2015 - 06:02