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