Squid Proxy: Filtrar clientes por IP e MAC

Apresentamos regras do Squid para filtrar acesso dos clientes da rede com base no MAC e IP. 

Nesse tutorial, podemos usar regras para bloquear determinados clientes pelo endereço ou fazer a filtragem de acesso de conteúdo. 

Além disso, vamos aproveitar a configuração usada no post :Squid Proxy Instalação e Configuração.

 Nesse artigo, vamos nos ater somente as configurações relacionadas abaixo:  

  • 1) Regra com base no IP do cliente  
  • 2) Regra com base no MAC do cliente  
  • 3) Regra filtrando domínios por  MACs de clientes

Configuração usada no Squid

Vamos usar o mesmo arquivo de configuração inicial (squid.conf) que usamos no post: Squid Proxy Instalação e Configuração. 

A configuração basica pode ser vista abaixo e se desejar entender melhor você pode ir ao post Squid Proxy Instalação e Configuração. 

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

1) Regra com base no IP do cliente 

Nesse caso vamos criar uma lista de bloqueio de IPs dos clientes que queremos bloquear. Abaixo, temos o arquivo “/etc/squid/squid.conf” alterado para verificar a lista de IPs bloqueados em um arquivo “/etc/squid/SRC_IP.txt

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 SRC_IP src "/etc/squid/SRC_IP.txt"
http_access deny SRC_IP
##########################
acl Minha_Rede src 192.168.10.0/24

http_access allow Minha_Rede

http_access deny all
  • ” acl SRC_IP src “/etc/squid/SRC_IP.txt” “ = Aqui, temos a ACL (SRC_IP) utilizando os IPs de origem denominados pela sigla (src). Sendo que, os IPs que serão bloqueados estão armazenados no arquivo ( “/etc/squid/SRC_IP.txt”).
  • “http_access deny SRC_IP” = Em seguida, utilizamos o http_access deny” para bloquear acesso http a ACL “SRC_IP”.

Para alterar o arquivo “/etc/squid/squid.conf”, podemos usar o comando abaixo.

sudo nano /etc/squid/squid.conf

Agora, vamos criar o arquivo “/etc/squid/SRC_IP.txt”. Nesse arquivo, vamos inserir os IPs que desejamos bloquear. Para criar o arquivo “SRC_IP.txt“, podemos usar um editor. Usando o comando abaixo.

sudo nano /etc/squid/SRC_IP.txt

Em seguida adicione os IPs que deseja bloquear. Coloque um IP por linha. Exemplo:

192.168.10.2
192.168.10.5

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 um cliente que tem o IP na lista de bloqueio.

2) Regra com base no MAC do cliente  

Agora vamos criar uma lista de bloqueio de MACs dos clientes que queremos bloquear. Para isso, vamos inserir as novas regras para bloqueio de MAC no arquivo “/etc/squid/squid.conf“. 

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 SRC_MAC arp "/etc/squid/SRC_MAC.txt"
http_access deny SRC_MAC
##########################
acl Minha_Rede src 192.168.10.0/24

http_access allow Minha_Rede

http_access deny all
  • (acl SRC_MAC arp “/etc/squid/SRC_MAC.txt”) = Aqui, a ACL (SRC_MAC) utiliza os MACs de origem (arp) armazenados no arquivo ( “/etc/squid/SRC_MAC.txt”).
  • (http_access deny SRC_MAC) = Em seguida, utilizamos “http_access deny” para bloquear acesso http aos MACs contidos no arquivo “/etc/squid/SRC_MAC.txt”.

Para alterar o arquivo “/etc/squid/squid.conf”, podemos usar o comando abaixo.

sudo nano /etc/squid/squid.conf

Agora vamos criar o arquivo /etc/squid/SRC_MAC.txt. Para isso podemos usar um editor como o nano. Vamos usar o comando abaixo.

sudo nano /etc/squid/SRC_MAC.txt

Em seguida adicione os MACs dos computadores que deseja bloquear. Coloque um MAC por linha. Como no exemplo abaixo.

08:00:27:cb:e2:a0
08:00:27:55:11:11

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 um cliente que tem o MAC na lista de bloqueio.

3) Regra filtrando domínios por  MACs de clientes 

Agora, vamos bloquear o acesso a alguns domínios de clientes que possuem seu MAC no arquivo (/etc/squid/SRC_MAC.txt). Dessa forma, podemos filtrar os dominios que determinados clientes não podem acessar.

Os outros clientes da rede poderão acessar os domínios normalmente.

Esse tipo de filtragem de domínios com base no MAC do cliente pode ser interessante quando queremos dar prioridade a alguns clientes na rede. Poderíamos fazer a mesma configuração para IP.

Nesse nosso exemplo, clientes prioritários podem acessar normalmente, enquanto outros clientes sofrem restrição de acesso.  

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 SRC_MAC arp "/etc/squid/SRC_MAC.txt"
acl Block_Domain dstdomain "/etc/squid/Domain_block.txt"
http_access deny Block_Domain SRC_MAC
##########################
acl Minha_Rede src 192.168.10.0/24

http_access allow Minha_Rede

