Liberar acesso em horário de almoço - Squid [RESOLVIDO]

1. Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 06/11/2014 - 14:42h

Pessoal, uso um squid 3.1.10 e gostaria de liberar o acesso ao facebook no horário de almoço, porém após o horário de almoço, se o usuário mantiver o navegador aberto continua acessando normalmente. Já fui em vários fóruns aqui na internet e a melhor solução que encontrei foi restartar o squid após o horário de almoço (encontrei até como restartar mais rápido com uns parâmetros), porém isso irá impactar no acesso dos demais funcionários.

O que notei foi que após o horário de almoço, a conexão com o IP do facebook ainda permanece ativa e por isso o bloqueio não é feito:

[root@lispbx:/etc/squid]# netstat -nt | grep 443
tcp 0 0 ::ffff:201.20.64.218:49003 ::ffff:66.220.156.2:443 ESTABLISHED

Existe como, após o horário de almoço, remover as conexões com o IP do facebook, sem restartar o squid? Segue meu squid.conf:


# Configuração Squid

# Mensagens de erro em Português
error_directory /usr/share/squid/errors/pt-br

# Porta do Squid
http_port 128
pipeline_prefetch on
shutdown_lifetime 1 second

# Nome do servidor
visible_hostname lispbx.local

# Cache
cache_mem 70 MB
maximum_object_size_in_memory 32 KB
maximum_object_size 124 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /etc/squid/cache 30000 16 256
# Logs de acesso
access_log /var/log/squid/access.log squid

# Regras acl padrão
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl SSL_ports port 443 563 873
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 873 # 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

# Permissões e bloqueios padrão
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


acl LAUNCH_TIME time S M T W H F A 12:00-13:00
acl redesocial url_regex -i "/etc/squid/redesocial"
http_access allow LAUNCH_TIME
http_access deny redesocial


# Bloqueio de downloads por extensão
acl downloads_proibidos url_regex -i \.exe \.torrent \.avi \.mp3
http_access deny downloads_proibidos

# Permissão rede local e servidor
acl redelocal src 192.168.86.0/24
http_access allow localhost
http_access allow redelocal

# Bloqueio de usuários fora da rede
http_access deny all







  


2. Re: Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Andre Ribeiro da Costa
andr3ribeiro

(usa Arch Linux)

Enviado em 06/11/2014 - 15:24h

Cara, eu pesquisei muito isso, muito mesmo.

o jeito que que funcionou comigo foi um script de parar e subir o squid.

Se alguem tiver uma solução melhor, eu tambem me interesso!


3. Re: Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Leandro Marinho
lmbleandro

(usa Ubuntu)

Enviado em 06/11/2014 - 15:38h

Boa tarde,

não seria o caso de indicar a ACL

tipo isto:
http_access allow LAUNCH_TIME redesocial


4. Re: Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 06/11/2014 - 16:38h

Uma solução será colocar duas regras como essas abaixo no Iptables:

iptables -t filter -I FORWARD -p tcp --dport 443 -m string --algo bm --string "facebook.com" -m time --timestart 12:00 --timestop 13:00 --kerneltz -j DROP
iptables -t filter -I FORWARD -p tcp --sport 443 -m string --algo bm --string "facebook.com" -m time --timestart 12:00 --timestop 13:00 --kerneltz -j DROP


Tu podes também implementar alguma coisa tendo por base isso:
http://www.vivaolinux.com.br/dica/Derrubando-conexoes-ativas


5. !

Everton Bruno
evesbruno

(usa Debian)

Enviado em 06/11/2014 - 17:20h

uso assim e funciona!

acl almoco time MTWHFAS 11:30-13:00

acl autenticados proxy_auth REQUIRED

acl sites-almoco url_regex -i "/etc/squid/sites_almoco"


http_access allow almoco autenticados sites-almoco

sites que estao ai
avon
boticario
jornais

rede social so liberar :443


6. Re: Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 06/11/2014 - 18:31h

Um dos meios é criar um script shell com agendamento no crontab para parar o squid no horário 12:00 e startar novamente no horário 13:30 o squid.

Isso com duas versões do squid, uma com squid simples e outra com squid com ACLs que fazem o bloqueio de determinados sites por domínio e palavras chaves.

O script faz isso, substitui a versão do squid citada.

Assim, a estação não fica sem o proxy, apenas com diferença de um do squid robusto e simples.


7. Re: Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 06/11/2014 - 20:26h

A solução do buckminster é uma boa, porém em pouco tempo teremos alguns usuários que irão poder acessar o facebook pelo squid, e consequentemente esta regra de firewall irá barrá-los também. Quanto à implementação do arp informada, não é interessante por conta de que no primeiro método, eu iria ter que ficar monitorando e criando rotas constantemente e no segundo também não porque eu iria ter de derrubar todas as conexões das máquinas.

Já havia tentado a solução do evesbruno, porém também ocorre a mesma coisa que eu citei na primeira pergunta. Creio que a melhor solução seja fechar as conexões estabelecidas que ficam com os servidores do facebook, porém não encontrei uma forma de fazer isso até o momento.


8. Re: Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 07/11/2014 - 12:20h

bmarquesm escreveu:

A solução do buckminster é uma boa, porém em pouco tempo teremos alguns usuários que irão poder acessar o facebook pelo squid, e consequentemente esta regra de firewall irá barrá-los também. Quanto à implementação do arp informada, não é interessante por conta de que no primeiro método, eu iria ter que ficar monitorando e criando rotas constantemente e no segundo também não porque eu iria ter de derrubar todas as conexões das máquinas.

