Bloquear Facebook (HTTPS) por IPtables com horários
Dica publicada em Linux / Internet
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:
No meu caso incluí essas regras no próprio Firewall e programei no crontab para rodar nos horários programados. Exemplo:
Espero poder ter ajudado.
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
#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.
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