Squid no Linux CentOS 7

Olá amigos.

O Squid é um servidor proxy que suporta HTTP, HTTPS, FTP e outros. Ele reduz a utilização da conexão e melhora os tempos de resposta fazendo cache de requisições frequentes de páginas web numa rede de computadores. Ele pode também ser usado como um proxy reverso.

Hoje vamos ver como instalar e configurar o Squid no Centos 7. Em muitas das situações que me deparei referente a chamados de liberação de site em nosso firewall de produção a mais eficiente solução foi instalar um proxy em uma maquina virtual e apontar a aplicação ou site com problemas de acesso dentro da nossa rede para monitorar as conexões.Sei que não é o adequado mas o Squid te da uma visualização fácil dos logs de requisição que estão chegando no servidor, com isso conseguimos fazer as liberações no Firewall de produção de maneira adequada.

Vamos começar pelo SO:

  • Atualizando seu sistema

É importante sempre manter o sistema atualizado.

yum -y update
  • Instalando o Repositório Epel

Em seguida instalamos o repositório Epel para termos uma efetividade melhor na busca de pacotes no sistema do CentOS.

yum -y install epel-release
  • Desativando o Selinux e o FirewallD

Para desativar o SELinux no CentOS 7, digite:

sed -i 's/enforcing/disabled/g' /etc/selinux/config /etc/selinux/config

O próximo passo é desativar o FirewallD.

systemctl disable firewalld.service

Vamos aproveitar e dar um “stop” no serviço do FirewallD que está em execução.

systemctl stop firewalld.service
  • Instale o SQUID

Para realizar a instalação do squid é muito simples. Buscamos o pacote direto dos repositórios.

yum -y install squid
  • Configurando o SQUID

Agora vamos efetuar as configurações do SQUID no ambiente Linux CentOS. O primeiro passo a fazer é um backup do arquivo squid.conf.

cp -Rfa /etc/squid/squid.conf{,.bkp}

Agora vamos acessar o diretório de configuração do SQUID.

cd /etc/squid/

Vamos excluir o arquivo “squid.conf” para que possamos criar um arquivo novo e limpo.
Só não esqueça de efetuar o backup do arquivo original conforme explicado acima.

rm -rf squid.conf

Na sequência criamos um novo arquivo de configuração.

Você pode optar por criar o arquivo do modo mais tradicional, utilizando o comando “touch”, ou simplesmente criar um arquivo novo diretamente com o “vi/vim”.
Prefiro utilizar o “vim”.

vim squid.conf

Obs.: Lembrando que estamos no diretório de configuração do squid “/etc/squid/”.

Abaixo segue o conteúdo do “squid.conf”

## DEFINE A PORTA DE CONEXAO DO SQUID
http_port 3128
 
## DEFINE O TAMANHO MAXIMO DE UM OBJETO PARA SER ARMAZENADO EM CACHE ##
maximum_object_size 4096 KB
 
## DEFINE O TAMANHO MINIMO DE UM OBJETO PARA SER ARMAZENADO EM CACHE ## 
minimum_object_size 0 KB
 
## DEFINE O TAMANHO MAXIMO DE UM OBJETO PARA SER ARMAZENADO EM CACHE DE MEMORIA ## 
maximum_object_size_in_memory 64 KB
 
## DEFINE A QUANTIDADE DE MEMORIA RAM A SER ALOCADA PARA CACHE ## 
cache_mem 512 MB
 
## AJUSTA A PERFORMANCE EM CONEXOES PIPELINE ##
pipeline_prefetch on
 
## CACHE DE FQDN ##
fqdncache_size 1024
 
## OPCOES DE REFRESH PATTERN ##
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
 
## DEFINE A PORCENTAGEM DO USO DO CACHE ## 
cache_swap_low 90
cache_swap_high 95
 
## ARQUIVO DE LOGS DO SQUID ## 
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
 
## DEFINE O LOCAL DO CACHE ##
cache_dir ufs /var/spool/squid 1600 16 256
 
## CONTROLE DE ROTACAO DOS ARQUIVOS DE LOGS ##
logfile_rotate 10
 
## ARQUIVO ONDE CONTEM OS ENDERECOS LOCAIS DA REDE ##
hosts_file /etc/hosts
 
## ACLS - PORTAS PADROES LIBERADAS ##
acl SSL_ports port 80 #HTTP
acl SSL_ports port 443 #HTTPS
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 http
acl CONNECT method CONNECT
 
### DEFININDO MODO DE AUTENTICACAO
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/usuarios
auth_param basic children 5
auth_param basic realm "DIGITE SEU USUARIO E SENHA PARA ACESSO A INTERNET:"
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
 
### ACL PARA GARANTIR A AUTENTICACAO DO USUARIO NOS SITES ###
acl autenticados proxy_auth REQUIRED
 
## BLOQUEIA O ACESSO UNSAFE PORTS ##
http_access deny !Safe_ports
 
## Deny CONNECT to other than secure SSL port ##
http_access deny CONNECT !SSL_ports
 
## SITES BLOQUEADOS PARA ACESSO ##
acl sites-bloqueados url_regex -i "/etc/squid/regras/sites_bloqueados"
 
## SITES LIBERADOS PARA ACESSO ##
acl sites-liberados url_regex -i "/etc/squid/regras/sites_liberados"
 
## DEFININDO A ORDEM DAS REGRAS - ACLS ##
http_access deny sites-bloqueados
http_access allow sites-liberados
http_access allow autenticados
http_access deny all
http_reply_access allow all
icp_access allow all
miss_access allow all
 
