SquidGuard : Instalação e Configuração

Apresentamos a instalação e configuração do SquidGuard. Além disso, apresentamos como criar uma blocklist baseada em URL e outra blocklist baseada em domínio.

English version: click HERE

Dessa forma, configuramos o SquidGuard para bloquear URLs específicas e domínios específicos.  Para ver o vídeo clique AQUI.

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 ?

Adicionalmente, apresentamos no final do vídeo o cenário utilizado. Dessa forma, é possível recriar o cenário apresentado para fazer a prova de conceito.

Além disso, a possibilidade de recriação do cenário permite que sejam feitos testes com o SquidGuard em ambientes controlados. 

Cenário

O primeiro passo será a apresentação do cenário. Assim, criamos um cenário virtualizado para prover uma maior facilidade na prova de conceito.

Além disso, novatos na ferramenta SquidGuard podem fazer os testes antes de introduzir a ferramenta em ambiente de produção. 

cenário de testes
cenário de testes

Para esse cenário, utilizamos o VirtualBox. Dessa forma, levantamos duas máquinas virtuais para assumir papeis diferentes. Assim, usamos uma máquina virtual para hospedar o cliente e a outra máquina virtual para hospedar o proxy. 

A máquina virtual do cliente possui apenas uma interface de rede virtualizada e conectada a outra interface de rede na máquina virtual do proxy. Adicionalmente, a máquina virtual do  proxy possui duas interfaces de redes.

Dessa forma, o proxy pode usar uma interface para fazer acesso à Internet e a outra interface para prover conteúdo para o cliente.  

Configurando a máquina virtual do cliente 

Na máquina virtual do cliente utilizamos a rede em modo Internal Network e demos um nome para a rede “RedeInterna”. Dessa forma, essa rede será usada exclusivamente para a comunicação entre a máquina cliente e o proxy. 

MV Client Interface
MV Client Interface

Após a inicialização da máquina cliente, fizemos a configuração do endereço da interface virtualizada. Consequentemente, é importante colocar um IP e máscara que permita que o cliente e o proxy possam se comunicar.

Para isso, utilizamos o IP 192.168.10.2 para o cliente e a máscara /24. Além disso, incluímos o gateway como sendo a interface que será usada pelo proxy. 

Client IP
Client IP

Após a configuração, podemos reiniciar a interface e usar o comando “ip addr “ para verificar se o IP foi atribuído corretamente a interface. 

Client ip addr
Client ip addr

Configurando o proxy no navegador

O próximo passo é a configuração do endereço do proxy no navegador do cliente. Dessa forma, precisamos inserir o IP da interface do proxy que será conectada ao cliente.

Nesse caso, utilizamos o IP 192.168.10.1 para ser utilizado na interface LAN do proxy. Vale destacar que é necessário escolher a porta que o proxy vai aguardar requisições.

Assim, utilizaremos a porta 3128, pois essa será a porta configurada no proxy. 

Client firefox proxy
Client firefox proxy

Configurando a máquina virtual do Proxy

Vamos configurar como modo NAT a primeira interface da máquina virtual do proxy. Dessa forma, o proxy usará essa interface para obter acesso a internet.

Vale ressaltar que nesse cenário virtualizado, o NAT é criado entre a máquina virtual e a máquina real. Portanto, é imprescindível que a máquina real tenha acesso à Internet.  

NAT network
NAT network

Vamos configurar a outra interface da máquina virtual do proxy como Internal Network. Além disso, essa interface deve estar com o mesmo nome da interface configurada no cliente. Portanto, vamos editar o nome para “RedeInterna”. 

internal network
internal network

Ao iniciar a máquina virtual do proxy, devemos atribuir as configurações corretas para cada interface. Para isso, podemos verificar o MAC de cada interface virtual no VirtualBox.

Esse procedimento é apresentado no vídeo anexo. Após verificar os MACs das interfaces, vamos configurar a primeira interface como DHCP. Isso porque essa interface vai obter IP de forma automática pois a interface está em modo NAT no virtualbox.  

A outra interface será configurada de forma manual. Além disso devemos usar o mesmo IP que o cliente está apontando. Em nosso caso, vamos usar o IP 192.168.10.1 e a máscara /24. 

Dessa forma, vamos permitir que o cliente e o proxy possam estabelecer comunicação. Abaixo está o resultado do comando “ifconfig”. Consequentemente, podemos observar que as interfaces foram corretamente configuradas.  

ifconfig
ifconfig

Instalar o SquidGuard

Para instalar o squidguard no Ubuntu podemos usar o apt-get. Além disso, apresentamos uma forma alternativa para aqueles que usam o yum.  

sudo apt-get update​
sudo apt-get upgrade
sudo apt-get install squid​
sudo apt-get install squidguard​

Alternativamente para quem usa yum

yum install squid​
yum install squidGuard​

Configurando o SquidGuard

O primeiro passo é inserir uma linha de configuração no squid.conf. Para isso, vamos editar o arquivo /etc/squid/squid.conf e vamos inserir a linha de configuração.

Como sugestão, podemos criar uma cópia do arquivo squid.conf. Após criada a cópia, podemos apagar o arquivo squid.conf e inserir a configuração abaixo. 

sudo cp /etc/squid/squid.conf /etc/squid/squid.OLD 

sudo nano /etc/squid/squid.conf

Dentro do arquivo squid.conf vamos apagar as configurações prévias e vamos inserir o texto abaixo.

acl Pass_ports port 80 # http​

acl Pass_ports port 443 # https​

## Deny requests to no Pass ports / Nega acesso as portas nao Pass​

http_access deny !Pass_ports​

#porta que o squid vai ouvir / Squid listen port​

http_port 3128​

​

url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf​

​

http_access allow all​

As duas primeiras linhas descrevem as portas que terão permissão para acesso no proxy. Dessa forma, estamos indicando as portas 80 e 443, http e https respectivamente.

Em seguida, fazemos uma ACL para negar acesso http a todas as portas que não sejam as portas 80 e 443 = “http_access deny !Pass_ports”.  

Depois disso, vamos indicar a porta que o proxy vai aguardar comunicação. Nesse caso, optamos por usar a porta 3128.  

Logo depois inserimos a configuração relacionada ao arquivo de configuração do squidguard para isso usamos a configuração url_rewrite_program. Essa configuração indica que o squid deverá obedecer as configurações que estão no squidGuard.conf. 

Finalmente, utilizamos a linha para permitir acesso total com a ACL “http_access allow all”. Dessa forma, nosso arquivo de configuração vai bloquear o que estiver no squidGuard.conf e o que não estiver terá seu acesso automaticamente liberado. 

Criando arquivos para blocklist 

Agora vamos criar os arquivos que terão o papel de bloquear domínios ou URLS ( blocklists ). Para isso, vamos criar um diretório chamado aqui de dalbert dentro de /var/lib/squidguard/db/.

Apesar de usarmos o nome dalbert, podemos usar qualquer outro nome. Vale ressaltar que estamos usando um subdiretório apenas para organizar as listas de bloqueios. 

sudo mkdir -p /var/lib/squidguard/db/dalbert/

Em seguida vamos criar duas blocklists. Assim, a primeira blocklist vai fazer o bloquei por URL e usaremos o nome de “block_url”. Dentro da “block_url” podemos inserir URLs que desejamos bloquear.

Dessa forma apresentamos um exemplo de URL que foi bloqueada durante a gravação do video que gerou esse post.  

sudo nano /var/lib/squidguard/db/dalbert/block_url​

www.google.com​ 

A próxima blocklist criada vai ser usada para bloquear domínios. Assim, daremos o nome para essa blocklist de “block_domain”. Então, dentro dessa blocklist adicionaremos domínios que desejamos bloquear como no exemplo do vídeo.  

sudo gedit /var/lib/squidguard/db/dalbert/block_domain​

facebook.com​

Configurando o squidGuard.conf 

Agora vamos configurar o principal arquivo do squidguard. Assim, vamos comentar as linhas que não formos utilizar e vamos introduzir nossas alterações. 

As linhas abaixo indicam o caminho para a base de dados = “dbhome /var/lib/squidguard/db” e o caminho para os logs do squidguard = “logdir /var/log/squidguard” .

dbhome /var/lib/squidguard/db​
logdir /var/log/squidguard

Em seguida vamos introduzir uma regra antes das ACLs. Essa regra “dest block” será usada para bloquear destinos que estão nos arquivos de blocklist que criamos. 

Desssa forma, precisamos informar a localização desses arquivos. Em nosso caso, como criamos os arquivos de blocklist dentro do diretório dalbert, vamos inserir esse diretório. 

Assim, quando o squidGuard for procurar a base de dados  “dbhome /var/lib/squidguard/db”, também vai procurar dentro do diretório dalbert. 

dest block {​

         domainlist dalbert/block_domain​

         urllist dalbert/block_url​

}

Agora vamos comentar as outras regras de ACLs e vamos permitir apenas a regra default. Assim, vamos incluir na regra default a liberação do tráfego que não seja bloqueado pelas blocklist ou seja “!block”.

Dessa forma, qualquer destino que não esteja na regra “dest block” poderá ser acessado. Vale lembrar que os bloqueios do dominios ou URLs ocorrem porque foram inseridos dentro dos arquivos block_domain e block_url. 

default ACL
default ACL

Abaixo temos o conteudo do arquivo squidGuard.conf .

#
# CONFIG FILE FOR SQUIDGUARD
#
# Caution: do NOT use comments inside { }
#

dbhome /var/lib/squidguard/db
logdir /var/log/squidguard

#
# TIME RULES:
# abbrev for weekdays: 
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat

#time workhours {
#	weekly mtwhf 08:00 - 23:59
#	date *-*-01  08:00 - 23:59
#}

#
# SOURCE ADDRESSES:
#

#src admin {
#	ip  		1.2.3.4  1.2.3.5
#	user		root foo bar
#	within		workhours
#}

#src foo-clients {
#	ip		172.16.2.32-172.16.2.100 172.16.2.100 172.16.2.200
#}

#src bar-clients {
#	ip		172.16.4.0/26
#}

#
# DESTINATION CLASSES:
#
# [see also in file dest-snippet.txt]

#dest good {
#}

#dest local {
#}

#dest porn {
#}

#dest adult {
#	domainlist	BL/adult/domains
#	urllist		BL/adult/urls
#	expressionlist	BL/adult/expressions
#	redirect http://admin.foo.bar.de/cgi-bin/blocked.cgi?#clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u
#}

#
dest block {
	domainlist dalbert/block_domain
	urllist dalbert/block_url
}
# ACL RULES:
#

acl {
	#admin {
	#	pass	 any
	#}

	#foo-clients within workhours {
	#	pass	 good !in-addr !porn any
	#} else {
	#	pass any
	#}

	#bar-clients {
	#	pass	local none
	#}

	default {
		#pass	 local none
		#pass any
		pass !block
		redirect http://admin.foo.bar.de/cgi-bin/blocked.cgi?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u
	}
}

Update da base de dados

Agora vamos fazer a criação ou update da base de dados. Para isso, vamos usar o comando abaixo. 

sudo squidGuard -b -d -C all

Permissão do squid

Em seguida vamos garantir permissão do squid aos arquivos da base de dados. Para isso vamos usar o comando abaixo. 

sudo chown proxy:proxy -R /var/lib/squidguard/db/

Reiniciar o squid

Agora vamos reiniciar o squid para usar as configurações adicionadas. Para isso, vamos usar o comando. 

sudo service squid restart

Verificar logs

Caso tenha erros podemos verificar nos logs. Dessa forma, apresentamos abaixo alguns comandos para verificar os logs.

sudo cat /var/log/squidguard/squidGuard.log​

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

sudo cat /var/log/squid/cache.log | grep Guard

Agora faça os testes no cliente. Veja os testes feitos no vídeo AQUI.

SquidGuard

Juliana Mascarenhas

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

Veja Mais:

Squid: Autenticação de Usuário

Squid Proxy: Filtrar clientes por IP e MAC

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