Sites como o Facebook, a muito tempo tem usado o protocolo HTTPS. Com HTTPS, informações como protocolo e caminho estão criptografadas e o
Squid não tem acesso a elas.
A partir da versão 3.1 o Squid, pode ser configurado para funcionar como
man-in-the-middle (homem do meio), ou seja, decodificar o tráfego para analisá-lo com os recursos do Squid. Assim, podemos, enfim, bloquear Facebook e similares, mesmo quando acessados por HTTPS.
Nesta dica, utilizei a versão 3.3.10 do Squid. Ela pode ser obtida em:
Foi necessário compilar o Squid com as seguintes diretivas:
- --enable-ssl
- --enable-ssl-crtd
Não vou entrar em detalhes sobre a compilação, pois este não é o foco da dica.
É necessário criar um certificado raiz auto-assinado. Este certificado será usado pelo Squid para gerar certificados dinâmicos. Este certificado torna-se um certificado raiz e você se torna uma CA raiz.
Se o certificado for comprometido, qualquer usuário confiando (conscientemente ou não) no seu certificado raiz, não pode ser capaz de detectar ataques
man-in-the-middle orquestrados por terceiros.
Criar o diretório para armazenar o certificado (a localização exata não é importante):
# cd /etc/squid3
# mkdir ssl_cert
# cd ssl_cert
Criar certificado auto-assinado (você será solicitado a fornecer informações que serão incorporados em seu certificado):
# openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout empresa.pem -out empresa.pem
Criar uma versão para ser importada no Browser do usuário:
# openssl x509 -in empresa.pem -outform DER -out empresa.der
O arquivo
empresa.der deve ser importado nos navegadores dos usuários. Caso contrário, será exibida a mensagem de certificado inválido ao acessar um site HTTPS.
Editar
squid.conf:
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/ssl_cert/empresa.pem
always_direct allow all
ssl_bump server-first all
sslcrtd_program /usr/src/squid-3.3.10/src/ssl/ssl_crtd -s /etc/squid3/ssl_cert/ssl_db -M 4MB
sslcrtd_children 5
Ajustar o diretório para cache de certificados:
# /usr/src/squid-3.3.10/src/ssl/ssl_crtd -c -s /etc/squid3/ssl_cert/ssl_db
O comando acima inicializa o banco de dados para armazenar certificados SSL em cache.
Depois de inicializado o DB SSL, é necessário ajustar as permissões do arquivo:
# chown -R proxy /etc/squid3/ssl_cert/ssl_db
Pronto, o Squid está configurado para inspecionar o tráfego HTTPS. Agora podemos criar uma ACL para bloquear os sites que desejarmos:
acl block dstdomain "/etc/squid3/sites"
http_access deny block
O arquivo
/etc/squid3/sites deve conter os domínios que serão bloqueados, por exemplo:
.facebook.com
.youtube.com
Ao acessar
http://www.facebook.com ou
https://www.facebook.com, o acesso será negado.