Proxy Squid

Um servidor proxy é uma ferramenta importante para sua privacidade, e está muito ligado ao que a palavra em inglês quer dizer: procuração.

Isto é, representa um certo tipo de autoridade dada a uma outra parte para agir em seu nome.

Um servidor proxy é como uma ponte entre você e a internet.

Para instar um Servidor Proxy Squid devemos seguir os seguintes passos

Para usuários do Sistema Operacional Linux baseado na distribuição Debian:
sudo apt install squid

Para usuários do Sistema Operacional Linux baseado na distribuição Red Hat:
sudo yum install squid

O arquivo principal do Proxy Squid fica em /etc/squid/squid.conf

Antes de começar a configurar, recomendo que desligue o serviço do Proxy Squid que sobe automaticamente após a instalação.
sudo systemctl stop squid

Para garantir a integridade do arquivo original, vamos fazer um backup deste arquivo
sudo mv /etc/squid/squid.conf /etc/squid/squid.conf_bkp

Agora vamos adicionar nosso arquivo de configuração (Particularmente eu uso o VI, mas você pode usar o editor de sua preferência.

sudo vi /etc/squid/squid.conf

# /etc/squid/squid.conf
# By Paulo Sa
#
# Opções para suportar proxy transparente, não havendo necessidade de configuração no navegador
http_port 3128 tcpkeepalive=60,30,3

# Está porta é usada para troca de informações entre servidores proxy.
# Não use o ICP se você tem um único proxy-pai que você sempre usa.
# Para desabilitar, basta colocar um 0. Padrão: 3130
icp_port 0

# Especifica o número da porta através do qual o Squid irá receber e enviar requisições HTCP de e para caches vizinhos.
# Para desabilitar, colocar 0. O padrão é 4827.
htcp_port 0

# Esta ACL diz ao squid para não armazenar em cache o conteúdo dos CGI’s, por tratar-se de conteúdo dinâmico
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

# Quantidade de memória usada pelo squid
cache_mem 256 MB

# Quando o cache chega no limite, automaticamente ele esvazia o cache
cache_swap_low 80
cache_swap_high 85

# Tamanho máximo para gravação no cache squid
maximum_object_size 64 MB

# Tamanho mínimo para gravação no cache squid
minimum_object_size 0 KB

# Tamanho maximo dos objetos mantidos em memória.
maximum_object_size_in_memory 128 KB
ipcache_size 3072
ipcache_low 90
ipcache_high 93

# política de substituição dos objetos quando se esgota o espaço destinado ao cache em disco.
# lru: mantém os objetos referenciados recentemente.
# heap GDSF: otimiza o “hit rate” por manter objetos pequenos e populares no cache, guardando assim um numero maior de objetos.
# heap LFUDA: otimiza o “byte hit rate” por manter objetos populares no cache sem levar em conta o tamanho.
# Se for utilizado este, o maximum_object_size devera ser aumentado para otimizar o LFUDA.
cache_replacement_policy heap LFUDA

# define a política de substituição dos objetos em memória da mesma forma como o cache_replacement_policy
memory_replacement_policy heap GDSF

# Esta TAG determina a criação de múltiplos caches: serão gravados 4 caches de 500 MiB cada, totalizando 2GiB.
cache_dir ufs /var/spool/squid/cache1 500 16 256
cache_dir ufs /var/spool/squid/cache2 500 16 256
cache_dir ufs /var/spool/squid/cache3 500 16 256
cache_dir ufs /var/spool/squid/cache4 500 16 256

# Log de requisitares.
cache_access_log /var/log/squid/access.log
# Log do cache.
cache_log /var/log/squid/cache.log
# Log de objetos guardados. Pode ser desativado.
cache_store_log none

# Pode ser usada para especificar uma lista de servidores DNS no lugar no /etc/resolv.conf dns_nameservers Endereço_IP
# Não esquecer de trocar a faixa de dns pela da sua faixa.
dns_nameservers 8.8.8.8
dns_nameservers 2.2.2.1

# Estas opções são o padrão do Squid e configuram como serão tratados os tempos de vida dos objetos no cache
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320

# O cache pode ser configurado para continuar com o download de requisições abortadas
quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 100

# Tempo de vida para requisições falhas. Certos tipos de erros
#(como conexão recusada ou página não encontrada) são
#marcados como “sem-cache” por um determinado tempo.
# Padrão de 5 minutos
negative_ttl 3 minutes

# Tempo de vida para resultados bem sucedidos de resolução DNS. Se você
# realmente precisar alterar esse valor, não deixe inferior a 1 minuto.
# Padrão de 6 horas.
positive_dns_ttl 5 minutes

# Nem sempre o Squid não consegue diferenciar conexões TCP totalmente fechadas e parcialmente fechadas.
# Mudando essa opção para off fará com que o Squid imediatamente feche a conexão quando a leitura do socket
# retornar “sem mais dados para leitura”
half_closed_clients off

# Estas ACL’s fazem parte da configuração padrão do Squid e é o mínimo recomendável para seu uso não sendo necessária nenhuma alteração.
acl manager proto cache_object
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
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

# —- Cache para aceleração do Windows Update —-
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims
refresh_pattern msgruser.dlservice.microsoft.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims
refresh_pattern windowsupdate.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims
refresh_pattern www.microsoft.com/.*\.(cab|exe|msi) 10080 100% 43200 reload-into-ims

#TAG’s referentes ao processo de autenticação.
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 2 hours
acl auth_users proxy_auth REQUIRED
http_access allow auth_users

##Define o grupo de IPs que pode ter acesso a internet utilizando o Squid
# Se utilizarmos o squidGuard para garantir a segurança do conteúdo acessado, as configurações já estarão prontas.
url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf
# Em caso de bloqueio pelo próprio Squid, podemos usar arquivos de referência como este de bloqueio chamado block.txt atribuindo uma ACL de identificação de domínios.
acl rede src 172.25.0.0/24
#acl bloqueio dstdomain “/etc/squid/block.txt”
http_access allow localhost
#http_access deny bloqueio
http_access allow rede

# Definição de regras de acesso referentes as ACL’s da parte da configuração
# padrão do Squid, também não é necessária nenhuma alteração, portanto apenas
# acrescente as suas próprias regras a estas;
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# esta regra diz ao Squid que se nenhuma das regras anteriores for aplicada o acesso será então negado
http_access deny all

# Permite o acesso a porta icp de acordo com a configuração feita na ACL all
# que no nosso caso representa qualquer origem. Está porta é usada para troca
# de informações entre servidores proxy.
# Não use o ICP se você tem um único proxy-pai que você sempre usa.
# icp_access allow rede

# Usuario sob o qual ira rodar o Squid.
cache_effective_user proxy
# Grupo sob o qual ira rodar o Squid.
cache_effective_group proxy

#Mostra o nome do servidor configurado nas mensagens de erro
visible_hostname proxy

# Desligando essa variável, faz com que o squid descarregue a memória não
# utilizada, chamando uma função interna free() do squid, ao invés de ficar
# com ela para futuras operações.
memory_pools off

#Por padrão o Squid irá incluir o IP ou nome da sua máquina nas solicitações HTTP.
#Ele irá saber o IP da sua máquina interna como também saber qual classe ip você usa internamente.
#Para o site visitado não interessa para ele qual seu ip interno, o importante é que você visitou o site.
forwarded_for off
forward_max_tries 25

# Apresenta as mensagens de erro em Português Brasil
error_directory /usr/share/squid/errors/pt-br

# Por padrão o Squid já possui essa configuração como ativa. Ela serve para não colocar no log os
# parâmetros que são passados junto ao endereço acessado pelo usuário. Assim garante a privacidade.
# As vezes quando se usa filtro por palavras e um site apresenta acesso negado é interessante setar
# essa opção como off para verificar no log o endereço completo.
strip_query_terms off

# Local para gravar os arquivos core em caso de falhas do squid (/var/spool/squid)
# ou Evitar que sejam feitos coredumps (none).
coredump_dir none

# Resolve um problema com conexões persistentes que ocorre com certos servidores,
# e que provoca delays em nosso cache.
detect_broken_pconn on

# Provoca um ganho de performance ao usar conexões Pipeline (requisições em paralelo)
# o Squid irá trabalhar com 2 requisições paralelamente
pipeline_prefetch on
#
################ Fim da edição, pode salvar o arquivo################

Neste momento podemos criar os arquivos de cache com o comando:

sudo squid -z

Estando tudo certo, só iniciar o serviço do Squid:
sudo systemctl start squid

Validando se o Squid iniciou corretamente:
sudo systemctl status squid

● squid.service – Squid Web Proxy Server
Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2023-01-15 00:10:38 -03; 8min ago
Docs: man:squid(8)
Process: 961 ExecStartPre=/usr/sbin/squid –foreground -z (code=exited, status=0/SUCCESS)
Main PID: 1138 (squid)
Tasks: 4 (limit: 4625)
Memory: 50.9M
CPU: 989ms
CGroup: /system.slice/squid.service
├─1138 /usr/sbin/squid –foreground -sYC
├─1140 “(squid-1)” –kid squid-1 –foreground -sYC
├─1148 “(unlinkd)”
└─1183 “(pinger)”

jan 15 00:10:38 paulo-VirtualBox squid[1140]: 1 Objects cancelled.
jan 15 00:10:38 paulo-VirtualBox squid[1140]: 0 Duplicate URLs purged.
jan 15 00:10:38 paulo-VirtualBox squid[1140]: 0 Swapfile clashes avoided.
jan 15 00:10:38 paulo-VirtualBox squid[1140]: Took 2.86 seconds ( 1.05 objects/sec).
jan 15 00:10:38 paulo-VirtualBox squid[1140]: Beginning Validation Procedure
jan 15 00:10:38 paulo-VirtualBox squid[1140]: Completed Validation Procedure
jan 15 00:10:38 paulo-VirtualBox squid[1140]: Validated 3 Entries
jan 15 00:10:38 paulo-VirtualBox squid[1140]: store_swap_size = 12.00 KB
jan 15 00:10:38 paulo-VirtualBox squid[1140]: storeLateRelease: released 1 objects
jan 15 00:10:38 paulo-VirtualBox systemd[1]: Started Squid Web Proxy Server.

Caso seja necessário efetuar alguma configuração arquivo do squid.conf após ter ligado o serviço, não precisa parar e iniciar novamente, bata digitar:
Este comando fará a leitura do arquivo de configuração e carregará as informações alteradas no arquivo.
squid -k reconfigure