Buckminster
(usa Debian)
Enviado em 06/09/2013 - 02:12h
Se você tem 3 placas de rede, acredito que por uma entra a internet, vamos chamar ela de eth0.
A eth0 provavelmente está conectada no modem/roteador (a não ser que você tenha dois links de internet).
As outras duas placas, eth1 e eth2 são as placas das redes internas e provavelmente estão conectadas cada uma em um switch diferente... ou não? (mas não influi no problema)
O compartilhamento no Iptables, por exemplo:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Essa regra acima diz para a placa de rede eth0 compartilhar os dados/internet com as outras placas na máquina, não importando quantas placas a mais tenha, 2, 4, 5, etc... a regra irá compartilhar com todas.
No Squid não importa se tu colocar o IP de uma rede interna tua ou da outra (http_port xxx.xxx.xxx.xxx:3128), o que importa é tu setar no navegador o IP correto do proxy (já que ele não é transparente).
Os bloqueios das portas você faz pelo Iptables ou pelo Squid mesmo daí, mas aconselho fortemente a fazer somente pelo Iptables.
Veja bem, se você não está conseguindo bloquear a porta 80 pelo Iptables, isso tem nada a ver com o Squid.
Provavelmente você está colocando as regras de bloqueio em lugar errado, talvez antes da regra de redirecionamento para o Squid, ou talvez nem tenha essa regra no teu Iptables.
Por isso pedi para você postar os dois, para analisar.
Se o teu squid.conf e o teu Iptables são somente isso daí que tu postou, não vai funcionar mesmo.
Regras de redirecionamento que deveria ter no Iptables:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j REDIRECT --to-port 3128
Veja bem, essas regras acima redirecionam o tráfego da porta 80 para a 3128 do Squid. Todo bloqueio da porta 80 você faz depois dessas regras porque tanto o Iptables quanto o Squid lêem as regras de cima para baixo.
As regras abaixo redirecionam a porta 80 das duas placas das redes internas para o Squid e depois o tráfego é bloqueado para as duas redes caso alguma coisa consiga passar pelo redirecionamento:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -I FORWARD -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
iptables -I FORWARD -p tcp -s 192.168.4.0/24 --dport 80 -j DROP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
E veja bem de novo, tu está colocando as regras com -I, o -I coloca a regra no topo da chain, o -A coloca a regra na sequência, ou seja, essas duas regras acima com -I e na mesma chain (FORWARD), a regra debaixo (com 192.168.4.0) é que vai ser executada primeiro. Claro que nesse caso não influi, mas atente para isso nas próximas vezes.
Tu pode numerar as regras com -I. Mas a numeração só vale dentro de cada chain, por exemplo:
iptables -I FORWARD 1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
iptables -I FORWARD 2 -p tcp -s 192.168.4.0/24 --dport 80 -j DROP
iptables -I INPUT 1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
iptables -I INPUT 2 -p tcp -s 192.168.4.0/24 --dport 80 -j DROP
Assim ficaria na ordem, a regra com o número 1 será executada primeiro e assim sucessivamente dentro de cada chain.
Mas no exemplo de cima, as duas regras com FORWARD serão executadas primeiro que as regras com INPUT, pois estão antes.
A diferença entre o -A e o -I é que com -A as regras são lidas e executadas na sequência que estão no script e com -I sem numeração a coisa se inverte, a última regra colocada será a primeira a ser executada, dentro de cada chain.
http://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras