[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Squid com proxy transparente [Longo]



Saudações,

  Sei que o tema é clássico, mas estou tendo problemas ao configurar o squid no

meu servidor de casa como proxy transparente. Acredito que seja por algum 
detalhe no meu script de firewall.
  Bem, a minha máquina linux é o servidor da minha rede e compartilha o acesso 
a internet (ADSL Velox - RJ - Modem em modo bridge) para meu outro micro, tenho

o bind9 e o dhcp3-server configurando automaticamente meu cliente que acessa a 
internet sem nenhuma configuração no navegador.
  Recentemente estou testando o uso do Squid aqui em casa, para com a 
experiencia ganha, tentar instalá-lo no servidor linux de minha empresa, mas 
acontece o seguinte:
  Configurando o Squid para proxy transparente, e adicionando o comando do 
Iptables adequado, quando o navegador do cliente está configurado com o proxy 
certo, tudo funciona bem (tirando a autenticação que o squid não faz... :(, mas

quando o navegador do cliente fica sem a configuração do proxy, ele não
consegue 
acessar nada na internet.

  Alguém saberia oque pode ser feito ?

  Já procurei no google.
  Já procurei na lista *toda ela*.
  Já procurei no LDP...
  Já procurei no www.squid-cache.org
  Já procurei em artigos...
  Não procurei o oráculo... :)

  Segue no fim do e-mail cópia do meu script de firewall e do meu squid.conf..

  Desde já, obrigado.

-- 

[]s
  Pedro
  Desenvolvedor, Mestre Jedi, Slackwarrior
  Usuário Linux Registro no. 274710
  Usuário Debian-BR GNU/Linux no. 606

  'E que os fontes estejam com você !'


=== /etc/squid/squid.conf ====
# Meu servidor IP: 10.0.0.1...

http_port 10.0.0.1:3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?

no_cache deny QUERY

refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern .		0	20%	4320

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 3
auth_param basic realm Digite o Login

acl bloqueados url_regex -i "/etc/squid/sites/bloqueados.txt"
acl liberados url_regex -i "/etc/squid/sites/liberados.txt"
acl all src 0.0.0.0/0.0.0.0
acl rede_interna src 10.0.0.0/8
acl rede_interna proxy_auth REQUIRED

acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563	# https, snews
acl SSL_ports port 873		# rsync
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443 563	# https, snews
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 1025-65535	# unregistered ports
acl Safe_ports port 280		# http-mgmt
acl Safe_ports port 488		# gss-http
acl Safe_ports port 591		# filemaker
acl Safe_ports port 777		# multiling http
acl Safe_ports port 631		# cups
acl Safe_ports port 873		# rsync
acl Safe_ports port 901		# SWAT
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
http_access allow localhost
http_access deny bloqueados !liberados
http_access allow rede_interna
http_access deny all

icp_access allow all

coredump_dir /var/spool/squid

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_port 21
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

=== fim do /etc/squid/squid.conf ===

=== meu script para montar meu firewall ===
#!/bin/bash
# PAREDAO - Script simples para habilitar firewall para computador
#           com acesso via PPP a internet.
# de Pedro, 25-12-2003 18:23

. /etc/cores.conf

# Minha rede interna...
REDE="10.0.0.0/8"
# Interface (Placa de rede) da minha rede interna...
IFACE="eth0"

msg(){
   if [ "$1" == "LOG" ]; then
      logger -p auth.debug -t paredao "$2"
      echo -e $VERDE"$2"$SEMCOR
   else
      echo -e $CIANO"$2"$SEMCOR
   fi
}

carregar() {
  AUX=`lsmod | grep $1`
  if [ "$AUX" = "" ]; then
     echo -e $CIANO"Carregando modulo $1..."$SEMCOR
     $MODPROBE $1
  fi
}


# Definir o PATH de busca padrao para o script...
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin

AUX=`type -p modprobe`
if [ "$AUX" == ""  ]; then
   msg "LOG" "ERRO: modprobe nao foi encontrado."
   exit 0
else
   MODPROBE=$AUX
fi

# Carregar modulo do kernel para suportar coneccoes FTP...
carregar "ip_conntrack_ftp"


# Verificar se o iptables se encontra no recinto...
AUX=`type -p iptables`
if [ "$AUX" == ""  ]; then
   msg "LOG" "ERRO: iptables nao foi encontrado."
   exit 1
else
   IPTABLES=$AUX
fi

# Comecar com uma mensagem para informar que estamos vivos !
msg "LOG" "Inicializando o firewal..."

# Iniciando o servico sujo, inicializado o firewall...
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -X
$IPTABLES -t nat -X

# Definindo politica padrão de DITADURA ! ninguém passa !
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

# Informar mais coisas...
msg "LOG" "Ajustando opcoes do kernel..."

# Ligando protecao do kernel para IP spoof...
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null
# Ajustando configuracao de TCP timestamps...
echo 1 > /proc/sys/net/ipv4/tcp_timestamps 2> /dev/null
# Habilitando protecao TCP SYN Cookie...
echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route 2> /dev/null
# Habilitar log de marcianos...
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians 2> /dev/null
echo 1 > /proc/sys/net/ipv4/conf/default/log_martians 2> /dev/null
# Habilitando IP Dinamico...
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

# Habilitando trabalho normal do Loopback...
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Relatar os progressos...
msg "LOG" "Definindo as regras do firewall, se segurem !"

# Criar chains para lidar com o trabalho sujo...
# Regra para os pacotes descartados...
$IPTABLES -N descartado2
$IPTABLES -A descartado2 -j LOG --log-prefix "DESCARTADO " --log-level debug 
--log-ip-options --log-tcp-options --log-tcp-sequence
$IPTABLES -A descartado2 -j DROP
$IPTABLES -N descartado
$IPTABLES -A descartado -j descartado2

# Regra para pacotes rejeitados oficialmente...
$IPTABLES -N rejeitado2
$IPTABLES -A rejeitado2 -p tcp -j REJECT --reject-with tcp-reset
$IPTABLES -A rejeitado2 -p udp -j REJECT --reject-with icmp-port-unreachable
$IPTABLES -A rejeitado2 -j DROP
$IPTABLES -N rejeitado
$IPTABLES -A rejeitado -j rejeitado2

# Regra para pacotes abortados...
$IPTABLES -N abortado2
$IPTABLES -A abortado2 -j LOG --log-prefix "ABORTADO " --log-level debug 
--log-ip-options --log-tcp-options --log-tcp-sequence
$IPTABLES -A abortado2 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -N abortado
$IPTABLES -A abortado -m limit --limit 1/second --limit-burst 10 -j abortado2
$IPTABLES -A abortado -m limit --limit 2/minute --limit-burst 1 -j LOG 
--log-prefix "LIMITADO " --log-level debug

# Criar chains para trabalhar com diferentes protocolos...
$IPTABLES -N PACOTES_TCP
$IPTABLES -N PACOTES_TCP_ENTRADA
$IPTABLES -N PACOTES_TCP_SAIDA
$IPTABLES -N PACOTES_UDP
$IPTABLES -N PACOTES_UDP_ENTRADA
$IPTABLES -N PACOTES_UDP_SAIDA
$IPTABLES -N PACOTES_ICMP

#################################################
# Criar conteudo das regras do filtro PACOTES_TCP
 # Relatar coneccoes abortadas...
 $IPTABLES -A PACOTES_TCP -m state --state ESTABLISHED,RELATED -p tcp 
--tcp-flags RST RST -j abortado
 # Permitir o transito de pacotes de coneccoes estabelecidas primeiro pelo meu 
computador...
 $IPTABLES -A PACOTES_TCP -m state --state ESTABLISHED,RELATED -p tcp -j ACCEPT

#########################################################
# Criar conteudo das regras do filtro PACOTES_TCP_ENTRADA
  # Chama a regra basica, oque não passar vai pro inferno... (DROP)
  # Permitir comunicação com a rede interna na rede ip definida em REDE...
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp -s $REDE -i $IFACE -j ACCEPT

  # POP3: Permitir handshaking com o servidor POP remoto...
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --sport 1024:65535 --dport 110:110 -m

state --state NEW -j ACCEPT
  # ICQ: Permitir comunicação TCP com servidor/cliente de ICQ...
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --sport 1024:65535 --dport 4000:4000 
-m state --state NEW -j ACCEPT
  # eMULE: Permitir comunicação de servidor eMULE...
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --sport 1024:65535 --dport 4010:4010 
-m state --state NEW -j ACCEPT
  # MSNMESSENGER: Permitir pacotes para iniciar comunicação com 
cliente/servidor MsnMessenger...
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --sport 1024:65535 --dport 1863:1863 
-m state --state NEW -j ACCEPT

  # Mandar pro inferno portscans em tcp...
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --tcp-flags ALL FIN,URG,PSH -j
abortado
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --tcp-flags SYN,RST SYN,RST -j
abortado
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --tcp-flags SYN,FIN SYN,FIN -j
abortado
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --tcp-option 64 -j abortado
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --tcp-option 128 -j abortado
  # Evitar portscanners ocultos...
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp --tcp-flags SYN,ACK,FIN,RST 
SYN,ACK,FIN -m limit --limit 1/s -j ACCEPT
  # Evitar ataques SYN-FLOOD
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp -m limit --limit 1/s -j ACCEPT
  # Regras adicionais para entrads TCP devem vir aqui...
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp -j PACOTES_TCP
  # Por fim qualquer pacote que nao se encaixa na regras previas é mandado pro 
inferno...
  $IPTABLES -A PACOTES_TCP_ENTRADA -p tcp -j descartado

#######################################################
# Criar conteudo das regras do filtro PACOTES_TCP_SAIDA
  # Permitir comunicação com a rede interna na rede ip definida em REDE...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp -d $REDE -o $IFACE -j ACCEPT

  # POP3: Permitir coneccao da maquina atual para a porta 110 de um servidor 
remoto...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 0:65535 --dport 110:110 -m 
state --state NEW -j ACCEPT
  # SMTP: Permitir coneccao da maquina atual para a porta 25 de um servidor 
remoto...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 0:65535 --dport 25:25 -m state 
--state NEW -j ACCEPT
  # DNS: Permitir a troca de informacoes entre a maquina atual e o servidor de 
DNS...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 0:65535 --dport 53:53 -m state 
--state NEW -j ACCEPT
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 0:65535 --dport 53:53 -j ACCEPT
  # HTTP: Permitir que a maquina local se comunique com um servidor remoto na 
porta tcp:80...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 1024:65535 --dport 80:8085 -m 
state --state NEW -j ACCEPT
  # HTTPS: Permitir que a maquina local se comunique com um servidor remoto 
SEGURO na porta tcp:443...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 0:65535 --dport 443:443 -m 
state --state NEW -j ACCEPT
  # FTP: Permitir que a maquina local se comunique com um servidor remoto na 
porta tcp:21...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 0:65535 --dport 21:21 -m state 
--state NEW -j ACCEPT
  # ICQ: Permitir saida de dados via TCP para comunicação com cliente/servidor 
de ICQ...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 1024:65535 --dport 5190:5190 -m

state --state NEW -j ACCEPT
  # eMULE: Permitir comunicação/saida para cliente/servidor eMULE...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 4010:4010 --dport 4000:4900 -m 
state --state NEW -j ACCEPT
  # MSGMESSENGER:
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp --sport 1024:65535 --dport 1863:1863 -m

state --state NEW -j ACCEPT
  # Aplicar regra generica para pacotes TCP que saem...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp -j PACOTES_TCP
  # Por fim qualquer pacote que nao se encaixa na regras previas é mandado pro 
inferno...
  $IPTABLES -A PACOTES_TCP_SAIDA -p tcp -j descartado


#################################################
# Criar conteudo das regras do filtro PACOTES_UDP
 # Permitir o transito de pacotes de coneccoes estabelecidas primeiro pelo meu 
computador...
 $IPTABLES -A PACOTES_UDP -m state --state ESTABLISHED,RELATED -p udp -j ACCEPT

#########################################################
# Criar conteudo das regras do filtro PACOTES_UDP_ENTRADA
  # Chama a regra basica, oque não passar vai pro inferno... (DROP)
  # Regras adicionais para entrads UPD devem vir aqui...
  # Permitir comunicação com a rede interna na rede ip definida em REDE...
  $IPTABLES -A PACOTES_UDP_ENTRADA -p udp -s $REDE -i $IFACE -j ACCEPT

  # ICQ: Permitir inicio de comunicação com servidor remoto ICQ...
  $IPTABLES -A PACOTES_UDP_ENTRADA -p udp --sport 0:65535 --dport 4000:4000 -j 
ACCEPT
  # eMULE: Permitir comunicação UDP com servidor/cliente eMULE...
  $IPTABLES -A PACOTES_UDP_ENTRADA -p udp --sport 1024:65535 --dport 4020:4020 
-j ACCEPT
  # Aplicacao de regras genericas para pacotes UDP...
  $IPTABLES -A PACOTES_UDP_ENTRADA -p udp -j PACOTES_UDP
  # Por fim qualquer pacote que nao se encaixa na regras previas é mandado pro 
inferno...
  $IPTABLES -A PACOTES_UDP_ENTRADA -p udp -j descartado

#######################################################
# Criar conteudo das regras do filtro PACOTES_UDP_SAIDA
  # Permitir comunicação com a rede interna na rede ip definida em REDE...
  $IPTABLES -A PACOTES_UDP_SAIDA -p udp -d $REDE -o $IFACE -j ACCEPT

  $IPTABLES -A PACOTES_UDP_SAIDA -p udp -j PACOTES_UDP
  # DNS: Permitir a troca de informacoes entre a maquina atual e o servidor de 
DNS...
  $IPTABLES -A PACOTES_UDP_SAIDA -p udp --sport 0:65535 --dport 53:53 -j ACCEPT
  # eMULE: Permitir comunicação de saida via UDP para protocolo eMULE...
  $IPTABLES -A PACOTES_UDP_SAIDA -p udp --sport 4020:4020 --dport 1024:65535 -m

state --state NEW  -j ACCEPT
  # HTTPS: Permitir que a maquina local se comunique com um servidor remoto 
SEGURO na porta udp:443...
  $IPTABLES -A PACOTES_UDP_SAIDA -p udp --sport 0:65535 --dport 443:443 -m 
state --state NEW -j ACCEPT
  # Por fim qualquer pacote que nao se encaixa na regras previas é mandado pro 
inferno...
  $IPTABLES -A PACOTES_UDP_SAIDA -p udp -j descartado


#####################################################
# Criar conteudo das regras do filtro PACOTES_ICMP...
 $IPTABLES -A PACOTES_ICMP -p icmp --icmp-type destination-unreachable -j
ACCEPT
 $IPTABLES -A PACOTES_ICMP -p icmp --icmp-type time-exceeded -j ACCEPT
 $IPTABLES -A PACOTES_ICMP -p icmp --icmp-type parameter-problem -j ACCEPT
 # Evitar os pings da morte...
 $IPTABLES -A PACOTES_ICMP -p icmp --icmp-type echo-request -m limit --limit 
1/s -j ACCEPT
 $IPTABLES -A PACOTES_ICMP -p icmp -s $REDE -j ACCEPT

# MASQUERADE: Destino para pacotes descartados na tabela NAT...
$IPTABLES -t nat -N descart-nat
$IPTABLES -t nat -A descart-nat -j LOG --log-prefix "DESCARTADO-NAT " 
--log-level debug --log-ip-options --log-tcp-options --log-tcp-sequence
$IPTABLES -t nat -A descart-nat -j DROP
# Todos pacotes da rede 10.0.0.* que não forem de nossa interface
# de rede, configurada para 10.0.0.1, serão enviados pro inferno...
  $IPTABLES -t nat -A PREROUTING -s $REDE -i ! $IFACE -j descart-nat

# Teste para o funcionamento do proxy transparente com squid...
  $IPTABLES -t nat -A PREROUTING -s $REDE -i $IFACE -p tcp --dport 80 -j 
REDIRECT --to-port 3128
  # Tentar o mesmo para comunicação via FTP...
  $IPTABLES -t nat -A PREROUTING -s $REDE -i $IFACE -p tcp --dport 21 -j 
REDIRECT --to-port 3128


# MASQUERADE: Permitir que a rede 10.0.0.* acesse a internet sempre
# passando por todas regras do firewall antes...
  $IPTABLES -t nat -A POSTROUTING -s $REDE -o ppp0 -j MASQUERADE
  # Habilitando o Masquerade SNAT...
  echo "1" > /proc/sys/net/ipv4/ip_forward


# Classificar as entradas entre os chains principais...
  # Classificar pelos pacotes TCP...
  $IPTABLES -A INPUT -p tcp -j PACOTES_TCP_ENTRADA
  $IPTABLES -A OUTPUT -p tcp -j PACOTES_TCP_SAIDA

  $IPTABLES -A FORWARD -i $IFACE -j ACCEPT
  $IPTABLES -A FORWARD -p tcp -j PACOTES_TCP

  # Classificar pelos pacotes UDP...
  $IPTABLES -A INPUT -p udp -j PACOTES_UDP_ENTRADA
  $IPTABLES -A OUTPUT -p udp -j PACOTES_UDP_SAIDA
  $IPTABLES -A FORWARD -p udp -j PACOTES_UDP

  # Classificar pelos pacotes ICMP...
  $IPTABLES -A INPUT -p icmp -j PACOTES_ICMP
  $IPTABLES -A OUTPUT -p icmp -j PACOTES_ICMP
  $IPTABLES -A FORWARD -p icmp -j PACOTES_ICMP

# TOS: Ajusta o TOS do pacote IP para Minimizar retardo no transporte...
$IPTABLES -t mangle -A POSTROUTING -p tcp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A POSTROUTING -p udp -j TOS --set-tos Minimize-Delay


# Relatar o fim do servico sujo...
msg "LOG" "Configuracao do firewall finalizada..."

=== fim do meu script para montar meu firewall ===




	
	
		
_______________________________________________________ 
Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! http://br.acesso.yahoo.com/



Reply to: