Squid Proxy Instalação e Configuração.

Neste artigo, vamos abordar a instalação e configuração do servidor proxy Squid. O Squid tem sido utilizado por grande parte das empresas privadas e públicas.

English version: click HERE

 Dessa forma, parte dessa popularização do Squid está relacionado a segurança operacional da ferramenta e sua flexibilidade. 

Além disso, essa flexibilidade do Squid, permite uma extensa gama de controle de acesso. 

O Squid pode operar em diversos sistemas operacionais como : Linux, Windows, BSD. Nesse tutorial, vamos instalar no Linux Ubuntu. 

Um ponto muito interessante do Squid é sua capacidade de utilização da licença GNU GPL. Dessa forma, desenvolvedores se sentem atraídos em utilizar a ferramenta e contribuir com modificações. 

Analogamente, vale destacar que muitos provedores de serviço também têm utilizado o Squid entre seus clientes e servidores.  

Tópicos que serão abordados nesse post:

1) Instalação do Squid

Vamos fazer uma apresentação de uma prática onde instalamos o Squid e fazemos a configuração inicial.

Usuários Windows podem obter a ferramenta acessando o site do Squid: www.squid-cache.org/. Para usuários Linux, a instalação pode ser feita usando os repositórios: 

sudo apt-get install squid

Após a instalação, vamos verificar se o Squid está sendo executado de forma satisfatória. Para isso, vamos utilizar o seguinte comando: 

sudo service squid status

Para sair da tela acima, podemos usar a combinação de teclas “Ctrl + c“.

2) Configuração do Squid

Após a instalação, vamos iniciar a fase de configuração.

Para isso, vamos acessar o diretório  “/etc/squid/“.

cd /etc/squid 

Em seguida, vamos criar uma cópia do arquivo original de configuração “squid.conf”. Vamos nomear a copia para “squid.conf.backup“.

sudo cp squid.conf squid.conf.backup

Agora, vamos editar o arquivo “squid.conf” e vamos apagar todas a linhas desse arquivo.

O motivo de estarmos apagando as linhas do arquivo, é para que o leitor possa identificar de forma segmentada cada parte da configuração.

sudo nano squid.conf

Nota. É possível editar linhas específicas do arquivo a medida em que o leitor adquirir um maior conhecimento na ferramenta. 

Depois de apagar todas as linhas do arquivo “squid.conf“, vamos adicionar linhas que representam ACLs de acesso. 

Posteriormente, vamos adicionar o texto abaixo no arquivo “squid.conf”. Logo depois, explicaremos os significados das linhas. 

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

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_port 3128

acl Minha_Rede src 192.168.10.0/24

http_access allow Minha_Rede

http_access deny all

Criando ACLs para o Squid

Apresentamos abaixo a figura com a descrição de ACLs que recebem o nome e logo após a porta.

Inicialmente, estamos criando “acl” com o nome “SSL_ports” recebendo o valor de porta 443.

Depois, vamos criar “acl” com o nome “Safe_ports” recebendo o valor de porta 80,21 e 443.

Bloqueando acesso HTTP para outras portas

Agora, vamos falar da regra que faz o bloqueio HTTP para as portas que não são “Safe_ports”.

http_access deny !Safe_ports

  • “http_access” = acesso usando o protocolo HTTP.
  • “deny” = nega ou bloqueia.
  • !Safe_ports” = o “!” indica não e logo depois vem o nome da ACL “Safe_ports“. Logo, estamos negando acesso a http para portas que não estando na ACL “Safe_ports”.

Essa parte Nega (deny) acesso http (http_access) às portas que não (!) são Safe_ports. 

Negar conexão para outras portas

Essa parte nega (deny) conexão às portas que não (!) são SSL_ports. 

Escolhendo a porta que o Squid escuta

Posteriormente, vamos especificar a porta que o Squid vai ouvir. Então, quando um cliente desejar acessar um servidor WEB, esse enviará para a porta do Squid.

Logo depois, o Squid vai fazer a requisição WEB ao servidor. 

Em nosso caso, estamos usando a porta 3128 TCP para o Squid escutar e ficar aguardando conexões dos clientes.

Filtrando a rede de origem no Squid

Depois disso, vamos criar uma ACL que informa que a rede de origem “src” será “192.168.10.0/24”. Daremos o nome “Minha_Rede” para essa ACL.

Além disso, essa rede de origem “Minha_Rede” terá permissão (ALLOW) para acessar tráfego http “http_access“. Você pode alterar para a sua rede interna que usa com as máquinas clientes. 

Bloqueando tudo que não foi permitido no Squid

Logo depois, introduzimos um bloqueio para todo o resto. Dessa forma, todo o tráfego (ALL) que não atender as ACLs iniciais será bloqueado (DENY) = “http acess deny all“.

Reiniciando o Squid

Em seguida, vamos reiniciar o Squid para que as configurações façam efeito. Posteriormente, vamos verificar o status do Squid. Depois disso, teste a conexão do cliente com a internet.

sudo service squid restart
sudo service squid status

“Limpe o cache do navegador”

Além disso, caso tenha erros, podemos verificar o syslog. Então, para isso podemos usar o comando abaixo:

sudo cat /var/log/syslog | grep squid

Testando o Squid Proxy

Agora, vamos configurar a rede e o navegador do cliente para apontar para o proxy. 

Em nosso caso, estamos usando um cenário como o descrito abaixo. 

Alternativamente, vou sugerir um cenário usando VirtualBox na figura abaixo.

Podemos ver que estamos usando a rede “192.168.10.0/24” na LAN de nosso cenário.  

O Squid proxy terá duas interfaces. 

  • Interface de conexão com a Internet: recebendo IP por NAT ou um IP dentro da sua rede que acessa a Internet. 
  • Interface LAN com IP “192.168.10.1”. Essa interface vai estar conectada na rede da máquina cliente. Em nosso caso, essa rede é a “192.168.10.0/24”. 

O cliente terá uma interface. 

  • Interface LAN com IP “192.168.10.2”. Essa interface vai estar conectada com a interface LAN do Squid. Em nosso caso, essa rede é a “192.168.10.0/24”. 

Configurando o navegador do cliente:

O navegador do cliente deve apontar sua configuração de proxy para o IP da interface LAN do Squid e usar a porta do Squid proxy.

Para isso, vamos acessar o navegador da máquina cliente e procurar a configuração de proxy do navegador.

Em nosso caso, a interface LAN do Squid é “192.168.10.1” e a porta usada é a “3128“.

Na figura acima, temos a configuração do navegador Firefox apontando para o IP do proxy Squid.

Agora, tente acessar a Internet usando o cliente.

Testando as ACLs do Squid

Vamos passar algumas tarefas para que você possa testar a efetividade das ACLs configuradas.

Lembrando que após cada mudança o servidor Squid deve ser reinicializado (sudo service squid restart). 

Tarefa 1: alterando as portas http e https

  1. Altere a porta 443 e 80 no Squid.conf e tente acessar a internet com o cliente. Por exemplo, vou alterar a porta 443 para 555 e a porta 80 para 55.
acl SSL_ports port 555 #  https
acl Safe_ports port 55 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 555 # https
acl CONNECT method CONNECT
...

Vamos reiniciar o Squid e depois limpar o cache do navegador.

sudo service squid restart
sudo service squid status

“Limpe o cache do navegador”

Agora, vamos tentar acessar a Internet com cliente.

Podemos ver que não consiguimos acessar a internet. Isso ocorreu porque nós retiramos as portas 80 e 443 das ACLs “Safe_ports” e “SSL_ports”.

Essas portas são usadas pelos protocolos de páginas da Internet e foram trocadas em nosso Squid.

Depois de testar, vamos voltar com a configuração anterior.

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 CONNECT method CONNECT
...

Vamos reiniciar o Squid e depois limpar o cache do navegador.

sudo service squid restart
sudo service squid status

Tarefa 2: alterando a rede de origem

Agora vamos modificar nossa rede de origem para uma rede que não estamos usando.

  1. Modifique a rede “192.168.10.0/24” ( ou sua rede ) no Squid.conf e tente navegar com o cliente. Por exemplo, vou alterar para uma rede que não estou usando : “192.168.200.0/24”.
...
acl Minha_Rede src 192.168.200.0/24
...

Vamos reiniciar o Squid e depois limpar o cache do navegador.

sudo service squid restart
sudo service squid status

“Limpe o cache do navegador”

Agora, vamos tentar acessar a Internet com cliente.

Podemos ver que não consiguimos acessar a Internet. Isso ocorreu porque nós modificamos a rede que tinha permissão de acesso e retiramos nossa rede interna.

