[resolvido] bloquear acesso a sites usando blacklists no cliente!!!!

Iniciado por dupavesi, 15 de Dezembro de 2008, 13:56

tópico anterior - próximo tópico

dupavesi

Olá!!!
eu estou c/ um problema p/ tentar resolver....
tenho 10 computadores c/ linux ligados em um switch e este ligado ao modem...
eu preciso fazer o bloqueio de sites improprios como orkut, webmessenger, redirecionadores e afins......
a maioria das dicas encontradas se referem ao squid...
gostaria de saber se eh possivel utilizar o squid no pc-cliente p/ fazer o bloqueio???
seria um bloqueio do trafego de saida!!!
pensei tbm em utilizar as blacklists (MESD blacklists, Shalla's Blacklists e URLBlacklist.com) utilizadas no squidguard p/ configurar o iptables....porem, vi relatos na internet q o carregamento dessa lista na inicializacao do sistema demoraria muito.....
preciso de um modo q eu possa utilizar estas listas prontas pois se for adicionar manualmente todos os sites e principalmente todos os redirecionadores se torna muito dificil este trabalho......
e nao encontrei nenhum caso de uso do squid no computador cliente...serah q eh possivel????

Felix

#1
Se não quer fazer um servidor squid, ocê pode fazer isso com o iptables, segue abaixo um exemplo:


iptables -A OUTPUT -p tcp -d www.siteaserbloqueado.com --dport 80 -j REJECT

dupavesi

Citação de: Felix online 15 de Dezembro de 2008, 17:41
Se não quer fazer um servidor squid, ocê pode fazer isso com o iptables, segue abaixo um exemplo:


iptables -A OUTPUT -p tcp -d www.siteaserbloqueado.com --dport 80 -j REJECT


isso seria uma saida trabalhosa e, pelo q li nos foruns afora, demoraria p/ carregar toda a lista na inicializacao pois pretendo utilizar as blacklists dos sites citados portanto sao listas bastante grandes......

o squid funciona no pc-cliente????

Felix

sim, o squid funciona normalmente no pc-cliente. Com um servidor você somente necessitaria instalar e configurar uma única vez ao invés de máquina por máquina

dupavesi

Citação de: Felix online 15 de Dezembro de 2008, 20:58
sim, o squid funciona normalmente no pc-cliente. Com um servidor você somente necessitaria instalar e configurar uma única vez ao invés de máquina por máquina

entao posso instalar e configurar o squid?ele vai bloquear as solicitaçoes a determinados sites, palavras, etc????


Felix

Sim, pode bloquear por dias da semana, horário, por grupos e muitas coisas mais, abaixo, segue um post que tenho em meu blog com os passos de instalação e configuração:

Citar
Abaixo segue um "passo-a-passo" da instalação e de uma configuração específica para um 'caso', em tal instalação foi utilizado um servidor Slacware e optado por fazer a instalação a partir do código fonte, mas que caso eu seja claro o bastante, é fácil de ser entendido e adaptado. Caso apareçam dúvidas, coloquem-nas nos comentários.

1. Entrar em /usr/local/src

2. Baixar o squid com o comando:
$wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE8.tar.gz

3. Copiar para a pasta anterior com:
$cp squid-3.0STABLE8.tar.gz ..

4. Descompactar:
$tar -zxvf squid-3.0STABLE8.tar.gz

5. Renomear a pasta squid-3.0STABLE8.tar.gz para squid:
$mv squid-3.0STABLE8 squid

6. Entrar na pasta squid:
$cd squid

7. Sequencia de instalação:
$./configure
$make
#make install

8. entrar em:
$cd /usr/local/squid/sbin
$squid -z (retorna erro):

alex@darkstar:/usr/local/squid/sbin$ sudo squid -z
WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log
/usr/local/squid/var/logs/cache.log: Permission denied
messages will be sent to 'stderr'.
2008/08/02 14:04:00| Creating Swap Directories
FATAL: Failed to make swap directory /usr/local/squid/var/cache: (13) Permission denied
Squid Cache (Version 3.0.STABLE8): Terminated abnormally.
CPU Usage: 0.012 seconds = 0.008 user + 0.004 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0
alex@darkstar:/usr/local/squid/sbin$

9. Para corrigir:
$mkdir /usr/local/squid/var/cache
$mkdir /usr/local/squid/var/logs
#chown -R alex.users /usr/local/squid/var/*

10. Novamente:
$cd /usr/local/squid/sbin
$squid -z
alex@darkstar:/usr/local/squid/sbin$ squid -z
2008/08/02 14:10:13| Creating Swap Directories
2008/08/02 14:10:13| /usr/local/squid/var/cache exists
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/00
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/01
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/02
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/03
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/04
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/05
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/06
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/07
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/08
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/09
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/0A
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/0B
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/0C
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/0D
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/0E
2008/08/02 14:10:13| Making directories in /usr/local/squid/var/cache/0F
alex@darkstar:/usr/local/squid/sbin$

11. Para rodar o squid:
$./squid

12. Para confirmar que está rodando:
$ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
alex 22463 0.0 0.2 6064 1424 ? Ss 14:12 0:00 ./squid
alex 22465 0.1 1.2 9436 6456 ? S 14:12 0:00 (squid)
alex 22466 0.0 0.1 2800 828 ? Ss 14:12 0:00 (unlinkd)

13. Para testar é necessário configurar o navegador de internet (Firefox/Opera/Safari/IE, etc) para usar proxy para o ip local na porta 3128

14. Para que o squid peça autenticação de usuário
$cd /usr/local/squid/etc
#vim squid.conf
Descomentar as linhas
auth_param basic program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd
auth_param basic children 5 (carece de fontes para confirmar que essa linha é para funcionamento no IE)
auth_param basic credentialsttl 2 hours

15. Criar a acl logo abaixo das últimas acl's padrão
acl AUTENTICACAO proxy_auth REQUIRED

16. Abaixo de http:_access deny all:
http_access allow AUTENTICACAO
http_access deny DENY ALL

17. Criar arquivo de senhas:
$cd /usr/local/squid/etc
$vim passwd
#htpasswd passwd "usuário" (sem as aspas - o nome do usuário)

18. Para confirmar a criação da senha:
$cat passwd

alex@darkstar:/usr/local/squid/etc$ cat passwd
aluno:NvicYiiCW1zxw
alex@darkstar:/usr/local/squid/etc$

19. Entrar na pasta /usr/local/squid/helpers/basic_auth/NCSA$ e compilar com: (para criar arquivo de autorização)
$make

20. Copiar o arquivo gerado (ncsa_auth*) para /usr/local/squid/libexec
#cp ncsa_auth /usr/local/squid/libexec

21. Renovar configuração do squid:
$/usr/local/squid/sbin/./squid -k reconfigure

22. Testar no navegador

23. Editar o arquivo squid.conf criando a seguinte acl para liberar de segunda a sexta (iniciais dos dias da semana em inglês e com horário):
acl HORARIO time MTWHF 08:00-18:00

24. E incluir a seguinte linha acima de http_access allow AUTENTICACAO:
http_access deny !HORARIO

25. Ler o arquivo de configuração novamente:
$/usr/local/squid/sbin/./squid -k reconfigure

26. Criando regras diferentes para diferentes usuários.

26.a. Criar senhas para usuários com o comando:
#htpasswd passwd "diretor" (onde "diretor" é o nome do usuário)

26.b. Editar o arquivo squid.conf comentando as linhas:
#acl AUTENTICACAO proxy_auth REQUIRED
#http_access allow AUTENTICACAO

26.c. Criar as acl's
acl DIRETORIA proxy_auth -i "/usr/local/squid/etc/diretoria"
acl USUARIOS proxy_auth -i "/usr/local/squid/etc/usuarios"
acl HORARIO time MTWHF 13:30-17:30 (liberada de segunda a sexta somente nesse horário)

26.d. Alterar os http_access
http_access allow DIRETORIA (libera o uso de internet para os usuários do grupo "diretoria")
http_access allow USUARIOS HORARIO (libera acesso de internet para os usuários seguindo a acl HORÁRIO)
http_access deny ALL

26.e. Criar arquivos "/usr/local/squid/etc/diretoria" e "/usr/local/squid/etc/usuarios" fazendo referência aos usuários de cada grupo

26.f. Reprocessar as regras:
$/usr/local/squid/sbin/./squid -k reconfigure

27. Para criar acl's para liberar/bloquear sites específicos:
acl BLOQUEADOS url_regex -i "/usr/local/squid/etc/bloqueados"
acl LIBERADOS usr_gerex -i "/usr/local/squid/etc/liberados"

28. Alterar os http_access específicos para:
http_access allow USUARIOS
http_access allow USUARIOS HORARIO BLOQUEADOS LIBERADOS

Pronto, o básico do básico é isso. Fico disponível para trocar idéias e tirar dúvidas (ainda estou aprendendo também, mas para um bom aprendizado é altamente recomendada a troca de experiências)

Espero que lhe resolva o problema.

dupavesi

Felix!!!
muito obrigado pelas suas informacoes!!!!!
agora vou bater minha cabeca no squid!!!
mas valeu a ajuda!!!!!
qquer coisa volto aki p/ pedir umas ajudas!!!
falow

dupavesi

opa....
comecaram os problemas!!!!nao demorou muito neh!!!!
pois entao.....
instalei o squid e o squidguard....
meu squid.conf p/ testes eh este:
http_port 80 transparent
visible_hostname du

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
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 Safe_ports port 901 # swat
acl Safe_ports port 1025-65535 # portas altas
acl purge method PURGE
acl CONNECT method CONNECT

acl bloqueados dstdomain orkut.com
http_access deny bloqueados

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

redirect_program /usr/bin/squidGuard

redirector_bypass on

#acl redelocal src 192.168.1.0/24
http_access allow localhost
#http_access allow redelocal

http_access deny all


segui o tutorial do morimoto qnto a squid (http://www.gdhpress.com.br/servidores/leia/index.php?p=cap2-13) e qnto ao squidguard (http://www.gdhpress.com.br/servidores/leia/index.php?p=cap2-22), soh que lá está o tuto p/ servidores q nao eh o meu caso....por isso mudei p/ porta 80 mesmo pq c/ a porta 8080 ou 3128 o resultado foi o mesmo.....
comentei as duas linhas sobre "redelocal" pois acho q nao se enquadra no meu caso......
p/ o squidguard apenas segui o tuto do morimoto ao pé da letra e fiz a referencia no squid.conf (redirect_program /usr/bin/squidGuard) como manda o tuto.....
jah tentei iniciar c/
sudo /etc/init.d/squid start
a resposta é:
sudo: unable to resolve host du
* Starting Squid HTTP proxy squid                                                                 [ OK ]

tentei c/:
sudo squid -z
sudo squid -k reconfigure

e mesmo assim o bloqueio nao estah sendo feito....
nem do orkut q eu coloquei no squid.conf nem da lista de sites do squidguard!!!
o q pode ser???

dupavesi

pessoal consegui um avanco!!!
descobri q nao estava bloqueando os sites pois nao havia mexido no iptables!!!
eu achei um tuto bacana p/ quem nao tem uma estrutura c/ servidor proxy
http://ubuntu.no.sapo.pt/squid_dansguardian.html
porem quando coloquei as configuracoes do firestarter
Citar${IPT}  -t nat -A OUTPUT -p tcp -m tcp --dport 80 -m owner --uid-owner proxy -j ACCEPT
${IPT}  -t nat -A OUTPUT -p tcp -m tcp --dport 3128 -m owner --uid-owner proxy -j ACCEPT
${IPT}  -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
no arquivo
Citar/etc/firestarter/user-pre
e reiniciei o firestarter ele bloqueou muitos sites....
por exemplo:
ubuntuforum-br.org
www.google.com.br
www.google.com
resumindo...ele bloqueou a grande maioria dos sites.....
acredito que deva ser um problema nas regras do iptables (talvez o uid-owner proxy) pois qndo parei o squid e tentei acessar os sites bloqueados deu erro de pagina nao encontrada!!!!
como posso fazer p/ solucionar isso???

dupavesi

pessoal segui c/ as tentativas c/ o dansguardian e abandonei o squidguard pois encontrei fontes melhores p/ o meu caso (sem servidor proxy) c/ o dansguard.....
porem continuo c/ o problema de excesso de bloqueio!!!!!!
na verdade a liberacao de alguns sites eh raro......mas nao sei o q pode estar gerando isto.....
outro problema c/ o dansguard eh q eu necessito configurar o proxy no navegador (setando p/ o localhost 127.0.0.1) e se eu nao usar esta configuracao no navegador os bloqueios nao sao realizados!!!!
tem alguma saida p/ confgurar um proxy local (localhost 127.0.0.1) transparente??? p/ q nao necessite a configuracao do navegador manualmente (possibilitando fraudes)......
falow

dupavesi

dae!!!
entao...consegui usar o squid e o dansguardian p/ fazer controle e bloqueio e acesso a determinados sites!!!!
porem tentei utilizar o dansguardian c/ blacklists (3 diferentes listas - proxy, onlinegames e instantmessaging) porem ele praticamente travou qndo dei um restart no dansguardian o q me pareceu inviavel utilizar ele c/ blacklists......
entao parti p/ o squidguard porem nao consigo bloquear nada c/ ele!!!!
ele está ativo porem nao estah bloqueando!!!!!
inicio o squid (e o squidguard) e o dansguardian, todos ficam ativos porem o bloqueio soh eh feito pelo dansguardian....os sites q o squidguard deveria bloquear sao acessados normalmente!!!!
e pelo log do squidguard as listas sao carregadas corretamente!!!as autorizacoes das pastas c/ as listas estão todas conforme os tutoriais!!!!
como pode isso????qual a solucao????alguma luz???

dupavesi

#11
resolvido o problema......
peguei varias dicas de diversos sites e consegui uma filtragem bastante eficiente!!!!
vou colocar aki p/ os proximos e depois pretendo por lah no "dicas e truques" uma coisa mais elaborada!!!
o q eu utilizei na minha maquina local ((k)ubuntu 8.04) foi o iptables + squid + dansguardian.

Squid
o squid.conf ficou assim:

http_port 3128 transparent
visible_hostname ubuntu

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
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 Safe_ports port 901 # swat
acl Safe_ports port 1025-65535 # portas altas
acl purge method PURGE
acl CONNECT method CONNECT

#inicio seguranca opcional
forwarded_for off
header_access From deny all
header_access Via deny all
header_access Server deny all
#fim seguranca

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow localhost
http_access deny all


isso jah basta p/ vc ter acesso c/ proxy transparente (sem necessitar configurar o navegador)....

Dansguardian
p/ o dansguardian utilizei a filtragem por palavras e peguei a blacklist do site urlblacklist.com (link direto p/ a lista: http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist).
Obs.: tive problemas de lentidão ao usar o bloqueio por url (tenho apenas duas listas sendo carregadas) mas o bloqueio por dominio nao apresentou problemas (tenho varias ativas).
aqui vai a parte principal do arquivo dansguardian.conf:
# the port that DansGuardian listens to.
filterport = 8080

# the ip of the proxy (default is the loopback - i.e. this server)
proxyip = 127.0.0.1

# the port DansGuardian connects to proxy on
proxyport = 3128

ele jah vem deste jeito por padrão.
soh explicando:
filterport: eh a porta por onde vai passar o trafego q o dansguardian vai filtrar.
proxyip: se vc quer fazer como eu, filtrar o acesso da sua propria maquina deixe este ip 127.0.0.1 (localhost), é a maquina local.
proxyport: é a porta que está no http_port do squid.conf

portanto, qndo vc tentar acessar um site ele deve passar pelo dansguardian e depois p/ o squid....
é aí q entra o iptables

Iptables
alterar o iptables eh necessario p/ q toda a requisicao http ou tcp (porta 80 por padrao) passe pela filtragem do dansguardian.
para isto digite edite o rc.local
sudo kate /etc/rc.local
e adicione as linhas (antes do "exit 0"):
iptables  -t nat -A OUTPUT -p tcp -m tcp --dport 80 -m owner --uid-owner proxy -j ACCEPT
iptables  -t nat -A OUTPUT -p tcp -m tcp --dport 3128 -m owner --uid-owner proxy -j ACCEPT
iptables  -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080


o comando "owner --uid-owner proxy" servem p/ dar acesso da comunicacao da porta ao squid já q ele vem como dono "proxy" por padrao....

pronto.....põe todo mundo (iptables + squid + dansguardian) p/ rodar q o acesso a site http jah estara sendo "vigiado".....

o problema serão os https q utilizam a porta 443 por padrão e, portanto não passam pela filtragem do dansguardian....
pois bem....para bloqueá-los (levando em conta q vc nao quer mexer na configuracao do navegador - proxy transparente) vc terá q bloquear manualmente os poucos sites q sobraram pelo iptables....
abra o arquivo rc.local
sudo kate /etc/rc.local
e adicione as linhas (antes do "exit 0"):
iptables -t nat -A OUTPUT -d www.osite.com -p tcp --dport 443 -j DROP
iptables -t nat -A OUTPUT -d osite.com -p tcp --dport 443 -j DROP

troque "osite" pelo q vc quer bloquear (por exemplo: orkut, google...)

e aproveitando q vc estah mexendo no rc.local, adicione as chamadas p/ o squid e o dansguardian soh p/ garantir pois meu dansguardian nao carregava automaticamente antes de adicioná-lo neste arquivo....
abra o rc.local
sudo kate /etc/rc.local
e adicione as linhas
# iniciar squid
/etc/init.d/squid start

# iniciar dansguardian
/etc/init.d/dansguardian start

o meu rc.local ficou assim:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

iptables  -t nat -A OUTPUT -p tcp -m tcp --dport 80 -m owner --uid-owner proxy -j ACCEPT
iptables  -t nat -A OUTPUT -p tcp -m tcp --dport 3128 -m owner --uid-owner proxy -j ACCEPT
iptables  -t nat -A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

# iniciar squid
/etc/init.d/squid start

# iniciar dansguardian
/etc/init.d/dansguardian start

# BLOQUEAR IMO
iptables -t nat -A OUTPUT -d www.imo.im -p tcp --dport 443 -j DROP

iptables -t nat -A OUTPUT -d imo.im -p tcp --dport 443 -j DROP
# FIM BLOQUEIA IMO

# BLOQUEAR ORKUT
#iptables -t nat -A OUTPUT -d www.orkut.com -p tcp --dport 443 -j DROP

#iptables -t nat -A OUTPUT -d orkut.com -p tcp --dport 443 -j DROP

#iptables -t nat -A OUTPUT -d www.google.com -p tcp --dport 443 -j DROP

#iptables -t nat -A OUTPUT -d google.com -p tcp --dport 443 -j DROP
# FIM BLOQUEIA ORKUT

exit 0


espero ter ajudado!!!
falow