Servidor Proxy Squid no Linux CentOS 7 com Autenticação Local
Olá, como vai? 👋🏼
Em nosso post tutorial de hoje vamos abordar a instalação e configuração de um servidor Proxy com Squid no Linux CentOS 7. 🐧
1. Atualizando seu sistema
É importante sempre manter o sistema atualizado, então antes de iniciarmos o processo de configuração vamos efetuar a atualização.
yum -y update
2. 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
3. Desativando o Selinux e o FirewallD.
Para desativar o SELinux no CentOS 7, digite:
setenforce 0
Ajuste no arquivo de configuração do SELinux também, assim caso precise reiniciar o servidor, você não tenha que digitar novamente o comando acima.
vim /etc/selinux/config
e mude a linha abaixo:
SELINUX=enforcing
Mude para:
SELINUX=disabled
O próximo passo é desativar o FirewallD.
systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Vamos aproveitar e dar um “stop” no serviço do FirewallD que está em execução.
systemctl stop firewalld.service
4. Instale o SQUID
Para realizar a instalação do squid é muito simples. Buscamos o pacote direto dos repositórios.
yum -y install squid
5. 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”.
Eu vou criar diretamente com 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” criado por Johnny Ferreira (eu mesmo 😎).
### ARQUIVO DE CONFIGURACAO DO SQUID ###
## 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.tidahora.com.br
## 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 ".tidahora." >> /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
.tidahora.
.uol.
.terra.
O mesmo procedimento vamos estar efetuando para os sites_bloqueados.
echo ".globo." >> /etc/squid/regras/sites_bloqueados
echo ".baixaki." >> /etc/squid/regras/sites_bloqueados
echo ".mercadolivre." >> /etc/squid/regras/sites_bloqueados
Veja o conteúdo do arquivo de sites bloqueados.
cat sites_bloqueados
.globo.
.baixaki.
.mercadolivre.
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/
6. 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 johnny
Para os demais usuários utilize:
htpasswd /etc/squid/usuarios j.ferreira
Analisando o arquivo criado:
cat /etc/squid/usuarios
johnny:$apr1$bkV/Ho2E$lTFiX31f.GUPnXHbOUuqd.
j.ferreira:$apr1$wuTx5YlN$EbVodnSgzKdrFpYANo7I21
7. 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 no sistema:
systemctl status squid
● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2018-02-07 17:55:34 -02; 34s ago
Process: 1552 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
Process: 1546 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
Main PID: 1554 (squid)
CGroup: /system.slice/squid.service
├─1554 /usr/sbin/squid -f /etc/squid/squid.conf
├─1556 (squid-1) -f /etc/squid/squid.conf
└─1557 (unlinkd)
Feb 07 17:55:34 centos7 systemd[1]: Starting Squid caching proxy...
Feb 07 17:55:34 centos7 squid[1554]: Squid Parent: will start 1 kids
Feb 07 17:55:34 centos7 squid[1554]: Squid Parent: (squid-1) process 1556 started
Feb 07 17:55:34 centos7 systemd[1]: Started Squid caching proxy.
Vamos deixar o squid configurado para iniciar junto ao boot do sistema linux.
systemctl enable squid
8. Testando o funcionamento do SQUID
Para testar o servidor Squid insira o IP e porta nas configurações de proxy do navegador, não irei abordar essa configuração nesse tutorial.
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 6.
Acessando o site globo.com que está na lista de bloqueados.
Acompanhe os logs de acessos.
# tail -f /var/log/squid/access.log
1518112609.039 1 10.1.2.44 TCP_DENIED/403 5904 GET http://www.globo.com/ - HIER_NONE/- text/html
Veja nos logs que o acesso foi negado pelo SQUID, TCP_DENIED/403 no domínio na lista de proibidos.
Agora podemos acessar um site que não está na lista de bloqueados, por exemplo tidahora.com.br 😎
Lembrando que a configuração do SQUID é basicamente toda em cima de ACL, entendendo o funcionamento e a ordem de como utilizar corretamente as ACL no SQUID é possível bloquear downloads, liberar ou bloquear usuários ou endereços IPs e muito mais.
Esse tutorial tem como objetivo auxiliar profissionais que estão a iniciar sua jornada no mundo Linux com gerenciamento de serviços de redes.
Espero ter ajudado você de alguma forma, caso tenha dúvida comenta ai que estamos sempre pronto a ajudar.
Dúvidas, comentário e sugestões postem nos comentários…
👋🏼 Valeu! e até a próxima!
Johnny Ferreira
johnny.ferreira.santos@gmail.com
http://www.tidahora.com.br