Consequentemente, o cliente não vai conseguir acessar a Internet porque está usando uma rede diferente da rede que alteramos.

Depois de testar, vamos voltar com a configuração anterior.

...
acl Minha_Rede src 192.168.10.0/24
...

Vamos reiniciar o Squid e depois limpar o cache do navegador.

sudo service squid restart
sudo service squid status

3) Configuração baseada em horário

Agora, vamos iniciar a configuração do Squid baseada em horário. Então, a ideia é utilizar uma ACL que funcione em um horário específico. 

Além disso, é importante mostrar a tabela de abreviações que o Squid usa para ACLs baseadas em tempo: 

"acl aclname time [day-abbrevs] [h1:m1-h2:m2]
day-abbrevs:
S - Sunday
M - Monday
T - Tuesday
W - Wednesday
H - Thursday
F - Friday
A - Saturday
h1:m1 must be less than h2:m2"

Em seguida, vamos configurar o Squid para permitir o acesso dos clientes apenas em um horário específico durante alguns dias da semana.

Ok, novamente vamos editar o arquivo nosso arquivo “/etc/squid/squid.conf“. Para isso, vamos usar o comando abaixo.

 sudo nano /etc/squid/squid.conf

Nesse caso, vamos escolher os dias “Domingo, segunda, terça, quarta, quinta, sexta, sábado” equivalente a (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday). Além disso, vamos escolher uma hora específica (10:00-18:00).

Assim, observe que agora a permissão de acesso “http_access allow Minha_Rede” recebe a ACL “Mytime” .

Então, isso indica que só será permitido acesso durante esses dias e no horário específico.

acl SSL_ports port 443 #
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_port 3128
acl Minha_Rede src 192.168.10.0/24

acl Mytime time S M T W T F 10:00-18:00 
http_access allow Minha_Rede Mytime 

http_access deny all

Agora, vamos descrever a configuração que fizemos.

Primeiramente introduzimos a nova configuração depois da linha “acl Minha_Rede src 192.168.10.0/24” e antes da linha “http_access deny all“.

Nossa configuração inicia com a acl: “acl Mytime time S M T W T F 10:00-18:00“. Vamos descrever os campos da acl.

  • Mytime” = o nome que daremos a nossa ACL para controlar o horário.
  • time S M T W T F 10:00-18:00” = Significa que nossa ACL usará o dias “Sunday, Monday, Tuesday, Wednesday, Thursday, Friday” e usará o horário entre 10:00 e 18:00 horas “10:00-18:00.

Agora, vamos descrever linha “http_access allow Minha_Rede Mytime“.

  • http_access allow Minha_Rede Mytime” = vamos dar permissão de acesso HTTP para nossa ACL “Minha_Rede”. No entanto, estamos restringindo essa permissão de acesso para atuar somente durante o tempo definido na ACL Mytime“.

Logo depois vem a regra que bloqueia todo o tráfego: “http_access deny all“. Ou seja, teremos o tráfego bloqueado se tentarmos um tráfego que não obedeça exatamente o que foi permitido “allow” nas linhas acima.

Vamos reiniciar o Squid e depois limpar o cache do navegador.

sudo service squid restart
sudo service squid status

“Limpe o cache do navegador”

Além disso, caso tenha erros, podemos verificar o syslog. Então, para isso podemos usar o comando abaixo:

sudo cat /var/log/syslog | grep squid

Testando a ACL de tempo

  • Agora, altere a ACL “Mytime” indicando um tempo diferente do atual e verifique se está conseguindo se conectar com a internet. (sudo service squid restart)

4) Configuração baseada em domínios.

Em seguida, vamos fazer a configuração do Squid proxy com base nos domínios que pretendemos restringir. Para isso, vamos criar um arquivo e dentro desse arquivo vamos inserir os domínios que serão bloqueados.  

Ok, novamente vamos editar o arquivo nosso arquivo “/etc/squid/squid.conf“. Para isso, vamos usar o comando abaixo.

 sudo nano /etc/squid/squid.conf

Agora vamos apagar a configuração antiga do nosso “/etc/squid/squid.conf” e vamos copiar as configurações abaixo e inserir em nosso “/etc/squid/squid.conf“.

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_port 3128
acl Minha_Rede src 192.168.10.0/24

acl Domain_block dstdomain "/etc/squid/Domain_block.txt"
http_access deny Domain_block

