Vamos abordar uma configuração no Squid que auxiliará na filtragem de conteúdo protegido por SSL.
Primeiro vamos verificar como está nossa instalação e alterar algumas configurações.
vamos descobrir se temos o que é necessário
squid -v |grep ssl
a resposta esperada é um conteúdo de vários parâmetros, incluindo ‘–with-openssl’ ‘–enable-ssl-crtd’ nesta lista, caso isso não acontecer, vamos partir para uma alteração na instalação.
1 – Gerar um backup do nosso arquivo configurado anteriormente.
sudo cp /etc/squid/squid.conf ~/squid.conf_bkp
Este comando vai fazer uma cópia do arquivo squid.conf no diretório do usuário que estiver utilizando.
2 – Remover o squid que está instalado
sudo apt remove squid –purge
Este comando vai remover totalmente o squid e suas configurações do sistema operacional.
3 – Instalar o pacote que vai nos auxiliar na configuração, já habilitando o openssl e ssl-crtd que precisamos para o monitoramento de conexões SSL.
sudo apt install squid-openssl
Este comando vai trazer o pacote pré-compilado do squid que contem tudo que precisamos para iniciar os trabalhos, evitando que tenhamos que fazer a compilação manual e correr o risco de faltar com algum parâmetro.
4 – Criar o certificado autoassinado que usaremos para o filtro
Você será solicitado a preencher os campos do certificado SSL autoassinado.
cd /etc/squid
sudo openssl req -new -newkey rsa:2048 -days <período de validade do certificado em dias> -nodes -x509 -keyout bump.key -out bump.crt
O arquivo de certificado bump.crt e o arquivo de chave privada bump.key serão criados no formato PEM.
O arquivo de chave privada deve ser armazenado em um local seguro para impedir o acesso não autorizado ao tráfego.
5 – Converta o arquivo de certificado em um certificado confiável no formato DER para que possa ser importado para um navegador. Para fazer isso, execute o comando:
sudo openssl x509 -in bump.crt -outform DER -out bump.der
6 – Importe o arquivo bump.der para a lista de autoridades de certificação raiz confiáveis nos computadores dos usuários.
Ao usar determinados navegadores (como o Mozilla Firefox), também é preciso adicionar o certificado ao armazenamento do navegador.
O certificado SSL autoassinado será criado.
Podemos fazer a cópia do arquivo bump.der utilizando um programa cliente FTP como, Filezilla e WinSCP, assim que tiver este certificado na maquina, mova para um pendrive para poder levar à todas as maquinas que passam pelo proxy para navegar.
7 – Gere o arquivo de configurações para o algoritmo Diffie-Hellman. Para fazer isso, execute o comando:
sudo openssl dhparam -outform PEM -out /etc/squid/bump_dhparam.pem 2048
Configure as permissões para usar um arquivo de certificado SSL. Para fazer isso, execute os seguintes comandos, dependendo do sistema operacional utilizado:
- Ubuntu ou Debian:
sudo chown proxy:proxy /etc/squid/bump*
sudo chmod 400 /etc/squid/bump*
8 – Determine a versão do serviço Squid que está sendo usada no servidor. Para fazer isso, execute o comando:
squid -v
As informações sobre a versão utilizada são exibidas no formato Squid Cache: Version <versão>.
9 – Interrompa o serviço Squid se ele estiver em execução. Para fazer isso, execute o comando:
sudo systemctl stopsquid
Para Squid versão 4x ou superior:
Crie um diretório para o banco de dados do certificado e inicialize o banco de dados. Para fazer isso, execute os seguintes comandos, dependendo do sistema operacional utilizado:
- Ubuntu ou Debian:
sudo mkdir -p /var/lib/squid
sudo rm -rf /var/lib/squid/ssl_db
sudo /usr/lib/squid/security_file_certgen -c -s /var/lib/squid/ssl_db -M 20MB
sudo chown -R proxy:proxy /var/lib/squid
No arquivo de configuração /etc/squid/squid.conf, faça as seguintes alterações:
Ubuntu ou Debian:
Crie as entradas antes de http_port
##Parametros para habilitar o monitoramento SSL
acl step1 at_step SslBump1
acl intermediate_fetching transaction_initiator certificate-fetching
http_access allow intermediate_fetching
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 20MB
sslcrtd_children 5
sslproxy_cert_error allow all
#sslproxy_cert_error deny all
ssl_bump stare all
ssl_bump bump all
Substitua a diretiva http_port pelo seguinte:
http_port 3128 tcpkeepalive=60,30,3 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB tls-cert=/etc/squid/bump.crt tls-key=/etc/squid/bump.key cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS options=NO_TLSv1,NO_SSLv3 tls-dhparams=prime256v1:/etc/squid/bump_dhparam.pem
10 – Inicie o serviço do Squid
sudo systemctl start squid
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start ‘squid.service’.
Authenticating as: Paulo Sa (paulo)
Password:
==== AUTHENTICATION COMPLETE ===
Será solicitada a senha do usuário para ativar o serviço de autenticação no Squid
Um exemplo de arquivo de configuração do squid.conf
# /etc/squid/squid.conf
# By Paulo Sa
#
# Porta padrão do Squid
#http_port 3128
##Parametros para habilitar o monitoramento SSL
acl step1 at_step SslBump1
acl intermediate_fetching transaction_initiator certificate-fetching
http_access allow intermediate_fetching
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 20MB
sslcrtd_children 5
sslproxy_cert_error allow all
#sslproxy_cert_error deny all
ssl_bump stare all
ssl_bump bump all
# HTTPS interception direct proxy
http_port 3128 tcpkeepalive=60,30,3 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=20MB tls-cert=/etc/squid/bump.crt tls-key=/etc/squid/bump.key cipher=HIGH:MEDIUM:!LOW:!RC4:!SEED:!IDEA:!3DES:!MD5:!EXP:!PSK:!DSS options=NO_TLSv1,NO_SSLv3 tls-dhparams=prime256v1:/etc/squid/bump_dhparam.pem
# Está porta é usada para troca de informações entre servidores proxy.
# Não use o ICP se você tem um único proxy-pai que você sempre usa.
# Para desabilitar, basta colocar um 0. Padrão: 3130
icp_port 0
# Especifica o número da porta através do qual o Squid irá receber e enviar requisições HTCP de e para caches vizinhos.
# Para desabilitar, colocar 0. O padrão é 4827.
htcp_port 0
# Esta ACL diz ao squid para não armazenar em cache o conteúdo dos CGI’s, por tratar-se de conteúdo dinâmico
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
# Quantidade de memória usada pelo squid
cache_mem 256 MB
# Quando o cache chega no limite, automaticamente ele esvazia o cache
cache_swap_low 80
cache_swap_high 85
# Tamanho máximo para gravação no cache squid
maximum_object_size 64 MB
# Tamanho mínimo para gravação no cache squid
minimum_object_size 0 KB
# Tamanho maximo dos objetos mantidos em memória.
maximum_object_size_in_memory 128 KB
ipcache_size 3072
ipcache_low 90
ipcache_high 93
# política de substituição dos objetos quando se esgota o espaço destinado ao cache em disco.
# lru: mantém os objetos referenciados recentemente.
# heap GDSF: otimiza o “hit rate” por manter objetos pequenos e populares no cache, guardando assim um numero maior de objetos.
# heap LFUDA: otimiza o “byte hit rate” por manter objetos populares no cache sem levar em conta o tamanho.
# Se for utilizado este, o maximum_object_size devera ser aumentado para otimizar o LFUDA.
cache_replacement_policy heap LFUDA
# define a política de substituição dos objetos em memória da mesma forma como o cache_replacement_policy
memory_replacement_policy heap GDSF
# Esta TAG determina onde e como serão feitos 4 caches de 500 MiB, totalizando 2GiB.
cache_dir ufs /var/spool/squid/cache1 500 16 256
cache_dir ufs /var/spool/squid/cache2 500 16 256
cache_dir ufs /var/spool/squid/cache3 500 16 256
cache_dir ufs /var/spool/squid/cache4 500 16 256
# Log de requisitares.
cache_access_log /var/log/squid/access.log
# Log do cache.
cache_log /var/log/squid/cache.log
# Log de objetos guardados. Pode ser desativado.
cache_store_log none
# Pode ser usada para especificar uma lista de servidores DNS no lugar no /etc/resolv.conf dns_nameservers Endereço_IP
# Não esquecer de trocar a faixa de dns pela da sua faixa.
dns_nameservers 8.8.8.8
dns_nameservers 2.2.2.1
# Estas opções são o padrão do Squid e configuram como serão tratados os tempos de vida dos objetos no cache
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
# O cache pode ser configurado para continuar com o download de requisições abortadas
quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 100
# Tempo de vida para requisições falhas. Certos tipos de erros (como
# conexão recusada ou página não encontrada) são marcados como
# “sem-cache” por um determinado tempo. Padrão de 5 minutos
negative_ttl 3 minutes
# Tempo de vida para resultados bem sucedidos de resolução DNS. Se você
# realmente precisar alterar esse valor, não deixe inferior a 1 minuto.
# Padrão de 6 horas.
positive_dns_ttl 5 minutes
# Nem sempre o Squid não consegue diferenciar conexões TCP totalmente fechadas e parcialmente fechadas.
# Mudando essa opção para off fará com que o Squid imediatamente feche a conexão quando a leitura do socket
# retornar “sem mais dados para leitura”
half_closed_clients off
# Estas ACL’s fazem parte da configuração padrão do Squid e é o mínimo recomendável para seu uso não sendo necessária nenhuma alteração.
#acl manager proto cache_object
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # 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 777 # multiling http
acl CONNECT method CONNECT
# —- Cache para aceleração do Windows Update —-
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|msi) 10080 100% 43200 store-stale
refresh_pattern download.microsoft.com/.*\.(cab|exe|msi) 10080 100% 43200 store-stale
refresh_pattern msgruser.dlservice.microsoft.com/.*\.(cab|exe|msi) 10080 100% 43200 store-stale
refresh_pattern windowsupdate.com/.*\.(cab|exe|msi) 10080 100% 43200 store-stale
refresh_pattern www.microsoft.com/.*\.(cab|exe|msi) 10080 100% 43200 store-stale
# Tags de Autenticação de usuários para monitoramento mais eficiente de conteúdos acessados
#auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
#auth_param basic children 5
#auth_param basic realm Squid Basic Authentication
#auth_param basic credentialsttl 2 hours
#acl auth_users proxy_auth REQUIRED
#http_access allow auth_users
#acl bad_urls dstdomain “/etc/squid/blacklisted_sites.acl”
#http_access deny bad_urls
#acl blockkeywordlist url_regex “/etc/squid/blockkeywords.lst”
#http_access deny blockkeywordlist
##Define o grupo de IPs que pode ter acesso a internet utilizando o Squid
# Se utilizarmos o squidGuard para garantir a segurança do conteúdo acessado, as configurações já estarão prontas.
url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf
# Em caso de bloqueio pelo próprio Squid, podemos usar arquivos de referência como este de bloqueio chamado block.txt atribuindo uma ACL de identificação de domínios.
acl rede src 192.168.15.0/24
#acl bloqueio dstdomain “/etc/squid/block.txt”
#acl autenticado proxy_auth REQUIRED
http_access allow localhost
#http_access deny bloqueio
http_access allow rede
# Definição de regras de acesso referentes as ACL’s da parte da configuração
# padrão do Squid, também não é necessária nenhuma alteração, portanto apenas
# acrescente as suas próprias regras a estas;
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
# esta regra diz ao Squid que se nenhuma das regras anteriores for aplicada o acesso será então negado
http_access deny all
# Permite o acesso a porta icp de acordo com a configuração feita na ACL all
# que no nosso caso representa qualquer origem. Está porta é usada para troca
# de informações entre servidores proxy.
# Não use o ICP se você tem um único proxy-pai que você sempre usa.
# icp_access allow rede
# Usuario sob o qual ira rodar o Squid.
cache_effective_user proxy
# Grupo sob o qual ira rodar o Squid.
cache_effective_group proxy
#Mostra o nome do servidor configurado nas mensagens de erro
visible_hostname proxy
# Desligando essa variável, faz com que o squid descarregue a memória não
# utilizada, chamando uma função interna free() do squid, ao invés de ficar
# com ela para futuras operações.
memory_pools off
#Por padrão o Squid irá incluir o IP ou nome da sua máquina nas solicitações HTTP.
#Ele irá saber o IP da sua máquina interna como também saber qual classe ip você usa internamente.
#Para o site visitado não interessa para ele qual seu ip interno, o importante é que você visitou o site.
forwarded_for off
forward_max_tries 25
# Apresenta as mensagens de erro em Português Brasil
error_directory /usr/share/squid/errors/pt-br
# Por padrão o Squid já possui essa configuração como ativa. Ela serve para não colocar no log os
# parâmetros que são passados junto ao endereço acessado pelo usuário. Assim garante a privacidade.
# As vezes quando se usa filtro por palavras e um site apresenta acesso negado é interessante setar
# essa opção como off para verificar no log o endereço completo.
strip_query_terms off
# Local para gravar os arquivos core em caso de falhas do squid (/var/spool/squid)
# ou Evitar que sejam feitos coredumps (none).
coredump_dir none
# Resolve um problema com conexões persistentes que ocorre com certos servidores,
# e que provoca delays em nosso cache.
detect_broken_pconn on
################ Fim da edição, pode salvar o arquivo################