FreeBSD

2 de dezembro de 2016

Proxy transparente com SQUID no FreeBSD

Mais artigos de »
Escrito por: Leonardo Souza
Tags:

SQUID no FreeBSD

SQUID é um servidor proxy, escrito originalmente para rodar em sistemas operacionais Unix, porém hoje em dia já funciona inclusive em sistemas Windows. Além de recursos como bloqueio de conteúdo ele possui controle de banda e configuração de cache. Neste artigo veremos como configurar o SQUID no FreeBSD.

O SQUID pode ser utilizado com configuração explícita no navegador ou de modo transparente. Na primeira opção é necessário a configuração manual em todos os navegadores que irão utilizar o SQUID como proxy. O inconveniente é que isso pode ser bem trabalhoso dependendo da quantidade de máquinas que utilizarão este serviço, uma vantagem é que é possível utilizar autenticação de usuários. A segunda opção dispensa a configuração manual nos navegadores, porém seu uso com autenticação de usuários causa um certo conflito e pode precisar de softwares de terceiros para funcionar corretamente.




 Neste artigo vamos apresentar a instalação do SQUID no FreeBSD por meio de proxy transparente, dessa forma não será necessário informar nos navegadores qual o host responsável por disponibilizar este serviço na rede. A imagem abaixo mostra como será nossa topologia:

SQUID no FreeBSD

Neste modelo, a internet entra primeiro no servidor que está configurado como proxy e os computadores da rede que precisam acessá-la, terão que “passar” pelo proxy para que consigam.

Explicando o Ambiente

Quando configuramos o navegador da máquina para utilizar um determinado proxy, este navegador saberá onde buscar esta conexão. Por outro lado, quando utilizamos um proxy transparente, não informamos isso no navegador e por este motivo precisaremos que esta conexão seja encaminhada para o proxy.

Na prática, sempre que o computador cliente tentar acessar a internet, ele será encaminhado para o proxy, geralmente por um firewall. Para isso, utilizaremos,  neste artigo, o firewall IPFW, padrão do FreeBSD, ele será o responsável por realizar o encaminhamento.

Configurando o Firewall IPFW

Como explicado antes utilizaremos o IPFW para receber os pacotes com destino a internet e encaminhá-los para o SQUID, através da porta de acesso 3128. Porém o IPFW não vem habilitado por padrão no FreeBSD, por isso precisaremos habilitá-lo. Existem basicamente duas formas de se fazer isso: por meio de módulos do kernel e estaticamente, habilitando-o diretamente no kernel e compilando o kernel posteriormente. Para mais detalhes leia o artigo NAT no FreeBSD.

Vamos habilitar as seguintes opções no kernel do FreeBSD:

opcoes_ipfw

Depois de habilitar estas opções compile o kernel modificado (estou considerando que já leu o artigo que explica como fazê-lo).

Depois de compilar o kernel precisaremos realizar algumas configurações no arquivo /etc/rc.conf. Para isso abra o arquivo com o editor de textos ee com o comando “ee /etc/rc.conf” e insira estas linhas:

rc_conf_natd

E por fim crie o arquivo /etc/natd.conf e insira as seguintes linhas:

natd_conf

Com estas configurações habilitamos o firewall e o NAT no FreeBSD. Agora vamos inserir a regra no IPFW que encaminha o pacote para o SQUID.

Para isso insira a linha:

${fwcmd} add fwd ip_squid,3128 tcp from rede_local to any 80

Exemplo:

${fwcmd} add fwd 175.10.10.1,3128 tcp from 175.10.10.0/24 to any 80

Pronto, finalizamos aqui a preparação para o ambiente SQUID. Agora vamos instalar o SQUID no FreeBSD.

Instalando o SQUID no FreeBSD

Para instalar o SQUID no FreeBSD vamos utilizar a ferramenta pkg, instalando-o por meio de pacotes binários. Para mais detalhes sobre instalação de programas leia nosso artigo instalação de programas no FreeBSD  [link = instalaçaõ de programas no FreeBSD].

Para instalar o SQUID no FreeBSD digite o comando pkg install squid:

#

pkg install squid

SQUID no FreeBSD

Depois de digitar o comando o sistema irá realizar um levantamento de todas as dependências para instalação deste pacote e solicitará a confirmação. Confirme com a tecla Y e tecle ENTER.

