WhatsApp APP - Como não passar pelo proxy Squid? [RESOLVIDO]

1. WhatsApp APP - Como não passar pelo proxy Squid? [RESOLVIDO]

Jose Carlos Anicesa Silva
servidorlinux

(usa Debian)

Enviado em 16/09/2022 - 21:36h

Olá pessoal boa noite.

Estou tentando configurar o iptables para fazer forwarding de portas para o APP do WhatsApp não passar pelo proxy Squid, já que o aplicativo do WhatsApp não foi projetado para funcionar com proxy, conforme o link abaixo, mas não estou consguindo escrever estas regras.

https://winconnection.winco.com.br/winki/691-como-liberar-o-uso-do-aplicativo-whatsapp--desktop--no-...
https://treinamento24.com/library/lecture/read/375976-o-que-e-proxy-e-como-configurar

A saída para o comando tail -f /var/log/squid/access.log | grep whats é esta:

1663367213.117 261 10.0.0.7 TCP_TUNNEL/200 1215 CONNECT dit.whatsapp.net:443 - HIER_DIRECT/157.240.222.60 -

O proxy está configurado nos smartphones de forma manual e as regras do iptables estão escritas para forçar os usuários a não desativar o proxy, caso alguém desative, não navega.

O Squid está configurado para a porta 3128, a interface wan é 192.168.2.19 e a lan é 10.0.0.1.

Já tentei de tudo. Algumas regras escrevi para ver o que acontece, já que não tenho domínio do iptables/firewall.

Por favor, preciso de ajuda para escrever estas regras e liberar o WhatsApp (mesmo que seja apenas para mensagens de texto), mas sem desativar o proxy.

O servidor está com duas placas de rede, Debian 11 e a placa da lan está ligada direto no roteador wifi (que está configurado para o modo AP). O DHCP é feito no servidor.

Desde já agradeço a ajuda.

Vou postar o script de firewall como está e o que já tentei mas não teve resultado:

#!/bin/sh

### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $ifwan $iflocal $redelocal
# Required-Stop: $ifwan $iflocal $redelocal
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Firewall
# Description: Firewall da rede wifi dos alunos
#
### END INIT INFO



# Interface rede wan
ifwan="enp0s2"



# Interface rede local
iflocal="enp1s4"


# Rede Local
redelocal="10.0.0.0/23"



iniciar(){


# Ativa modulo iptables e forward
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward



##################################################
# Libera o Whatsapp APP
##################################################

iptables -A INPUT -p tcp -m multiport --dports 3478,5222,5223 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dports 3478,5222,5223 -j ACCEPT
iptables -A FORWARD -p tcp -m multiport --dports 3478,5222,5223 -j ACCEPT
iptables -A FORWARD -p udp -m multiport --dports 3478,5222,5223 -j ACCEPT



iptables -A INPUT -p tcp -d 157.240.222.60 --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -s 157.240.222.60 --dport 443 -j ACCEPT

iptables -A FORWARD -p tcp -s 10.0.0.0/23 -d 157.240.222.60 --dport 443 -j ACCEPT
iptables -A FORWARD -p tcp -s 157.240.222.60 -d 10.0.0.0/23 --dport 443 -j ACCEPT


# Nesta regra como mais abaixo eu consigo bloquear os app´s Youtube, Facebook, etc, achei
# que conseguiria liberar o app do WhatsApp, mas não funcionou
iptables -t filter -A FORWARD -s 10.0.0.0/23 -m string --algo bm --string "whatsapp" -j ACCEPT


iptables -t nat -A PREROUTING -p udp -i $ifwan --dport 3478 -j DNAT --to 10.0.0.1:3478
iptables -t nat -A PREROUTING -p tcp -i $ifwan --dport 5222 -j DNAT --to 10.0.0.1:5222
iptables -t nat -A PREROUTING -p tcp -i $ifwan --dport 5223 -j DNAT --to 10.0.0.1:5223
iptables -t nat -A POSTROUTING -d 10.0.0.1 -j SNAT --to 192.168.2.19


# Regras basicas do firewall
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP


############################################
# Libera a porta do Squid
############################################
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT



##############################################
#
# Permite conexões SSH na porta 2222
#
##############################################
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT


# Aqui em sites permitidos ja coloquei whatsapp

##################################################
# Sites permitidos
##################################################
for site in $(cat /etc/init.d/sites-permitidos.txt | grep -v "#")
do
iptables -A FORWARD -p tcp -m multiport --dports 80,443,563 -s $redelocal -i $iflocal -m string --algo bm --string $site -j ACCEPT
done



##################################################
# Blocked Sites
##################################################
for site in $(cat /etc/init.d/blocked-sites.txt | grep -v "#")
do
iptables -A FORWARD -p tcp -m multiport --dports 80,443,563 -s $redelocal -i $iflocal -m string --algo bm --string $site -j DROP
done



##################################################
# App's bloqueados nos smartphones
##################################################
for site in $(cat /etc/init.d/aps-bloqueados.txt | grep -v "#")
do
iptables -t filter -A FORWARD -s 10.0.0.0/23 -m string --algo bm --string $site -j DROP
done


# Impede a abertura de novas conexões, bloqueando o acesso externo ao seu servidor,
# com excecao das portas e faixas de enderecos especificadas anteriormente
iptables -A INPUT -p tcp --syn -j DROP


echo "Regras de firewall ativadas"
echo ""
}