http_access allow Minha_Rede
http_access deny all

Agora, vamos descrever a configuração que fizemos.

Primeiramente introduzimos a nova configuração depois da linha “acl Minha_Rede src 192.168.10.0/24” e antes da linha “http_access deny all“.

Nossa configuração inicia com a acl: “acl Domain_block dstdomain “/etc/squid/Domain_block.txt”“. Vamos descrever os campos da acl.

  • Domain_block” = o nome que daremos a nossa ACL para bloquear os domínios.
  • dstdomain” = significa domínios de destino.
  • “/etc/squid/Domain_block.txt” = aqui temos o arquivo onde vamos inserir os domínos que desejamos bloquear.

Agora, vamos descrever linha “http_access deny Domain_block“.

  • http_access deny Domain_block” = vamos bloquear “deny” permissão de acesso HTTP “http_access” para nossa ACL Domain_block“.

Lembrando que nossa ACL aponta para os dominínos de destino que inserimos no arquivo “/etc/squid/Domain_block.txt”.

Logo depois vem a que permite acessho http a nossa rede: “http_access allow Minha_Rede“. Em seguida vem a regra que bloqueia todo o tráfego: “http_access deny all“.

Em resumo, os computadores de nossa rede poderão acessar qualquer domíno que não seja os domínos inseridos no arquivo “/etc/squid/Domain_block.txt”.

Em seguida, vamos criar o arquivo onde vamos inserir os domínicos. Nesse caso, o arquivo será: ”Domain_block.txt” localizado dentro de “/etc/squid/“.

Então, vamos inserir os domínios dentro do arquivo. Para isso, vamos usar o comando abaixo. 

sudo nano /etc/squid/Domain_block.txt

Em seguida, insira os domínios abaixo. É importante inserir o “.” antes de cada domínio.

.youtube.com

.facebook.com

Vamos reiniciar o Squid e depois limpar o cache do navegador.

sudo service squid restart
sudo service squid status

“Limpe o cache do navegador do cliente”

Além disso, caso tenha erros, podemos verificar o syslog. Então, para isso podemos usar o comando abaixo:

sudo cat /var/log/syslog | grep squid

Testando a ACL “Domain_block”

Agora, vamos testar se a máquina cliente consegue acessar os domínios que você bloqueou.

5) Configuração baseada em URLs/palavras.

Em seguida, vamos fazer a restrição de páginas WEB com base nas palavras da URL. Dessa forma, quando precisar bloquear uma URL pode usar uma palavra da URL.

Nota. Vale ressaltar que essa configuração aqui não se aplica a HTTPS. Então, para o HTTPS podemos usar a configuração de bloqueio por domínios

Ok, novamente vamos editar o arquivo nosso arquivo “/etc/squid/squid.conf“. Para isso, vamos usar o comando abaixo.

 sudo nano /etc/squid/squid.conf

Agora vamos apagar a configuração antiga do nosso “/etc/squid/squid.conf” e vamos copiar as configurações abaixo e inserir em nosso “/etc/squid/squid.conf“.



acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_port 3128
acl Minha_Rede src 192.168.10.0/24

acl Word_block url_regex -i "/etc/squid/Word_block.txt"
http_access deny Word_block

http_access allow Minha_Rede
http_access deny all

Agora, vamos descrever a configuração que fizemos.

Primeiramente introduzimos a nova configuração depois da linha “acl Minha_Rede src 192.168.10.0/24” e antes da linha “http_access deny all“.

Nossa configuração inicia com a acl: “acl Word_block url_regex -i “/etc/squid/Word_block.txt”“. Vamos descrever os campos da acl.

  • Word_block” = o nome que daremos a nossa ACL para bloquear os palavras em URLs.
  • url_regex” = expressão regular estendida (Extended Regular Expressions) em URL, será usado para verificar a correspondência de uma expressão regular em uma URL inteira.
  • -i” = sem distinção entre maiúsculas e minúsculas.
  • “/etc/squid/Word_block.txt” = aqui temos o arquivo onde vamos inserir as palavras que desejamos bloquear se estiverem em uma URL .

Agora, vamos descrever linha “http_access deny Word_block“.

  • http_access deny Word_block” = vamos bloquear “deny” permissão de acesso HTTP “http_access” para nossa ACL Word_block“.

Lembrando que nossa ACL aponta para as palavras que inserimos no arquivo /etc/squid/Word_block.txt.

