Já, há algum tempo, o
Squid sozinho sem ferramentas paralelas, não consegue ter uma boa eficiência para bloqueio de sites com o protocolo HTTPS, o fluxo de dados acaba passando por fora do Squid.
Isso já era uma dor de cabeça desde a época do velho Orkut, hoje, grande parte dos sites de relacionamentos, Facebook, Twiter, etc, utilizam o protocolo HTTPS e no mundo de hoje, com o nível altíssimo de acessos às redes sociais, causa um grande transtorno para os administradores de rede.
Alguns extremistas bloqueavam através do
IPtables todo fluxo para a porta 443, porta usada pelo protocolo HTTPS, isso afetava acessos a bancos e outros sites seguros. Para determinados perfis de usuários até funciona, mas a Google resolveu utilizar todos os seus sites com o protocolo HTTPS.
Neste momento, caia por terra toda teoria que redirecionamento da porta 443 para outra, ou fechá-la seria uma opção, qualquer ação no sentido de bloquear a porta 443, seria um verdadeiro fiasco. Pois quem no mundo não usa um serviço, no mínimo, da gigante Google?
Esbarrei neste problema, fui obrigado a desenvolver uma solução prática e definitiva, sem grandes scripts, algumas poucas linhas e tudo se resolveu de maneira satisfatória, eficiente e personalizada. Sim, personalizada, pois você define o IP que terá acesso sem bloqueio.
Abaixo, as devidas explicações.
Vamos lá!
No firewall IPtables, vamos adicionar após todas as regras as seguintes linhas:
for t in `cat /etc/squid/ips_liberados` ; do
iptables -I FORWARD -i eth1 -m string --algo bm --string "facebook.com" -j DROP ! -s $t
iptables -I FORWARD -i eth1 -m string --algo bm --string "twitter.com" -j DROP ! -s $t
done
Explicação: Deve ser criado um arquivo na pasta desejada. Neste arquivo, os IPs liberados devem ser inseridos um a cada linha, se você tem um arquivo com os IPs liberados que o Squid usa, melhor ainda, pois você vai centralizar os IPs liberados tanto para Squid, quanto para o IPtables, este foi o meu caso.
Comando para criação do arquivo:
# vi /etc/squid/ips_liberados
Agora, vamos à explicação das linhas que bloquearão os sites HTTPS desejados, no meu caso, só bloqueei o Facebook e Twitter:
Usei um
for para carregar todos os IPs do arquivo
/etc/squid/ips_liberados na variável
color="5C5C5C">t:
for t in `cat /etc/squid/ips_liberados` ; do
A linha abaixo, na interface
eth1 (rede local), nela é determinado que todo fluxo com string
facebook.com será dropada ou bloqueada, após o comando, utilizo o
! para fazer uma exceção aos IPs do arquivo
/etc/squid/ips_liberados, que estão carregados na variável
t.
Prontinho, todos os IPs que estiverem fora do arquivo
color="5C5C5C">/etc/squid/ips_liberados, estarão com o Facebook bloqueado.
A linha seguinte mostra a mesma coisa, só muda o site para o twitter.com.
iptables -I FORWARD -i eth1 -m string --algo bm --string "facebook.com" -j DROP ! -s $t
Esta linha fecha o
for:
done
Ponderações finais
A solução aqui apresentada foi fruto de muitas pesquisas, encontrei muitos conteúdos pela Internet, muitos com soluções complexas, muitas linhas nada eficientes, outros diziam que só usando o Squid 3 + SquidGuard, outros diziam que tinha que recompilar o kernel, enfim, muitas soluções com um nível complexo de implementação e pouca eficiência.
Eu mesmo cansei de implementar muitas regras baseadas nestas teorias que encontrei por aí, porém, depois de um tempo parava de funcionar, pois não eram flexíveis à mudanças.
A solução que cheguei foi algo simples e muito eficiente, resolvi os meus problemas com proxys que tinham
GNU/Linux mais antigos, com Squid 2, por exemplo, pois existem clientes que não podem parar para atualizar o S.O., outros, não querem parar e muito menos implementar um novo S.O. do zero, então, os proxys vão ficando com sistemas antigos, sem atualizações, a manutenção a cada dia fica pior e mais arriscada.
A solução que propus resolve situações tanto para os S.Os novos, quanto para os antigos, pois todos os pacotes a serem usados já estão instalados.
Enfim, espero ter ajudado!