br-linux

Artigos br-linux.org
Artigos sobre Linux em bom português, originais e com qualidade

Controle de conteúdo: Como proteger seus usuários deles mesmos
Publicado em 11 de outubro de 2004

Allan Cassaro Vilela Gomes (allan.gomes@capes.gov.br) explica como unir o Squid, DansGuardian e outros recursos para construir um filtro de conteúdo que evite o download de arquivos impróprios ou perigosos para a sua rede.

Controle de conteúdo: Como proteger seus usuários deles mesmos.
Allan Cassaro Vilela Gomes (allan.gomes@capes.gov.br)

Esclarecimento:
Este artigo é destinado a ADMINISTRADORES DE REDES COM PRÁTICA NO USO DE SOFTWARE LIVRE E/OU UNIX.

Nesse texto pretendo abordar alguns aspectos do controle de conteúdo.

Este artigo vai contar com uma filtragem totalmente invasiva, mas sua rede estará segura e os falsos-positivos serão praticamente eliminados.

Vamos separa algumas coisas antes de começar:
1 - Filtro de conteúdo não é, obrigatoriamente, antivírus;
2 - Filtros podem ser implementados em vários protocolos;
3 - Cada protocolo tem sua peculiaridade;


Primeira parte: Filtragem HTTP:
-------------------------------------

Primeiro os pré-requisitos:

O melhor Proxy
1) Squid em http://www.squid-cache.org

O melhor filtro de conteúdo HTTP
2) DansGuardian em http://www.dasnguardian.org
Não deixem de visitar o site e "registrar" sua copia! (Registro apenas para fins de contagem, o software é GPL)
Aconselho a baixarem o patch de filtragem antivírus em http://www.harvest.com.br/asp/afn/dg.nsf que tem como pre-requisitos o clamav (http://www.clamav.net) e o libESMTP (http://www.stafford.uklinux.net/libesmtp)
Boa notícia: os dois possuem pacotes para a maioria das distribuições.

Uma bela blacklist (mais de 1.000.000 de URLs, Sites e IPs!)
3) URLBlackList.com em http://urlblacklist.com

4) Uma boa máquina
Processador: PIV acima de 1.5 Ghz se for utilizar o antivírus aconselho mais de um processador
Memória: 512 MB Ram ou acima de 1Gb se utilizar o antivírus
Disco: SCSI de uns 36 Gb está bom
Placa de rede 100 Mbps

5) Alguém que entenda o que eu vou falar ;)
Se você não sabe o que é um Proxy HTTP, ou não sabe o que é autenticação "basic", ou não sabe como compilar alguma coisa no linux, existem inúmeros FAQ, HOWTO entre outras excelentes documentações que podem auxiliar. Leia antes de prosseguir.

Por que não utilizar apenas o Squid como proxy e filtro?

o Squid não é um filtro de conteúdo, ele possui inúmeras formas de ser burlado se utilizado com este fim. Outro motivo é que caso utilize uma base muito extensa ele utilizará muita memória e se tornará lento demais. E por último, ele definitivamente não serve para fazer uma filtragem efetiva!
Um exemplo:
Usando apenas o Squid:
Se na configuração for definido "bloquear arquivos .zip" e você baixar um arquivo foh_zip (note o "_") o arquivo será baixado sem dor-de-cabeça. Ou então de uma forma mais "bruta" se tentar baixar o arquivo e substituir a extensão por carcteres de escape em ASCII o arquivo virá da mesma forma.
Ex.: http://www.fooh.com/bah.%122ip (note que 122 na tablea ASCII é a letra z)
Na lista de bloqueio tem .zip e não .%122ip, que é a mesma coisa...

Nota:
Se a desculpa para utilizar apenas o Squid era de que só ele trabalha em modo transparente, saiba que o DansGuardian também aceita trabalhar desta forma.

Vamos explicar como tudo vai funcionar:

O cliente se conecta no Dansguardian que faz uma "pré-filtragem":

1) Cliente pede "http://www.playboy.com" --> DansGuardian

O DansGuardian compara a URL enviada com sua base de bloqueados, caso encontre, nem faz a requisição ao Squid e o redireciona à página de "acesso negado", poupando sua banda de Internet e processamento da máquina.

2) DansGuardian responde --> "Acesso Negado" para o Cliente

Ou a parte intrusiva do negócio!

O cliente se conecta no Dansguardian que faz a "pré-filtrgem":

1) Cliente pede "http://www.estudodeanatomia.hpg.com.br" --> DansGuardian

O DansGuardian compara a URL enviada com sua base de bloqueados, caso não encontre envia a requisição para o Squid

2) DansGuardian "OK" --> Squid busca a página na Internet

O Squid devolve a página ao DansGuardian:

3) Squid --> DansGuardian

Agora acontece a mágica! O DansGuardian irá "ler" toda a página procurando por palavras pré estabelecidas e pontuar sua "leitura".

4) DansGuardian --> Palavra "sexo" soma 80, Palavra "lesbicas" soma 60, Palavra "Amadoras" soma 90. Pontuação final: 230
Compara com o arquivo de configuração onde diz que a pontuação máxima é 180 (por exemplo). Então bloqueia a página.

5) DansGuardian responde --> "Acesso Negado" para o Cliente

Nos arquivos de configuração podemos definir diversos tipos de filtragem, entre elas a citada acima.

1) MIME Type -> Bloqueia pelo tipo MIME do arquivo e não pela sua extensão, ou seja, um arquivo foh.zip e foh_zip serão tratados da mesma forma.

2) PICS Labeling -> Vários sites espalhados pela Internet utlizam uma "rotulação" para o seu site, informando o seu conteúdo. O DansGuardian consegue ler e tomar uma ação, bloquear ou permitir.


3) Black List -> O site ou url é bloqueado.

4) White List -> O site ou url não será filtrada. Acesso total garantido.

5) Greylist -> O site será "parcialmente" liberado. Apenas o conteúdo poderá ser bloqueado.

6) Weighted Phrase List -> "Peso" das palavras. Se o site possuir certas palavras será liberado ou não.

Se você leu o texto até aqui e eu consegui te convencer, :)
vamos para o que interessa!

Primeiro devemos baixar e instalar tudo:

Vou colocar aqui os parametros que eu usei:

No Squid:

usuario$ ./configure --datadir=/usr/local/share/squid --sysconfdir=/etc/squid --enable-underscores --disable-ident-lookups -enable-linux-netfilter --enable-err-languages="Portuguese" --enable-default-err-language="Portuguese" --enable-snmp --disable-wccp --enable-delay-pools --enable-removal-policies="heap lru" --enable-storeio="diskd aufs coss ufs" --with-pthreads --libexecdir=/usr/local/libexec --sbindir=/usr/local/sbin --bindir=/usr/local/bin --mandir=/usr/share/man --enable-ntlm-auth-helpers="SMB fakeauth no_check winbind" --enable-basic-auth-helpers="NCSA SMB winbind" --enable-external-acl-helpers="ip_user wbinfo_group winbind_group" --enable-ntlm-fail-open --enable-auth="basic ntlm"

Claro que você deve adptar para suas necessidades.

usuario$ make
root# make install
Obs.: O squid estará preparado para fazer autenticação NTLM, Basic e Basic via samba/winbind que no próximo artigo eu falo como utilizar com o DansGuardian.

* Diretorios da instalação:
- Configuracao -> /etc/squid
- Shared -> /usr/local/share/squid
- Bin dir -> /usr/local/bin
- Sbin dir -> /usr/local/sbin
- Libexec (helpers) -> /usr/local/libexec
- Man -> /usr/share/man

(Não vou falar da configuração do squid)
Verifique se o Squid está funcionando corretamente.
Depois altere o seguinte parametro no "squid.conf":
"http_port"
para:
"http_port 127.0.0.1:3128"
Isso fará o Squid escutar apenas no loopback, ou seja, ninguém conseguirá acessar o Squid, apenas o DansGuardian fará isso.

No DansGuardian:

usuario$ ./configure --logrotatedir=/etc/logrotate.d/ --piddir=/var/run/ --runas_usr=squid --runas_grp=squid --logdir=/var/log/cache/ --mandir=/usr/share/man/ --cgidir=/usr/local/httpd/cgi-bin/ --sysvdir=/tmp/ --sysconfdir=/etc/dansguardian/ --bindir=/usr/local/bin/

usuario$ make
root# make install

* Diretorios da instalação:
- Diretorio de configuracao -> /etc/dansguardian/
- Diretorio do pid -> /var/run/
- Bin dir -> /usr/local/bin/
- CGI Dir -> /usr/local/httpd/cgi-bin/
- Diretorio dos manuais -> /usr/share/man/
- Usuario e grupo de execucao: squid
- Diretorio de log -> /var/log/cache/

O parâmetros mais importantes são (dansguardian.conf):
filterport = 8080 (a porta que o DansGuardian irá escutar)
proxyip = 127.0.0.1 (ip do squid, no nosso caso o loopback)
proxyport = 3128 (a porta do seu squid, no nosso caso 3128)

Agora que temos tudo instalado vou explicar o que cada arquivo no diretório do DansGuardian faz:
Nota:
Tudo o que começar com "banned" são arquivos de negação e tudo que começar com "exception" são arquivos de excessões.

bannedextensionlist -> Lista de extensões de arquivos bloqueados
bannediplist -> Lista de ips (da sua rede) bloqueados (ips sem acesso a internet)
bannedmimetypelist -> Tipo MIME bloqueados (download bloqueado)
bannedphraselist -> Lista de frases banidas dentro da página (e não na URL)
bannedregexpurllist -> Lista de expressões regulares bloqueadas*
bannedsitelist -> Lista de sites bloqueados**
bannedurllist -> Lista de URLs bloqueados**
banneduserlist -> Lista de usuários (da sua rede) bloqueados
contentregexplist -> Conteudo baseado em expressões regulares que serão substituidos***
dansguardian.conf -> Arquivo de configuração principal
dansguardianf1.conf -> Arquivo de configuração de grupos de usuários
exceptioniplist -> Excessão de ips filtrados (ips da sua rede que não serão filtrados)
exceptionphraselist -> Lista frases que são excessão
exceptionsitelist -> Lista de sites que são excessão
exceptionurllist -> Lista de urls que são excessão
exceptionuserlist -> Lista de usuários (da sua rede) que são excessão
filtergroupslist -> Definição dos grupos de usuários
greysitelist -> Sites que estão na lista cinza
greyurllist -> URLs que estão na lista cinza
pics -> Definição do PICS Labeling
weightedphraselist -> Lista de frases/palavras e seus "pesos" (os pesos podem ser positivos ou negativos)

não pense duas vezes, LEIA TODOS OS ARQUIVOS DE CONFIGURAÇÃO. Isso ajudará a entender melhor a lógica de funcionamento do DansGuardian.

* Mantenha este arquivo pequeno, com o mínimo de regras possíveis, se você não sabe o que é regex (expressões regulares) aconselho a manter este arquivo vazio. Ele bloqueia URLs da seguinte maneira:
No arquivo existe a expressão "anal", então ele bloqueia tudo que tenha "anal", como analitico, canal, sexoanal, etc.
A possibilidade de ter um falso-positivo é enorme, por isso use o mínimo de regras aqui.

** Sites e urls são tratados de maneiras completamente diferentes, observe os exemplos:
http://www.playboy.com.br --> Site: Isto é, qualquer coisa dentro deste site será bloqueado (até as piadas!)
http://www.terra.com.br/sexo --> URL: Isto é, apenas esta parte do site (url) será bloqueada.

*** Isso é interessante para barrar popups, ActiveX, musicas de fundo (AAAARRRG!), etc.
A sintaxe é a seguinte (case insensitive):
"o que deve ser substituido"->"substituição"
Ex.:
"droga"->"censurado"
"windown.open"->""

Sabendo disso basta editar o arquivo dansguardian.conf e ajustá-lo para sua realidade.

Uma dica:
Para colocar vários "perfis" de acesso basta editar o arquivo filtergroupslist e criar um dansguardianfx.conf onde "x" repesenta o grupo dos usuários.
Ex.:
Tenho 400 pessoas na empresa, 2 delas precisam fazer download, 1 precisa acessar paginas de sexo(???) e o restante não pode fazer nada de diferente.

No arquivo filtergroupslist coloco o seguinte:
huguinho=filter2
zezinho=filter2
luizinho=filter3

E crio 3 arquivos dansguardianfx.conf
dansguardianf1.conf -> Restrição geral
dansguardianf2.conf -> Permito download
dansguardianf3.conf -> Permito páginas de sexo

Vale lembrar: O DANSGUARDIAN NÃO FAZ AUTENTICAÇÃO DE USUÁRIO, este é um papel do SQUID!!!!
Ele apenas utiliza a autenticação do Squid ok?

Não vou me aprofundar nos arquivos de configuração, estão todos muito bem documentados e comentados linha-a-linha.
Os parametros mais interessantes são:
reportinglevel = 3 (Manda o usuário barrado para a URL abaixo e explica o porquê da negação, usando um template)
accessdeniedaddress = 'http://seuproxy/cgi-bin/dansguardian.pl'
usernameidmethodproxyauth = on (Para usar a autenticação do Squid deve-se habilitar este parâmetro)
preemptivebanning = off (Ativado este parametro, o usuário deve acessar uma página "ok" primeiro antes de acessar alguma da greylist)

Para o tutorial não ficar muito extenso vou ficar por aqui, aguardem os próximos Ok?

Allan Cassaro -> allangood at ibest.com.br
Este é um endereço de e-mail, não um FAQ ok?

Postado por brain em outubro 11, 2004 05:59 PM

Comentários para "Controle de conteúdo: Como proteger seus usuários deles mesmos"