parar(){
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
echo 0 > /proc/sys/net/ipv4/ip_forward
echo "Regras de firewall e compartilhamento desativados"
}

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo " Use os parâmetros start, stop ou restart"
esac



  


2. WhatsApp APP - Forwarding de portas no Iptables para não passar pelo proxy Squid

Jose Carlos Anicesa Silva
servidorlinux

(usa Debian)

Enviado em 17/09/2022 - 02:13h

Tentei também estas configurações e não funcionou:

http://www.squid-cache.org/Doc/config/always_direct/

Criei a acl:

acl whats dstdomain dit.whatsapp.net
always_direct allow whats


Tentei também nas configurações de proxy do Android no campo Ignorar proxy para, onde inseri estes sites: dit.whatsapp.net,whatsapp.net, mas não funcionou.


O que preciso fazer para liberar as mensagens do APP WhatsApp?

Obrigado a todos.



3. WhatsApp APP - Forwarding de portas no Iptables para não passar pelo proxy Squid

Jose Carlos Anicesa Silva
servidorlinux

(usa Debian)

Enviado em 19/09/2022 - 12:58h

Olá pessoal boa tarde. Por favor, alguém saberia dizer como posso escrever esta regra no iptables?

Obrigado a todos.



4. Re: WhatsApp APP - Como não passar pelo proxy Squid? [RESOLVIDO]

Leoeu
leojb

(usa Ubuntu)

Enviado em 10/11/2022 - 17:19h

Eu liberei na minha empresa

for zaps in `cat /etc/firewall/whatsapp_ips` ;do
for whatsapp in `cat /etc/firewall/whatsappw` ;do
iptables -A FORWARD -d $whatsapp -s $zaps -j ACCEPT
iptables -A FORWARD -s $whatsapp -d $zaps -j ACCEPT
iptables -A FORWARD -d $zaps -p tcp --dport xmpp-client -j ACCEPT
iptables -A FORWARD -s $zaps -p tcp --dport xmpp-client -j ACCEPT
done
done

O arquivo whatsapp_ips vai ter os IPs q estão autorizados a utilizar o WhatsApp
O arquivo whatsappw vc vai colocar todos os IPs dos servidores do WhatsApp como segue um exemplo abaixo....(Tem alguns IPs da Google e Youtube pq tive q liberar na minha empresa)

92.122.172.0/22
104.64.0.0/10
31.13.64.51
31.13.65.49
31.13.66.49
31.13.68.52
31.13.69.240
31.13.70.49
31.13.71.49
31.13.72.52
31.13.73.49
31.13.74.49
31.13.75.52
31.13.76.81
31.13.77.49
31.13.78.53
31.13.80.53
31.13.81.53
31.13.82.51
31.13.83.51
31.13.84.51
31.13.85.51
31.13.86.51
31.13.87.51
31.13.88.49
31.13.90.51
31.13.91.51
31.13.92.52
31.13.93.51
31.13.94.52
31.13.95.63
50.22.198.204/30
50.22.210.32/30
50.22.210.128/27
50.22.225.64/27
50.22.235.248/30
50.22.240.160/27
50.23.90.128/27
50.97.57.128/27
64.233.160.0/19
74.125.0.0/16
75.126.39.32/27
108.168.174.0/27
108.168.176.192/26
108.168.177.0/27
108.168.180.96/27
108.168.254.65
108.168.255.224
108.168.255.227
142.250.0.0/15
157.240.0.0/16
158.85.0.96/27
158.85.5.192/27
158.85.46.128/27
web.whatsapp.com
hangouts.google
hangouts
dyn.whatsapp.com3
g.whatsapp.net
v.whatsapp.net
mmg.whatsapp.net
graph.facebook.com
v-sl.whatsapp.com
media.ffor2-1.fna.whatsapp.net
z-m-api.facebook.com
z-m.c10r.facebook.com
z-m.facebook.com
z-1.facebook.com



5. Re: WhatsApp APP - Como não passar pelo proxy Squid?

Buckminster
Buckminster

(usa Debian)

Enviado em 13/11/2022 - 09:37h

Para liberar IPs (ou range de IPs, strings, portas, etc) do Squid no Iptables, por exemplo:

