Como mencionado na página anterior, a navegação funcionará, mas ficará apresentando erro quanto a criptografia do site. A correção para isso é adicionar além dos parâmetros
--enable-ssl e
--enable-ssl-crtd, adicionar também
--with-openssl.
Utilizaremos como roteiro para implantação do squid3 com suporte a https, o apt-build para baixar o fonte e compilar para nós.
Será utilizado como base um
post aqui do próprio VOL, em específico um comentário do usuário sanderethx em sua instalação do Slackware.
Vamos aos passos:
1) Instalar o apt-build
O apt-build é uma ferramenta para compilação de programas através do código fonte. Ele baixa o fonte (mesmo fonte utilizado nos pacotes pré-compilados dos pacotes Debian), compila e instala.
Em nosso caso, ele baixará os fontes, faremos os ajustes e voltamos a entregar a tarefa de compilar e instalar para o apt-build.
Caso queira conhecer melhor o apt-build, há várias dicas e artigos sobre o uso dele.
# apt-get install apt-build
Nesse processo será instalado como dependência todos os programas necessários para compilação de programas usando código fonte.
Durante a instalação, ele fará algumas perguntas.
Na primeira pergunta apresentada a imagem abaixo, devemos marcar "Sim" para que o sources.list também tenha a lista dos fontes.
Posteriormente será perguntado sobre o nível de otimização na compilação. Como o texto mesmo sugere, cuidado ao escolher o nível forte. Sempre utilizo "Médio" e nunca tive problemas.
A próxima etapa é referente a quantidade de núcleos de processador será utilizado. Ele reconhece automaticamente, mas você pode alterar. A imagem explica caso queira alterar.
Já na última etapa, devemos escolher o processador em uso. Se o processador que você está utilizando não está na lista, escolha "native".
2) Atualizar a lista de fontes do apt-build.
Assim como no apt-get que executamos o "apt-get update" para atualizar a lista dos pacotes, precisamos fazer esse mesmo procedimento no apt-build com o comando:
# apt-build update
3) Instalar os pacotes de dependência para o squid3
Quando executamos o apt-get install squid3, os pacotes complementares para o squid3 funcionar também são baixados.
O apt-build também faz isso se executarmos o comando apt-build install squid3 diretamente, mas nesse caso faremos diferente.
Caso queira saber quais são os pacotes que o squid3 precisa para seu funcionamento, pode checar através do comando "apt-cache depends squid3".
Para baixar os pacotes de dependência do squid3, utilize o seguinte comando conforme orientação da
documentação do squid:
# apt-get build-dep squid3
3) Instalar a libssl-dev
A documentação citada no link acima, também nos orienta a instalar as bibliotecas de desenvolvimento do SSL.
Então vamos ao comando:
# apt-get install libssl-dev
4) Baixar o código fonte do squid3
Nessa etapa, utilizaremos o apt-build para baixar os fontes com o comando:
# apt-build source squid3
4) Adicionar os parâmetros de suporte ao SSL para a compilação
Editaremos o arquivo:
# vi /var/cache/apt-build/build/squid3-3.4.8/debian/rules
Ele apresenta as regras e/ou parâmetros para a compilação.
Adicione --enable-ssl, --enable-ssl-crtd e --with-openssl conforme a demonstração de antes e depois.
Antes:
DEB_CONFIGURE_EXTRA_FLAGS := --datadir=/usr/share/squid3 \
--sysconfdir=/etc/squid3 \
--mandir=/usr/share/man \
--enable-inline \
--disable-arch-native \
--enable-async-io=8 \
--enable-storeio="ufs,aufs,diskd,rock" \
--enable-removal-policies="lru,heap" \
--enable-delay-pools \
--enable-cache-digests \
--enable-icap-client \
--enable-follow-x-forwarded-for \
--enable-auth-basic="DB,fake,getpwnam,LDAP,MSNT,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB" \
--enable-auth-digest="file,LDAP" \
--enable-auth-negotiate="kerberos,wrapper" \
--enable-auth-ntlm="fake,smb_lm" \
--enable-external-acl-helpers="file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group" \
--enable-url-rewrite-helpers="fake" \
--enable-eui \
--enable-esi \
--enable-icmp \
--enable-zph-qos \
--enable-ecap \
--disable-translation \
--with-swapdir=/var/spool/squid3 \
--with-logdir=/var/log/squid3 \
--with-pidfile=/var/run/squid3.pid \
--with-filedescriptors=65536 \
--with-large-files \
--with-default-user=proxy
Depois:
DEB_CONFIGURE_EXTRA_FLAGS := --datadir=/usr/share/squid3 \
--sysconfdir=/etc/squid3 \
--mandir=/usr/share/man \
--enable-inline \
--disable-arch-native \
--enable-async-io=8 \
--enable-storeio="ufs,aufs,diskd,rock" \
--enable-removal-policies="lru,heap" \
--enable-delay-pools \
--enable-cache-digests \
--enable-icap-client \
--enable-follow-x-forwarded-for \
--enable-auth-basic="DB,fake,getpwnam,LDAP,MSNT,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB" \
--enable-auth-digest="file,LDAP" \
--enable-auth-negotiate="kerberos,wrapper" \
--enable-auth-ntlm="fake,smb_lm" \
--enable-external-acl-helpers="file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group" \
--enable-url-rewrite-helpers="fake" \
--enable-eui \
--enable-esi \
--enable-icmp \
--enable-zph-qos \
--enable-ecap \
--enable-ssl \
--enable-ssl-crtd \
--disable-translation \
--with-openssl \
--with-swapdir=/var/spool/squid3 \
--with-logdir=/var/log/squid3 \
--with-pidfile=/var/run/squid3.pid \
--with-filedescriptors=65536 \
--with-large-files \
--with-default-user=proxy
5) Instalar o ssl-cert
Esse pacote é fundamental na construção de certificados autoassinados que serão utilizados.
Instalamos com o seguinte comando:
# apt-get install ssl-cert
6) Corrigir erros em sites apresentados nos navegadores Firefox e baseados como o Iceweasel.
O erro "sec_error_inadequate_key_usage" aparece em alguns sites utilizando o Firefox e navegadores baseados nele.
Acessando o mesmo site no Google Chrome, não apresenta nenhum problema.
A imagem abaixo apresenta como fica o site.
Para corrigir, podemos comentar ou excluir a linha que apresenta o seguinte texto "NID_key_usage," no arquivo /var/cache/apt-build/build/squid3-3.4.8/src/ssl/gadgets.cc.
Essa dica foi garimpada e encontrada em:
https://www.howtoforge.com/filtering-https-traffic-with-squid
7) Compilar o squid3
Após realizar as alterações, vamos passar a bola novamente para o apt-build compilar e instalar através do comando:
# apt-build install squid3
Durante as mensagens que serão exibidas, você verá que ele informa que os fontes já estão disponíveis e não baixa novamente sobrescrevendo.
Assim será compilado com as modificações que fizemos.
8) Criar os certificados
Agora vamos criar os certificados que serão utilizados pelo squid3 e navegadores.
Primeiramente, vamos criar um diretório onde todos vão ficar:
# mkdir /etc/squid3/certificado
Agora vamos entrar nesse diretório:
# cd /etc/squid3/certificado
Agora sim vamos criar o certificado do squid3:
# openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout empresa.pem -out empresa.pem
Ao executar esse comando, será realizado alguns questionamentos, segue os questionamentos e o que respondi para comparação:
Country Name (2 letter code) [AU]:
BR
State or Province Name (full name) [Some-State]:
Santa Catarina
Locality Name (eg, city) []:
Florianopolis
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Empresa
Organizational Unit Name (eg, section) []:
Matriz
Common Name (e.g. server FQDN or YOUR name) []:
Empresa
Email Address []:
sergioabrantes@gmail.com
Lembre de alterar o número de dias que o certificado será valido. Aqui estamos utilizando 365 dias conforme o parâmetro "-days 365".
Seria razoável utilizar "-days 3650", pois em 10 anos certamente o servidor será trocado e você não será surpreendido com o não funcionamento porque o certificado está vencido.
Outro detalhe também é o nome do certificado "empresa.pem". Recomendo alterar para o nome da empresa que você estiver implantando o servidor.
Agora vamos criar o certificado para os navegadores.
# openssl x509 -in empresa.pem -outform DER -out empresa.der
Quando os usuários acessarem sites ssl, o squid criará os certificados no diretório "/etc/squid3/certificado/ssl_db". Não precisa criar o diretório ssl_db, pois o comando abaixo criará:
# /usr/lib/squid3/ssl_crtd -c -s /etc/squid3/certificado/ssl_db -M 4MB
Initialization SSL db...
Done
Como estamos criando tudo com o usuário root, devemos dar permissão ao diretório criando para que o squid3 possa escrever nele com os certificados regenerados dos navegadores:
# chown proxy.proxy -R ssl_db/
O endereço abaixo do site do projeto possui mais informações:
9) Alterações no /etc/squid3/squid.conf
A porta padrão do squid 3128 será responsável para analisar o tráfego http, enquanto a porta 3129 (você pode escolher outra) será responsável por analisar o tráfego https.
As seguintes linhas devem ser alteradas e/ou inseridas para isso:
TAG: http_port
Altere de:
http_port 3128
Para:
http_port 3128 transparent
TAG: https_port
Acrescente:
https_port 3129 transparent ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/certificado/empresa.pem
TAG: ssl_bump
Descomente:
ssl_bump server-first all
TAG: always_direct
Adicione:
always_direct allow all
TAG: sslcrtd_program
Adicione:
sslcrtd_program /usr/lib/squid3/ssl_crtd -s /etc/squid3/certificado/ssl_db -M 4MB
Agora vamos criar uma ACL para testarmos o bloqueio de páginas https.
Adicione nas TAGs: acl e http_access
acl sites_bloqueados dstdomain "/etc/squid3/empresa/sites-bloqueados"
acl localnet src 192.168.25.0/24
http_access deny sites_bloqueados
http_access allow localnet
Crie o arquivo "/etc/squid3/empresa/sites-bloqueados" e coloque sem aspas ".facebook.com"
Para finalizar, vamos reiniciar o serviço squid3:
# service squid3 restart
10) Disponibilizar o certificado para os navegadores
Você pode utilizar outra forma de disponibilizar o certificado para serem inseridos nos navegadores, mas prefiro deixá-los acessíveis dentro do próprio servidor como uma página web. Utilizaremos o apache2 para isso:
# apt-get install apache2
Agora vamos criar uma pasta dentro do diretório root do Apache e colocar o certificado lá na sequência de comandos.
Criar diretório para o apache:
# mkdir /var/www/html/certificado
Copiar o certificado para o diretório recém criado:
# cd ../certificado
# cp empresa.der /var/www/html/certificado
Ajustar as permissões:
# chmod -R 755 /var/www/html/certificado
11) Regras do iptables
A regra abaixo direciona a porta 80 da rede 192.168.25.0 (você deve ajustar para a sua rede) para a porta 3128 do squid que tratará as requisições http.
iptables -t nat -A PREROUTING -s 192.168.25.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
Já a regra seguinte direciona a porta 443 da rede 192.168.25.0 (você deve ajustar para a sua rede) para a porta 3129 do squid que tratará as requisições https.
iptables -t nat -A PREROUTING -s 192.168.25.0/24 -p tcp --dport 443 -j REDIRECT --to-port 3129
Lembrando que se você utiliza a política padrão do INPUT como DROP, deve adicionar as seguintes regras:
iptables -A INPUT -d 192.168.25.254 -i eth0 -p tcp --dport 3128
iptables -A INPUT -d 192.168.25.254 -i eth0 -p tcp --dport 3129
Assumindo que o IP do firewall ligado a rede local é 192.168.25.254 e que a interface de rede é eth0. Você deve alterar para seu cenário.