Bloquear Facebook HTTPS liberando apenas alguns usuários

Publicado por dalveson sanches em 05/02/2013

[ Hits: 9.643 ]

Blog: http://www.vivaolinux.com.br/~dalveson

 


Bloquear Facebook HTTPS liberando apenas alguns usuários



Fala galera.

Nesta dica, mostro como bloquear o Facebook através da porta 443, liberando apenas para alguns usuários. Todo o procedimento será executado no IPtables.

Vamos lá. Crie um arquivo chamado "ip_face" dentro de /etc:

# touch /etc/ip_face

Edite-o e inclua seus IPs/usuários obedecendo o seguinte padrão, um registro por linha:

192.168.0.1-Jose
192.168.0.2-Antonio

No seu script de firewall, adicione o seguinte:

for IP_FACE in `cat /etc/ip_face`
do
ip_usuario=`echo $IP_FACE | cut -d'-' -f1`
nome_usuario=`echo $IP_FACE | cut -d'-' -f2`
iptables -t filter -I FORWARD ! -d $ip_usuario -p tcp --dport 443 -m string --algo bm --string "facebook.com" -j REJECT
iptables -t filter -I FORWARD ! -s $ip_usuario -p tcp --sport 443 -m string --algo bm --string "facebook.com" -j REJECT
iptables -t filter -I OUTPUT ! -d $ip_usuario -p tcp --dport 443 -m string --algo bm --string "facebook.com" -j REJECT
iptables -t filter -I OUTPUT ! -s $ip_usuario -p tcp --sport 443 -m string --algo bm --string "facebook.com" -j REJECT
done

Agora basta reiniciar seu script de firewall.

Explicando:
  • for IP_FACE in `cat /etc/ip_face` → Local onde está salvo o arquivo "ip_face" com os IPs e nomes de usuários;
  • ip_usuario=`echo $IP_FACE | cut -d'-' -f1` → Digo que é para ler o arquivo "IP_FACE" e, dentro dele, recortar o que está antes do "-" e criar uma variável chamada de ip_usuario;
  • nome_usuario=`echo $IP_FACE | cut -d'-' -f2` → Digo que é para ler o arquivo IP_FACE e dentro dele recortar o que está apos o "-" e criar uma variável chamada de nome_usuario.

O restante, eu aplico as regras utilizando o módulo string apenas na variável "ip_usuario" na porta 443 nas chains FORWARD e OUTPUT, nos protocolos TCP de origem e destino.

Abraços.

Outras dicas deste autor

Samba - Auditoria de logs

Leitura recomendada

Softwares com falhas? Fique ligado sysadmin!

Capturando o MAC address do cliente via Apache

Bloqueando usuários com ARP

Como desabilitar o protocolo SSL3 no Nginx

Monitorando acesso a sites anônimos da Deep Web

  

Comentários
[1] Comentário enviado por iaecengcvl em 06/02/2013 - 10:52h

Funcionou bacana....

Mas como colocaria o time para que fosse liberdo no hirário do almoço (12h00 às 14h00)?

[2] Comentário enviado por dalveson em 06/02/2013 - 11:11h


[1] Comentário enviado por iaecengcvl em 06/02/2013 - 10:52h:

Funcionou bacana....

Mas como colocaria o time para que fosse liberdo no hirário do almoço (12h00 às 14h00)?


ficaria assim:

iptables -t filter -I FORWARD ! -d $ip_usuario -p tcp --dport 443 -m string --algo bm --string "facebook.com" -m time --timestart 08:00 --timestop 18:00 -j REJECT

onde:
timestart é a hjora que a regra passa a valer;
timestop é a hora que a regra para de funcionar.

inclusive vc pode fazer muito mais, nesse link http://www.vivaolinux.com.br/artigo/IPtables-Trabalhando-com-Modulos tem um otimo artigo que ensina muitos outros modulos interessantes para o iptbles.

att

[3] Comentário enviado por alexccastilho em 10/04/2013 - 09:32h

Bom dia, saberia me dizer como fazer com que estas regras funcionem da seguinte forma:

Todo mundo tem acesso ao facebook, com excessão de quem estiver na lista ip_face?

Portanto, colocaria apenas os IPs que não quero que acesse o facebook dentro do arquivo.

Grato,

Alex

PS.: Já tentei:

for IP_FACE in `cat /etc/ip_face`
do
ip_usuario=`echo $IP_FACE | cut -d'-' -f1`
nome_usuario=`echo $IP_FACE | cut -d'-' -f2`
iptables -t filter -I FORWARD ! -d $ip_usuario -p tcp --dport 443 -m string --algo bm --string "facebook.com" -j ACCEPT
iptables -t filter -I FORWARD ! -s $ip_usuario -p tcp --sport 443 -m string --algo bm --string "facebook.com" -j ACCEPT
iptables -t filter -I OUTPUT ! -d $ip_usuario -p tcp --dport 443 -m string --algo bm --string "facebook.com" -j ACCEPT
iptables -t filter -I OUTPUT ! -s $ip_usuario -p tcp --sport 443 -m string --algo bm --string "facebook.com" -j ACCEPT
done

e,

for IP_FACE in `cat /etc/ip_face`
do
ip_usuario=`echo $IP_FACE | cut -d'-' -f1`
nome_usuario=`echo $IP_FACE | cut -d'-' -f2`
iptables -t filter -I FORWARD -d $ip_usuario -p tcp --dport 443 -m string --algo bm --string "facebook.com" -j REJECT
iptables -t filter -I FORWARD -s $ip_usuario -p tcp --sport 443 -m string --algo bm --string "facebook.com" -j REJECT
iptables -t filter -I OUTPUT -d $ip_usuario -p tcp --dport 443 -m string --algo bm --string "facebook.com" -j REJECT
iptables -t filter -I OUTPUT -s $ip_usuario -p tcp --sport 443 -m string --algo bm --string "facebook.com" -j REJECT
done

De qualquer forma sem efetividade.

[4] Comentário enviado por joserf em 08/06/2013 - 18:14h

fiz no ubuntu 12.04 e não rolou. alguma dica.

[5] Comentário enviado por marlluslustosa em 25/06/2013 - 21:51h

Só uma dica: Em uma rede com muitos usuários esse método vai deixar o servidor muito lento, pois a cada requisição o Netfilter (backend do iptables) vai abrir todo pacote que chegar e comparar o campo referente a string da url com "facebook.com", e isso é um procedimento muito custoso.

Uma boa solução seria bloquear a porta 443 pro facebook com iptables ou bloqueá-lo usando algum proxy de aplicação (squid, por exemplo).



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts