HAVP – uma ótima solução livre para proxy e antivírus

Sou altamente adepto de soluções livres para resolução de problemas.

Soluções comerciais em geral são caixinhas pretas que às vezes, nem mesmo o seu suporte ou revendedor, vão saber explicar com detalhes tudo que pode acontecer ou não com o produto.

As solucões livres já são bem diferentes. Por terem seu código ali, aberto, é só ter um pouco de curiosidade e fuçar até descobrir como funciona e o que você pode fazer com.

A muito tempo venho procurando, para trabalhar em paralelo com o Squid, uma solução de anti vírus. Seria interessante ter algo que fizesse uma varredura do arquivo, antes de chegar ao usuário e, caso ele contivesse algum malware, fosse intantaneamente negado o download, seguido de um aviso.

Este processo, seria mais ou menos, como o processo feito pela maioria dos anti spams do mercado. Se, o arquivo que o email contém é um malware, instantaneamente, ele é parado e o usuário não o recebe.

HAVP
O HAVP é mais ou menos isto. Tive contato com ele, na Linux Magazine número 24, onde Charly Kühnast, falava sobre ele, mostrando o quanto um proxy antivírus pode resolver problemas.

No cenário que ele apresentou, um amigo, ao acessar uma página, teve falhas de seu browser sendo exploradas a partir de códigos nocivos contido na mesma.

O SQUID, solução praticamente única no mundo livre, para proxy, até contém filtros deste tipo (de terceiros ), como o Viralator, mas ele gera muita carga na máquina e não atende plenamente o que precisa ser feito. Ou seja, você ganharia um pepino a mais, pois teria um programa exterior gerando altas cargas no seu servidor.
De cara, o HAVP não havia chamado plenamente minha atenção, porque eu via ele literalmente como um proxy para estações de trabalho. Mas, um belo dia, uma idéia veio e eu digitei no pai Google, squid + havp.

Não é que me apareceu uma ótima solução , em que o HAVP trabalha com parent proxy do SQUID ?

Correndo contra o tempo, porque usuário é sempre um problema neste caso, implementei em um servidor que administro, a solução.

Não foi grandemente difícil, e quem já implementou um parent proxy, possivelmente não vai ter muitos problemas.

Você deve ter no sistema, instalado, o clamav ou outro ANTI VÍRUS. Se não me engano ele suporta qualquer anti vírus que tenha suporte a linha de comando, inclusive o TREND MICRO.

Coloco um parentêsis em referência a este, pois a Trend possui um produto, o IWSS, que tem praticamente a mesma função que o HAVP.

Na realidade, o IWSS, faz um parent proxy com o SQUID e filtra/escaneia todo conteúdo que seus usuários vão tentar acessar.

O produto é bom, e vale seu preço. Mas, para muita gente, pagar por um produto proprietário, não é interessante, o HAVP está aí, pronto para ser usado ( até porque o HAVP atende muito bem na maioria dos quesitos que eu testei ).
A compilação, caso você baixe o HAVP dos fontes, é do seguinte modo :

# ./configure –prefix=/usr –sysconfdir=/etc/havp
# make && make install

Outra manha legal. Para te forçar a ler os fontes, o criador do HAVP, colocou no havp.conf a seguinte linha que deve ser comentada ou deletada :

REMOVETHISLINE deleteme

A priori, não há grandes dificuldades para colocar o havp para rodar. No Slackware, onde instalei, foi preciso criar o grupo e o usuário havp :

# groupadd havp
# useradd -g havp -s /bin/false havp
O resto da configuração, eu mantive no padrão. O que você pode fazer é aumentar ou diminuir a quantidade de daemons abertos por padrão, caso ache exagerado para o seu tamanho de rede :

SERVERNUMBER 8
MAXSERVERS 100

Crie os diretórios :

# mkdir /var/log/havp
# chown -R havp:havp /var/log/havp

e

# mkdir /var/tmp/havp
# chown -R havp:havp /var/tmp/havp

Quando você tentar subir o havp, ele vai dar o grito referente ao seguinte problema.

Filesystem not supporting mandatory locks!
On Linux, you need to mount filesystem with “-o mand”

Que você vai resolver do modo mais fácil do mundo. Edite o seu fstab e adicione o parâmetro mand a montagem do seu filesystem que contém o /var/tmp/havp :

/dev/hda4 / reiserfs defaults,mand 1 1

Depois, remonte o sistema com :

# mount -o remount /

E está resolvido.

No Slackware, é fácil de resolver o problema também referente a inicialização do havp. Copie o exemplo de inicializador que está no pacote .tar.gz que você baixou, ou pegue este aqui mesmo que eu deixei disponível, já com as edições necessárias para rodar no Slackware.
Por fim, é se preocupar agora com o SQUID. Na realidade, você vai adicionar/editar duas linhas principais no seu squid.conf :

icp_port 0

Que é a linha de comunicação entre o seu proxy e o “parent” mais próximo dele e a linha :

cache_peer localhost parent 8080 0 no-query no-digest no-netdb-exchange default

Que literalmente diz ao SQUID, quem é realmente o parente dele 🙂

Depois, é só ver o que está rolando nos logs do seu squid e nos logs do HAVP.

A ferramenta é bem legal e interessante, e a solução apresentada está se comportando muito bem em uma rede pequena ( por volta de 100 computadores ) em uma máquina ATHLON XP 2400 com 512M de RAM.

Não deve em nada a soluções comerciais e pode ser uma ótima dica para quem está precisando de um proxy anti vírus. O tutorial foi bem rápido, mas acho que já ajuda quem está realmente precisando de instalar o proxy … com o tempo, se o ânimo rolar … vou realmente colocar um bom tutorial na parte de textos do blog 🙂