Bloquear Facebook (HTTPS) por IPtables com horários

Publicado por Vinicius Mathias em 15/02/2013

[ Hits: 14.248 ]

Blog: https://www.linkedin.com/in/mathiasvinicius/

 


Bloquear Facebook (HTTPS) por IPtables com horários



Depois de ter tentado de várias maneiras filtrar via Squid e não ter chegado a um resultado satisfatório, resolvi bloquear, via IPtables, usando as dicas de:
Mas eu precisava que, assim como no Squid, o Facebook fosse liberado no horário de almoço e fora do expediente, e seguindo a lista de exceções do próprio Squid.

Sendo assim, montei o seguinte código:

#!/bin/bash
#BLOQUEIOS:

hora=`/bin/date +%H%M`
if `[ "$hora" -gt "0759" ] && [ "$hora" -lt "1229" ] || [ "$hora" -gt "1359" ] && [ "$hora" -lt "1729" ] `; then
    op=1;
else
    op=2;
fi
# para que desse certo inclui os horários sem o " - " assim compara como se fosse números inteiros

permitidos=$(egrep -v "(^#|^$)" /etc/squid/acessototal)  #Aqui ele lê a lista de IPs que possuem acesso ao Facebook, independentemente do horário, como existem linhas comentadas nesta lista com o nome do dono do IP, esse comando ignora essas linhas listando apenas os IPs

##BLOQUEIO DO FACEBOOK

FACEBOOK_IP_RANGE="31.13.64.0-31.13.127.255 31.13.24.0-31.13.31.255 74.119.76.0-74.119.79.255 69.63.176.0-69.63.191.255 69.171.224.0-69.171.255.255 66.220.144.0-66.220.159.255 204.15.20.0-204.15.23.255 173.252.64.0-173.252.127.255"
iptables -N FACEBOOK

## FACEBOOK DENY
for face in $FACEBOOK_IP_RANGE; do
    iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range $face --dport 443 -j FACEBOOK
    iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range $face --dport 80 -j FACEBOOK
done

FACEBOOK_ALLOW="$permitidos" #MSR_LIBERADO  #Aqui libera os permitidos.

for MSR_LIBERADO in $FACEBOOK_ALLOW; do
    iptables -I FACEBOOK -s $MSR_LIBERADO -j ACCEPT
done

if [ $op -eq "1" ]; then  #Aqui caso esteja no horário de expediente ele é bloqueado
    echo "Bloqueando"
    iptables -A FACEBOOK -j REJECT
fi

if [ $op -eq "2" ]; then  #E caso esteja fora do horário de serviço é liberado
    echo "Liberando"
    iptables -A FACEBOOK -j ACCEPT
fi

No meu caso incluí essas regras no próprio Firewall e programei no crontab para rodar nos horários programados. Exemplo:

30 12,13,17 * * *   root        /scripts/firewall.sh

Espero poder ter ajudado.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Usando SkypeCast no Linux com versão 2.0 do Skype

Configurando conexão wireless no Mandriva One e superior (iniciantes)

Terra Sonora no GNU/Linux

Qual é o meu ip?

IRC via telnet

  

Comentários
[1] Comentário enviado por vmmello em 20/02/2013 - 21:13h

Olá,

Só um comentário rápido.

Se você mantém a lógica de hora dentro do script, e algum dia o pessoal tem que ir até mais tarde, e o seu chefe pede pra bloquear o Facebook até as 19 horas, você vai ter que editar o script, ajustar a hora pra um novo horário, executar, e editar de novo pra que no próximo dia seja executado na hora correta. Entendeu? Eu imagino que seria melhor se o script fosse independente de horário, e isso fosse controlado pelas entradas no cron, por exemplo:

# bloqueia as 8h e as 14h
0 8,14 * * * root /scripts/fw-facebook.sh bloqueia

# libera após as 12:30 e 18 horas
30 12 * * * root /scripts/fw-facebook.sh libera
0 18 * * * root /scripts/fw-facebook.sh libera

Desta forma, o script fica mais genérico. Modifiquei um pouco o script mantendo exatamente a sua lógica, mas apenas removendo este inconveniente, você poder ver a sugestão aqui: http://pastebin.com/x19sf6D8

[2] Comentário enviado por viniciusmathias em 20/02/2013 - 22:09h

Obrigado pelo seu comentário, mas aqui eu embuti dentro do Firewall.sh que eu possuo, para eu não precisar de 2 aquivos, desenvolvi esse script, e trocar os horaris, não é tao difícil assim, basta altetar no campo 1729 para 1859, já que meu firewall executa nas horas cheias...

[3] Comentário enviado por paulo.fernandes em 04/07/2013 - 16:36h

Olá Vinicius, estou tendo esse problema em uma instituição de ensino que trabalho, e até agora não consegui encontrar uma solução definitiva para o problema, essa dica sua foi a que mais identificou com meu caso, encontrei varios tutoriais ensinando como bloquear tudo, que não é meu caso, preciso bloquear alguns IP's apenas e o restante terão acesso normalmente, gostaria de saber se tem como enviar a configuração do seu SQUID, para eu ver como ficou suas ACL para acesso total(IP liberados para acessar o face)
Desde já agradeçoe fico no aguardo



Contribuir com comentário