Já havia tentado a solução do evesbruno, porém também ocorre a mesma coisa que eu citei na primeira pergunta. Creio que a melhor solução seja fechar as conexões estabelecidas que ficam com os servidores do facebook, porém não encontrei uma forma de fazer isso até o momento.


Esses usuários que poderão acessar o facebook pelo Squid tu cria uma regra liberando eles pelo IP no Iptables. Não vejo problemas nisso.


9. Re: Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 11/11/2014 - 09:29h

Bom dia galera. Com o script abaixo consegui fazer o bloqueio após o horário:

#!/bin/bash

## bloqueia_face - Cria regras/deleta regras de firewall para bloqueio de conexões estabelecidas com o facebook
## Escrito por: Benedito Marques
## CentOS release 6.2 (Final)


# Exemplo de uso: ./bloqueia_face ativabloqueio

IPFACE1=`/usr/bin/dig +short www.facebook.com | /bin/grep [0-9].[0-9].[0-9].[0-9] | /usr/bin/head -n1`
IPFACE2=`/usr/bin/dig +short facebook.com | /bin/grep [0-9].[0-9].[0-9].[0-9] | /usr/bin/head -n1`
IPFACE3=`/usr/bin/dig +short fbstatic-a.akamaihd.net | /bin/grep [0-9].[0-9].[0-9].[0-9] | /usr/bin/head -n1`
SPORTS=`/bin/netstat -nt | /bin/egrep "(\b$IPFACE1\b|\b$IPFACE2\b|\b$IPFACE3\b)" | /bin/awk -F ' ' '{print $4}' | /bin/cut -d ':' -f2`

if [ "$1" = "ativabloqueio" ]; then
#VERIFICA SE A VARIÁVEL $SPORTS É VAZIA
if [ -z "$SPORTS" ]; then
/bin/echo "Sem conexões com o Facebook. A ativação do bloqueio não é necessária."
else

for i in `/bin/echo $SPORTS` ; do /sbin/iptables -I OUTPUT -d $IPFACE1 -p tcp --sport $i -m multiport --dports 443,80 -j DROP ; done
for i in `/bin/echo $SPORTS` ; do /sbin/iptables -I OUTPUT -d $IPFACE2 -p tcp --sport $i -m multiport --dports 443,80 -j DROP ; done
for i in `/bin/echo $SPORTS` ; do /sbin/iptables -I OUTPUT -d $IPFACE3 -p tcp --sport $i -m multiport --dports 443,80 -j DROP ; done
fi

elif [ "$1" = "desativabloqueio" ]; then

#COLETANDO REGRAS CRIADAS ANTES
/sbin/iptables-save | /bin/grep OUTPUT | /bin/grep DROP | /bin/grep tcp | /bin/grep 443 | /bin/grep 80 | sed 's/-A/\/sbin\/iptables -t filter -D/g' > /tmp/regras
#REMOVENDO REGRAS COLETADAS
. /tmp/regras

else
/bin/echo -e "Argumento incorreto! \nOpções possíveis: ativabloqueio, desativabloqueio."

fi


IMPLEMENTAÇÃO

- Horário de almoço: 12:00 - 13:30

O script deve ser ativado um minuto após o horário de almoço e pode ser desativado 5 minutos depois:

31 13 * * * root /usr/local/sbin/bloqueia_face ativabloqueio
36 13 * * * root /usr/local/sbin/bloqueia_face desativabloqueio

FUNCIONAMENTO

Como dito antes, as conexões permanecem estabelecidas após o horário de almoço e por isso o pessoal ainda consegue acessar o face. Quando é ativado o bloqueio são identificadas as conexões existentes com os hosts do facebook e são criadas regras de firewall que fazem o bloqueio para estas conexões.


OBSERVAÇÕES

1 - O script acima não irá bloquear quem possui NAT e está acessando o facebook, pois foi usada a chain OUTPUT bloqueando única e exclusivamente o servidor proxy. Além disso, quando há NAT as conexões não ficam no proxy, e sim na máquina local;

2 - O script também não irá bloquear quem, pelo proxy, tem permissão de acesso ao facebook fora do horário, pois ele faz restrições pela porta do socket de origem já existente ( --sport ), permitindo novas conexões do proxy para os IPs do facebook.

3 - É importante deixar as regras de bloqueio ativas por no mínimo 5 minutos, pois durante este tempo observei no monitoramento do tráfego que há alguns keep-alives de minuto em minuto do proxy para os servidores do facebook e que precisam ser bloqueados para finalizar as conexões estabelecidas.

4 - Se o usuário mantiver a página do facebook aberta fora do horário do almoço e só vier a mexer depois que as regras forem retiradas, também haverá bloqueio, pois as conexões que estavam estabelecidas já tiveram seu tempo de estabelecimento esgotado.

5 - O script acima foi implementado para bloquear somente o facebook, porém pode ser alterado posteriormente para bloquear outros tipos de sites que os usuários venham a abusar do uso fora do horário de almoço.




10. Re: Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 11/11/2014 - 13:42h

Muito bom.

Tu poderias colocar este sript como uma dica aqui no VOL.


11. Re: Liberar acesso em horário de almoço - Squid [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 14/11/2014 - 09:39h

Beleza. Coloquei uma versão até melhorada lá na sessão de scripts, pra galera conferir depois.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts