Introdução:
Neste post, vamos explorar como configurar um proxy Squid com regras básicas para permitir todo o tráfego (allow all) e configurar um proxy transparente. Além disso, abordaremos como o Squid lida com a interceptação de HTTPS e as implicações de usar certificados SSL autoassinados. Explicaremos a necessidade de instalar um Certificado de Autoridade (CA) nos dispositivos para que o processo funcione corretamente. Também veremos como um proxy declarado pode lidar com HTTPS sem precisar de configuração de certificado.
Script Genérico de Configuração do Squid (Allow All)
Aqui está um exemplo de configuração de Squid bem estruturado, com regras “allow all”, ideal para cenários em que o proxy pode ser utilizado de forma aberta, sem restrições de tráfego.
# Arquivo de configuracao do Squid
# Limpo, bem estruturado e com regras de "allow all"
# Configuracao geral
http_port 3128 # Porta padrao do Squid
visible_hostname proxy-server # Nome visivel do proxy
cache_mem 256 MB # Memoria alocada para cache em RAM
maximum_object_size_in_memory 512 KB # Tamanho maximo dos objetos armazenados em RAM
cache_dir ufs /var/spool/squid 100 16 256 # Diretorio e configuracoes de cache em disco
maximum_object_size 4 MB # Tamanho maximo de objetos armazenados em disco
# Controle de acesso
# ACLs basicas
acl all src all
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 1025-65535 # Portas nao registradas
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 # Metodo CONNECT
# Regras de acesso
http_access deny !Safe_ports # Nega acesso a portas nao seguras
http_access allow all # Permite todo o trafego
# Configuracoes de log
access_log /var/log/squid/access.log squid # Arquivo de log de acessos
cache_log /var/log/squid/cache.log # Arquivo de log do cache
error_directory /usr/share/squid/errors/pt-br # Diretorio das mensagens de erro em portugues
# Timeouts
request_timeout 20 seconds # Tempo maximo para requisicoes
read_timeout 15 minutes # Tempo maximo para leitura de resposta
connect_timeout 30 seconds # Tempo para estabelecer conexoes
# Configuracoes de DNS
dns_v4_first on # Prioriza IPv4 ao resolver nomes
# Configuracoes de segurança
forwarded_for off # Oculta o IP do cliente
via off # Remove o cabecalho Via
# Personalizacao de cache
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
# Fim do arquivo
Configuração do Proxy Transparente
Para usar o Squid como um proxy transparente é bem simples, quando se trata de porta 80, entretando para HTTPS, é necessário ajustar algumas configurações para que ele possa interceptar o tráfego sem a necessidade de configuração manual no navegador dos clientes.
Habilitando a Interceptação no squid.conf
Adicione a configuração a seguir para habilitar a interceptação de HTTPS e HTTP:
# Porta para interceptação de HTTP (porta 80 comum, quase não é mais usada)
http_port 3128 intercept
# Porta para interceptação de HTTPS
https_port 3129 intercept ssl-bump cert=/etc/squid/squid.pem key=/etc/squid/squid.key
# Configurações de SSL-Bump
acl step1 at_step SslBump1
ssl_bump peek step1
ssl_bump splice all
O ssl-bump
é um recurso do Squid que permite inspecionar e manipular conexões HTTPS interceptadas. Ele cria um túnel seguro para o cliente, mas utiliza o certificado gerado localmente pelo proxy para “imitar” o servidor real. Isso é essencial para monitorar ou filtrar o tráfego HTTPS.
Redirecionando o Tráfego com o Firewall
Configure o firewall para redirecionar o tráfego HTTP (porta 80) e HTTPS (porta 443) para o Squid:
# Redireciona o tráfego HTTP (porta 80) para a porta 3128
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
# Redireciona o tráfego HTTPS (porta 443) para a porta 3129
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3129
Com isso, o Squid será capaz de interceptar tanto o tráfego HTTP quanto HTTPS de forma transparente.
Gerando o Certificado SSL para o Proxy Transparente
Para que o proxy transparente funcione interceptando o tráfego HTTPS, é necessário criar um certificado SSL autoassinado e configurar o Squid para utilizá-lo.
Vale lembrar que como trata-se de um certificado autoassinado, que vai substituir as requisições de https do navegador, aparecerá uma mensagem de falha de segurança no certificado, por isso deve-se considerar o uso de um certificado válido, ou então importar o CA no cliente em uso
Passos para gerar o certificado:
- Criação de uma chave privada e do certificado autoassinado
Execute os comandos abaixo para gerar uma chave privada e o certificado:
sudo openssl genrsa -out /etc/squid/squid.key 2048
sudo openssl req -new -x509 -key /etc/squid/squid.key -out /etc/squid/squid.pem -days 365 \
-subj "/C=BR/ST=SaoPaulo/L=SaoPaulo/O=MyProxy/CN=proxy.local"
Isso criará um certificado autoassinado válido por 365 dias. Certifique-se de substituir as informações no campo -subj
conforme necessário.
- Alterar permissões no certificado
Para garantir que o Squid tenha acesso ao arquivo gerado, altere as permissões:
sudo chmod 600 /etc/squid/squid.key /etc/squid/squid.pem
- Instalar o Certificado no Cliente (opcional, mas recomendado)
O certificado gerado é autoassinado, o que significa que os navegadores e sistemas operacionais irão tratá-lo como não confiável. Para evitar mensagens de erro, instale o certificado (o arquivosquid.pem
) como uma Autoridade de Certificação (CA) confiável em cada dispositivo da rede. No Windows:
- Abra “Opções da Internet” → “Conteúdo” → “Certificados”.
- Importe o certificado na aba “Autoridades de Certificação Raiz Confiáveis”. No Linux (exemplo com Ubuntu):
Copie o certificado para o diretório de certificados confiáveis:
sudo cp /etc/squid/squid.pem /usr/local/share/ca-certificates/squid.crt
sudo update-ca-certificates
Proxy Declarado: Lida com HTTPS sem Certificado
Em um proxy declarado, o cliente é configurado explicitamente para usar o proxy. Nesse caso, o Squid pode lidar com HTTPS sem a necessidade de um certificado SSL. O tráfego HTTPS é estabelecido diretamente entre o cliente e o servidor, com o proxy apenas atuando como intermediário para encaminhar as conexões.
No navegador ou dispositivo cliente, você configura o endereço e porta do proxy manualmente, ou utiliza um script de configuração automática (PAC). Como o tráfego HTTPS não é interceptado, o certificado do servidor remoto é usado diretamente, sem intervenção do proxy.
Explicando o ssl-bump
O ssl-bump
é uma funcionalidade que permite ao Squid inspecionar conexões HTTPS. Ele atua em três etapas principais:
- Sni Peek (SslBump1): O Squid examina os dados iniciais da conexão TLS para identificar o nome do servidor (SNI).
- Splice (SslBump2): O Squid permite a conexão continuar diretamente ao servidor real, sem inspeção adicional.
- Bump (SslBump3): O Squid termina a conexão SSL com o cliente, usando seu próprio certificado para inspecionar o tráfego.
O uso do ssl-bump
deve ser feito com cuidado para garantir conformidade com políticas locais e leis de privacidade.
Conclusão
Com este guia, você aprendeu a configurar o Squid com regras de “allow all”, habilitar a interceptação de HTTPS, gerar certificados SSL, e entender as diferenças entre proxies transparentes e declarados. Agora você está pronto para aplicar as configurações e gerenciar o tráfego de sua rede de maneira eficiente.