Boa pessoal, estamos sumidos, na verdade eu ando muito desanimado com qualquer coisa e há tempos desejava criar novos tutoriais e videos, porém, os problemas de saúde e outros acabam por deixar o nosso tempo pouco. Não bastasse, o desgaste é bem desanimador.
Mas sem continuar falando de coisa triste, vamos ao que interessa: Squid proxy interceptando trafego https.
É uma solução para o controle em ambientes onde existe a real necessidade de controlar acesso, filtrar buscas por palavras e até mesmo impor restrições de segurança. Claro, o proxy por si só não irá proteger sua rede, até porque em grande parte, os problemas são causados quando existe fragilidade no elo mais fraco, o usuario! Contudo, filtrar sites com conteúdo adulto, pirataria, redes sociais já pode desafogar um pouco do consumo de banda, além claro de possibilitar a analise de sites mais visitados, possibilitar algum cache e bloquear o tik tok(brincadeira – o nft seria mais indicado).
Bom, sem mais, vamos ao que interessa…
Para este tutorial eu usei o slackware 15 por rodar bem no hardware qual tenho hoje como gateway, uma c847 com duas portas ethernet de 1Gbps. Portanto, para outras distribuições esse processo poder ter variação de local de arquivos ou binarios(Exceto o diretorio do squid). O diretorio do squid se localiza nas distribuições linux mais conhecidas em “/etc” .
No nosso caso, o primeiro passo é instalar o pacote do squid, e caso você não o tenha instalado, então sugiro que o faça via sbopkg.
Para instalar o sbopkg você pode consultar mais informações em https://sbopkg.org .
Mas para facilitar sua vida, abra um terminal e como root ou usando sudo faça:
cd /tmp && wget https://github.com/sbopkg/sbopkg/releases/download/0.38.2/sbopkg-0.38.2.tar.gz
Após o download, faça um dos dois procedimentos, o primeiro instala e o segundo é update:
installpkg sbopkg-version-noarch-1_wsr.tgz
ou
upgradepkg sbopkg-version-noarch-1_wsr.tgz
Depois, rode o sbopk, entre na opção sync e aguarde…
Logo após, vá em search, digite squid e escolha a opção string.
Selecione o squid, selecione OK e pressione a tecla “P” ou vá até ‘process’ e de enter.
Ele vai processar a fila, baixar, compilar e instalar o pacote.
Essa é a etapa mais demorada, na minha humilde plaquinha foram quase uma hora(dual core de 1.1ghz).
Após todo processo, vá para o diretorio do squi que fica localizado em /etc;
cd /etc/squid
Faça um backup do squid.conf
cp squid.conf squid.conf.o
Crie o diretorio de politicas ou como desejar dentro do diretorio do squid, esse diretorio armazenará os arquivos com as politicas de ‘acl’, portanto, é interessante que ele fique neste diretorio até por questões de organização.
mkdir -p /etc/squid/politicas
Crie o diretorio para gerarmos nossos arquivos de certificados:
mkdir -p /etc/squid/certs
Use o seu editor de texto preferido e faça as alterações que considerar necessarias(o objetivo aqui é abordar a geração de certificados e do banco de dados ssl).
Um squid.conf que talvez possa ajudar:
acl localnet src 10.0.0.0/8 # RFC1918
acl localnet src 172.16.0.0/12 # RFC1918
acl localnet src 192.168.0.0/16 # RFC1918
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
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 allowed dstdomain .whatsapp.com:5222 .whatsapp.com:443
http_access allow allowed
acl blockkeyword url_regex -i "/etc/squid/politicas/palavras-bloqueadas.acl"
acl localnetsites dstdomain "/etc/squid/politicas/dominios-liberados.acl"
acl blockeddomain dstdomain "/etc/squid/politicas/dominios-bloqueados.acl"
acl bypass_caching dstdomain "/etc/squid/politicas/sites_fora_proxy.acl"
cache deny bypass_caching
http_access deny blockeddomain
acl myports port "/etc/squid/politicas/portas.liberadas.acl"
acl myaddrs dst "/etc/squid/politicas/ips.liberados.acl"
http_access allow myports myaddrs
acl CONNECT method CONNECT
http_access allow manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny blockkeyword
http_access allow localhost
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128 ssl-bump \
cert=/etc/squid/certs/squid-ca-cert-key.pem \
generate-host-certificates=on dynamic_cert_mem_cache_size=16MB
https_port 3129 intercept ssl-bump \
cert=/etc/squid/certs/squid-ca-cert-key.pem \
generate-host-certificates=on dynamic_cert_mem_cache_size=16MB
sslcrtd_program /usr/libexec/security_file_certgen -s /var/lib/ssl_db -M 16MB
acl splice_it ssl::server_name "/etc/squid/politicas/fora-proxy-cache.acl"
acl splice_local ssl::server_name "/etc/squid/politicas/dominios-locais-fora-proxy.acl"
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump splice splice_it
ssl_bump splice splice_local
ssl_bump bump all
visible_hostname NOME_DA_MAQUINA
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
pid_filename /var/run/squid/squid.pid
cache_effective_user nobody
cache_effective_group nobody
cache deny localnetsites
Crie seus arquivos de politicas e regras acl, lembrando de substituir a localização das acl acima pelas suas ou de criar as acls informadas no squid.conf.
Agora vamos da uma olhada nas seguintes linhas, as mesmas estão destacadas no squid.conf acima:
http_port 3128 ssl-bump \
cert=/etc/squid/certs/squid-ca-cert-key.pem \
generate-host-certificates=on dynamic_cert_mem_cache_size=16MB
https_port 3129 intercept ssl-bump \
cert=/etc/squid/certs/squid-ca-cert-key.pem \
generate-host-certificates=on dynamic_cert_mem_cache_size=16MB
sslcrtd_program /usr/libexec/security_file_certgen -s /var/lib/ssl_db -M 16MB
Elas definem o local onde iremos armazenar o certificado que criaremos em seguida. Este certificado será usado para importarmos nas maquinas que terão o squid como proxy.
No caso acima, definimos esse diretorio como “/etc/squid/certs” e a ultima linha:
sslcrtd_program /usr/libexec/security_file_certgen -s /var/lib/ssl_db -M 16MB
Se refere ao local do banco de dados de certificados setados no squid.conf.
Com essa breve configuração e squid parado, vamos gerar os nossos certificados:
cd /etc/squid/certs
E, agora usando o openssl, geramos nossos dois arquivos; Um certificado e uma chave privada.
~#openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -extensions v3_ca -keyout squid-ca-key.pem -out squid-ca-cert.pem
Vamos usar o cat para pegar o conteúdo dos dois arquivos e redirecionar para um outro, no caso o arquivo que conterá tanto o nosso certificado quanto nossa private key:
~# cat squid-ca-cert.pem squid-ca-key.pem >> squid-ca-cert-key.pem
O arquivo acima, em destaque é o que iremos transferir para as maquinas clientes do squid.
Vamos aproveitar e gerar/inicializar a base de dados de certificados:
~# /usr/libexec/security_file_certgen -c -s /var/lib/ssl_db -M 16MB
Na antepenúltima e penúltima linha nós temos o seguinte:
cache_effective_user nobody
cache_effective_group nobody
Essas duas linhas acimas representam para o cache o usuario e grupo, ou seja, as permissões de usuario e grupo que serão utilizadas. Aproveitamos e atribuimos essas permissões para o diretorio do squid e tudo que nele tiver presente.
~# chow -R nobody:nobody /etc/squid
Desta forma estamos aplicando as permissões para que o squid funcione sem problemas
Outras permissões para outros diretorios podem ser necessarias, experimente rodar ~#squid -k parse, leia as informações de log e veja se suas permissões estão corretas, caso necessario, aplique as permissões para nobody e restarte o serviço.
Após estes passos, bem provavel que tudo funcione, mesmo que com alertas sobre as acls(crie as acls).
Bom pessoal, como o intuito era vermos a parte do ssl, acredito que o tutorial se alongou até demais. De qualquer forma, se ainda tiver duvidas, comente ai.
Referencias
-> https://elatov.github.io/2019/01/using-squid-to-proxy-ssl-sites/
-> https://wiki.squid-cache.org/Features/DynamicSslCert
RFC 1918
-> https://www.rfc-editor.org/rfc/rfc1918.html