Como Configurar o Squid com Regras Básicas de “Allow All” para Proxy Transparente e HTTPS

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:

  1. 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.

  1. 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
  1. 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 arquivo squid.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:

  1. Sni Peek (SslBump1): O Squid examina os dados iniciais da conexão TLS para identificar o nome do servidor (SNI).
  2. Splice (SslBump2): O Squid permite a conexão continuar diretamente ao servidor real, sem inspeção adicional.
  3. 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.

Rolar para cima