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.
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.
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.
Livros Indicados:
E-Books de Redes e Segurança
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.
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.
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.
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.
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.
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”.
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.
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.
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.
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.
SSH: Como criar chave pública
Nesse tutorial vamos ensinar a criar e configurar o acesso a um servidor SSH usando…
Socket em Python criando chat UDP
Tutorial para a criação de um chat simples utilizando sockets em UDP em Python 3….
Socket em Python, criando um Chat
Tutorial para a criação de um chat simples utilizando sockets TCP em Python 3. O…
Como usar apt get com proxy
Ao longo dos tempos sempre me deparo nos laboratórios de rede com a necessidade de…
Qual a melhor IDE para Python?
Encontrar a IDE perfeita é uma jornada pessoal que depende de vários fatores, como suas…