Bloquear sites e servicos (squid + dansguardian)!

Iniciado por dupavesi, 20 de Dezembro de 2008, 15:37

tópico anterior - próximo tópico

dupavesi

Aqui vai uma dica para quem quer bloquear sites localmente, sem necessidade de um servidor proxy ou algo do gênero e sem a necessidade de configurar o navegador (proxy transparente).
Eu peguei várias dicas de diversos sites e consegui uma filtragem bastante eficiente com a ajuda do iptables + squid + dansguardian....
O iptables já vem instalado por padrão no (K)(X)Ubuntu os outros programas podem ser instalados via apt-get (gnome) ou aptitude (kde).
O squid é um servidor proxy que aqui será usado localmente (na mesma máquina).
O dansguardian é o supervisor de conteúdo. Ele é bastante flexível e completo pois faz o bloqueio através de listas de sites (blacklists) e também por conteúdo do site; se o site não estiver na lista de bloqueios ele analisa o conteúdo do site (por palavras) decidindo se bloqueia ou não.
O iptables é o firewall mais conhecido e utilizado do mundo linux......

A idéia é fazer com que as requisições http seja redirecionadas para o dansguardian que, se aprovada, é encaminhada para o squid e o squid encaminha para a "web".

Primeiro instale todos os programas citados e depois vamos configurar o squid:

Squid
primeiro crie uma cópia do arquivo autoexplicativo squid.conf para ler com mais calma depois:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf_old
agora vamos editar o squid.conf:
sudo kate /etc/squid/squid.conf
troque o kate (acima) pelo editor de texto de sua preferência (kedit, gedit,...)
apague tudo que tiver escrito e cole este aqui:
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

a parte de segurança é opcional
isso já basta p/ vc ter acesso c/ squid c/ proxy transparente (sem necessitar configurar o navegador)....

Dansguardian
p/ o dansguardian utilizei a filtragem por palavras (conteúdo) 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 domínio não apresentou problemas e bloqueou com eficiência.
Editado:
Provavelmente, o motivo da lentidão do bloqueio por url pode ser visto em:
http://www.dicas-l.com.br/dicas-l/20080101.php
http://www.google.com.br/search?q=dansguardian+%22ordem+alfabetica%22


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

mais sobre Dansguardian:
http://www.gdhpress.com.br/servidores/leia/index.php?p=cap2-23
http://www.gdhpress.com.br/servidores/leia/index.php?p=cap2-24

Iptables
alterar o iptables é necessário p/ que toda a requisição http ou tcp (porta 80 por padrão) 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 comunicação à porta ao squid já q ele vem como dono "proxy" por padrão....

o problema serão os https que utilizam a porta 443 por padrão e, portanto não passam pela filtragem do dansguardian....
pois bem....para bloqueá-los (levando em conta que vc não quer mexer na configuração do navegador - proxy transparente) vc terá que bloquear manualmente os poucos sites que 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 está mexendo no rc.local, adicione as chamadas p/ o squid e o dansguardian soh p/ garantir (meu dansguardian não 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


e aproveite também p/ bloquear outras portas p/ evitar o uso de proxy público...
iptables -P OUTPUT -p tcp DROP
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p udp ! --dport 53 -j REJECT
iptables -A OUTPUT -p tcp ! -m multiport --dport 21,53,80,443 -j REJECT

neste caso só está liberado as portas:
21 - ftp
53 - dns (necessário p/ navegação web udp e tcp)
80 - http (que está sendo redirecionada p/ a 8080)
443 - https

e pode adicionar também a autoatualização da blacklist do dansguardian
#atualizacao blacklist
/var/lib/lrpkg/UpdateBL &

no site http://www.gdhpress.com.br/servidores/leia/index.php?p=cap2-24 tem tudo bem explicado!!!

a ordem que se coloca no arquivo é muito importante pois os comandos são lidos de cima p/ baixo....

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.

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

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

iptables -P OUTPUT -p tcp DROP
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p udp ! --dport 53 -j REJECT
iptables -A OUTPUT -p tcp ! -m multiport --dport 21,53,80,443 -j REJECT

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


#atualizacao blacklist
/var/lib/lrpkg/UpdateBL &

# 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



Inicializa o sistema e veja os resultados!
Depois de fazer alguma alteração no squid ou no dansguardian é necessário reiniciar apenas o serviço.
sudo /etc/init.d/squid restart
sudo /etc/init.d/dansguardian restart

fontes:
http://ubuntu.no.sapo.pt/squid_dansguardian.html
http://www.gdhpress.com.br/servidores/
http://dansguardian.org/

Procure mais especificamente sobre cada aplicativo para ajudá-lo na hora da configuração de cada um deles, tem bastante coisa sobre o assunto na internet!

Espero ter ajudado!
Falow