Proxy Squid no CentOS 7

Em redes de computadores um proxy é um servidor que age como um intermediário para requisições de clientes solicitando recursos de outros servidores. Um cliente conecta-se ao servidor proxy, solicitando um serviço, como um arquivo, conexão, página web. O proxy avalia a solicitação como um meio de simplificar e controlar sua complexidade. Os proxies foram inventados para adicionar estrutura e encapsulamento a sistemas distribuídos. Hoje, a maioria dos proxies é proxy web, facilitando o acesso ao conteúdo na World Wide Web e fornecendo anonimato.

O objetivo principal de um servidor proxy é possibilitar que máquinas de uma rede privada possam acessar uma rede pública, como a Internet, sem que para isto tenham uma ligação direta com esta. O servidor proxy costuma ser instalado em uma máquina que tenha acesso direto à internet, sendo que as demais efetuam as solicitações através desta. Justamente por isto este tipo é chamado de Proxy, pois é um procurador, ou seja, sistema que faz solicitações em nome de outros.

O mais popular servidor Proxy em software livre e um dos melhores softwares para a função do mercado é o **Squid**. O Squid trabalha principalmente sobre os protocolos HTTP e FTP, possui suporte para TLS, SSL e HTTPS, e permite diversos mecanismos de autenticação como SAMBA, kerberos, Mysql, Postgress, Ldap, AD e outros.

[root@notebook tadeu]# yum search squid | grep ^squid 
squid.x86_64 : The Squid proxy caching server
squidGuard.x86_64 : Filter, redirector and access controller plugin for squid
[root@notebook tadeu]# yum install -y squid.x86_64

Agora que já instalamos vamos habilitá-lo:

[root@notebook tadeu]# systemctl enable squid.service 
Created symlink /etc/systemd/system/multi-user.target.wants/squid.service → /usr/lib/systemd/system/squid.service.
 
[root@notebook tadeu]# systemctl start squid 

Para verificar as opções do comando squid:

[root@notebook tadeu]# squid -h 

A versão:

[root@notebook tadeu]# squid -v

Os arquivos de configuração do Squid estão localizados no /etc/squid/. O principal arquivo de configuração do Squid é o /etc/squid/squid.conf.

Para mais detalhes de configuração:

[root@notebook squid]# man 8 squid 

Por default o proxy Squid é configurado somente para conectar em redes privadas locais, caso contrário a mensagem “The proxy server is refusing connections” aparecerá. Se esse tipo de erro permanecer então será necessário configurar as ACL’s ( Access Control Lists) no arquivo de configuração do Squid.

CONFIGURANDO O SQUID

Para configurar o Squid vamos editar seu arquivo de configuração /etc/squid/squid.conf.

Primero vamos fazer um backup do seu arquivo:

[root@notebook squid]# cp -pr squid.conf squid.conf.bkp

Já no começo do arquivo vemos todas as redes autorizadas para usar o Squid, porém só vou deixar a minha rede interna de Classe C:

acl localnet src 192.168.0.0/16         # RFC 1918 local private 

Por default o Squid considera somente algumas portas como seguras:

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

Para todas as outras portas que não estão listadas acima elas não serão acessadas através do proxy. Para adicionamos uma porta na lista de portas seguras (Safe_ports) é preciso adicionar uma entrada, como por exemplo:

acl Safe_ports port 168
[root@notebook squid]# systemctl restart squid 

Com o Squid também é possível solicitar uma autenticação antes do acesso ao proxy, ele possui diversos mecanismos para essa finalidade, entretando para este artigo vamos utilizar o **htppd-tools** que é de fácil configuração.

[root@notebook squid]# yum install -y httpd-tools.x86_64

No diretório do Squid vamos criar um arquivo chamado passwd e alterar seu dono:

[root@notebook squid]# touch passwd && chown squid: passwd

Agora vamos criar um usuário para o arquivo de senha com o comando:

[root@notebook squid]# htpasswd /etc/squid/passwd ambrosia 
New password: 
Re-type new password: 
Adding password for user ambrosia
[root@notebook squid]# cat passwd 
ambrosia:$apr1$Hx4QJwzS$ZAe8S6svuwRkVwwGnG5pr1

Por default o htpasswd armazena as senhas com criptografia MD5. No /etc/squid/squid.conf adicionamos as seguintes entradas após as ACL's:

auth_param basic program /usr/lib64/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

Por padrão o Squid trabalha na porta 3128, para testar as alterações modificamos as entradas de Proxy da rede para o endereço IP do nosso Squid com a porta 3128 e todo tráfego da porta 80 e 8080 passará pelo proxy solicitando um usuário e senha. Usuários não autorizados será mostrado uma mensagem de erro.

BLOQUEANDO SITES

Com o Squid também podemos facilmente bloquear uma determinada lista de sites utilizando um arquivo separado com as URL's.

[root@notebook squid]# touch blocked_sites && chown squid: blocked_sites
[root@notebook squid]# cat blocked_sites 
www.uol.com.br
www.terra.com.br
www.globo.com

E no /etc/squid/squid.conf adicionamos a seguinte entrada embaixo das ACL's das portas:

#SITES BLOQUEADOS
acl blocked_sites dstdomain "/etc/squid/blocked_sites
http_access deny blocked_sites
[root@notebook squid]# systemctl restart squid

Para verificar as mensagens de log do Squid:

[root@notebook squid]# tail -f /var/log/squid/access.log
CACHE

Outro ponto importante na configuração do Squid é o ajuste do cache, o cache é fundamental porque implica em economia de banda no link WAN (um recurso importante e caro) e tem um maior desempenho da Internet, uma vez que há diminuição de latência no acesso aos conteúdos populares da Internet que passam a ficar armazenados em cache no próprio servidor.

Assim que um conteúdo popular na Internet é acessado pela primeira vez por alguma máquina da rede local, o servidor proxy trata de manter uma cópia desse conteúdo em cache local. A partir de então as demais máquinas que tiverem interesse em acessar esse mesmo conteúdo não precisam mais atravessar toda a Internet para buscá-lo, de forma que basta um acesso local ao servidor proxy/cache mais próximo.

cache_dir ufs /var/spool/squid 512 128 256
cache_mem 20 MB
PROXY TRANSPARENTE

Diferente do proxy tradicional que precisamos configurar o browser, no proxy transparente o cliente faz sua requisição ao gateway padrão daquela rede, e então, com uma regra e com o firewall previamente configurada, o gateway fará o redirecionamento para o proxy, que por usa vez realizará seu trabalho.

A maior vantagem deste modelo é que não temos necessidade de configurar os browsers manualmente, o que seria justificável em uma rede aonde não temos o poder de manipular o computador dos usuários.

No IPTABLES o "básico" a fazer é o Masquerading e direcionar o trafego da porta 80 para a porta que o squid irá operar:

#!bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING -s  -p tcp --dport 80 -j REDIRECT --to-port 3128

Referências:
http://www.squid-cache.org/
https://pt.wikipedia.org/wiki/Squid
https://www.vivaolinux.com.br/artigo/Servidores-Proxy-Seguranca-da-Informacao
http://wiki.squid-cache.org/SquidFaq/ConfiguringSquid
http://wiki.squid-cache.org/SquidFaq/ConfiguringSquid#What_.27.27cache_dir.27.27_size_should_I_use.3F
https://www.vivaolinux.com.br/dica/Squid-Calculando-cache-dir-e-cache-mem