[Script] Bloqueando o facebook com iptables para quem usa proxy transparente

Scripts para automa
Avatar do usuário
Elton
Administrator
Administrator
Mensagens: 1259
Registrado em: 10 Jun 2013 12:44
Status: Offline

[Script] Bloqueando o facebook com iptables para quem usa proxy transparente

Mensagem por Elton »

Bloqueio do facebook com Firewall

Não esqueça de ler as recomendações no final do texto



Um grande problema atualmente é o bloqueio do facebook. Muitos utilizam o proxy para isso, basta usar o url_regex no squid por exemplo:

acl facebook url_regex –i facebook

http_access deny facebook



Mas às vezes somente isso não é o suficiente. Imagine que sua empresa usa o Squid como Proxy, sabendo disso, as conexões 443 (https) não passarão pelo proxy, para evitar problemas de certificados. E nesses momentos alguns espertinhos aproveitam para acessar o facebook via https.

Bom, nesse momento , já que sempre usamos proxy squid e firewall iptables, basta criar uma regra no firewall para bloquear o facebook , certo ?

Errado.

O facebook possui muitos endereços, e esse mudam constantemente. Poderíamos até usar uma lista fixa, mas isso seria um problema caso novos endereços fossem adicionados nossa lista estaria obsoleta.

Há alguns dias atrás, um aluno ( Frederico ), me disse que na empresa dele usavam um script que roda à todo momento, buscando por novos endereços do facebook, e caso ache, adiciona automaticamente no firewall.  Então resolvi fazer um teste e criei um script para isso, e como esperado, funcionou perfeitamente.

Estarei postando o script abaixo, que poderá ser utiliza alterando-se as variáveis de acordo com sua rede. o script consiste em um arquivo com os endereço IP s do facebook, que é utilizado como base para regras do iptables. Também criei uma cadeia nova no firewall chamada FACEBOOK. Abaixo essa sintaxe deverá ser colocada no começo do firewall, para que regras que permitam FORWARD na porta 443 não sejam processadas primeiro:

No script de firewall:

REDE_INTERNA=”192.168.0.0/24”

iptables –N FACEBOOK

iptables –I FORWARD –s $REDE_INTERNA –j FACEBOOK

for i in `cat /etc/facebook.txt`;do

iptables –A FACEBOOK –d $i –j REJECT

done





iptalbles –A FORWARD –s $REDE_INTERNA –m multiport –p tcp –dports 443,25,110,20,21 –j ACCEPT



Temos a váriavel REDE_INTERNA, que deverá ser alterada para sua rede privada. Após isso crio uma cadeia chamada facebook, e crio o vinculo com a FOWARD. Veja que usei a opção “-I” para que seja colocada na primeira posição na cadeia FORWARD. Após isso usei um loop para processar o arquivo /etc/facebook.txt que provavelmente conterá já alguns endereço IP , usando a alvo REJECT . A ultima linha do script é somente um exemplo, ou seja, depois disso você pode adicionar normalmente sua regras.

Agora vamos ao script que deverá ser adicionado ao crontab, para executar de tempos em tempos, eu abaixo mostrarei como colocar de minuto em minuto.

Vejamos o script em si:

#!/bin/bash

#Captura o IP do site www.facebook.com

#!/bin/bash



#Captura o IP do site www.facebook.com

SITE=`ping –c 1 www.facebook.com | grep “bytes of data” | awk ‘{print $3}’ | tr –d  (  | tr –d ) `

#Verifica se o IP não consta na lista. Caso não conste, executará todos procedimentos.

if (! grep  “$SITE”  /etc/facebook.txt >/dev/null);then

echo $SITE >>/etc/facebook.txt

iptables –F FACEBOOK

for i in `cat /etc/facebook.txt`;do

iptables –A FACEBOOK –d $i –j REJECT

done

fi



Bom, podemos ver acima que a variável SITE guardará o endereço IP do site facebook para aquele momento, usei o awk para imprimir o terceiro campo, e o tr para remover os parênteses que armazenam o endereço IP.

O próximo passo é verificar se o endereço IP não consta já na lista. Caso não conste será adicionado a lista , em seguida damos um flush (-F) em todas as regras da cadeia FACEBOOK, e novamente é executado um for (loop) para criar todas as regras , que bloquearão os endereços ip contidos no arquivo.

Obviamente você poderia somente adicionar está ultima regra sem nenhum problema, o efeito seria o mesmo.

Mostrou-se muito eficiente em meus testes, o uso desse script.

Não esqueça de adicionar o /etc/crontab para que seja executado a cada intervalo de tempo:



* * * * *  root /bin/facebook.sh

*/5 * * * *  root /bin/facebook.sh





Neste dois exemplo acima, o script no primeiro caso será executado a cada minuto ( ou seja, de minuto em minuto ) e o segundo a cada 5 minutos. Acredito que no começo é interessante deixar a cada minuto, ou até executar na mão ( no shell ), para que ele adicione novos endereços do facebook no arquivo de texto. Depois de um tempo, quando já estiver atualizado, podemos diminuir essa frequência.

Não esqueça  de deixar a regra do proxy ativa para http, pois aqui no iptables serão tratados o trafego 443 ( https) ou outro qualquer, e somente a porta 80 que não será tratada, já que a empresa usa proxy transparente.

Caso sua empresa não uso proxy transparente, basta adicionar a regra no squid ( aquela lá de cima, a primeira ) dentro do seu squid.conf, e setar o browser para usar o seu proxy, que já será o suficiente.

E agora os usuários espertinhos terão que dizer adeus ao facebook. Pelo menos usando https. Se souberem de algo novo, por favor me envie… Neste momento estamos tentando bloquear o ultrasurf, para fechar com chave de ouro.

Espero que aproveitem.

Um grande abraço

André Stato Filho

Recomendações: Devido à alguns erros, vou passar as recomendações para evitar problemas.

Em relação ao script o ping fica entre crases “, para trazer o retorno do comando. Já o awk fica entre as simples ” na parte do print , como ‘{ print $3}’.

No for também é usado crase for i in `    …. `.

Essa pontuações são muito importantes.

O arquivo /etc/facebook, já deve existir, pois caso contrário será necessário implementar um if para verificar se o arquivo existe de fato. Desta forma é mais fácil criar-lo e colocar um simples IP dentro dele.

Quanto ao script iptables, para remover a cadeia FACEBOOK , basta adicionar isso na parte de stop do seu firewall:

iptables -F FACEBOOK

iptables -F FORWARD

iptables -X FACEBOOK

Desta forma a cadeia será criada via -N do iptables no start.


Créditos: http://www.stato.blog.br/wordpress/?p=446


"Colaborar atrai amigos, competir atrai inimigos ..."

Voltar para “Scripts”