http_access deny all
  • (acl SRC_MAC arp “/etc/squid/SRC_MAC.txt”) = Aqui, a ACL (SRC_MAC) utiliza os MACs de origem (arp) armazenados no arquivo ( “/etc/squid/SRC_MAC.txt”).
  • (acl Block_Domain dstdomain “/etc/squid/Domain_block.txt”) = Aqui, utilizamos a ACL (Block_Domain) para bloquear os domínios de destino (dstdomain) armazenados no arquivo (“/etc/squid/Domain_block.txt“).
  • (http_access deny Block_Domain SRC_MAC) = Nesse caso, estamos bloqueando acesso http (http_access deny) aos domínios da ACL (Block_Domain) e que tenham seus MACs na ACL (SRC_MAC).

Para alterar o arquivo “/etc/squid/squid.conf”, podemos usar o comando abaixo.

sudo nano /etc/squid/squid.conf

Agora vamos criar o arquivo /etc/squid/SRC_MAC.txt. Para isso podemos usar um editor :

sudo nano /etc/squid/SRC_MAC.txt

Em seguida adicione os MACs que deseja bloquear. Coloque um MAC por linha. Exemplo:

08:00:27:cb:e2:a0
08:00:27:55:11:11

Agora vamos criar o arquivo “/etc/squid/Domain_block.txt“. Para isso podemos usar um editor com o comando abaixo.

sudo nano /etc/squid/Domain_block.txt

Em seguida adicione os domínios que deseja bloquear. Coloque um domínio por linha. Exemplo:

.simplificandoredes.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”

Agora, vamos tentar acessar a Internet com um cliente que tem o MAC na lista de bloqueio.

4) Bloquear domínios por IP no Squid

Nesse experimento, vamos bloquear alguns domínios para alguns IPs específicos. Dessa forma, outros IPs de nossa rede poderão ter acesso irrestrito a domínios da Internet.

No entanto, vamos bloquear o acesso de IPs que estão na lista “/etc/squid/SRC_IP.txt” para os domínios que especificarmos na lista “/etc/squid/Domain_block.txt“. 

Para essa configuração, vamos usar as regras abaixo no arquivo “/etc/squid/squid.conf”.

Para alterar o arquivo “/etc/squid/squid.conf”, podemos usar o comando abaixo.

sudo nano /etc/squid/squid.conf
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 SRC_IP src "/etc/squid/SRC_IP.txt"
acl Block_Domain dstdomain "/etc/squid/Domain_block.txt"
http_access deny Block_Domain SRC_IP
##########################
acl Minha_Rede src 192.168.10.0/24

http_access allow Minha_Rede

http_access deny all
  • (acl SRC_IP src “/etc/squid/SRC_IP.txt”) = Aqui, a ACL (SRC_IP) utiliza os IPs de origem (src) armazenados no arquivo ( “/etc/squid/SRC_IP.txt”).
  • (acl Block_Domain dstdomain “/etc/squid/Domain_block.txt”) = Aqui, utilizamos a ACL (Block_Domain) para bloquear os domínios de destino (dstdomain) armazenados no arquivo (“/etc/squid/Domain_block.txt“).
  • (http_access deny Block_Domain SRC_IP) = Nesse caso, estamos bloqueando acesso http (http_access deny) aos domínios da ACL (Block_Domain) e que tenham seus IPs na ACL (SRC_IP).

Agora, vamos criar o arquivo “/etc/squid/SRC_IP.txt”. Nesse arquivo, vamos inserir os IPs que desejamos bloquear. Para criar o arquivo “SRC_IP.txt“, podemos usar um editor. Usando o comando abaixo.

sudo nano /etc/squid/SRC_IP.txt

Em seguida adicione os IPs que deseja bloquear. Coloque um IP por linha. Exemplo:

192.168.10.2
192.168.10.5

Agora vamos criar o arquivo “/etc/squid/Domain_block.txt“. Para isso podemos usar um editor com o comando abaixo.

sudo nano /etc/squid/Domain_block.txt

Em seguida adicione os domínios que deseja bloquear. Coloque um domínio por linha. Exemplo:

.simplificandoredes.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”

Agora, vamos tentar acessar a Internet com um cliente que tem o IP na lista de bloqueio.

5) Verificando bloqueio nos logs do Squid

Verificar os logs é uma forma interessante de verificar se nosso proxy Squid está realmente bloqueando os domínios que foram selecionados. Para isso, podemos acessar os logs do Squid relacionados ao acesso. Podemos encontrar esses logs em “/var/log/squid/access.log”. 

Para verificar os logs podemos usar o comando cat como o exemplo abaixo. 

sudo cat /var/log/squid/access.log 

Além disso, podemos verificar apenas os logs relacionados ao que foi bloqueado. Para isso, podemos usar o comando que usamos acima e utilizarmos um filtro “ | grep DENIED”. Nesse caso, estamos querendo ver apenas os logs que informam o bloqueio de acesso. 

Para verificar apenas o que foi bloqueado no Squid podemos usar o comando abaixo. 

sudo cat /var/log/squid/access.log | grep DENIED 

Podemos ver na figura abaixo que as requisições do nosso cliente com IP “192.168.10.2” para o domínio que bloqueamos estão nos logs como “DENIED”.

Isso significa, que as requisições para esse domínio foram bloqueadas em nosso proxy Squid. 

Cenário usado

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

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 ?

Veja mais:

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

PfBlockerNG: Lista de exceção para clientes

Juliana Mascarenhas

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