Liberar o WhatsApp - Texto, imagem, áudio, vídeo e ligações [iptables]

Publicado por Bruno Quinta em 02/06/2015

[ Hits: 75.921 ]

 


Liberar o WhatsApp - Texto, imagem, áudio, vídeo e ligações [iptables]



Nesta dica será abordado como efetuar a liberação do WhatsApp em um firewall que a política padrão seja DROP.

Vale ressaltar que estarão liberados o envio de texto, imagens, vídeos, áudios e ligações.

Objetivo

Apesar de várias empresas optarem pelo bloqueio de determinados sites e aplicativos em sua rede interna, buscando um menor desperdício de tempo por parte de seus funcionários, algumas acabam utilizando ferramentas como o WhatsApp possibilitando um contato direto com funcionários, clientes e/ou fornecedores.

Desta forma surge a necessidade da liberação do mesmo em ambientes em que a política padrão do iptables seja DROP.

Nesta dica serão apresentados os passos a serem seguidos para que o recurso seja disponibilizado.

Liberações

As seguintes regras deverão ser adicionadas ao script do firewall:

iptables -A FORWARD -p udp --dport 3478 -j ACCEPT # WhatsApp
iptables -A FORWARD -p tcp --dport 5222 -j ACCEPT # WhatsApp
iptables -A FORWARD -p tcp --dport 5223 -j ACCEPT # WhatsApp

Apesar da liberação das portas citadas acima possibilitarem o envio e recebimento de mensagens de texto e ligações, o aplicativo continua não enviando/recebendo imagens e vídeos, desta forma será necessário efetuar a liberação dos IPs do WhatsApp (disponíveis no site do WhatsApp). Neste caso liberaremos os IPs somente para a porta 443, que se faz necessária.

O seguinte script pode ser criado e adicionado ao script do firewall:

#!/bin/bash
wget='/usr/bin/wget'
ipt='/sbin/iptables'
url='https://www.whatsapp.com/cidr.txt'
ipt_target='ACCEPT'
$ipt -N WHATSAPP
$ipt -A FORWARD -j WHATSAPP
$ipt -F WHATSAPP
$ipt -I WHATSAPP -j RETURN
for node in `$wget -q --no-check-certificate -O - $url | sort | uniq`; do $ipt -I WHATSAPP -d $node -p tcp --dport 443 -j $ipt_target
done

Conclusão

Abaixo é possível entender o motivo de cada liberação:
  • Forward porta 3478 UDP - Necessária para efetuar ligações
  • Forward porta 5222 TCP - Necessária para conexão e envio/recebimento de texto
  • Forward porta 5223 TCP - Necessária para conexão e envio/recebimento de texto
  • IPs WhatsApp Porta 443 - Necessária para envio/recebimento de imagens/vídeos

Desta forma, efetuando as liberações apresentadas neste texto, será possível liberar o WhatsApp com sucesso em sua rede.

Vale ressaltar que o script de liberação dos IPs do WhatsApp deverá ser executado eventualmente, para que a lista de liberados seja atualizada.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Criação de 1° super usuário no PostgreSQL

Como ler HQs no Ubuntu 16.04

Navegadores e suas funcionalidades

Implementando suporte a tradução com GetText + Google Translate API

Como criar DVDs, SVCDs e VCDs no Linux

  

Comentários
[1] Comentário enviado por limarodrigo74 em 02/06/2015 - 19:09h

Olá Bruno, tudo bem?

Cara, show de bola este script, porém como eu insiro uma rede de origem nele?

Por exemplo, quero que apenas a rede 10.90.90.0/22 tenha este tipo de liberação.

Desde já agradeço!

Abraços!

[2] Comentário enviado por sergiotrindade4 em 18/09/2015 - 16:34h

Boa tarde!

No meu caso trabalho com Endian Firewall Community, preciso liberar o Whatsapp somente textos e imagens.

O problema em liberar a porta 443 no firewall é que acaba liberando vídeo também.

Alguém sabe uma maneira de fazer isso ?

Obrigado!

[3] Comentário enviado por evandroed em 25/09/2015 - 23:41h

Muito bom este post Bruno...

Há tempos estava tentando liberar o whatsapp na minha rede e não estava conseguindo encontrar a documentação necessária...

Muito obrigado... ;)

[4] Comentário enviado por filipi_saci em 02/12/2015 - 11:39h

