Controle de acesso à internet com Squid – Mais um artigo publicado no VivaoLinux

Olá ! Hoje meu artigo sobre controle de acesso à internet com o Proxy Squid foi publicado: http://www.vivaolinux.com.br/artigo/Controle-de-acesso-a-internet-com-Squid/

Nosso cenário

Neste tutorial iremos utilizar a distribuição CentOS, versão 5.5, conforme abaixo:

Servidor:

  • hostname: centos.laboratorio
  • IP: 192.168.100.70/24
  • Porta do Squid: 3128

Nosso controle de acesso:

Primeiramente criaremos uma ACL com sites que sempre serão liberados, estes sites serão liberados para toda a rede, como sites do governo , atualização de anti-vírus, Windows update etc. Também criaremos uma ACL de sites que SEMPRE serão BLOQUEADOS, todos os usuários irão passar por esse controle, onde você pode bloquear pornografia, redes sociais etc.

Teremos 3 grupos de acesso primários:

  • ACESSO TOTAL: Os usuários neste grupo terão acesso liberado, EXCETO ao conteúdo que estiver bloqueado na lista de SEMPRE BLOQUEADOS.
  • ACESSO CONTROLADO: Estes usuários acessam o conteúdo da lista SEMPRE LIBERADO e uma segunda lista criada para este grupo.
  • SEM ACESSO: Os usuários podem somente utilizar o conteúdo liberado na lista SEMPRE LIBERADO, afinal precisamos permitir que o usuário efetue atualizações do Windows, Anti-vírus, acesse sua conta corrente, extrato de imposto de renda,etc..

Grupo secundário de acesso:

Os usuários deste grupo podem estar em qualquer grupo primário, por exemplo, podemos liberar a navegação para um usuário e não permitir que o mesmo tenha acesso ao MSN.

  • SEM MSN: Usuários que não terão acesso ao MSN

 

Outros recursos

Iremos configurar o Squid para forçar cache das atualizações efetuadas pelo Windows Update e de ferramentas anti-vírus (eu testei: Avira, Symantec e Avast, se fizerem a configuração com outro produto agradeço se compartilharem !!). Devemos estar cientes que ao aumentar o tamanho do cache iremos perder em desempenho, porém economizaremos banda.

As possibilidades com o Squid são imensas, é possível utilizar autenticação em um PDC (samba), Active Directory, Openldap, MySQL ou até mesmo controlar o acesso por endereço IP ou MAC.

Com este artigo procuro passar o conhecimento para inicial para compartilhamento e controle de Internet com o Squid, espero que você consiga migrar essa configuração para outras formas de autenticação e criar suas próprias regras.

Configuração inicial e controle por IP

Após instalar o sistema operacional, vamos instalar o Squid:

(Execute esse procedimento em ambas as configurações, se for utilizar controle por IP ou usuário)

# yum install squid

Após o Squid ser instalado, o arquivo de configuração estará no diretório /etc/squid, entre nesse diretório e inicie a configuração do Squid:

# cd /etc/squid
# mv squid.conf squid.conf.original

Nesse primeiro exemplo vamos utilizar a configuração vamos utilizar o controle por endereço IP, crie o arquivo de configuração (squid.conf) desta forma:

acl manager proto cache_object
acl localhost src 127.0.0.1/32

# Porta para squid escutar
http_port 192.168.100.70:3128 #Substitua pelo endereço IP do seu servidor

#Configuracao de gerenciamento de cache
cache_mem 128 MB #altere conforme a capacidade da sua maquina
maximum_object_size 100 MB #Esta diretiva informa o tamanho maximo do objeto quer sera salvo em cache, ajuste conforme sua necessidade
maximum_object_size_in_memory 8 KB #Tamanho maximo do objeto em cache que pode ser armazenado na memória ram

#Locais para armazenamento do cache
#Ajuste conforme as suas necessidades
cache_dir aufs /var/spool/squid/cache1 3000 64 256
cache_dir aufs /var/spool/squid/cache2 3000 64 256
cache_dir aufs /var/spool/squid/cache3 3000 64 256

#Portas aceitas para navegacao
acl SSL_ports port 443
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

http_access allow manager localhost
http_access deny manager

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

#Cache windowsupdate
refresh_pattern windowsupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern http://www.download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern http://www.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims
refresh_pattern download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims
refresh_pattern http://www.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims

#Cache atulizacao avira
refresh_pattern personal.avira-update.com/.*\.(cab|exe|dll|msi|gz) 10080 100% 43200 reload-into-ims

#Cache atualizacao symantec
refresh_pattern liveupdate.symantecliveupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern symantecliveupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims

#Cache avast
refresh_pattern avast.com/.*\.(vpu|cab|stamp|exe) 10080 100% 43200 reload-into-ims

#
# REGRAS PERSONALIZADAS
# CRIADO POR FABIO SOARES SCHMIDT – fabio@improve.inf.br
#

#Estacoes da rede local
acl redegeral src “/etc/squid/estacoes/redegeral.txt”

#Usuarios com acesso bloqueado
#Acessam somente o conteudo da regra sempreliberados
acl semacesso src “/etc/squid/estacoes/semacesso.txt”

#Usuarios com acesso controlado
#Acessam somente o conteudo da regra sempre liberados e a lista criada para este grupo
acl acessocontrolado src “/etc/squid/estacoes/acessocontrolado.txt”

#Usuarios com acesso total, EXCETO sites de conteudo indesejado
acl acessototal src “/etc/squid/estacoes/acessototal.txt”

#Sites liberados para TODOS
acl sempreliberados url_regex “/etc/squid/sites/sempreliberados.txt”

#Sites liberados para usuarios com acesso controlado
acl sitesliberados url_regex “/etc/squid/sites/sitesliberados.txt”

#Sites bloqueados para TODOS, com conteudo indesejado
acl bloqueados url_regex “/etc/squid/sites/bloqueados.txt”

##Controle do MSN
acl msnmessenger url_regex -i gateway/gateway.dll? login.live.com
acl MSN rep_mime_type -i ^application/x-msn-messenger$
acl webmsn url_regex “/etc/squid/sites/webmsn.txt” #Sites de acesso ao msn

#Estações sem acesso ao msn
acl semsn src “/etc/squid/estacoes/semmsn.txt”

#Aplicação das regras MSN
http_access deny semmsn MSN
http_access deny semmsn msnmessenger
http_access deny semmsn webmsn

##APLICAÇÃO DAS REGRAS

#Libera sites que serao sempre liberados para toda a rede
http_access allow redegeral sempreliberados

#Nega acesso ao sites de conteudo indeseajado
http_access deny bloqueados

#Nega usuarios sem acesso
http_access deny semacesso

#Libera sites para os usuarios de acesso controlado
http_access allow acessocontrolado sitesliberados

#Fecha o acesso para usuarios de acesso controlado
http_access deny acessocontrolado

#Libera acesso para usuarios com todos sites liberados, excetos sites de conteudo indesejado
http_access allow acessototal

#Nega qualquer acesso que nao se encaixar nas regra acima
http_access deny all

Controle de acessos por usuário

Neste exemplo vamos utilizar a configuração por usuário utilizando a autenticação com NCSA_AUTH, crie o arquivo de configuração (squid.conf) conforme abaixo:

acl manager proto cache_object
acl localhost src 127.0.0.1/32

# METODO DE AUTENTICACAO: NCSA_AUTH
# O diretorio padrao dos plugins de autenticacao no CENTOS ficam no diretorio abaixo
# caso utilize outra distribuicao modifique o caminho
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/usuarios/passwd
auth_param basic children 5
#Mensagem quer sera exibida ao usuario no navegador
auth_param basic realm Acesso restrito – Digite seu Login

# Porta para squid escutar
http_port 192.168.100.70:3128 #Substitua pelo IP do seu servidor

#Configuracao de gerenciamento de cache
cache_mem 128 MB #altere conforme a capacidade da sua maquina
maximum_object_size 100 MB #Esta diretiva informa o tamanho máximo do objeto quer será salvo em cache, ajuste conforme sua necessidade
maximum_object_size_in_memory 100 KB #Tamanho máximo do objeto em cache que pode ser armazenado na memória ram

#Locais para armazenamento do cache
#Ajuste conforme as suas necessidades
cache_dir aufs /var/spool/squid/cache1 3000 64 256
cache_dir aufs /var/spool/squid/cache2 3000 64 256
cache_dir aufs /var/spool/squid/cache3 3000 64 256

#Portas aceitas para navegacao
acl SSL_ports port 443
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

ttp_access allow manager localhost
http_access deny manager

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

#Cache windowsupdate
refresh_pattern windowsupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern http://www.download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern http://www.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims
refresh_pattern download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims
refresh_pattern http://www.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims

#Cache atulizacao avira
refresh_pattern personal.avira-update.com/.*\.(cab|exe|dll|msi|gz) 10080 100% 43200 reload-into-ims

#Cache atualizacao symantec
refresh_pattern liveupdate.symantecliveupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern symantecliveupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims

#Cache avast
refresh_pattern avast.com/.*\.(vpu|cab|stamp|exe) 10080 100% 43200 reload-into-ims

# REGRAS PERSONALIZADAS
# CRIADO POR FABIO SOARES SCHMIDT – fabio@improve.inf.br
#

#Estacoes da rede local
acl redegeral src “/etc/squid/estacoes/redegeral.txt”

#Usuarios com acesso bloqueado
#Acessam somente o conteudo da regra sempreliberados
acl semacesso proxy_auth “/etc/squid/estacoes/semacesso.txt”

#Usuarios com acesso controlado
#Acessam somente o conteudo da regra sempre liberados e a lista criada para este grupo
acl acessocontrolado proxy_auth “/etc/squid/estacoes/acessocontrolado.txt”

#Usuarios com acesso total, EXCETO sites de conteudo indesejado
acl acessototal proxy_auth “/etc/squid/estacoes/acessototal.txt”

#Sites liberados para TODOS
acl sempreliberados url_regex “/etc/squid/sites/sempreliberados.txt”

#Sites liberados para usuarios com acesso controlado
acl sitesliberados url_regex “/etc/squid/sites/sitesliberados.txt”

#Sites bloqueados para TODOS, com conteudo indesejado
acl bloqueados url_regex “/etc/squid/sites/bloqueados.txt”

##Controle do MSN
acl msnmessenger url_regex -i gateway/gateway.dll? login.live.com
acl MSN rep_mime_type -i ^application/x-msn-messenger$
acl webmsn url_regex “/etc/squid/sites/webmsn.txt” #Sites de acesso ao msn

#Estações sem acesso ao msn
acl semsn proxy_auth “/etc/squid/estacoes/semmsn.txt”

#Aplicação das regras MSN
http_access deny semmsn MSN
http_access deny semmsn msnmessenger
http_access deny semmsn webmsn

##APLICAÇÃO DAS REGRAS

#Exige autenticacao
acl autenticacao proxy_auth REQUIRED

#Libera sites que serao sempre liberados para toda a rede
http_access allow redegeral sempreliberados

#Nega acesso ao sites de conteudo indeseajado
http_access deny bloqueados

#Nega usuarios sem acesso
http_access deny semacesso

#Libera sites para os usuarios de acesso controlado
http_access allow acessocontrolado sitesliberados

#Fecha o acesso para usuarios de acesso controlado
http_access deny acessocontrolado

#Libera acesso para usuarios com todos sites liberados, excetos sites de conteudo indesejado
http_access allow acessototal

#Nega qualquer acesso que nao se encaixar nas regra acima
http_access deny all

Criando os arquivos para controle de acesso

amos criar os arquivos onde iremos definir o controle de acesso:

(Os mesmos arquivos serão utilizados para controle por endereço IP ou usuário, portanto o procedimento é o mesmo para ambas as configurações)

# mkdir /etc/squid/estacoes
# mkdir /etc/squid/sites
# cd /etc/squid/estacoes
# touch redegeral.txt semacesso.txt acessocontrolado.txt acessototal.txt sempreliberados.txt semmsn.txt
# cd /etc/squid/sites
# touch sempreliberados.txt sitesliberados.txt bloqueados.txt webmsn.txt

Feito isso, edite o arquivo redegeral.txt e adicione a sua rede, conforme o exemplo abaixo:

(Se tiver mais de uma faixa, adicione o endereço em cada linha)

192.168.100.0/24

Agora você pode editar os arquivos com os sites bloqueados, liberados etc e determinar quais usuários estarão em cada grupo. Como estamos utilizando a configuração para controle por acesso IP, basta adicionar o IP da estação em cada linha no grupo desejado:

# vim /etc/squid/estacoes/acessototal.txt

192.168.100.1 #Fulano
192.168.100.2 #Beltrano

# vim /etc/squid/estacoes/semacesso.txt

192.168.100.3 #Sicrano

Segue também um exemplo de lista de bloqueio de sites para acesso ao msn (/etc/squid/sites/webmsn.txt):

webmessenger.msn.com
msn2go.com
phonefox.com
e-messenger.net
meebo.com

Em ambas as configurações precisamos criar os diretório de cache do Squid antes de iniciar o serviço do mesmo:

# squid -z

Após executar a criação do cache, inicie o serviço:

# service squid start

Neste momento, se você conseguiu criar os diretórios de cache e inicializar os serviços, o seu servidor proxy já está funcionando, bastando efetuar a configuração no navegador das estações, podendo automatizar isso através de um servidor DNS ou DHCP, ou utilizar proxy transparante (para controle por IP). Para editar os arquivos de sites ou estações você pode utilizar o vi mesmo, cada entrada deve ser adicionada em uma linha.

Como utilizei o filtro url_regex para os sites, ele procura a palavra no endereço. Portanto, se você editar o arquivo com a palavra orkut, ele irá bloquear orkut.com, orkut.com.br etc. Você pode bloquear o endereço globo.com e liberar gazetaonline.globo.com por exemplo.

Obs.:

  • Se o usuário não estiver em nenhum dos grupos ele terá as mesmas permissões do grupo “semacesso”;
  • Se o mesmo endereço estiver na lista de bloqueados e permitidos a liberação prevalecerá;
  • No arquivo de configuração foram criados 3 diretórios para cache com limite de 3GB cada, altere isso conforme a sua necessidade, se você quiser criar mais diretórios apenas adicione a linha no squid.conf e execute o comando para criação do cache novamente.

 

acl manager proto cache_object
acl localhost src 127.0.0.1/32

# Porta para squid escutar
http_port 192.168.100.70:3128 #Substitua pelo endereço IP do seu servidor

#Configuracao de gerenciamento de cache
cache_mem 128 MB #altere conforme a capacidade da sua maquina
maximum_object_size 100 MB #Esta diretiva informa o tamanho maximo do objeto quer sera salvo em cache, ajuste conforme sua necessidade
maximum_object_size_in_memory 8 KB #Tamanho maximo do objeto em cache que pode ser armazenado na memória ram

#Locais para armazenamento do cache
#Ajuste conforme as suas necessidades
cache_dir aufs /var/spool/squid/cache1 3000 64 256
cache_dir aufs /var/spool/squid/cache2 3000 64 256
cache_dir aufs /var/spool/squid/cache3 3000 64 256

#Portas aceitas para navegacao
acl SSL_ports port 443
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

http_access allow manager localhost
http_access deny manager

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

#Cache windowsupdate
refresh_pattern windowsupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern http://www.download.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern http://www.microsoft.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims
refresh_pattern download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims
refresh_pattern http://www.download.windowsupdate.com/.*\.(cab|exe|dll|msi) 4320 100% 43200 reload-into-ims

#Cache atulizacao avira
refresh_pattern personal.avira-update.com/.*\.(cab|exe|dll|msi|gz) 10080 100% 43200 reload-into-ims

#Cache atualizacao symantec
refresh_pattern liveupdate.symantecliveupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims
refresh_pattern symantecliveupdate.com/.*\.(cab|exe|dll|msi) 10080 100% 43200 reload-into-ims

#Cache avast
refresh_pattern avast.com/.*\.(vpu|cab|stamp|exe) 10080 100% 43200 reload-into-ims

#
# REGRAS PERSONALIZADAS
# CRIADO POR FABIO SOARES SCHMIDT – fabio@improve.inf.br
#

#Estacoes da rede local
acl redegeral src “/etc/squid/estacoes/redegeral.txt”

#Usuarios com acesso bloqueado
#Acessam somente o conteudo da regra sempreliberados
acl semacesso src “/etc/squid/estacoes/semacesso.txt”

#Usuarios com acesso controlado
#Acessam somente o conteudo da regra sempre liberados e a lista criada para este grupo
acl acessocontrolado src “/etc/squid/estacoes/acessocontrolado.txt”

#Usuarios com acesso total, EXCETO sites de conteudo indesejado
acl acessototal src “/etc/squid/estacoes/acessototal.txt”

#Sites liberados para TODOS
acl sempreliberados url_regex “/etc/squid/sites/sempreliberados.txt”

#Sites liberados para usuarios com acesso controlado
acl sitesliberados url_regex “/etc/squid/sites/sitesliberados.txt”

#Sites bloqueados para TODOS, com conteudo indesejado
acl bloqueados url_regex “/etc/squid/sites/bloqueados.txt”

##Controle do MSN
acl msnmessenger url_regex -i gateway/gateway.dll? login.live.com
acl MSN rep_mime_type -i ^application/x-msn-messenger$
acl webmsn url_regex “/etc/squid/sites/webmsn.txt” #Sites de acesso ao msn

#Estações sem acesso ao msn
acl semsn src “/etc/squid/estacoes/semmsn.txt”

#Aplicação das regras MSN
http_access deny semmsn MSN
http_access deny semmsn msnmessenger
http_access deny semmsn webmsn

##APLICAÇÃO DAS REGRAS

#Libera sites que serao sempre liberados para toda a rede
http_access allow redegeral sempreliberados

#Nega acesso ao sites de conteudo indeseajado
http_access deny bloqueados

#Nega usuarios sem acesso
http_access deny semacesso

#Libera sites para os usuarios de acesso controlado
http_access allow acessocontrolado sitesliberados

#Fecha o acesso para usuarios de acesso controlado
http_access deny acessocontrolado

#Libera acesso para usuarios com todos sites liberados, excetos sites de conteudo indesejado
http_access allow acessototal

#Nega qualquer acesso que nao se encaixar nas regra acima
http_access deny all

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s