iptables -A FORWARD -d 192.168.1.101 -j ACCEPT <<< as regras com os IPs a serem liberados devem vir antes da regra do redirecionamento para o Squid abaixo.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Percebi que falta, no teu Iptables, a regra acima de redirecionamento para o Squid.
Tu colocou somente a regra que libera a porta 3128 do Squid e somente no INPUT.
Caso não queira fazer redirecionamento para o Squid, libere assim:

iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 3128 -j ACCEPT
iptables -A FORWARD -p tcp --dport 3128 -j ACCEPT

Porém, daí tu terá que fazer certos bloqueios no Squid, pois as regras acima liberam tudo na porta 3128 do Squid.

E esta regra:
iptables -t filter -A FORWARD -s 10.0.0.0/23 -m string --algo bm --string "whatsapp" -j ACCEPT
Tu colocou antes de liberar a porta do Squid, além disso, a regra acima libera tudo que tiver a string (sequência de caracteres) ""whatsapp", não exatamente o "whatsapp" .

Para liberar o Zap no Iptables siga o que o leojb postou.

Tem estas dicas também:
https://www.vivaolinux.com.br/dica/Bloquearliberar-WhatsApp-via-iptables

https://www.vivaolinux.com.br/dica/Liberar-o-WhatsApp-Texto-imagem-audio-video-e-ligacoes-iptables


Para entender o básico do Iptables no tocante à ordem de colocação das regras:

iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j REJECT
iptables -A INPUT -p tcp --dport 443 -j DROP

A primeira regra libera, a segunda rejeita e a terceira regra, nega o acesso. A primeira regra é que terá o privilégio, então, o acesso na porta 443 será liberado para todos, mesmo rejeitando e negando o acesso nas regras subsequentes.

Caso queiramos negar o acesso à porta 443 somente para alguns IPs, por exemplo, devemos colocar essas regras ACIMA da primeira regra.

Lembrando que nas regras acima não foi determinada nenhuma tabela (-t), então, elas serão aplicadas somente na tabela padrão, a filter, e, no caso, somente na chain INPUT.


________________________________________________
Always listen the Buck!
Sanou tua dúvida, resolveu teu problema?
Então marque como Resolvido e escolha a Melhor Resposta.



6. WhatsApp APP - Como não passar pelo proxy Squid?

Jose Carlos Anicesa Silva
servidorlinux

(usa Debian)

Enviado em 12/01/2023 - 15:02h


Buckminster escreveu:

Para liberar IPs (ou range de IPs, strings, portas, etc) do Squid no Iptables, por exemplo:

iptables -A FORWARD -d 192.168.1.101 -j ACCEPT <<< as regras com os IPs a serem liberados devem vir antes da regra do redirecionamento para o Squid abaixo.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Percebi que falta, no teu Iptables, a regra acima de redirecionamento para o Squid.
Tu colocou somente a regra que libera a porta 3128 do Squid e somente no INPUT.
Caso não queira fazer redirecionamento para o Squid, libere assim:

iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 3128 -j ACCEPT
iptables -A FORWARD -p tcp --dport 3128 -j ACCEPT

Porém, daí tu terá que fazer certos bloqueios no Squid, pois as regras acima liberam tudo na porta 3128 do Squid.

E esta regra:
iptables -t filter -A FORWARD -s 10.0.0.0/23 -m string --algo bm --string "whatsapp" -j ACCEPT
Tu colocou antes de liberar a porta do Squid, além disso, a regra acima libera tudo que tiver a string (sequência de caracteres) ""whatsapp", não exatamente o "whatsapp" .

Para liberar o Zap no Iptables siga o que o leojb postou.

Tem estas dicas também:
https://www.vivaolinux.com.br/dica/Bloquearliberar-WhatsApp-via-iptables

https://www.vivaolinux.com.br/dica/Liberar-o-WhatsApp-Texto-imagem-audio-video-e-ligacoes-iptables


Para entender o básico do Iptables no tocante à ordem de colocação das regras:

iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j REJECT
iptables -A INPUT -p tcp --dport 443 -j DROP

A primeira regra libera, a segunda rejeita e a terceira regra, nega o acesso. A primeira regra é que terá o privilégio, então, o acesso na porta 443 será liberado para todos, mesmo rejeitando e negando o acesso nas regras subsequentes.

Caso queiramos negar o acesso à porta 443 somente para alguns IPs, por exemplo, devemos colocar essas regras ACIMA da primeira regra.

Lembrando que nas regras acima não foi determinada nenhuma tabela (-t), então, elas serão aplicadas somente na tabela padrão, a filter, e, no caso, somente na chain INPUT.


________________________________________________
Always listen the Buck!
Sanou tua dúvida, resolveu teu problema?
Então marque como Resolvido e escolha a Melhor Resposta.



