Integrando Squid com grupos do Active Directory (Windows Server 2019) e criar hierarquias de acesso através deles.
Ubuntu Server (srvProxy) | Windows Server 2019 (srvAD) |
IP: 192.168.0.64 | IP: 192.168.0.193 |
Porta proxy: 3128 e 3129 (Usuários AD) | Domínio: HOMEOFFICE |
Instalando pacotes necessários:
sudo apt install squid squidclient squidview -y
Backup do arquivo original
sudo cp /etc/squid/squid.conf{,.original}
Criando as pastas e os arquivos necessários para o funcionamento
sudo mkdir -p /etc/squid/bloqueados
sudo mkdir -p /etc/squid/liberados
sudo touch /etc/squid/bloqueados/palavras
sudo touch /etc/squid/liberados/dominios
sudo touch /etc/squid/bloqueados/dominios
sudo touch /etc/squid/liberados/totalmente_liberados
sudo touch /etc/squid/bloqueados/expressoes
sudo touch /etc/squid/liberados/dominios_sem_senha
sudo touch /etc/squid/liberados/ips
sudo touch /etc/squid/bloqueados/ips
sudo touch /etc/squid/bloqueados/expressoes_gerais
sudo touch /etc/squid/bloqueados/expressoes_gerais
sudo touch /etc/squid/liberados/videos_youtube
sudo touch /etc/squid/liberados/redes
sudo vim /etc/squid/liberados/redes
192.168.0.0/24
sudo vim /etc/squid/squid.conf
#
# WELCOME TO SQUID 4.10
#
# Usar com o IP para garantir apenas conexões via rede interna
http_port 192.168.0.64:3128
http_port 127.0.0.1:3128
http_port 192.168.0.64:3129
http_port 127.0.0.1:3129
visible_hostname srvproxy
dns_nameservers 192.168.0.193
pid_filename /var/run/squid.pid
#max_filedesc 4096
# Mensagens em português
error_directory /usr/share/squid/errors/Portuguese
error_directory /usr/share/squid-langpack/pt-br
# Configuração de Cache
cache_mem 512 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 100 MB
minimum_object_size 2 KB
cache_swap_low 90
cache_swap_high 95
cache_dir aufs /var/spool/squid 1024 16 256
# Numero de arquivos de log rotacionados a guardar.
logfile_rotate 4
# Monitoramento
high_response_time_warning 1500
acl Snmppublic snmp_community public
# IP ZABBIX
acl SnmpHost src 192.168.0.243 127.0.0.1
snmp_access allow SnmpHost Snmppublic
http_access allow SnmpHost
# Não incluir cabeçalho de redirecionamento
via off
forwarded_for delete
# Aumentar tentativas de redirecionamentos para evitar erros 503 em sites https
forward_max_tries 30
cache_mgr contato@joserodriguesfilho.com
mail_from contato@joserodriguesfilho.com
# Debugging for your ACLs
# debug_options 28,9
# Localização do log de acesso
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280
#ACLs
#Squid RealTime stat
#acl manager proto cache_object
acl webserver src 192.168.0.64/255.255.255.0
http_access allow manager webserver
http_access deny manager
# Mysar
# log_fqdn off
# emulate_httpd_log off
log_mime_hdrs off
# java
acl libjava url_regex javadl-esd.sun.com/*
http_access allow libjava
# Redes
acl redesall src all
acl rede_cabo src "/etc/squid/liberados/redes"
acl localhost src 127.0.0.1/32
# Palavras
acl palavras_bloqueadas dstdom_regex "/etc/squid/bloqueados/palavras"
# Domínios
acl dominios_livres dstdomain "/etc/squid/liberados/dominios"
acl dominios_bloqueados dstdomain "/etc/squid/bloqueados/dominios"
acl dominios_bloqueados_gerais dstdomain rapidhare.com www.rapidhare.com www.1.fm 1.fm uwall.tv mail.ru
acl dominios_liberados_gerais dstdomain "/etc/squid/liberados/totalmente_liberados"
# Expressões Regulares
acl expressoes_bloqueadas url_regex -i "/etc/squid/bloqueados/expressoes"
# Streaming video/mp4
acl streaming rep_mime_type video/quicktime video/x-flv video/x-ms-asf video/m2ts video/mp2t video/MP2T video/mpeg video/msvideo video/quicktime video/x-flv video/x-ms-asf #video/webm
# Portas SSL
acl SSL_ports port 443 563
# Portas Seguras
acl Safe_ports port 21
acl Safe_ports port 80
acl Safe_ports port 89
acl Safe_ports port 8080
acl Safe_ports port 443 563
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 3389
acl Safe_ports port 1025-1862
acl Safe_ports port 1864-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl Safe_ports port 901
# Domínios sem senha
acl dominios_sem_senha dstdomain "/etc/squid/liberados/dominios_sem_senha"
http_access allow dominios_sem_senha
# Binários
acl binarios url_regex -i \.avi($|\?|\&) \.mp3($|\?|\&) \.mp4($|\?|\&) \.torrent($|\?|\&) \.webm($|\?|\&) \.inf($|\?|\&) \.exe($|\?|\&)
# Bloquear método PURGE, que trata de objetos em cache
acl purge method PURGE
# Tunelamento de conexões
acl CONNECT method CONNECT
# Autenticação para quem esta logado no domínio.
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --domain=HOMEOFFICE
auth_param ntlm children 200
# Grupos do AD
external_acl_type Active_Directory %LOGIN /usr/lib/squid/ext_wbinfo_group_acl
# Autenticação normal
# auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
# auth_param basic children 150
# auth_param basic realm Squid proxy-caching web server
# auth_param basic realm ATENCAO: ao digitar seu login e senha o usuario declara estar ciente do conteudo da portaria xxx/xx, que regulamenta o uso da Internet
# auth_param basic credentialsttl 2 hours
# Liberar/negar Por IPs e macs da rede interna
acl ips_livres src "/etc/squid/liberados/ips"
acl ips_bloqueados src "/etc/squid/bloqueados/ips"
# Impedimento de login simultâneo
authenticate_ip_ttl 60 seconds
#acl loginsvariasmaquinas proxy_auth jose.rodrigues sergio.araujo
acl loginsvariasmaquinas external Active_Directory LA005
acl umlogin max_user_ip -s 1
http_access deny umlogin !loginsvariasmaquinas
# Acls da autenticação
# Logins com cota
acl loginscota proxy_auth "/etc/squid/liberados/loginscota"
# Logins sem restrições via AD
acl AD_LA001 external Active_Directory LA001
# Logins sem acesso via AD
acl AD_LB001 external Active_Directory LB001
# Demais casos
acl logins proxy_auth REQUIRED
# Sites com cota
acl urlscota dstdomain facebook.com youtube.com facebook.com.br youtube.com.br fast.com
# Limitação de uso de banda para streaming
delay_pools 2
delay_class 1 3
delay_parameters 1 -1/-1 800000/800000 100000/100000
delay_access 1 allow rede_cabo #logins_livres
# Teste delay geral
delay_class 2 3
delay_parameters 2 -1/-1 -1/-1 2000000/2000000
delay_access 2 allow rede_cabo
# Não faz cache dos servidores locais
acl LocalServers dst 192.168.0.0/24
no_cache deny LocalServers
acl DomainMachines dstdomain .homeoffice.local
no_cache deny DomainMachines
# Facebook com VÍDEO
acl facebookUsersVideo proxy_auth jose.rodrigues vivian.lima
acl facebookDomainVideo url_regex -i "/etc/squid/bloqueados/expressoes_gerais"
http_access allow facebookDomainVideo facebookUsersVideo
# Teste bloqueio geral de vídeos no Facebook - transferir para arquivo BLOQUEADOS_GERAIS
# acl videos_facebook url_regex -i .*video.*fbcdn\.net.* .*video\.globo\.com.* *.lance\.com\.br.* .*dafiti\.com\.br.* .*mp\.microsoft\.com.*
acl videos_facebook url_regex -i "/etc/squid/bloqueados/expressoes_gerais"
http_access deny videos_facebook
# -----------------------------------------------
# Listas para redes sociais, WhatsApp e YouTube
# -----------------------------------------------
# Vídeos YouTube liberados
acl videos_youtube url_regex -i "/etc/squid/liberados/videos_youtube"
http_access allow videos_youtube
# WhatsApp web
acl whatsappwebUsers external Active_Directory LA002
acl whatsappwebDomain url_regex -i web.whatsapp.com
http_access allow whatsappwebDomain whatsappwebUsers
# YouTube
acl youtubeUsers external Active_Directory LA004
acl youtubeDomain url_regex -i youtube.com googlevideo.com
http_access allow youtubeDomain youtubeUsers
# Facebook
acl facebookUsers external Active_Directory LA003
acl facebookDomain url_regex -i facebook.com
http_access allow facebookDomain facebookUsers
# Bloqueios, liberacoes
# Importante prestar atencao a ordem das regras
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access allow dominios_liberados_gerais
http_access deny dominios_bloqueados_gerais
http_access allow ips_livres
http_access deny binarios
#http_access allow logins_livres
http_access allow AD_LA001
http_access deny AD_LB001
http_access deny streaming
http_reply_access deny streaming
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow dominios_livres
http_access deny ips_bloqueados
http_access deny AD_LB001
http_access deny palavras_bloqueadas
http_access deny expressoes_bloqueadas
http_access deny dominios_bloqueados
http_access allow loginscota
http_access allow logins
http_access allow rede_cabo
http_access deny redesall
http_access deny all
Definir permanentemente ulimit -n
sudo vim /etc/sysctl.conf
fs.file-max = 65535
sudo sysctl -p
sudo vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
Permissão no arquivo NTLM
sudo chmod 6755 /usr/bin/ntlm_auth ; systemctl restart squid
Ajustes no crontab
sudo vim /etc/crontab
# Atualiza o squid de 15 em 15 minutos.
*/15 * * * * root systemctl reload squid >/dev/null 2>&1
# Permissão
58 23 * * * root chmod 6755 /usr/bin/ntlm_auth >/dev/null 2>&
# sudo /etc/init.d/cron restart
DICAS
Veja a seguir algumas dicas que vão lhe ajudar
Status do Squid
# systemctl status squid.service
Verificando as ACLS
# squid -k check
Verifica se usuário esta conseguindo autenticar
# /usr/bin/ntlm_auth --username=joserf --password=senha --domain=HOMEOFFICE
O usuário joserf esta no grupo teste ?
echo "joserf teste" | /usr/lib/squid/ext_wbinfo_group_acl
Exibe os sites que os IPS estão acessando
# tail -f /var/log/squid/access.log |awk '{print "IP: "$3" Site: "$7}'
Exibe os logins, IPs e sites
# tail -f /var/log/squid/access.log |awk '{print "Login: "$8" IP: "$3" Site: "$7}'
Usúarios utilizando a proxy em tempo real (IP/Login)
# squidclient mgr:active_requests |awk -F ':| ' '/remote|username/{print $3,"\n"$2 | "xargs -n2 |sort -u"}' |grep -v -
squidclient mgr:active_requests |awk -F ':| ' '/remote|username/{print $3,$2 | "xargs -n2 |sort -u"}' |awk '{print $2",",$1}' |grep -v -
CSV
JSON
Exibe os acessos por IP
tail -f /var/log/squid/access.log | grep 192.168.0.X
Exibe os acessos por login
tail -f /var/log/squid/access.log | grep joserf
Usuários utilizando a proxy
# squidclient mgr:active_requests |grep username |grep -v - | sort | uniq |awk '{print$2}' | wc -l
Quantidade de usuários conectados
# squidclient mgr:active_requests |grep username |grep -v - | sort | uniq |awk '{print$2}' | wc -l
Quanto tempo o Squid esta em execução ?
# systemctl status squid.service |grep Active |awk '{print$9}' |head -n 1
Hosts conectados (*net-tools)
# netstat -n enp0s3 | grep '\:3129' | awk '/ESTABLISHED/ {print $5}' | cut -d: -f1 | sort | uniq -c | wc -l
O Squid está execudando (active), parado (inactive) ou com erro (failed) ?
systemctl status squid.service |grep Active |awk '{print$2}' |head -n 1
Consumo de memória do Squid
# systemctl status squid.service |grep Memory |awk '{print$2}'
Há quanto tempo o Squid está rodando ?
# systemctl status squid.service |grep Active |awk '{print$9,$10}' |head -n 1
Data / Hora
# systemctl status squid.service |grep Active |awk '{print$6,$7}' |awk -F '-| ' '{print $3"/"$2"/"$1,$4}' |head -n 1
# systemctl status squid.service |grep Active |awk '{print$6,$7,$9,$10}' |awk -F '-| ' '{print $3"/"$2"/"$1,$4,$5,$6}' |head -n 1
# systemctl status squid.service |grep Active |awk '{print$6,$7}' |head -n 1
# systemctl status squid.service |grep Active |awk '{print$6}' |head -n 1 |awk -F- '{printf "%s/%s/%s\n",$3,$2,$1}'
# systemctl status squid.service |grep Active |awk '{print$6}' |head -n 1 | awk -v FS=- -v OFS=/ '{print $3,$2,$1}'
Espaço em disco usado pelo log
# du -hs /var/log/squid/ | awk '{print $1}'
Uptime
# squidclient mgr:info 2>&1|grep 'UP Time:' |cut -d':' -f2 |awk '{print$1}'
CPU
# squidclient mgr:info|grep 'CPU Usage:'|cut -d':' -f2|tr -d '%'|tr -d ' \t'