## NOME QUE IRA APARECER NA TELA DE ERRO OU BLOQUEIO DO SQUID ##
visible_hostname proxy.techpoli.info
 
## DIRETORIO DAS PAGINAS DE ERROS ##
error_directory /usr/share/squid/errors/pt-br
 
## OUTRAS OPCOES DE CACHE ##
cache_effective_user squid
coredump_dir /var/spool/squid

Após salvar o arquivo (Se você utilizou o vi/vim para salvar e sair do arquivo utilize: ESC + as teclas :wq)

O próximo passo é criar um diretório para armazenar as regras, ou seja, as ACL’s do nosso squid.

 mkdir /etc/squid/regras

Se você leu o “squid.conf” notou que temos duas ACL’s prontas na configuração.

ACL para sites bloqueados => /etc/squid/regras/sites_bloqueados
ACL para sites liberados => /etc/squid/regras/sites_liberados

Vamos criar esses arquivos dentro do diretório de regras.

touch /etc/squid/regras/sites_bloqueados
touch /etc/squid/regras/sites_liberados

Vamos colocar alguns sites na lista de bloqueados.

echo ".techpoli." >> /etc/squid/regras/sites_liberados
echo ".uol." >> /etc/squid/regras/sites_liberados
echo ".terra." >> /etc/squid/regras/sites_liberados

Veja o conteúdo do arquivo:

cat sites_liberados 

O mesmo procedimento vamos estar efetuando para os sites_bloqueados.

echo ".globo." >> /etc/squid/regras/sites_bloqueados
echo ".facebook." >> /etc/squid/regras/sites_bloqueados
echo ".web.whatsapp.com." >> /etc/squid/regras/sites_bloqueados

Veja o conteúdo do arquivo de sites bloqueados.

cat sites_bloqueados 

Note que utilizei o formato “.site.” o ponto antes da palavra pega qualquer sub-domínio do site, e o mesmo após o domínio pega qualquer sub-página por exemplo.

Vamos ajustar a permissão na pasta “regras” para o squid.

chown -Rf squid:squid /etc/squid/regras/
  • Configurando a Autenticação Local

No squid teremos a autenticação local, ou seja, teremos um arquivo responsável por armazenar os logins e senhas dos usuários.

Para criar esse arquivo vamos precisar instalar o Apache2 no CentOS, vamos utilizar um complemento do Apache2 chamado “htpasswd”.

yum -y install httpd

Não é necessário nem iniciar o serviço do Apache, vamos criar o arquivo de logins e senhas.

Criando os usuários com o comando “htpasswd”

Utilize o comando abaixo, somente pela primeira vez, para criar o arquivo:

O parâmetro “-c” na linha abaixo indica que o comando crie o arquivo e em seguida o usuário informado.

htpasswd -c /etc/squid/usuarios geraldo

Para os demais usuários utilize:

htpasswd /etc/squid/usuarios geraldo.poli

Analisando o arquivo criado:

cat /etc/squid/usuarios 
geraldo:$apr1$bkV/Ho2E$lTFiX31f.GUPnXHbOUuqd.
geraldo.poli:$apr1$wuTx5YlN$EbVodnSgzKdrFpYANo7I21
  • Iniciando o SQUID

Agora vamos criar o diretório de cache do squid.

squid -z

Em seguida iniciamos o serviço do Squid.

systemctl start squid

Verificando o Status do sistema:

 systemctl status squid
● squid.service - Squid caching proxy
   Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-06-19 13:29:19 EDT; 19h ago
  Process: 5229 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
  Process: 5218 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
 Main PID: 5243 (squid)
   CGroup: /system.slice/squid.service
           ├─5243 /usr/sbin/squid -f /etc/squid/squid.conf
           ├─5245 (squid-1) -f /etc/squid/squid.conf
           └─5274 (unlinkd)

Jun 19 13:29:19 bra01squid01.local systemd[1]: Starting Squid caching proxy...
Jun 19 13:29:19 bra01squid01.local squid[5243]: Squid Parent: will start 1 kids
Jun 19 13:29:19 bra01squid01.local systemd[1]: Started Squid caching proxy.
Jun 19 13:29:19 bra01squid01.local squid[5243]: Squid Parent: (squid-1) proce...d
Hint: Some lines were ellipsized, use -l to show in full.

Vamos deixar o squid configurado para iniciar junto ao boot do sistema linux.

systemctl enable squid
  • Testando o funcionamento do SQUID

Para testar o servidor Squid insira o IP e porta nas configurações de proxy do navegador.

Visite um site na lista de bloqueados, globo.com por exemplo, veja o resultado abaixo:

Digite o login e senha de acesso criado nos passos anteriores:

Acessando o site globo.com que está na lista de bloqueados.

Acompanhe os logs de acessos.

tail -f /var/log/squid/access.log 

1561035035.315      0 192.168.0.209 TCP_DENIED/403 4157 GET http://g1.globo.com/favicon.ico - HIER_NONE/- text/html
1561035035.318      0 192.168.0.209 TCP_DENIED/403 4157 GET http://g1.globo.com/favicon.ico - HIER_NONE/- text/html

Veja nos logs que o acesso foi negado pelo SQUID, TCP_DENIED/403 no domínio na lista de proibidos.

A configuração do SQUID é em cima de ACL, sabendo o funcionamento e a ordem de como utilizar as ACL no SQUID é possível bloquear downloads, liberar ou bloquear usuários ou endereços IPs e muito mais.

Dúvidas, comentário e sugestões só avisar.
Valeu! e até a próxima!

Continue Reading