Primeiramente quero pedir desculpas pela demora em responder este tópico, é porque fui tomado por uma série de problemas e situações para resolver e só agora que é férias escolares que consegui retomar este tópico.

Agradeço o leojb pela indicação, fiz o que foi sugerido, mas recebi uma série de mensagens de erro de máscara de rede.

A sugestão de Buckminster foi simplesmente espetacular. Percebi que precisava colocar as coisas na ordem certa. Então, definitivamente abandonei a idéia de fazer o app WhatsApp funcionar tendo um proxy Squid instalado e tentando alguma configuração no iptables para fazer o tráfego do WhatsApp não passar pelo Squid.

Seguindo o que Buckminster indicou, coloquei as regras de bloqueio em primeiro lugar e depois fiz o NAT. Pronto, agora está bloqueando tudo o que preciso, o WhatsApp liberado, sem mesmo me preocupar com instalação de certificados nos navegadores ou configuração de proxy nos clientes e a navegação da internet está normal.

Segue abaixo como ficou o meu script do iptables e do Squid:


Observação: quando coloco intercept na linha http_port 3128, acaba dando um erro, mas como este é outro problema, criei um tópico para tratar dele. Quem precisar que o Squid funcione como transparente, pode acompanhar aqui: https://www.vivaolinux.com.br/topico/Squid-Iptables/SQUID-COM-CACHE-E-IPTABLES


======iptables======


#!/bin/sh

### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $ifwan $iflocal $redelocal
# Required-Stop: $ifwan $iflocal $redelocal
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Firewall
# Description: Firewall da rede wifi dos alunos
#
### END INIT INFO



# Interface rede wan
ifwan="enp0s25"

# Interface rede local
iflocal="enp1s4"

# Rede Local
redelocal="10.0.0.0/23"

iniciar(){


# Regras basicas do firewall
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP


############################################
# Libera a porta do Squid
############################################
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 3128 -j ACCEPT
iptables -A FORWARD -p tcp --dport 3128 -j ACCEPT
iptables -t nat -A PREROUTING -i $iflocal -p tcp --dport 80 -j REDIRECT --to-port 3128


##############################################
#
# Permite conexões SSH na porta 2222
#
##############################################
iptables -I INPUT -p tcp --dport 2222 -j ACCEPT


##################################################
# Blocked Sites
##################################################
for site in $(cat /etc/init.d/blocked-sites.txt | grep -v "#")
do
iptables -I OUTPUT -p tcp -m multiport --dports 80,443,563 -s $redelocal -o $iflocal -m string --algo bm --string $site -j REJECT
iptables -I FORWARD -p tcp -m multiport --dports 80,443,563 -s $redelocal -i $iflocal -m string --algo bm --string $site -j REJECT
done



##################################################
# App's bloqueados nos smartphones
##################################################
for site2 in $(cat /etc/init.d/aps-bloqueados.txt | grep -v "#")
do
iptables -t filter -A OUTPUT -m string --algo bm --string $site2 -j LOG
iptables -t filter -I FORWARD -s $redelocal -m string --algo bm --string $site2 -j LOG
iptables -t filter -A OUTPUT -m string --algo bm --string $site2 -j REJECT
iptables -t filter -I FORWARD -s $redelocal -m string --algo bm --string $site2 -j REJECT
done


##################################################
# Sites permitidos
##################################################
for site3 in $(cat /etc/init.d/sites-permitidos.txt | grep -v "#")
do
iptables -I FORWARD -p tcp -m multiport --dports 80,443 -s $redelocal -i $iflocal -m string --algo bm --string $site3 -j ACCEPT
done




echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $ifwan -j MASQUERADE



# Impede a abertura de novas conexões, bloqueando o acesso externo ao seu servidor,
# com excecao das portas e faixas de enderecos especificadas anteriormente
iptables -A INPUT -p tcp --syn -j DROP



echo "Regras de firewall ativadas"
echo ""
}

parar(){
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
echo 0 > /proc/sys/net/ipv4/ip_forward
echo "Regras de firewall e compartilhamento desativados"
}

case "$1" in
"start") iniciar ;;
"stop") parar ;;
"restart") parar; iniciar ;;
*) echo " Use os parâmetros start, stop ou restart"
esac



=======Squid=======

http_port 10.0.0.1:3128

visible_hostname PROXY-ALUNOS

error_directory /usr/share/squid/errors/Portuguese


cache_mem 2048 MB
maximum_object_size_in_memory 128 KB
maximum_object_size 512 MB
minimum_object_size 127 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 10240 16 256
cache_access_log /var/log/squid/access.log


refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280


acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT


http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports


acl rede_local src 10.0.0.0/23


acl direct url_regex -i "/etc/squid/direct.txt"
always_direct allow direct


http_access allow localhost
http_access allow rede_local

http_access deny all








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts