Desacoplando conexões https com squid3

Alan Victor Segunda, 12 de Novembro de 2018


Pelo fato de não existir documentação boa ou completa sobre esse assunto na internet, foi a motivação de escrever esse post, pois não gosto da ideia de "escrever" passo a passo de configuração de serviços que já existe excelentes documentações!

O processo foi feito no debian 9 stretch.

Por padrão o Squid Proxy não suporta desacoplamento de conexão https ssl/tls, nesse caso precisamos realizar alguns procedimentos para fazer isso acontecer.

Basicamente os passos a seguir são:

  • Baixar as sources do squid3 do repositório oficial debian
  • Instalar as dependências para compilação dos pacotes do squid3
  • Baixar as dependências para o debuild
  • Editar regras de compilação para debuild dos pacotes
  • Debuild dos novos pacotes .deb
  • Instalar os novos pacotes e suas dependências
  • Gerar chave privada e certificado para configuração do squid3
  • Configurar o squid3 para trabalhar com http e https
  • Importar a CA no navegador

 

Baixar as sources do squid3

apt-get source squid3

Instalar as dependêcias para a compilação do squid3

apt-get install devscripts openssl libssl1.0-dev fakeroot build-essential libdbi-perl

 

Baixando as sources dependentes do squid para o debuild

apt-get build-dep squid3

 

Editar o arquivo debian/rules e adicionando o suporta a SSL

# Abaixo da linha "--with-default-user=proxy " adicione as 4 ultimas linha abaixo
# coloque barras invertidas no final das linhas, menos na ultima linha
# ex:

--with-default-user=proxy 
--enable-ssl 
--enable-ssl-crtd 
--with-openssl 
--disable-ipv6

 

Faça o debuild / compilação dos novos pacotes com suporte a SSL, esse processo é demorado.

debuild -us -uc

 

Instale os novos pacotes do squid3

# Removendo pacote deb baixado anteriormente
rm -rf squid3*.deb

# Instalando os novos pacotes
dpkg -i squid*.deb

# Muito provavelmente irá gerar erros de dependências, então instale
apt-get -f install

 

Verificando o suporte a SSL e se o squid levantou corretamente

bash> lsof -i -n | grep 3128
squid    717       proxy   10u  IPv4  12088      0t0  TCP *:3128 (LISTEN)

bash> squid3 -v | grep --color 'ssl'
'--enable-ssl' '--enable-ssl-crtd' '--with-openssl'

 

Gerando chave privada e certificado para ser configurado no squid.conf e no navegador do cliente, criando diretório e gerando db interno para ssl do squid.

# Criando diretório para guardar as chaves
bash> mkdir /etc/squid/ssl

# Entrando no diretório
bash> cd /etc/squid/ssl

# Permissão
bash> chown -R proxy:proxy /etc/squid/ssl
bash> chmod -R 700 /etc/squid/ssl

# Gerando chave privada e certificado
bash> openssl req -new -newkey rsa:2048 -sha256 -days 1024 -nodes -x509 -extensions v3_ca -keyout ca.pem -out ca.pem

# Convertendo certificado de .pem para .der, para importação no navegador
bash> openssl x509 -in ca.pem -outform DER -out ca.der

# Ativando o banco interno para certificados do squid
bash> /usr/lib/squid/ssl_crtd -c -s /var/ssl_db -M 4MB

# permissão do banco ssl do squid
bash> chown proxy:proxy /var/ssl_db

 

Configurando /etc/squid/squid.conf

acl clientes src 10.10.10.0/24

http_access allow localhost
http_access allow clientes
http_access deny all 

http_port 3128 intercept
https_port 3129 intercept ssl-bump cert=/etc/squid/ssl/ca.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB

sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB 
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump bump all 

sslproxy_flags DONT_VERIFY_PEER
sslproxy_cert_error allow all 

 

Trecho de regras do iptables para proxy transparente

iptables -t nat -A PREROUTING -s 10.10.10.0/24 -p tcp --dport 80 -j DNAT --to 10.10.10.1:3128
iptables -t nat -A PREROUTING -s 10.10.10.0/24 -p tcp --dport 443 -j DNAT --to 10.10.10.1:3129

Copie a CA ca.der e importe nos navegadores dos clientes

Para mais informações: http://www.squid-cache.org/