Logo depois vem a que permite acessho http a nossa rede: “http_access allow Minha_Rede“. Em seguida vem a regra que bloqueia todo o tráfego: “http_access deny all“.

Em resumo, os computadores de nossa rede poderão acessar qualquer URL que não contenha as palavras ou expressões regulares inseridas no arquivo /etc/squid/Word_block.txt.

Em seguida, vamos criar o arquivo onde vamos inserir as palavras ou expressões regulares. Nesse caso, o arquivo será: ”Word_block.txt” localizado dentro de “/etc/squid/“.

Então, vamos inserir as palavras ou expressões regulares dentro do arquivo. Para isso, vamos usar o comando abaixo. 

sudo nano /etc/squid/Word_block.txt

Agora, vamos inserir as palavras ou expressões regulares abaixo. Nesse caso, queremos bloquear qualquer URL que contenha ubuntu, debian ou mint.

ubuntu
debian
mint

Vamos reiniciar o Squid e depois limpar o cache do navegador do cliente.

sudo service squid restart
sudo service squid status

“Limpe o cache do navegador do cliente”

Além disso, caso tenha erros, podemos verificar o syslog. Então, para isso podemos usar o comando abaixo:

sudo cat /var/log/syslog | grep squid

Testando a ACL “Word_block”

Agora, vamos testar se a máquina cliente consegue acessar as palavras ou ou expressões regulares que você bloqueou. Nesse caso, tentamos acessar os sites da figura abaixo.

Lista do tutorial sobre Squid e SquidGuard:

Parte 1: Squid Proxy Instalação e Configuração.

Parte 2: Squid Proxy: Filtrar clientes por IP e MAC

Parte 3: Squid: Autenticação de Usuário

Parte 4: SquidGuard : Instalação e Configuração

Parte 5: SquidGuard : como importar blocklist ?

Um pouco mais de teoria sobre o Squid Proxy

Consequentemente, ao atuar entre cliente e servidores o Squid permite gerenciar recursos e fazer o cache de conteúdo.

Assim, esse cache de conteúdos permite uma melhor otimização da largura de banda. Isso porque um recurso anteriormente acessado por um usuário pode ser acessado por outros usuários.

Dessa forma, os conteúdos estáticos mais acessados podem ser armazenados no cache do Squid.

Uma vez que esse conteúdo está armazenado no cache do Squid, o acesso de requisição desse conteúdo é mais rápido e evita o consumo de largura de banda a Internet. 

Do mesmo modo, a utilizaçã do Squid também permite a utilização de servidores de cache de forma hierárquica.

Então, essa utilização de servidores de cache de forma hierárquica possibilita uma otimização dos recursos da rede. 

Assim como, o uso distribuído do Squid permite a sua utilização por Web sites. Além disso, o squid pode ser utilizado na outra ponta, isso é reduzindo o consumo de recursos do lado do servidor. 

Além disso, segundo a Wikimedia Deployment Information, o Squid pode quadruplicar a capacidade de servidores WEB que estejam posicionados após o Squid. 

Então, uma vez que o acesso ao conteúdo está armazenado no cache do Squid, parte das requisições não chegam ao servidor WEB.

Dessa forma, isso possibilita que que o servidor WEB atenta a um número maior de requisições. Squid Proxy Instalação e Configuração.

Cenário utilizado para os testes:

cenario squid proxy
Cenário usado nos testes

Configurando a máquina cliente no VirtualBox:

Abaixo temos a configuração da rede Virtualizada da máquina cliente usando o VirtualBox. Nesse caso vamos usar a rede em modo “Internal Network” com o nome “intnet”.

Configurando a máquina do Squid no VirtualBox:

Configurando a interface LAN da máquina virtual onde está o squid proxy no virtualbox. Nesse caso, como estamos usando o VirtualBox, vamos usar a rede em modo “Internal Network” na primeira interface.

Abaixo, temos a configurando a interface WAN da máquina virtual do proxy Squid. Nesse caso, como estamos usando o VirtualBox, vamos usar a rede em modo NAT na segunda interface.

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer

Além desse post Squid Proxy Instalação e Configuração, veja também:

SquidGuard : como importar blocklist ?

SquidGuard : Instalação e Configuração

Squid: Autenticação de Usuário

Squid Proxy: Filtrar clientes por IP e MAC