» Postado por: luciano em outubro 12, 2004 06:00 PM, 200.138.209:

    "Não deixem de visitar o site e "registrar" sua copia! (Registro apenas para fins de contagem, o software é GPL)" ...

    Ateh onde eu lembro, este software era gratuito apenas para instituicoes de ensino ... para uso comercial (em empresas por exemplo) ele tinhe que ser comprado ... Isso mudou ou eu estou errado?

    Obrigado,

    Luciano

 

» Postado por: Carlos em outubro 13, 2004 01:55 PM, 200.180.107:

    Muito bom. Parabéns pelo artigo

 

» Postado por: fl0cker em outubro 13, 2004 03:12 PM, 201.9.225.1:

 

» Postado por: hfkc em outubro 13, 2004 07:58 PM, 200.202.234:

    segui todos os passos mas o squid não esta aceitando o http_port 127.0.0.1:3128. Tenho proxy transparente.
    Se coloco o ip do servidor o dansguardian não esta parando nada.

 

» Postado por: Allan Cassaro em outubro 13, 2004 09:58 PM, 200.252.113:

    Bem, existe uma relação no próprio site (http://dansguardian.org/?page=copyright2) onde ele define o que é comercial ou não. Basicamente (bem por alto mesmo), comercial seria o que utiliza este software para produção. E não comercial quem o utiliza para aprendizado. Mas ele é GPL realmente.
    GPL http://www.gnu.org

    Obrigado. Até mais.

 

» Postado por: Rafael Dipold em outubro 15, 2004 02:56 PM, 200.163.242:

    Só corrigindo, pra "enganar" o squid, o correto eh usar a tabela Hexadecimal e naum a ASCII, portanto no caso do .%122ip, ficaria .%7Aip onde 7A é a letra z na tabela hex.

    a tabela pode ser consultada aqui -- http://www.asciitable.com/

 

» Postado por: Fernando em outubro 17, 2004 11:22 AM, 200.215.178:

    Allan Cassaro,

    Tenho o squid utilizando como metodo de autenticação o NTLM é possivel usar o Dans Guardian e, outra dúvida eu posso usar o Dans Guardian na minha empresa em Produção ou, terei que pagar para isso ????????

 

» Postado por: Allan Cassaro em outubro 18, 2004 11:59 AM, 200.130.18.:

    Caro Fernando,
    é possível usar o Squid com NTLM + DG sem problemas, para isso basta rodar 2 instâncias do Squid. Vou explicar resumidamente como fazer isso:

    No arquivo squid.conf coloque os seguintes parametros:
    http_port 127.0.0.1:3128
    http_port 8080
    (são 2 mesmo, uma porta para cada instância)
    icp_port 3130
    cache_peer 127.0.0.1 parent 3120 3130 proxy-only no-netdb-exchange no-query login=*:passwd
    (Esta é a linha mágica)

    auth_param ntlm program /usr/local/libexec/fakeauth_auth
    auth_param ntlm children 40
    auth_param ntlm max_challenge_reuses 0
    auth_param ntlm max_challenge_lifetime 2 minutes
    auth_param ntlm use_ntlm_negotiate off
    (Estes são os parâmetros para fazer a autenticação NTLM, neste caso estou usando o fake, utilize algo melhor)

    forwarded_for on
    (Para passar o IP dos clientes para o DG)

    No dansguardian.conf:
    filterip = 127.0.0.1
    filterport = 3120
    proxyip = 127.0.0.1
    proxyport = 3128
    usernameidmethodproxyauth = on
    forwardedfor = off
    usexforwardedfor = on

    Esta é uma receita de bolo Ok? Se ler os arquivos de configuração, vai entender melhor o que está acontecendo.

    Quanto a licença, se sua empresa tem intenção de comercializar o DansGuardian como produto, vai precisar de licensa sim e deve manter os direitos do autor (Daniel Baron). Para saber melhor sobre a licença, visite o site: http://www.dansguardian.org, nos posts acime exite um link para a licença do DG2.

    Até mais.

 

Antes de comentar...

- Preserve a qualidade desta discussão
- Leia os Termos de Uso.
- Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum.
- Mantenha o foco nos argumentos e no assunto
- Não faça ataques pessoais.
- Pense 5 vezes antes de entrar em discussões inúteis, como "qual é a melhor distribuição/ambiente gráfico/linguagem de programação/etc.", mesmo se alguém já tiver provocado - um erro não justifica o outro
- Não seja um e-mala ;-)

Envie seu comentário









Lembrar as informações pessoais?


Atenção: Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum, onde mais pessoas estarão disponíveis para respondê-lo..






Nota: os comentários pertencem a seus respectivos autores e são de responsabilidade de quem os postou. O restante desta nota está disponível sob a licença GNU FDL, exceto se explicitamente declarado em contrário.