Bloquear Facebook HTTPS liberando apenas alguns usuários

Publicado por dalveson sanches em 05/02/2013

[ Hits: 10.384 ]

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

Configurando o APT do seu Ubuntu para usar o proxy

Liberar SNMP no Firewall do Linux

Monitorando o seu micro

Backtrack 4 - Atualizando pasta de exploits através do site milw0rm

Controle de banda com Shaper

  

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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts