Neste artigo será abordada a implementação de um sistema de filtro de conteúdo de modo a proteger os usuários de páginas maliciosas, com vírus ou conteúdo impróprio. Será tratada a instalação em um Slackware 10.2, mas como instalaremos todos os pacotes necessários a partir do fonte, esse artigo pode ser facilmente adaptado à outras distribuições.
Vamos alterar o arquivo squid.conf para tornar o Squid um servidor de proxy transparente (não está no escopo deste howto a abordagem da configuração detalhada do Squid, bem como suas ACLs, isso será assunto para outro artigo).
# vi /etc/squid/squid.conf
# nenhuma interface de rede irá ter acesso ao proxy, somente o
# dansguardian vai fazer isso
http_port 127.0.0.1:3128
# configuração de cache conforme a necessidade e disponibilidade
# de cada um, no meu caso ficou assim:
cache_dir ufs /var/spool/squid 4096 16 256
visible_hostname firewall # altere para o seu netbios name
# na sessão access control
#http_access deny all
http_access allow all
# para habilitar o proxy transparente
httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
# fazer com que o squid rode como usuário e não como root
cache_effective_user squid
cache_effective_group squid
Pronto. Feche o arquivo e salve suas alterações.
Para que o Squid rode com esse usuário e grupo precisamos criá-lo:
case "$1" in
'start')
squid_start
;;
'stop')
squid_stop
;;
'restart')
squid_restart
;;
*)
echo "usage $0 start|stop|restart"
esac
Dê permissão de execução ao arquivo:
# chmod +x /etc/rc.d/rc.squid
Inicie o Squid com o seguinte comando:
# /etc/rc.d/rc.squid start
Pronto, seu Squid já está configurado de forma básica a atender as necessidades de nossa solução.
Para conferir se está tudo certo com o Squid e o mesmo está rodando, faça o seguinte:
# ps aux | grep squid
root 10076 0.0 2.0 4296 1236 ? Ss 21:23 0:00 /usr/local/sbin/squid -D
squid 10078 0.0 7.5 6688 4632 ? S 21:23 0:02 (squid) -D
Caso a saída do comando acima não seja semelhante a do exemplo, reveja o howto do começo novamente para ver onde você errou antes de passar adiante com a configuração.
[1] Comentário enviado por herloncamargo em 27/09/2006 - 09:35h
Oi Márcio,
Muito bom seu artigo.
Pessoal, alguém já usou ou testou o Dansguardian e o Squidguard, e que poderia fazer um paralelo dos dois, principalmente em termos de desempenho? Tenho que implantar um dos dois numa rede. Eu só testei o Squidguard e funcionou normalmente, com bom desempenho. Mas o projeto dele parece que está meio parado, além dele ter menos recursos extras do que o Dansguardian.
[2] Comentário enviado por removido em 27/09/2006 - 10:25h
Uso o squid e Dansguardian num celeron 466 com 188MB de RAM e não senti nada de anormal até hoje.
Se vc terá um computador com um processador decente e boa quantidade de RAM, não terá problemas também...
=======================
Só uma pequena correção: o squid deverá ser iniciado com a string squid -D pois se esquecerem do "-D" ele ficará procurando servidor de DNS e nãoinicializa (pelo que me recordo do slack que usei como servidor) e a opção -D justamente permitirá a inicialização do squid semconexão à internet.
[4] Comentário enviado por memaster em 27/09/2006 - 12:58h
Obrigado a todos pelo crédito ao artigo, estou disposto a sanar quaisquer dúvidas com relação ao mesmo. Quando ao comentário do nosso amigo acvsilva, gostaria de que desse mais uma olhada no arquivo rc.squid, o qual passo no artigo como sendo o responsável pela inicialização do squid, e no qual é utilizada a opção "-D", mesmo assim agradeço a observação. vlw a todos.
[5] Comentário enviado por jcg.gava em 27/09/2006 - 22:51h
Boa noite Galera.
Cara você fez um how-to muito excelente !... adorei, e vou implementa-lo a um servidor da empresa que estou trabalhando. Obrigado. E continuemos assim =) ...
[6] Comentário enviado por tpramos em 28/09/2006 - 11:28h
Nussa até que enfim achei outra pessoa que usa o dansguardian...
Esse software é muito bom para controle de conteudo.. e a cada mês eles acrescentam novas funcionalidades...
Parabéns pelo artigo...
[7] Comentário enviado por nick em 28/09/2006 - 14:40h
OI Marcio!
Tudo correeu normalmente aki, até a hora de compilar o Dansguardian. POrem, na hora do "make", deu esse pau doido aki.
g++ -o dansguardian -O2 -DPROXYUSER=\"squid\" -DCONFFILELOCATION=\"/etc/dansguardian/dansguardian.conf\" -lz -I/usr/local/include -pthread ClamAV.o VirusEngine.o VirusScanner.o TrickleHandler.o String.o OptionContainer.o FDTunnel.o ConnectionHandler.o DataBuffer.o HTTPHeader.o NaughtyFilter.o RegExp.o Socket.o FatController.o UDSocket.o SysV.o ListContainer.o Ident.o HTMLTemplate.o LanguageContainer.o DynamicURLList.o ImageContainer.o FOptionContainer.o ListManager.o md5.o -pthread -L/usr/local/lib -lesmtp -ldl /usr/lib/libz.a dansguardian.cpp
ClamAV.o(.text+0x14): In function `ClamEngine::loadEngine()':
: undefined reference to `cl_retdbdir'
ClamAV.o(.text+0x30): In function `ClamEngine::loadEngine()':
: undefined reference to `cl_loaddbdir'
ClamAV.o(.text+0x42): In function `ClamEngine::loadEngine()':
: undefined reference to `cl_perror'
ClamAV.o(.text+0x78): In function `ClamEngine::loadEngine()':
: undefined reference to `cl_build'
ClamAV.o(.text+0x80): In function `ClamEngine::loadEngine()':
: undefined reference to `cl_statfree'
ClamAV.o(.text+0x89): In function `ClamEngine::loadEngine()':
: undefined reference to `cl_statinidir'
ClamAV.o(.text+0xb9): In function `ClamEngine::loadEngine()':
: undefined reference to `cl_free'
ClamAV.o(.text+0xdc): In function `ClamEngine::reloadEngine()':
: undefined reference to `cl_statchkdir'
ClamAV.o(.text+0x151): In function `ClamEngine::scanFile(char const*)':
: undefined reference to `cl_scanfile'
ClamAV.o(.text+0x176): In function `ClamEngine::scanFile(char const*)':
: undefined reference to `cl_strerror'
collect2: ld returned 1 exit status
make: *** [all] Error 1
[root@fw dansguardian-2.8.0.6-antivirus-6.4.4]#
[9] Comentário enviado por rjacomel em 28/09/2006 - 17:12h
Excelente artigo!
Uma sugestão: CUIDADO com o comando "chmod -R 777 /var/run" durante a instalação do Dansguardian. Testei no Debian e verifiquei que ele faz um estrago grande na execução de alguns serviços (SSH por exemplo!). No Debian este comando NÃO é necessário.
[10] Comentário enviado por memaster em 28/09/2006 - 21:43h
Caro nick, com relação ao seu erro na compilação do DG, queria que vc me confirmasse se executou a compilação e instalação da libesmtp, conforme descreve o passo 4, se apareceu algum erro nesse ponto da instalação, e se vc rodou o ldconfig depois dessa instalação antes de compilar o DG. Note que os erros começam do ponto onde eh vinculada a libesmtp. Caso isso tenha sido feito da forma como foi dito, e se mesmo assim o problema persiste, ou se por acaso vc jah tenha resolvido o problema, por favor nos comunique.
[11] Comentário enviado por jcg.gava em 04/10/2006 - 13:07h
Olá pessoal estou com um problema. Fiz tudo como estava no how-to... Chegou na hora de criar o cache do squid:
/usr/sbin/squid -f /etc/squid/squid.conf -z
ele apontou este erro:
2006/10/04 10:06:16| Creating Swap Directories
FATAL: Failed to make swap directory /var/spool/squid: (13) Permission denied
Squid Cache (Version 2.5.STABLE12): Terminated abnormally.
CPU Usage: 0.000 seconds = 0.000 user + 0.000 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 7
[13] Comentário enviado por demattos em 08/10/2006 - 18:11h
Muito bom este artigo veio a ajudar muito no processo de controle de acesso a conteudo maliciose e virus q andam pela net, vou aplicar este artigo e ver como se comporta
Valeu
[14] Comentário enviado por linuxbeginner em 14/10/2006 - 10:06h
Estou com o mesmo problema do nick. Mas devido a um erro que ocorre na compilação do DG e que não consegui resolver mesmo editando o configure e apontando para a pasta correta. O erro na compilação é o seguinte...
Generating platform specific Makefile...
With AV engine: clamav
Package libclamav was not found in the pkg-config search path.
Perhaps you should add the directory containing `libclamav.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libclamav' found
O meu libclamav.pc está em /usr/local/clamav/lib/pkgconfig/
Nessas opções vc está dizendo ao squid para trabalhar com Portugues ao inves de inglês, que seria o default, procure no /etc/squid/squid.conf pela seguinte linha:
[17] Comentário enviado por memaster em 19/10/2006 - 20:39h
Olá linuxbeginner, muito obrigado pelo elogio, mais sempre falta algo, naum sou perfeito, mais tento melhorar sempre, apesar da demora se vc ainda estiver com esse problema tente criar o seguinte symlink:
[19] Comentário enviado por jcg.gava em 10/11/2006 - 17:09h
Boa tarde memaster.. blz velho ?
seguinte segui todos os passo, tudo funcionou desta vez =) sem mais problemas =) ... só que tive um problema ao iniciar o CLAMAV e o DANSGUARDIAN...
A mensagem que o CLAMAV apresentou foi esta:
LibClamAV Warning: ********************************************************
LibClamAV Warning: *** This version of the ClamAV engine is outdated. ***
LibClamAV Warning: *** DON'T PANIC! Read http://www.clamav.net/faq.html ***
LibClamAV Warning: ********************************************************
[20] Comentário enviado por memaster em 12/11/2006 - 00:32h
olá JulioPhnX, quanto a mensagem do ClamAV eh soh um alerta sobre a versão instalada, instale a versão atual para eliminar essa mensagem, mas mesmo com este alerta essa versão ainda eh funcional, soh não se esqueça de atualizar a base de dados do mesmo. Quanto ao Dansguardian, a principal razão para isso eh que o proxy (squid) não esteja rodando, ou a configuração de endereço do mesmo e porta de comunicação tanto no dansguardian.conf quanto no squid.conf não estejam corretas e o dansguardian não esteja conseguindo comunicar-se com o proxy, se não for esse o caso poste novamente que vou dar uma pesquisada e fazer uns testes, embora comigo esse problema tenha surgido somente nessas situações.
[21] Comentário enviado por sheilamb em 29/11/2006 - 13:06h
Olá, eu utilizo o Debian com squid estou querendo colocar um filtro, e estou pensando no dansguardian. Não tenho muita experiência com o linux e nunca instalei o dansguardian. Gostaria de saber se esse tutorial serve pra essa distribuição e caso não sirva o que devo fazer. Agradeço desde já a ajuda.
[22] Comentário enviado por caveman_br em 26/12/2006 - 22:23h
Mano otimo howto .. mas infelizmente estou tendo o mesmo problema que o nick
OK alguem deve tar me xingando (putz um dia depois do natal e o kra vem perguntando coisa.. mas fazer oq alguns precisam aproveitar a folga dos outros pra poder trabalhar melhor)
mas como eu estava dizendo tive o mesmo probs que o nick ai eu abri o arquivo Makefile e notei que o item AV_LIBS= estava vazio entao mudei para AV_LIBS = /usr/lib/libclamav.a
assim meu erro passou a aparecer outro. Agora como eu n manjo nada e so sai fuçando acredito que eu soh tenha trocado de problema e n resolvido nada
a msg q eu tenho de erro agora é essa:
g++ -o dansguardian -O2 -DPROXYUSER=\"squid\" -DCONFFILELOCATION=\"/etc/dansguardian/dansguardian.conf\" -lz -I/usr/local/include -pthread ClamAV.o VirusEngine.o VirusScanner.o TrickleHandler.o String.o OptionContainer.o FDTunnel.o ConnectionHandler.o DataBuffer.o HTTPHeader.o NaughtyFilter.o RegExp.o Socket.o FatController.o UDSocket.o SysV.o ListContainer.o Ident.o HTMLTemplate.o LanguageContainer.o DynamicURLList.o ImageContainer.o FOptionContainer.o ListManager.o md5.o -pthread -L/usr/local/lib -lesmtp -ldl /usr/local/lib/libz.a /usr/lib/libclamav.a dansguardian.cpp
/usr/lib/libclamav.a(cvd.o)(.text+0x2e): In function `cli_untgz':
/usr/local/src/clamav/clamav-0.88.7/libclamav/cvd.c:52: undefined reference to `gzdopen'
/usr/lib/libclamav.a(cvd.o)(.text+0x7f):/usr/local/src/clamav/clamav-0.88.7/libclamav/cvd.c:62: undefined reference to `gzread'
/usr/lib/libclamav.a(cvd.o)(.text+0x10a):/usr/local/src/clamav/clamav-0.88.7/libclamav/cvd.c:106: undefined reference to `gzclose'
/usr/lib/libclamav.a(cvd.o)(.text+0x259):/usr/local/src/clamav/clamav-0.88.7/libclamav/cvd.c:135: undefined reference to `gzclose'
/usr/lib/libclamav.a(cvd.o)(.text+0x2e8):/usr/local/src/clamav/clamav-0.88.7/libclamav/cvd.c:160: undefined reference to `gzclose'
/usr/lib/libclamav.a(scanners.o)(.text+0xc90): In function `cli_scangzip':
/usr/local/src/clamav/clamav-0.88.7/libclamav/scanners.c:577: undefined reference to `gzdopen'
/usr/lib/libclamav.a(scanners.o)(.text+0xcec):/usr/local/src/clamav/clamav-0.88.7/libclamav/scanners.c:589: undefined reference to `gzread'
/usr/lib/libclamav.a(scanners.o)(.text+0xd4a):/usr/local/src/clamav/clamav-0.88.7/libclamav/scanners.c:612: undefined reference to `gzclose'
/usr/lib/libclamav.a(scanners.o)(.text+0xd9b):/usr/local/src/clamav/clamav-0.88.7/libclamav/scanners.c:619: undefined reference to `gzclose'
/usr/lib/libclamav.a(scanners.o)(.text+0xe7e):/usr/local/src/clamav/clamav-0.88.7/libclamav/scanners.c:592: undefined reference to `gzclose'
/usr/lib/libclamav.a(scanners.o)(.text+0xe9f):/usr/local/src/clamav/clamav-0.88.7/libclamav/scanners.c:584: undefined reference to `gzclose'
collect2: ld returned 1 exit status
make: ** [all] Erro 1
a impressao que eu tenho é q agora ele n esta encontrando as funções da libz.a
bons.. soh pra desencargo essa ja foi a 3a vez q eu comeco o processo todo desdo inicio e acabo parando qndo vou fazer o make do DansGuardian.
Se alguem tiver uma dica estou ancioso pra por isso pra rodar definitivamente.
[23] Comentário enviado por memaster em 27/12/2006 - 07:15h
sheilamb, como já mencionei anteriormente todas as instalações são feitas compilando o código fonte dos softwares envolvidos no processo, ou seja qualquer distro com um compilador C e as bibliotecas necessárias ao funcionamento dos softwares requeridos pode ser usada sem problemas, como vc está usando debian, vc ainda pode optar por usar o apt-get para obter e instalar todos (ou quase todos) os softwares, e basear-se no meu artigo para proceder somente com a configuração de cada software envolvido, ou sinta-se a vontade para proceder com a compilação manual e questionar qualquer dúvida que apareça.
[24] Comentário enviado por memaster em 27/12/2006 - 07:22h
caro caveman_br não se preocupe com datas, hehe não dou muita importância a esse detalhe hehe, vamos ao que interessa. Qual a distro que vc está usando? Antes de mais nada, de uma olhada na resposta que enviei ao comentário do nick, quando a libesmtp, caso tenha efetuado os passos descritos na resposta a ele corretamente sem erros até a compilação do DG, volte a postar aqui, outra coisa, não se fez necessára a alteração do Makefile do DG durante o processo no meu caso, não sei se algum outro usuário teve de fazer isso, mais acho sem sentido, bom vou ficar aguardando mais detalhes, estarei sempre disposto a responder o que estiver ao meu alcance e obrigado pela credibilidade ao artigo.
[25] Comentário enviado por gandalfree em 09/01/2007 - 15:57h
Alguém saberia dizer como posso especificar quais arquivos o clamav deve escanear?? Pois tem alguns arquivos como .html .css .gif .jpg que não precisam escanear para não sobrecarregar o acesso.
[26] Comentário enviado por ominerim em 14/02/2007 - 11:55h
Boa tarde, fiz tudo do tutorial mas não conseguir iniciar o dansguardian dar o seguinte erro:
dansguardian: error while loading shared libraries: libesmtp.so.5: cannot open shared object file: No such file or directory.
[27] Comentário enviado por memaster em 19/02/2007 - 19:58h
caro ominerim essa questão já foi feita... tem a ver com a libesmtp que é uma dependência do Dansguardian pra trabalhar com antivirus, tem um capítulo do meu tuto só voltado a sua instalação, da uma olhada nele, se já olhou veja se a instalação do Dansguardian não está bunscando ela de um diretório e ne verdade está instalada em outro, ai você pode resolver com um link simbólico, vai nessa que o problema é por ai, e nem te esquenta que esse é o fácil.. qualquer coisa pergunta novamente, e se conseguiu posta ai pra gente saber...
ATUALIZAÇÃO DO HOWTO:
pra quem tentar executar esse procedimento com o ClamAV-0.90 (última versão estável) deve compilar o dansguardian+patch com o seguinte comando:
Caso contrário vai apresentar um erro relacionado a lib do Clamav quando for executar o make do Dansguardian.
Pessoal, queria aproveitar esse post, para saber quantos de vcs conseguiram seguir esse tutorial, qts acharam útil, tem sugestôes etc, pois é bom saber quando um trabalho da resultados... assim que possível vou estar postando aqui mais tutorias pra galera.. até mais e um bom feriado a todos.
[30] Comentário enviado por demattos em 18/06/2007 - 18:57h
bom amigo tive este mesmo problema e resolvi acresentando a seguinte linha
http_port 3128 transparent
e comente estas
# http_port 3128
# httpd_accel_port 80
# httpd_accel_host virtual
# httpd_accel_uses_host_header on
# httpd_accel_with_proxy on
[34] Comentário enviado por ---Anonymous--- em 12/06/2009 - 09:53h
OLa memaster, ent'ao, eu tentei compilar squid e da um erro dizendo que a pasta share nao existe, andei dando uma olhada e realmente o /usr/local/share nao existe.
Tambem o /etc/squid nao existe.
Lembrando que eu estou usando o Slack 12.2, mas acho que isso nao e o problema.