Pular para o conteúdo

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

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar

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

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





Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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

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]

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]

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. !

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]

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]

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]

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]

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]

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]

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

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

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder