Este é meu primeiro artigo, espero que sirva para muitos que estão em busca da configuração base do Squid 3 + Iptables no Linux Debian 5 Lenny. O tema proposto também funciona para outras distros, como Slackware e Fedora. No artigo relato as diferenças de pastas configuração em tais distros.
Proxy transparente e configuração do firewall Iptables
Como disse no tópico anterior, para seu proxy operar de forma transparente há algumas configurações a serem feitas.
No arquivo /etc/squid3/squid.conf, na primeira linha:
http_port 3128
Mudar para:
http_port 3128 transparent
Salve e execute o comando (este comando é muito útil para que você reconfigure o Squid sem parar o serviço):
# squid3 -k reconfigure
Agora vamos criar o arquivo /etc/init.d/firewall com seu editor de texto preferido (exceto no Slackware, que usa outro caminho para os scripts do init):
# vim /etc/init.d/firewall (Debian e outras distros)
ou # vim /etc/rc.d/rc.firewall (Slackware)
#!bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward #
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Limite contra ping da morte e DoS
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 1/s -j DROP
# Liberando portas SSH a partir de qualquer interface
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Liberando portas squid, http e NTP. Estes serviços o firewall só irá # responder se vierem da interface da rede interna. Daí você aplica de # acordo com o cenário de sua máquina
iptables -A INPUT -p tcp --dport 3128 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --dport 123 -i eth0 -j ACCEPT
iptables -A INPUT -p udp --dport 123 -i eth0 -j ACCEPT
# Nat Global (aqui você faz o mascaramento de forma geral para qualquer # interface ou rede do servidor. Prefiro especificar a sub-rede, deixarei # comentada a linha global #iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# NAT Rede 1 e 2 (substitua as respectivas sub-redes pelas que você usa em # sua rede e note que a "eth1" é minha interface diretamente conectada à internet, # substitua-a pela sua interface adequada
iptables -t nat -A POSTROUTING -s 192.168.30.0/255.255.255.0 -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 172.18.28.0/255.255.255.0 -o eth1 -j MASQUERADE
# Jogando tráfego da porta 80 para o SQUID3 TRANSPARENT
iptables -t nat -A PREROUTING -s 192.168.30.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -s 172.18.28.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128
# Exemplo de redirecionamento de porta, neste caso redirecionamento para # Terminal Server e VNC (substitua as respectivas sub-redes pelas que você usa # em sua rede e as portas respectivas do serviço que quer redirecionar. # Note que a "eth1" é minha interface diretamente conectada à internet, # substitua-a pela sua interface adequada
iptables -A FORWARD -p tcp --dport 3389 -d 182.164.2.1 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT --to 192.168.30.32
iptables -A FORWARD -p tcp --dport 3389 -d 182.164.2.1 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 5900 -j DNAT --to 172.18.28.55
Você pode aproveitar estas dicas para deixar seu firewall um pouco mais robusto, porém se quiser apenas que resolva o proxy transparente, basta as linhas abaixo, salvo que somente elas, sem qualquer restrição, torna você vulnerável na rede mundial, daí você aplica suas regras da forma que lhe for conveniente, de acordo com sua responsabilidade.
Script de firewall que implementa somente o proxy transparente:
Devemos colocar as regras que criamos no script IPTABLES para ser executado sempre que o sistema inicializar, veja qual é a forma correta em sua respectiva distro.
No Debian, adicionar as seguintes linhas ao arquivo /etc/init.d/bootmisc.sh:
# vim /etc/init.d/bootmisc.sh
if [ -x /etc/init.d/firewall ]; then
. /etc/init.d/firewall
fi
Então salvamos e damos permissão para que o script IPTABLES seja executado pelo sistema:
# chmod +x /etc/init.d/firewall
No Slackware, quando criamos o script do firewall IPTABLES, o salvamos no seguinte local: /etc/rc.d/rc.firewall
Então basta dar permissão de execução ao script:
# chmod +x /etc/rc.d/rc.firewall
Em outras distros e também Debian, se preferir use o arquivo /etc/rc.local, adicionando a seguinte linha:
sh -e /etc/init.d/firewall
Salve o arquivo e dê as permissões:
# chmod +x /etc/init.d/firewall
Dica: Para visualizar regras do IPTABLES, basta no terminal digitar:
# iptables -L # iptables -t nat -L
Para limpar e desativar estas regras do IPTABLES basta:
[2] Comentário enviado por jucinaldo em 05/03/2009 - 22:10h
Cara vc usa Fedora como vi em seu Perfil. Vc pode baixar o pacote e intalar tanto por yum ou rpm -ivh, sendo quue a diferenca entre esta ´e s´o de que se precisar de alguma biblioteca ou alguma + o yum pode facilitar, dai com yu seria ## yum localinstall o_pacote, dai se ele n~ao instalar frescar com assinatura do pacote, basta fazer assim ### yum --nogpgcheck localinstall o_pacote o pacote rpm sao pre compilados ´e um abra´co...
valews!!
[3] Comentário enviado por andriopj em 06/03/2009 - 15:48h
caro fernandofranco
vc pode instalar pelo yum.
incrusive, o fedora 10, ja vem com squid instalado senao me engano.
contudo desinstale todos o squid que ja vem pre definido no fedora 10, e utilize o seguinte comando para instalar ele: yum install squid
todos os pacotes/blibliotecas serao instalados automaticamente, nas pasta padrao do squid.
logo logo, estou postando meu config, tou fazendo ele com a seguinte ideia: transparent, faca cache, tenha uma certa seguranca (ataques) mas nao bloqueia nada na rede (skype, msn, hotmail, web).
esse erro ai enche o meu cache.log em 5 minutos e deixa ele com uma tamanho de 2GB ai o meu squid trava.
eu uso squid-3.0-stable9
obrigado desde de ja . ^^
[7] Comentário enviado por geraldogof em 17/03/2009 - 21:01h
Parabéns Jucinaldo,
Ótima dica a sua me ajudou muito mesmo, mas aproveitando gostaria de implementar uma segunda sub-rede no meu servidor Debian. Por favor o que fazer para tal?
Abraço, Geraldo
[12] Comentário enviado por francisco.costa em 08/05/2009 - 21:54h
jucinaldo, muito obrigado por compartilhar seu conhecimento. Essa galera do VOL já me ajudou bastante. Espero um dia ter conhecimento suficiente pra ajudar alguém.
[13] Comentário enviado por bestmoor em 21/07/2009 - 21:36h
tenho um problema montei um Debian transparente mais nao consigo pingar para fora da rede ...mais nos navegadores estam navegando
ja aplicaquei os nats no iptables mais ainda nao funciona alguma dica ?
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -s 192.168.0.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128
[15] Comentário enviado por zarate.manaus em 18/01/2010 - 18:43h
quero saber como instalar e configurar o squid 3.0 para fazer um servidor de proxy e cache e criar uma lista de IPS poderao ter acesso a internet e por fim cadastrar todos os mesmo no meu servidor de rede.agradeço desde ja .Obrigado!
[18] Comentário enviado por merloata em 29/05/2010 - 17:29h
Boa tarde !!!
Estou com um problema aqui sou novo no ramo linux, estou com um problema aqui uso uma distribuição
do slackware 12 e ja instalei o squid 3.1 e funciona tudo normal so q somente com proxy ativo no windows
ja mudei tudo que tem q ser feito para rodar trasnparent e nada de funcionar ja rodei o firewall configurei o iptables
e nada de funcionar transparent...o q posso esta fazendo errado ??? vou colocar meu firewall aqui e meu squid a conf deles
[19] Comentário enviado por UnsigneD em 11/06/2010 - 14:27h
Ola!
Segui este tutorial de inicio ao fim, desde ja agredexo ao autor pelo excelente trabalho!
Mas estou com dificuldades...
Eu estou a configurar um proxy em ubuntu server 9.10 e estou a fazer os testes com windows xp a verificar se o proxy fica a funcionar ou nao, o servidor proxy tem duas placas de rede, tenho o squid.conf tal como esta neste post
o meu ficheiro das interfaces de rede esta desta forma:
auto lo eth0
iface lo inet loopback
iface eth0 inet dhcp #interface externa ligada a internet
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT
iptables -A FORWARD -p tcp --dport 80 -j REJECT
iptables -A FORWARD -p tcp --dport 1863 -j REJECT
iptables -A FORWARD -d loginnet.passport.com -j REJECT
iptables -A INPUT -p tcp --syn -j DROP
Ja tentei com o ficheiro firewall da seguinte forma:
#!bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -s 192.168.1.0/255.255.255.0 -p tcp --dport 80 -j REDIRECT --to-port 3128
e também não obtive sucesso...
e o que se passa é o seguinte, coloquei o windows XP com estas definiçoes na placa de rede:
ip: 192.168.1.2
netmask: 255.255.255.0
gateway: 192.168.1.1 (ip do servidor proxy, na eth1)
acedo ao internet explorer e coloco o proxy como 192.168.1.1 porta 3128 e tenho internet a funcionar (logo parto do principio que o proxy esta a funcionar correctamente), mas se retirar essa opção do proxy no internet explorer deixo de ter internet no windows xp, não sei o que se passa, ando as voltas com isto e não consigo resolver!
[22] Comentário enviado por nildopd em 04/07/2011 - 23:30h
AMIGAO jurjus ,boa noite.
Você já conseguiu resolver seu problema ? caso não, explica direitinho o que vc quer fazer e qual a versão linux q vc está pretendendo usar. vlw... abraço
[23] Comentário enviado por adrianoti10 em 03/05/2012 - 17:46h
Boa tarde, como faco para concertar esse erro, estou testando esse squid na minha maquina virtual.
FATAL: Bungled squid.conf line 6: cache_dir ufs /var/spool/squid3 128 16 256 # Aqui é o tamanho máximo de sua cache, no meu caso é 45GB, estude sua necessidade e capacidade da partição /var
Squid Cache (Version 3.1.19): Terminated abnormally.
CPU Usage: 0.008 seconds = 0.000 user + 0.008 sys
Maximum Resident Size: 14384 KB
Page faults with physical i/o: 0
[25] Comentário enviado por Roque em 26/08/2012 - 13:47h
Boas turma, estou com o mesmo problema do colega gnulinuxspirit instalei no Ubuntu em uma máquina virtual que é onde vai rodar o squid (Se bem que ainda não sei estou testando é capaz de deixar uma máquina para rodar o squid futuramente) mas enfim estou com a versão 12.04 Ubuntu e estou com o mesmo erro aí
atomick@server:/etc/init.d$ sudo squid3 start
FATAL: Bungled squid.conf line 6: cache_dir ufs /var/spool/squid3 1024 16 256 # Aqui é o tamanho máximo de sua cache, no meu caso é 45GB, estude sua necessidade e capacidade da partição /var
Squid Cache (Version 3.1.19): Terminated abnormally.
CPU Usage: 0.016 seconds = 0.016 user + 0.000 sys
Maximum Resident Size: 14912 KB
Page faults with physical i/o: 0
[26] Comentário enviado por bruno_proweb em 26/08/2012 - 16:31h
Brother você já viu se nao digitou uma letra em maiusculo na linha 6 ou esses erros que todos cometem de digitação?
Caso não seja isso pode ser também espaço em disco, da um df -h ai e veja como está a unidade em espaço livre...
[27] Comentário enviado por lelecomb em 28/11/2012 - 19:32h
brother, boa tarde. sou novissimo na questão linux, mas gostaria de aprender. qnd coloquei o meu squid pra rodar apresentou o seguinte erro:
2001/12/31 21:09:55| WARNING: (B) '::/0' is a subnetwork of (A) '::/0'
2001/12/31 21:09:55| WARNING: because of this '::/0' is ignored to keep splay tree searching predictable
2001/12/31 21:09:55| WARNING: You should probably remove '::/0' from the ACL named 'all'
2001/12/31 21:09:55| ERROR: '0.0.0.0/0.0.0.0' needs to be replaced by the term 'all'.
2001/12/31 21:09:55| SECURITY NOTICE: Overriding config setting. Using 'all' instead.
2001/12/31 21:09:55| strtokFile: /etc/squid/msn not found
2001/12/31 21:09:55| Warning: empty ACL: acl libera_msn url_regex "/etc/squid/msn"
2001/12/31 21:09:55| strtokFile: /etc/squid/ip_liberado not found
2001/12/31 21:09:55| Warning: empty ACL: acl ipliberado src "/etc/squid/ip_liberado"
2001/12/31 21:09:55| strtokFile: /etc/squid/sites_liberados not found
2001/12/31 21:09:55| Warning: empty ACL: acl sites_liberado url_regex "/etc/squid/sites_liberados"
2001/12/31 21:09:55| strtokFile: /etc/squid/negado not found
2001/12/31 21:09:55| Warning: empty ACL: acl noway url_regex "/etc/squid/negado"
2001/12/31 21:09:55| ERROR: Directive 'upgrade_http0.9' is obsolete.
2001/12/31 21:09:55| cache_cf.cc(381) parseOneConfigFile: squid.conf:177 unrecognized: 'broken_vary_encoding'
2001/12/31 21:09:55| ERROR: Directive 'extension_methods' is obsolete.
[28] Comentário enviado por lelecomb em 28/11/2012 - 19:34h
segue logo abaixo o meu script...
## DATA 28 de novembro de 2012
###################################
## PORTA DE ACESSO A INTERNET######
###################################
http_port 3128
###################################
## NOME DO SERVIDOR ###############
###################################
visible_hostname FACETEN
## indicam a partir de que percentagem do tamanho total
## cache o squid começa a apagar os arquivos
cache_swap_low 90
cache_swap_high 95
## Define o tamnho total do cache em disco - O endereço refere a
## que diretório se deseja utilizar como cache, seguido do tamanho
## máximo do cache no disco (em MB) e os dois últimos números da
## linha indicam a quantidade de pastas e subpastas que o Squid
## utilizará para se organizar ao gravar o cache
cache_dir ufs /var/spool/squid3/cache1 3000 16 256
cache_dir ufs /var/spool/squid3/cache2 3000 16 256
cache_dir ufs /var/spool/squid3/cache3 3000 16 256
cache_dir ufs /var/spool/squid3/cache4 3000 16 256
cache_dir ufs /var/spool/squid3/cache5 3000 16 256
cache_dir ufs /var/spool/squid3/cache6 3000 16 256
cache_dir ufs /var/spool/squid3/cache7 3000 16 256
cache_dir ufs /var/spool/squid3/cache8 3000 16 256
cache_dir ufs /var/spool/squid3/cache9 3000 16 256
cache_dir ufs /var/spool/squid3/cache10 3000 16 256
## caminho para onde devem ser exportados os logs que depois
## poderão ser analisados, manualmente, com com algum gerador
## de relatórios como o SARG
cache_access_log /var/log/squid3/access.log
#Converte as mensagens geradas pelo squid par o Português
error_directory /usr/share/squid3/errors/Portuguese
######################################
## PAGINA DE BLOQUEIO ################
######################################
error_directory /usr/share/squid3/errors/pt-br
[30] Comentário enviado por cgonzagaskill em 23/01/2014 - 17:43h
Olá Amigo,
Parabéns pelo post! Porém tenho um duvida preciso liberar acesso externo para um servidor de câmeras na minha rede interna, Meu servidor é debian 7.0 estou fazendo ppoe para um modem adsl em uma das placas de rede e uma outra placa de rede conectando ao switch para rede interna. além disso no servidor debian 7.0 rodo Dyndns e Squid.
Preciso abrir as portar via iptables e fazer o redicionamento do acesso externo das portas para o acesso do servidor interno de câmeras. É possível o caminho das pedras ?
[34] Comentário enviado por _Aprendiz_ em 28/12/2015 - 17:28h
Boa tarde pessoal. Estou com o mesmo problema citado pelo adrianoti10. segue abaixo erro e depois o meu squid.config.
================================= ERRO ======================================
root@ProxyDamare:/etc/squid3# squid3 -k reconfigure
FATAL: Bungled /etc/squid3/squid.conf line 6: cache_dir ufs /etc/squid3 45000 16 256 #Aqui é o tamanho
máximo de sua cache, no meu caso é 45GB, estude sua necessidade e capacidade da partição /var
Squid Cache (Version 3.4.8): Terminated abnormally.
CPU Usage: 0.016 seconds = 0.012 user + 0.004 sys
Maximum Resident Size: 34304 KB
Page faults with physical i/o: 0
##squid.conf
http_port 3128 transparent
cache_mem 256 MB # Se seu servidor for dedicado, coloque neste valor a metade de sua memória RAM, do contrário use apenas 25%
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/log/squid3 45000 16 256 #Aqui é o tamanho máximo de sua cache, no meu caso é 45GB, estude sua necessidade e capacidade da partição /var
access_log /var/log/squid3/access.log squid
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log
pid_filename /var/log/squid3/squid3.pid # pid - mudamos para esta pasta para facilitar na identificação de problemas
mime_table /usr/share/squid3/mime.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl vlan24 src 192.168.5.0/24 # Representa a sua rede e respectiva máscara de sub-rede
#acl lan src 172.18.28.0/24 # Assim como neste exemplo, se você tiver mais de uma rede, deve ser expressada uma por uma
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 1863 # https
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 CONNECT method CONNECT
[36] Comentário enviado por lemic em 25/10/2016 - 21:09h
Não tem o transparent mais, é intercept, mais num funciona no esquema do 2.7, vc tem que mudar sua vida toda por uma coisa que nem vale mais apena, tenta bloquear o terra pelo squid 3.3.8 ae, não funciona. Seu firewall tem de ser modificado, o squid.conf nem quem escreveu esta coisa caotica consegue explicar. LIXO