Depois deste passo o sistema irá instalar o SQUID no sistema. Concluída a instalação do SQUID no FreeBSD, será necessário digitar o comando:

# squid -z

Este comando cria os diretórios de cache do SQUID.

Configurando o SQUID

O principal arquivo de configuração do SQUID é o /usr/local/etc/squid/squid.conf, nele serão realizadas as configuração permitirão ou bloquearão acessos, definirão existência de logs e cache do sistema. Antes de realizar qualquer configuração vamos analisar algumas das opções presentes neste arquivo.

Opções do squid.conf

http_port: esta opção define a porta em que o SQUID irá receber requisições (e para onde estamos direcionando o fluxo de conexões), por padrão utilizamos a porta 3128. Exemplo:

http_port 3128

visible_hostname: este é o nome do host que será exibido nas mensagens de erro ou bloqueio. Esta opção é obrigatória. Exemplo:

visible_hostname SQUID_FreeBSD

cache_mem: esta opção define a quantidade de memória que será utilizada. Exemplo:

cache_mem 64 MB

access_log: esta opção define o diretório de log de acessos. Exemplo:

access_log /var/log/squid/access.log

cache_log: especifica o diretório relativo a logs comportamento do cache.

cache_log /var/log/squid/cache.log

cache_dir: especifica o diretório onde serão armazenados o cache e define os seguintes parâmetros:

Espaço em MB, por exemplo 100;

Quantidade de diretórios que serão criados, por exemplo, 16;

Quantidade de subdiretórios dentro dos 16 principais, por exemplo, 256.

cache_dir ufs /var/spool/squid 100 16 256

Entendendo ACLs

A função das ACLs é criar objetos que serão manipulados, através de permissões ou bloqueios do proxy. Estes objetos podem ser hosts, urls, portas, horários, etc.

Sintaxe:

acl nome_acl tipo [arquivo| string]

Exemplo:

acl rede_local src 175.10.10.0/24

Os tipos possíveis de ACLs são:

src: utilizada para especificar um determinado host ou rede de origem:

Exemplo:

acl rede_local src 192.168.1.0/24

dst: opção que especifica um determinado host ou rede de destino;

Exemplo:

acl rede_local dst 10.10.10.0/24

dstdomain: opção utilizada para especificar um determinado domínio de destino:

Exemplo:

acl hotmail dstdomain .hotmail.com

port: utilizada para especificar portas:

Exemplo:

acl Safe_ports port 80

dstdom_regex: procura por palavras ou expressão regular:

Exemplo:

acl palavras_bloqueadas dstdom_regex “/usr/local/etc/squid/palavras_bloqueadas”

time: define uma hora e dia da semana. Permite configurações específicas relativas a horários específicos, como por exemplo, liberar acessos durante horário de almoço.

Exemplo:

acl horario_almoço time MTWHF 12:00-13:00

Controle de acesso

O controle de acesso é realizado por meio da opção http_acces e pode ser permitido, por meio da opção “allow”, e bloquear, por meio da opção “deny”.

Sintaxe:

http_access opção nome_da_acl

Exemplo:

http_access allow rede_local

http_access deny rede_local

Sendo assim, precisamos sempre definir a ACL para só depois conseguir manipulá-la, ou seja, liberar ou negar acesso. Vejamos alguns exemplos de uso das ACLs com a opção http_access:

Um bloqueio realizado pela opção http_accss deny é semelhante a seguinte imagem:

SQUID no FreeBSD

Exemplos de uso das ACLs e o http_access

Vamos apresentar alguns exemplos de uso das ACLs e liberação ou bloqueio de acesso por meio da opção http_access:

1 – liberando acesso a rede local:

Vamos criar uma ACL que referencia a rede local 175.10.10.0/24

acl rede_local src 175.10.10.0/24

Agora vamos definir esta rede local como acesso permitido.

http_access allow rede_local

2 – bloqueando acesso a todos os computadores que não fazem parte da rede local:

Vamos definir uma ACL que representa todos os computadores de todas as redes distintas da rede local, já criada anteriormente:

acl all src 0.0.0.0/0.0.0.0

agora vamos definir esta ACL como bloqueada.

http_access deny all

Como o SQUID lê as regras de cima para baixo, se liberarmos a rede local e logo depois bloquearmos a ACL all (todos os outros computador que não fazem parte da rede local), então apenas a rede local possuirá acesso liberado.

3 – liberando acesso ao localhost.

Vamos criar uma ACL que referencia o local host:

acl localhost src 127.0.0.1/255.255.255.255

agora vamos definir esta ACL com acesso liberado

http_access allow localhost

4 – Bloqueando sites específicos:

criando a ACL que referencia um arquivo contendo a lista de sites:

acl sites_bloqueados url_regex “/usr/local/etc/squid/sites_bloqueados”

agora vamos bloquear esta ACL, desta forma todos sites presentes nesta lista serão bloqueados.

http_access deny sites_bloqueados

5 – bloqueando palavras específicas:

Vamos criar uma ACL que referencia um arquivo que contem uma lista de palavras que serão posteriormente bloqueadas.

acl palavras_bloqueadas dstdom_regex “/usr/local/etc/squid/palavras_bloqueadas”

agora vamos bloquear esta ACL, assim todas as plavras presentes nesta lista serão bloqueadas.

http_acces deny palavras_bloqueadas

6 – Liberando acesso total a uma máquina específica

Vamos definir uma ACL chamada diretoria, que vai referenciar o computador da diretoria:

acl diretoria 175.10.10.200/255.255.255.0

 agora vamos liberar o acesso a esta ACL, desta forma este computador terá acesso liberado.

http_access allow diretoria

7 – liberando acesso aos sites bloqueados durante um horário específico

Primeiro vamos criar uma ACL que referencia um horário específico, neste caso o horário de almoço:

acl horario_almoco time 12:00-13:00

agora vamos liberar o acesso aos sites bloqueados, porém apenas para este horário.

http_access allow sites_bloqueados horario_almoco

existem várias opções de configuração e uso das ACLs em conjunto com a opção http_access e várias são suas possibilidade de combinação. Apresentamos apenas algumas delas, use sua imaginação e adapte a sua necessidade.

Mensagens de erro/bloqueio

As mensagens exibidas durante um bloqueio ou erro de acesso, estão disponíveis no diretório /usr/local/etc/squid/errors/pt-br que possui o seguinte conteúdo:

SQUID no FreeBSD

Como podemos ver, o SQUID possui um tipo de mensagem para cada tipo de erro/bloqueio. Estes arquivos são do tipo HTML e por isso são facilmente editáveis. Isso significa que estas mensagens de erro/bloqueio podem ser customizadas de acordo como  seu ambiente, basta para isso utilizar um editor de textos simples.

Exemplo de arquivo squid.conf

http_port 3128 transparent
visible_hostname SQUID_FreeBSD

acl all src all
acl localhost src 127.0.0.1/32
acl localnet src 172.20.20.0/24
acl sites_bloqueados url_regex “/usr/local/etc/squid/sites_bloqueados”
acl palavras_bloqueadas dstdom_regex “/usr/local/etc/squid/palavras_bloqueadas”

http_access allow localhost
http_access deny sites_bloqueados
http_access deny palavras_bloqueadas
http_access allow localnet
http_access deny all

cache_mem 512 MB
maximum_object_size_in_memory 4 MB
access_log /var/log/squid/squid.log/
cache_dir ufs /var/squid/cache 100 16 256
coredump_dir /var/squid/cache
error_directory /usr/local/etc/squid/errors/pt-br/

Várias são as possibilidades de uso do SQUID como proxy, neste artigo definimos como escopo um proxy transparente, porém existem outras formas de implementação do SQUID no FreeBSD.

Considerações Finais

Com estas configurações seu SQUID já estará totalmente funcional, incluindo liberações e bloqueios. Se desejar visualizar os LOGs do SQUID através de relatórios poderá utilizar a ferramentar SARG.

Esta ferramenta está disponível através do port /usr/ports/www/sarg ou utilizando a ferramenta pkg, por meio do comando “pkg install sarg“. Poucas são as configurações necessárias, mas isso já é assunto para outro artigo.






Sobre o Autor

Foto de perfil de Leonardo Souza
Leonardo Souza
Bacharel em Informática, pós graduado em Segurança de Redes de Computadores e analista de Segurança da Informação. Entusiasta de Segurança da Informação e usuário FreeBSD, porém sem xiismo.




0 Comments


Seja o Primeiro a Comentar!


You must be logged in to post a comment.