Bom dia pessoal,
Estou com uma dúvida.. O que exatamente acontece nessa linha:
for node in `$wget -q --no-check-certificate -O - $url | sort | uniq`;do

Primeira dúvida, o apostrofo está certo?? ou deveria ser '
Segunda dúvida, ao executar o script tenho o seguinte retorno para o parâmetro -q:
iptables v1.4.21: unknown option "-q"
Try `iptables -h' or 'iptables --help' for more information.
Terceira, se eu tiro os parâmetros acaba dando erro nos outros parâmetros, como no --no-check-certificate

Alguém pode me dizer o que faz exatamente a linha do for?

Desde já, agradeço.

[5] Comentário enviado por filipi_saci em 02/12/2015 - 21:53h


[4] Comentário enviado por filipi_saci em 02/12/2015 - 11:39h

Bom dia pessoal,
Estou com uma dúvida.. O que exatamente acontece nessa linha:
for node in `$wget -q --no-check-certificate -O - $url | sort | uniq`;do

Primeira dúvida, o apostrofo está certo?? ou deveria ser '
Segunda dúvida, ao executar o script tenho o seguinte retorno para o parâmetro -q:
iptables v1.4.21: unknown option "-q"
Try `iptables -h' or 'iptables --help' for more information.
Terceira, se eu tiro os parâmetros acaba dando erro nos outros parâmetros, como no --no-check-certificate

Alguém pode me dizer o que faz exatamente a linha do for?

Desde já, agradeço.



------------------------------------------------------------
Segue resposta dada pelo thinomar no post:
http://www.vivaolinux.com.br/topico/Shell-Script/Duvida-num-laco-de-repeticao-com-For/

------------------------------------------------------

`$wget -q --no-check-certificate -O - $url | sort | uniq`
$wget é a variável que aponta para o caminho completo do wget:
wget='/usr/bin/wget'
Os argumentos:
-q: Suprime saídas do comando wget.
--no-check-certificate: Suprime saídas referentes a HTTPS.
-O: imprime o conteúdo do arquivo baixado na tela.
$url: Variável que aponta para URL:
url='https://www.whatsapp.com/cidr.txt'
|: Redirecionador da saída de um comando.
sort: Organiza texto (ordem alfabética).
uniq: Elimina registros duplicados.

E o acento grave (crase `) serve para dar prioridade de execução para o código dentro dela.

Sobre o for: o resultado do wget está sendo jogado, linha a linha, na variável node. Cada linha é um looping e o for executará até que chegue na última linha do arquivo baixado.

Sobre o comando dentro do for:
$ipt: Variável que contém caminho do iptables, que foi declarado no inicio do script.
-I WHATSAPP: Inserção na chain WHATSAPP
-d $node: Aplicar regra ao destino contido na variável node, que recebe conteúdo no laço.
-p tcp --dport 443: O que estiver no protocolo TCP e porta 443
-j $ipt_target: Decisão a se tomar (a variável está com o valor ACCEPT, como visto no inicio do código, o que significa que esse looping está liberando as transações de rede do WhatsApp)
--

[6] Comentário enviado por razakmg em 04/03/2016 - 16:23h

O meu deu esse erro.

iptables v1.4.14: invalid mask `64' specified

iptables v1.4.14: invalid mask `128' specified

Não aceitou as máscaras do IPV6
IPV4 foi.
Mas então, o whatsapp não funciona ainda (nem mídias e nem texto).
Uso IPTABLES e Squid3, mas pelo o que andei pesquisando, o squid3 não interfere no WPP, certo?
O que devo fazer?

[7] Comentário enviado por razakmg em 06/03/2016 - 10:41h

OBS: meu proxy não é transparente.

[8] Comentário enviado por samuelpqdjs em 15/06/2017 - 13:46h

Boa tarde, o arquivo cidr no endereço https://www.whatsapp.com/cidr.txt está dando erro 404.

Se alguém precisar, tem uma cópia em http://www.r3n3.com.br/whatsapp/cidr.txt


[9] Comentário enviado por pelo em 23/06/2017 - 17:01h

Olá,

Essa dica do https://www.whatsapp.com/cidr.txt deixou de funcionar.
Alguma solução?

Até!

Sérgio Abrantes

[10] Comentário enviado por sauloneiva em 02/09/2017 - 08:29h

Olá!!!

O meu funcionou blz nos primeiros dias, agora parou de liberar o acesso dos whatssap pelo smartphones na rede.
Alguma dica?



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