Pesquisar neste blog

terça-feira, 12 de fevereiro de 2013

Palavras compostas no squid (Ubuntu, RedHat e Opensuse)

Antes de mais nada, nesse post terá palavras que algumas pessoas possam achar "de baixo calão ou simplesmente palavrão", para essas pessoas antecipadamente peço desculpas, mas a intenção não é de propagar nenhuma forma de agressividade mas, sim de mostrar de forma direta o uso de expressões regulares no squid.


Por muitas vezes temos que criar regras para fazer bloqueio de palavras dentro do proxy, porém essas palavras podem compor outras palavras.


Quando instalamos o squid na forma padrão o aplicativo já inicia trabalhando, basicamente terá (sem os comentários) os seguintes itens no arquivo /etc/squid3/squid.conf.
Nessa primeira parte do squid.conf teremos as configurações dos “apelidos” das ACL's (Access Control List), essas regras definem o comportamento do nosso servidor, irei comentar as linhas importantes.


acl manager proto cache_object
## Essa acl abaixo informa ao squid que o endereço IP 127.0.0.1/32 (ipv4) e o ::1 (ipv6) tem acesso ao servidor
## o item src é o responsável por definir um endereço ip ou de uma rede para acesso ao servidor
## pode-se criar uma acl, com a opção src para definir por exemplo um computador da
## gerencia ou direção com a intenção livre dos controles de acesso.
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

## essas linhas são padrão do squid, definindo as portas em que ele controlará.
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




## Após as informações das ACL, é necessário informar o que será feito com elas, é aonde se
## encontra as linhas abaixo, o http_access definirá se o acesso será liberado (allow) ou negado (deny)
## é aqui que devemos ter cuidado, pois quando o squid encontra, o que ele conhece como MISMATCH, ele não vai acessar o restante do arquivo.
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports


http_access allow localhost


## Todas as regras que você for incluir deverá ser antes dessa linha, por padrão o squid fecha toda a
## internet, se chegar aqui as regras anteriores não tiveram controle. A opção http_access deny all  bloqueia tudo, para liberar toda a internet e fazer bloqueios anteriores mude essa linha para http_access allow all

http_access deny all


http_port 3128

coredump_dir /var/spool/squid3


refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320


Pronto, com o arquivo padrão em uso podemos fazer nossas mudanças, vamos trabalhar com toda a internet bloqueada e vamos fazer liberações de determinados sites. Nossa mudança será bastante simples, criaremos uma ACL, e depois vamos fazer um http_access para fazer nossa liberação.
Por recomendação devemos colocar nossas ACL's após essa linha

acl CONNECT method CONNECT
## nova acl
acl sitesLiberados dstdomain .google.com.br

## observe que nessa regra usamos o dstdomain para definir que esse site esta liberado (existe um
## “ponto” antes do nome do google.com.br informando que todo o domínio será controlado, neste
## caso liberado.


Ao colocar uma acl devemos informar ao http_access que essa acl deverá ser permitida, mais uma vez por recomendação devemos colocar essa regra deve estar antes da linha.http_access deny all.

http_access allow sitesLiberados
http_access deny all

neste formato temos um pequeno problema, se desejamos liberar mais de um site alem do google.com.br, devemos duplicar a linha, conforme o exemplo abaixo.
acl sitesLiberados dstdomain .google.com.br
acl sitesLiberados dstdomain .terra.com.br
acl sitesLiberados dstdomain .uol.com.br

o que pode tornar o arquivo muito grande e de difícil leitura para posterior manutenção, para resolver isso o squid aceita que esses domínios possam ficar dentro de um arquivo, conforme abaixo:

acl sitesLiberados dstdomain “/etc/squid3/sitesLivres.txt”


o http_access que já foi definido não precisa modificar, porem o arquivo deverá ser criado.

vi /etc/squid3/sitesLivres.txt
dentro desse arquivo simplesmente colocamos os domínios que devemos liberar
.google.com.br
.terra.com.br
.uol.com.br

Pronto, para liberar outros domínios simplesmente adicione mais domínios dentro do arquivo /etc/squid3/sitesLivres.txt e re-inicie o squid. (squid3 -k reconfigure é mais rápido).


Seguindo a mesma ideia podemos fazer controle de palavras, mãos a obra.

acl palavras url_regex -i “/etc/squid3/palavrasPriobidas.txt”

neste caso usamos a opção url_regex que informa ao squid que se a palavra aparecer na url deve ser tomada uma ação definida no http_access.

Já no http_access deve ficar assim.

http_access deny palavras
http_access allow sitesLiberados
http_access deny all


Exatamente como você esta vendo o bloqueio antes da liberação, lembre-se do MISMATCH que falei acima.


temos também que criar o arquivo palavrasProibidas.txt,
vi /etc/squid3/palavrasPriobidas.txt
e dentro as palavras que você não quer que seja consultada.
sex
sexo
rola


Agora estamos prontos, para irmos ao tópico principal as palavras compostas.


Exemplo:
rola → rolamento



Agora vamos a uma situação, você controla a palavra “rola” evitando assim que um usuário possa pesquisar na rede o seguinte:



o que rola na minha cidade no google por exemplo.



essas palavras podem conter dentro de uma outra palavra (composta), vamos agora por "a mão na massa". Para isso o squid também aceita que as palavras dentro do arquivo tenha também expressões regulares, neste caso devemos fazer algumas modificações dentro do arquivo palavrasProibidas e colocar as palavras assim

sex
sexo
.rola[/?/&]


Neste caso a palavra “rola” será bloqueada somente se ele vier sozinha e não composta como “rolamento” (essa dica foi passada pelo nosso amigo Ney para entrar em contato com ele manda uma e-mail para vtj@vtjinformatica.com)

IMPORTANTE: TODA VEZ QUE FOR MODIFICADA OS ARQUIVOS (sitesLiberados.txt ou palavrasProibidas.txt) O SQUID DEVERÁ SER RE-INICIADO (squid3 -k reconfigure), essas informações também funcionam no squid versão 2)


bom, como tive problemas de encontrar algum lugar que me fornecesse essas informações de uma forma direta passo essa dica para vocês que tem esse tipo de problema.
Não deixem de comentar se gostaram
ate a próxima.

7 comentários:

Unknown disse...

Embora já tinha conhecimento dessa informação,o texto está bem claro!!.
o que facilita em muito....

abraço
Marcio

Glauber Alexandre disse...

obg. Espero ajudar aos outros administradores que tem a necessidade dessa informação

Unknown disse...

meu amigo é dificil falar com você não...cara posta alguma coisa sobre como bloquear downloads na rede usando as regras do squid.

já tentei um momte de acls que muitos caras ai dizem que funciona mais aqui nada, o squid até que reconfigura mas não bloqueia
download de .mp3, .exe, .bat, continuo baixando normal e coloco a regras bem antes da regra de autenticação...estou usando o proxy o
squid é o 2.7 e o servidor é o ubuntu 10.04

paulo disse...

Muito bom mesmo.

já trabalhei com squid, mas vou guardar o seu artigo, valeu

Glauber Alexandre disse...

valeu paulo

Marcello Carvalho disse...

klleberson Sillva eu uso a seguinte ACL para bloqueio de downloads:
acl downloads req_mime_type application/octet-stream application/zip audio/mpeg audio/mp3 audio/wav video/mpeg video/avi video/quicktime video/x-msvideo video/x-ms-wmv

depois é só por http_access deny downloads

Unknown disse...

Boa tarde ,
Estou tentando bloquear palavras compostas no squid como :
- Mulher+nua
- homem+nu , tem como ?
qual seria o procedimento ?
Obrigado a todos