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: