Resumo de comandos, linhas de comando e scripts utilizados na manutenção de servidor proxy - Squid (na minha opinião e como eu uso, copiar e colar)
Os comandos e dicas podem não atender as suas necessidades, não ser compatível com sua instalação, use como referencia, tente adaptar ao seu ambiente.
Tente instalar e configurar por partes, tente isolar o problema, facilita na localização do problema e solução, na manutenção ou instalação tente seguir esta ordem.
Passo 1 - Configure o servidor para navegar e pingar as maquinas da rede interna, configure as duas placas de rede e teste com ping para a rede interna e internet, prossiga com a instalação somente depois de obter respostas do comando ping para as maquinas da rede interna e navegar normalmente, quando não tem ambiente gráfico na maquina, use o lynx para testar a navegação, wget para download, outro serviço que possa testar o funcionamento da internet, ou arrisque prosseguir com o ping, no caso do ping faça testes com ping para um dominio.
Passo 2 - Compartilhe a conexão, sem firewall, somente compartilhe para testar a navegação a partir de uma estação, em lugar do firewall utilize estas regras de iptables.
modprobe iptable_nat iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
Ajuste o device de acordo com sua rede, ppp0 como no exemplo acima para conexões via modem discado ou ADSL conectado via pppoe, conexões de ADSL com IP fixo ou obtido por DHCP o device é eth0, altere no exemplo acima para o device em uso.
Passo 3 - Configure a estação para navegar, ainda não tem nada de proxy, configure somente o gateway e DNS, com esta configuração a estação navega sem restrição alguma, veja mais dicas sobre compartilhamento de internet em
Somente depois que conseguir navegar a partir de uma estação, passe para a configuração do Squid.
Passo 4 - Instale, configure e inicie o Squid, lembrando que não basta instalar, a configuração padrão não funciona, precisa de alguns ajustes na configuração. Explicando, precisa de um ajuste minimo no squid.conf, diretivas como classe de IP da rede, nome da maquina e outros detalhes, dependendo do controle desejado precisa criar ACL, usuários, senhas e outros detalhes. Tente fazer uma configuração sem controle algum, pelo menos para entender o funcionamento, subir o Squid e testar a navegação, no FAQ tem varios modelos prontinhos para copiar e colar, não deve servir para o seu proposito, mas são instalações testadas e que funcionam, utilize uma delas pelo menos para entender como funciona e testar, depois faça a sua configuração a partir de zero, para trocar a configuração, basta substituir o squid.conf, apagar cache e recriar novamente, não precisa remover ou reinstalar nada, somente limpar o cache e trocar o squid.conf, também criar ou alterar as ACL conforme a nova configuração.
Inicie o squid e verifique se está rodando OK, prossiga com os proximos tópicos somente depois de iniciar sem mensagens de erro e o status acusar que está rodando.
Passo 5 - Redirecionando o trafego da porta 80 para a porta 3128, altere as regras de compatilhamento, de novo, ajuste o device caso seja diferente de ppp0 como neste exemplo, ajuste também a classe de rede caso seja diferente de 192.168.1.0.
modprobe iptable_nat /usr/sbin/iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128 /usr/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
Antes de configurar a estação, teste a rede novamente, mesmo aplicando a regra acima, nas estações o ping tem que alcançar dominios na internet.
Passo 6 - Configurar estações para usar o proxy, no navegador, procure pelas opções de configuar proxy, em IP informe o IP do micro que roda Squid em porta informe 3128, salve a configuração e teste a nevagação, as condições de acesso a sites vai depender da configuração do Squid, de qualquer forma vai obter alguma resposta, navegar ou a tela de erro do Squid, não esqueça dos logs, no servidor abra um console e execute a linha de comando.
tail -f /var/log/squid/access.log
Este comando exibe no console as mensagens de log, exibe em tempo real, no momento em que estão sendo formadas, tente a navegação na estação e veja os resultados no console, até aqui fica fácil isolar o problema, se navegava antes do redirecionamento e agora não navega, já sabe onde procurar, inicie verificando se está o Squid está rodando, configurações do squid, diretivas, ACL, permissões nos arquivos e diretórios utilizados pelo squid, documentação de configuração do Squid, pegue a mensagem de erro e coloque na caixa de pesquisa do Google..
Procure também nas mensagens de outros arquivos de log do sistema, qualquer dúvida volte ao inicio e vá testando passo a passo, quando Ok, configure o firewall.
Passo 7 - Firewall, as regras acima não tem proteção alguma, maquinas de cara para a internet precisa de um firewall minimo, os exemplos acima são regras para compartilhar e não oferece proteção, portanto precisa criar seu firewall, como pode notar, precisa de uma linha de comando no firewall para redirecionar o trafego da porta 80 para a porta 3128 controlada pelo Squid, no seu firewall substitua a linha que faz NAT por esta linha.
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128
Lembrando que o Squid controla somente a navegação pela porta 80, os demais serviços que utilizam outras portas são controlados pelo Iptables, tais como clientes de e-mail, eles utilizam as portas 25 e 110 que não passam pelo squid, conexões via ssh que utilizam a porta 22, outros serviços que utilizam outras portas diferente da porta 80, configure e controle com regras no iptables, um exemplo para fazer NAT para o restante, tudo que não passar pela porta 80, no firewall, coloque depois da regra de redireconamento.
/usr/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
Considere criar um ambiente de testes, não adianta reclamar que não tem "verba" ou não tem maquina, não custa nada, o pouco tempo que investir agora vai lhe poupar muito mais no futuro além de evitar muitos problemas, considere um bom investimento de tempo, pode instalar diversos squid pela rede sem problema algum.
Nesta estação (instalação) de testes, vai consumir somente parte do espaço do HD e nada mais, utilizando maquina que está atrás de firewall não precisa de mais uma placa de rede, funciona com somente uma placa, configure a nova instalação como uma estação para acessar à internet, sem passar por outro Squid, caso já tenha algum fazendo o controle de acesso à internet, caso ele esteja rodando ma maquina que compartilha a conexão, então inclua no firewall a regra que exclua a maquina de testes do proxy, com esta maquina navegando sem passar por outro proxy voce tem o servidor que precisa para seus testes, basta instalar o Squid e configurar uma estação para usa-lo como servidor proxy, ou melhor alterar o endereço de proxy e gateway apontando para o IP da maquina testes.
Regra de iptables para excluir um IP do redirecionamento, no meu firewall para excluir a maquina de testes, utilizo esta regra.
/usr/sbin/iptables -t nat -A PREROUTING -i eth1 -s \! 192.168.1.53 -p tcp -m multiport --dport 80,443 -j REDIRECT --to-ports 3128 /usr/sbin/iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
Neste exemplo a estação com IP 192.168.1.53 acessa internet sem passar pelo proxy e pode ser usada para rodar outro squid, nesta maquina configure o squid, utilize outra estação da rede para utilizer este novo Squid, altere somente o endereço de IP do proxy e gateway apontando para o segundo servidor proxy, prontinho, tenho outro Squid rodando e estações passando por ele, este segundo proxy sai pelo firewall sem problema algum, ambiente perfeito para testes.
Além de testes ou para backup, serve também como um segundo proxy, não encontrei utilidade para esta opção, mas é possivel manter dois squid na mesma rede, rodando independente e com regras diferentes,
Em ambiente de testes vale usar um modem discado nesta maquina, esta opção também é indicada para testar firewall, regras de squid e outros serviços de rede, pode até ser usado quando cai o link ou ADSL, embora muito mais lento permite acesso à internet enquanto o ADSL não volta.
Com o squid configurado na maquina de testes (clone do principal), utilize qualquer estação da rede, configure ou altere as configurações de proxy apontando para o servidor de testes, prontinho, tem tudo que precisa para testar ACL, diretivas do Squid e muito mais, quando concluir a configuração, basta repetir o processo no principal, ou simplificando, copiar os arquivos de configuração.
Considere manter esta instalação como backup, em casos de emergencia, nunca se sabe quando vai ocorrer acidentes, queimar a maquina, HD ou uma pane na configuração que pare tudo, nestas situações basta alterar o IP que as estações nem ficam sabendo da troca, em menos de um minuto se faz a troca do IP e sobe o Squid.
Use ferramentas como VNC, SSH, FreeNX, Putty e outras, não fique pulando pra lá e pra cá, indo de maquina em maquina, a partir do ambiente gráfico da maquina Linux, abra um console para acompanhar os logs e acesse o VCN da estação windows para simular o uso. A partir da estação windows faça conexão via FreeNX ou Putty para abrir o console e acompanhar os resultados do que acontece com os acessos pela estação windows.
Parar, iniciar, reiniciar e carregar as novas alterações.
Verifique qual o comando para sua distro, são diferentes entre as distros,
Comandos comum na maioria das distro.
squid -k reconfigure
Carregar alterações no squid.conf ou ACL, execute sempre que fizer alterações no squid.conf ou ACL.
squid -k shutdown
Parar o serviço, derrubar o Squid, prefira esta opção em lugar de outras semelhantes como "service squid stop" ou "rcsquid stop".
Segue alguns exemplos para Conectiva e SUSE.
Configurar para iniciar junto com o boot da maquina: chkconfig squid on
SUSE 10.1
rcsquid restart
Reiniciar o serviço, evite esta opção, prefira squid -k reconfigure
.
Conectiva 10
service squid restart
- Reiniciar Squid, evite esta opção, prefira squid -k reconfigure
.
service squid start
Iniciar Squid manualmente
squid -D
iniciar sem testar DNS, pode usar no /etc/rc.d/rc.local.
Esta opção (-D
) serve para não testar o DNS, deve ser usada quando a maquina
que roda o squid não está conectada na net no momento que inicia o squid e portanto
não como testar o DNS e resulta em erro, ocorre em conexões via modem discado ou ADSL
conectado via pppoe, quando tenta iniciar o squid antes de conexão com a net ocorre o
erro porque não tem como testar o DNS, organize a inicialização de forma que o Squid
seja iniciado depois de completar a conexão com a internet, tente iniciar o squid
via rc.local
lembre de incluir a linha do Squid depois da linha que conecta na net.
Caso ainda falhe, tente com esta:
squid -D z
service squid status
conferir status, se está rodando ou não, retorna mensagem semelhante a esta.
Tenho detectado este problema principalmente após alterações nas configurações do Squid, depois de "mexer e fuçar" nas configurações ele para de rodar ou passa ter comportamento estranho, não grava logs, não inicia ou morre logo em seguida.
Tente resolver o problerma apagando o arquivo de pid do squid, localize squid.pid e remova este arquivo, exemplo.
Localizar o processo, execute: find / -name squid.pid
Deverá retornar algo como:
/var/run/squid.pid
Matar o processo, execute: kill -9 /var/run/squid.pid
Caso não resolva, verifique se a maquina está conectada na internet, tente limpar o cache, zerar os logs e outros procedimentos indicados em outros tópicos deste documemnto.
Mais dicas sobre como iniciar serviços e acompanhar procesoss.
Acompanhando os logs em tempo real
Acompanhe os logs em tempo real, enquanto eles são formados voce pode acompanhar as entradas dos registros no log do Squid, execute:
tail -f /var/log/squid/access.log
Consulte também os log do sistema, veja o que disponível em /var/log.
ls -la /var/log/
tail -f /var/log/messages
Refinar a pesquisa, ideal em casos de muitos registros nos logs, para acompanhar somente os registros da estação com IP 192.168.1.53, execute
tail -f /var/log/squid/access.log | grep 192.168.1.53
Substitua 192.168.1.53 por outro termo que deseja procurar, exemplo, exibir somente os logs que contenha sexo em qualquer parte do registro.
tail -f /var/log/squid/access.log | grep sexo
Em lugar de sexo, use a palavra que deseja procurar, foto, msn, orkut, mail e etc....
Para salvar o resultado deste filtro em arquivo, use os redirecionadores, exemplo para salvar em arquivo /tpm/logteste.txt
tail -f /var/log/squid/access.log | grep sexo >> /tmp/logteste.txt
Alguns exemplos.
Exibir as ultimas 100 linhas e sair.
tail -100 /var/log/squid/access.log
Refinar o resultado, exibir somente o IP e a URL, exemplo;
tail -f /var/log/squid/access.log | awk '{print "IP="$3"\t URL="$7}'
Formato e exemplo de resultado:
IP=192.168.1.53 URL=http://www.zago.eti.br/log.txt
Exibir outros campos do Log, troque "IP="$3", pela coluna que deseja, altere IP para o nome que deseja exibir e $3 pela coluna que deseja exibir, neste exemplo o IP é a terceira coluna e a URL é a setima, para exibir IP e tipo de acesso que fica na coluna 4 use:
tail -f /var/log/squid/access.log | awk '{print "IP="$3"\t CODIGO="$4}'
Formato e exemplo de resultado:
IP=192.168.1.53 CODIGO=TCP_MISS/200 IP=192.168.1.53 CODIGO=TCP_MISS/200
Com curingas pode acompanhar no mesmo console e simultaneamente diversos arquivos de log, exemplos para abrir todos os arquivos que terminam com .log em /var/log/squid
tail -F /var/log/squid/*.log
tail -f /var/log/squid/*.log
Com filtro por usuário, IP, URL ou outra opção registradas nos logs, use o grep como neste exemplo;
tail -f /var/log/squid/*.log | grep 192.168.1.53
Abrir também o /var/log/messages, observe que tem um espaço separando os dois endereços.
tail -f /var/log/squid/*.log /var/log/messages
tail -f /var/log/squid/*.log /var/log/messages | grep 192.168.1.53
Faça testes, modifique os exemplos acima, tente outras opções.
Saber o tamanho do cache, veja no squid.conf o caminho do cache, o local não é padrão, portanto, procure na sua instalação, pode pegar o endereço no squid.conf, procure pela linha semelhante a esta;
cache_dir ufs /var/cache/squid 100 16 256
Neste exemplo o cache está em /var/cache/squid , saber o tamanho, espaço ocupado, execute; du -sh /var/cache/squid
e o resultado deverá ser semelhante a 109M /var/cache/squid
.
O local muda conforme a distro, script de instalação ou a gosto do administrador, o mais comum é procurar pelo sub-diretório squid abaixo de /var/spool, neste caso utilize o comando du -sh /var/spool/squid
, ou localize o caminho correto, navegue pelos diretórios, consulte o squid.conf, use o find e sua intuição...
Tem mais opções, inclusive como gerar gráficos individualizados, relatórios em HTML via SARG e muitos outros recursos, veja mais sobre log e relatórios no FAQ
http://www.zago.eti.br/squid/sarg.html
http://www.zago.eti.br/log.html
http://www.zago.eti.br/squid/log.txt
Help do Squid
/usr/sbin/squid -help
man squid
Ver com quais com quais flags o Squid foi compilado:
/usr/sbin/squid -v
Quando não entender a mensgem de erro porque está em ingles, utilize tradudores como Altavista ou Google, se ainda não entendeu a mensagem, então coloque parte dela na caixa de pesquisa do Google.
Explore o mecanismo de busca do Google, coloque na caixa de dialogo a mensagem de erro ou parte dela, tente combinar a pesquisa para refinar os resultados.
Nas regras de bloqueio (ACL) inclua o bloqueio a estes endereços e as indicações deles:
http://proxy.amsistemas.com.br
http://www.proxy4free.com/index.html
http://www.the-cloak.com/anonymous-surfing-home.html http://www.the-cloak.com/login.html
http://surfeasy.info/surfeasy/
http://www.publicproxyservers.com/page1.html
Neste site tem um software que burla o proxy e firewall, não testei.
http://www.wproxy.com https://wproxy.com/
Caso teus usuários consiga acessa-los, atraves deles vão burlar o proxy e acessar qualquer outro site na internet, vai anular totalmente as regras de bloqueio do teu Squid, alguns tem software que instalam na estação para permitir o acesso e uso deles mesmo com eles bloqueado nas regras do squid e firewall, parece ser demais, ainda não detectei esta situação, como tudo é possivel, acho que a solução é a constante vigilancia, analise dos logs e trafego, refinar as regras pra dificultar ao maximo e nunca vacilar com a segurança e monitoramento.
Não tenho como listar todos aqui, mesmo porque não sei quais são, o ideal é acompanhar os logs do squid, pelos relatorios do SARG fica muito mais fácil descobrir acesso a sites estranhos e suspeitos, depois é só acrescentar na lista de sites bloqueados.
Procure no google por httptunnel, anonimato e expressões semelhantes vai se surpreender com o que tem disponivel para usuários criar problemas na tua rede e burlar proxy ou firewall.
Redirecionar todo o trafego da porta 80 para o Squid.
Forçar as estações passarem pelo proxy, precisa colocar uma regra no firewall pra redirecionar todo o trafego da porta 80 para a porta 3128, o local de inserir a regra também é muito importante, tem que ser antes da regra que faz nat para evitar que as estações continue navegando sem passar pelo proxy, veja este exemplo:
modprobe iptable_nat iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128 iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
Cuidado com a quebra de linha no seu browser, cliente de e-mail ou editor, no exemplo acima esta parte:
iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128
tem que ser uma única de linha, tem que ajustar para sua rede, neste exemplo estou permitindo proxy pra toda a rede interna com IP 192.168.1.0/24, altere para a sua classe de rede, ajuste também no squid.conf "acl minharede src 192.168.1.0/255.255.255.0" tem que ser da mesma classe de rede. Neste exemplo 192.168.1.0/24, todas as maquinas da rede permite alterações somente no ultimo octeto 192.168.1.x, mantenha a mesma classe em todas as maquinas, nas estações, no squid.conf e placa de rede interna do micro que compartilha a conexão (firewall), o Squid pode rodar em outra maquina com IP da mesma classe de rede.
As demais linhas no exemplo acima serve pra fazer NAT para os demais serviços como ftp, cliente de e-mail e qualquer acesso à web sem ser pela navegação na porta 80.
Cuidado com a segurança, o exemplo acima serve somente pra ilustrar onde deverá ser colocada a regra de redirecionamento, aplique as suas regras de firewall, qualquer problema altere posição da regra acima para o inicio do firewall.
Qualquer excessão que queira fazer via iptables, tem que ser acrescentada no firewall antes da regra que direciona o trafego pro Squid, o IPtables para a execução do script (analize das regras) na primeira condição que for atendida. Pra excluir um IP do redirecionamento pro Squid, a regra tem que estar no script do firewall, antes da que redireciona o trafego pro Squid.
Esta regra redireciona todo o trafego da porta 80 para a porta 3128 do Squid.
/usr/sbin/iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128
Com a regra acima todas as estações todas as estações são forçadas a passar pelo proxy pra alcançar a net, portanto submetendo às regras configuradas no Squid, mas é possível manter o proxy para toda a rede e excluir algumas maquinas do proxy, ficam sujeitas somente às regras de iptables.
Excluir somente uma estação, pode aplicar direto na regra de redirecionamento, quando precisar excluir mais de uma maquina (IP), crie uma regra (linha abaixo) para cada maquina, obrigatoriamente a ordem destas regras no script tem que ser colocadas na posição antes da regra de redirecionamento, no exemplo a seguir inclue a regra de redirecionamento para facilitar o entendimento, segue alguns exemplos de regras para tirar do proxy as maquinas com final 42, 53 e 155,
/usr/sbin/iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.42/32 -p tcp -m multiport --dport 80,443 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.53/32 -p tcp -m multiport --dport 80,443 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -i eth1 -s \! 192.168.1.155 -p tcp -m multiport --dport 80,443 -j REDIRECT --to-ports 3128 Ou se preferir, outro formato com o mesmo resultado; /usr/sbin/iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.42/32 -p tcp -m multiport --dport 80,443 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.53/32 -p tcp -m multiport --dport 80,443 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.155/32 -p tcp -m multiport --dport 80,443 -j ACCEPT /usr/sbin/iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128
Onde eth1 é interface interna e 192.168.1.0 é toda a rede interna (clase de rede), altere conforme sua rede.
Mais um exemplo; iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.32/32 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.53/32 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.155/32 -j MASQUERADE Ou também; iptables -t nat -A POSTROUTING -s 192.168.1.53 -o ppp0 -j MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.1.53 -o eth0 -j MASQUERADE A primeira linha é pra quem levanta a interface ppp0 e a segunda é pra quem levanta a eth0, no exemplo acima a estação com IP 192.168.1.53 não vai passar pelo proxi nem pelas regras do Squid.
No meu firewall utilizo esta regra para excluir
do redirecionamento a maquina com ip 192.168.1.53.
/usr/sbin/iptables -t nat -A PREROUTING -i eth1 -s \! 192.168.1.53 -p tcp -m multiport --dport 80,443 -j REDIRECT --to-ports 3128
/usr/sbin/iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
onde
Confira se as regras de NAT estão ativas para os IP em questão, após a inclusão das regras, execute o script de firewall e depois veja se os IP aparecem na listagem do comando;
iptables -L -v -t nat
Estações que estão atrás de um servidor proxy, precisam de configuração especial sobre a rede, além da configuração de rede na estação, IP, DNS, gateway e rota, quando acessam a internet pelo proxy como Squid, precisam configurar os navegadores e demais serviços que utilizam a porta 80 para acessar a internet pelo proxy, brownser como Mozilla, konqueror, I.E tem opções de configuração do proxy, procure no seu navegador pela opção de configurar o servidor proxy, informe o IP e porta, onde IP é o IP do micro que roda o Squid e a porta em que está ouvindo, normalmente é a 3128.
No Firewall deve ter uma regra redirecionando o trafego da porta 80 para a porta 3128, algo semelhante a estas regras.
modprobe iptable_nat /usr/sbin/iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128 /usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forwardd
Quando falhar o acesso a FTP, acrescente as regras pra fazer NAT também de FTP, são estas regras:
modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe iptable_nat
No firewall precisa carregar os modulos responsaveis pelo NAT de FTP, requer no minimo estas regras e nesta ordem:
modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe iptable_nat /usr/sbin/iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128 /usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
Agora faça um teste com o konqueror nas estações, na aba:
configurações Configurar konqueror Proxy selecione usar proxy e configurações específicas manualmente, clique em configurar, na linha FTP não preencha, deixe esta linha vazia e não selecione a opção [] usar o mesmo servidor proxy para todos os protocolos, o proxy Squid não controla a porta do ftp, portanto não marque esta opção.
Teste com servidor de FTP externo, tente com servidores de ftp anonimo como a unicamp, teste com este endereço
Servidores de FTP que requer login, exemplo, atualizar sites, acrescente na URL o login e senha, neste formato:
ftp://meulogin:minhasenha@www.zago.eti.br/
Configurar I.E, tente este caminho:
Em primeiro lugar por questões de segurança tente não usar I.E. tem muitas recomendações de segurança indicando outros navegadores em lugar do I.E.
Quando o ping alcança a internet e o I.E. não navega, procure nas opções de configurar para navegar por uma rede LAN, procure pelas opções de proxy e informe o IP do servidor proxy e a porta. Com isto deverá navegar, caso falhe, veja nas configurações de rede se tem o IP da mesma classe, gateway e DNS, veja se o ping alcança o micro que compartilha a conexão, tente com outros navegadores, com outros serviços de acesso à internet para tentar isolar o problema.
Quando o I.E. navega mas não acessa sites de FTP e no micro que compartilha a conexão carrega os modulos como indicado acima, outros navegadores acessa e falha somente com I.E, então é problema de configuração do I.E. Na barra de menu do internet explorer -> guia avançado no item "navegação" procure pelas opções com referencia a FTP, desmarque ou marque a opção "Ativar o modo de exibição de pastas para sites ftp". Tente acessar ftp, caso falhe inverta as opções, vai tentando que a solução é nestes itens.
Configurar I.E direto no registro do windows, tópico em testes com win98 SE.
Faça testes antes de aplicar esta solução na rede, verifique em uma maquina se o caminho confere, avalie e teste em uma maquina antes de aplicar em todas.
Crie um script com edit do DOS ou bloco de notas, como sugestão de nome proxyon.reg com este conteúdo;
REGEDIT4 [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "ProxyEnable"=dword:00000001 "ProxyServer"="192.168.1.2:3128" "ProxyOverride"="<local>"
No exemplo acima altere somente o IP 192.168.1.2 para o do seu servidor proxy, as demais linhas não altere mantenha o REGEDIT4 como está, nome pode mudar mas tem que terminar com .reg, no prompt do DOS execute;
regedit -s \\caminho\proxyon.reg
Desfazer a configuração, crie o proxyoff.reg com este conteúdo;
REGEDIT4 [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "ProxyEnable"=dword:00000000 "ProxyServer"=" " "ProxyOverride"="<local>"
no prompt do DOS execute; regedit -s \\caminho\proxyoff.reg
Não precisa reiniciar Windows, precisa fechar todas as janelas do I.E. e abrir novamente.
Não exibe a configuração em propriedades do navegador, fica tudo transparente.
Duplo clique sobre o arquivo tem o mesmo resultado, optei pelo exemplo acima porque serve para executar na linha de comando (prompt do DOS), incluir no logon script do Samba.
Considere incluir no iniciar, login script do Samba ou outro metodo de execução automatica, com um servidor DHCP fornecendo IP e gateway, não precisa configurar nada nas estações win98
Alguns serviços como wget, lynx, e outros serviços que também acessam a net pela porta 80 e não tem opção para configurar o proxy, eles utilizam a configuração do sistema, a configuração de proxy é diferente, portanto precisa configurar no sistema e não no serviço que vai usar, formato da linha de comando para configurar proxy para wget, lynx e outros.
export http_proxy=http://ip.do.proxy:porta-do-proxy
Exemplo da linha de comando que libera estações para acesso à internet compartilhada com proxy Squid, onde o servidor tem o IP 192.168.1.2 e todo o trafego é redirecionado para a porta 3128, nos navegadores deve utilizar como servidor proxy 192.168.1.2 porta 3128, para wget e lynx acessarem a internet nesta mesma rede, o comando fica assim:
export http_proxy=http://192.168.1.2:3128
Ajuste o IP e porta para sua rede, 192.168.1.2 é meu gateway, IP da maquina que roda Squid.
Após o comando, teste a navegação ou download, navegar com lynx, execute.
lynx http://www.zago.eti.br/comandos.txt
Donload com wget
wget http://www.zago.eti.br/comandos.txt
Use também a dupla "vi" + lynx, converte páginas da web para texto limpo diretamente no editor "vi", aproveite e faça o teste, dentro do editor "vi" em modo comando, cole esta linha:
:r !lynx -dump http://200.204.198.164/zago/comandos.txt
Ou importe este documento que voce está lendo, limpinho, sem nada de HTML dentro do editor "vi".
:r !lynx -dump http://www.zago.eti.br/squid/dicas-e-truques.html
Esta configuração de proxy se perderá quando desligar a maquina, para tornar permanente precisa incluir nos arquivos de configuração do sistema, pode configurar para todos usuários da maquina ou somente para usuários específicos.
Configuração permanente e restrita a alguns usuários, insira a linha de comando no .bash_profile dos usuários, basta editar o arquivo .bash_profile que fica no home do usuário e acrescentar após a ultima linha:
export http_proxy=http://192.168.1.2:3128
Pronto, automatizado a execução desta linha no login do usuário.
Configurando para todos os logins nesta maquina, acrescente no final do arquivo /etc/profile, use o um editor pra acrescentar a linha:
export http_proxy=http://192.168.1.2:3128
Ou da maneira mais simples:
echo "export http_proxy=http://192.168.1.2:3128" >> /etc/profile
A partir do próximo boot da maquina a configuração do proxy já vem configurado para wget, lynx e demais serviços que pegam os dados do proxy na variável de ambiente, quando optar pelo /etc/profile valerá para todos os usuários, portanto não precisa incluir no .bash_profile dos usuários
APT-GET Somente pra maquinas atrás de proxy squid.... no CL basta copiar e colar esta linha no shell:
echo 'Acquire::HTTP::proxy "http://192.168.1.2:3128";' >> /etc/apt/apt.conf
Ajuste o IP e porta para sua rede, 192.168.1.2 é meu gateway, IP da maquina que roda Squid.
Não precisa fazer alterações no squid.
Fazer NAT também para FTP precisa incluir no firewall os modulos:
modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe iptable_nat
Com autenticação.
Com proxy autenticado, quando requer senha para acessar internet, precisa liberar por usuário, pra informar login e senha, coloque no arquivo /etc/apt/apt.conf, normalmente ele está vazio, caso não existir pode criar, dentro dele coloque a linha neste formato:
Acquire::HTTP::proxy "http://usuario:senha@192.168.1.2:3128/; Acquire::HTTP::proxy "http://zago:minhasenha@192.168.1.2:3128;
Variavel de ambiente.
Como variavel de ambiente, pra usar somente na sessão atual, precisa executar no shell toda vez que for usar, pode digitar ou copiar e colar, colocar dentro de um script, vale também colocar no .bashrc do root ou outro meio qualquer que possa comandar a execução, precisa criar duas variáveis de ambiente, elas valem somente até reiniciar a maquina, veja exemplo:
export ftp_proxy=http://usuario:senha@192.168.1.2.8:3128 export http_proxy=http://usuario:senha@192.168.1.2:3128
Pra conferir, ver o conteúdo da variavel:
echo $ftp_proxy echo $http_proxy
smart config --set http-proxy=<seu-proxy>
ACL - Manutenção, alterações nas ACL, incluir, excluir ou alterar palavras de bloqueio e etc....
Acompanhe os logs ou relatorios do sarg, quando encontrar sites sendo bloqueados ou liberados indevidamente basta fazer a correção no arquivo que contém as palavras, use qualquer editor de texto puro, por exemplo "vim", após salvar o arquivo, pra recarregar o squid execute:
squid -k reconfigure
ou
service squid reload
Não precisa parar e reiniciar o squid.
Pra muitas alterações, faça duas conexões via ssh, torne root, alterne entre os terminais, um pra fazer alterações e outro para acompanhar os logs em tempo real, execute:
tail -f /var/log/squid/access.log
Na outra conexão vá pro diretório /etc/squid, pra fazer alterações edite o arquivo desejado, salve e recarregue o squid com (squid -k reconfigure
), volte ao terminal dos logs e continue acompanhado.
O ideal é editar o arquivo e acrescentar as palavras em ordem alfabetica, facilita a organização e manutenção.
OBS. Dica para aplicar em instalação que parou de funcionar, Squid que não inicia ou morre alguns segundos após iniciar, a provável causa pode ser algum arquivo travado, erro no cache ou algum arquivo de dados, zerando estes arquivos, volta à condição inicial como funcionava na instalação, esta dica não resolve erros nem falhas de configuração ou hardware.
Agora tente parar e reiniciar o serviço, na maioria das vezes vai resolver o problema, caso persista, então resta a força bruta (radicalismo), apague tudo e recrie novamente, deve existir outras formas, utilizo a recurso acima quando falha sigo a dica passada pelo Anderson andersonmsp@click21.com.br, em varios casos que a opção acima falhou, a dica abaixo funcionou, tenho até um resumo no final pra copiar e colar, veja que funciona na minha instalação do CL10, pode não servir pra tua instalação que pode ter nomes de arquivos e diretórios diferentes, procure pelo equivalente na sua instalação.
Tem que funcionar porque zera tudo, caso persista o problema, tente voltar a copia de um squid.conf e ACL que funcionavam antes das alterações, verifique o espaço em disco, hardware, processos e use a intuição pra descobrir a causa do problema.
Antes de aplicar os procedimentos abaixo, pare todos os processos do squid, verifique se ainda tem algum processo rodando
``ps -aux | grep squid ``
Para solucionar o problema, proceda assim:
remova o diretório /var/spool/squid rm -rf /var/spool/squid
recrie novamente mkdir squid
Libere a permissão chmod -R 777 squid
Copie os arquivos de log para outro diretório, mova ou renomeie, exemplo para mover os logs para /tmp, execute:
mkdir /tmp/squidlog mv /var/log/squid/* /tmp/squidlog
Caso não precise dos logs pode remover tudo que estiver em: /var/log/squid/
rm -rf /var/log/squid/*
Recrie o arquivo access.log
touch /var/log/squid/access.log
Libera geral ou seu modo:
chmod 777 access.log
inicie o squid, demora um pouco, deve voltar a funcionar normalmente, faça um teste, veja o status.
service squid start
Ou em uma tacaca só, resumo dos comandos (copiar e colar), colinha do zago e Anderson.
Neste exemplo, todos os logs serão movido para /tmp.
Instalação com cache em /var/spool/squid e log em /var/log/squid:
service squid stop mkdir /tmp/squidlog-`date +%d.%b.%Y-%H-%M` mv /var/log/squid/* /tmp/squidlog-`date +%d.%b.%Y-%H-%M` rm -rf /var/spool/squid mkdir /var/spool/squid chmod -R 777 /var/spool/squid rm -rf /var/log/squid/* touch /var/log/squid/access.log chmod 777 /var/log/squid/access.log squid -z service squid start
Instalação com cache em /var/cache/squid e log em /var/log/squid:
service squid stop mkdir /tmp/squidlog-`date +%d.%b.%Y-%H-%M` mv /var/log/squid/* /tmp/squidlog-`date +%d.%b.%Y-%H-%M` rm -rf /var/log/squid/* rm -rf /var/cache/squid mkdir /var/cache/squid touch /var/log/squid/access.log chmod 777 /var/log/squid/access.log chown proxy.proxy /var/cache/squid chgrp proxy /var/cache/squid chmod 777 /var/log/squid/access.log chown proxy.proxy /var/log/squid/access.log chgrp proxy /var/log/squid squid -z service squid start
Opção para zerar somente o cache, apagar e recriar somente o cache:
service squid stop rm -rf /var/spool/squid/* squid -z service squid start
ACL para liberar acesso ao servidor web interno (CUPS, Apache e etc...).
acl ipinterno dst 192.168.1.0/24 http_access allow ipinterno allNeste exemplo, libera todos os servidores interno para todas as estações, servidores web, cups e etc.., caso queira liberar somente um servidor, por exemplo, liberar somente o servidor web que está no IP 192.168.1.3:
acl ipinterno dst 192.168.1.3/32 http_access allow ipinterno allLiberar o acesso a servidor CUPS, precisa incluir a porta 631 na "acl Safe_ports ", exemplo no squid.conf que libera a porta 631:
acl Safe_ports port 80 21 443 563 631 70 210 1863 1025-65535
Não imprime com proxy habilitado no I.E. Estação com win98 não imprime na impressora compartilhada pelo CUPS, quando habilita o proxy no I.E perde a impressão, envia e nada acontece, removendo as configurações de proxy a estação imprime sem problema algum.
Enquanto não descubro a solução estou contornando o problema com a seguinte solução; deixe o I.E sem configurações de proxy e use o Firefox com proxy configurado para navegar, desta forma a estação imprime normalmente.
Limpar arquivo de configuração, retirar todos os comentarios e linhas em brando do squid.conf, isto é opcional, mas é prático pra enviar o arquivo de configuração para outras pessoas analizarem, as duas linhas de comando abaixo estão prontas para copiar e colar, para evitar acidentes e subrescrever o squid.conf, faça cópia para outro local, no exemplo abaixo, a primeira linha faz copia do squid.conf para /tmp, a segunda limpa o arquivo e salva o resultado em /tmp/squid.conf-limpo.
cp /etc/squid/squid.conf /tmp/squid.conf-comentado egrep -v "^#|^$" /tmp/squid.conf-comentado > /tmp/squid.conf-limpo
Comparar dois squid.conf e salvar as diferenças entre eles em /tmp/squidif (altere o caminho e nome dos arquivos)
egrep -v "^#|^$" /etc/squid/squid.conf > /tmp/squid1 egrep -v "^#|^$" /etc/squid/squid.confori > /tmp/squid2 diff -y --suppress-common-lines /tmp/squid1 /tmp/squid2 | tr -d '\011' > /tmp/squiddif less -Nis /tmp/squiddif
Controlar maquinas por IP pode não ser eficiente, quando os usuários descobrirem que podem trocar o IP pra fugir das regras voce perderá o controle.
Uma solução é centralizar tudo em um servidor de DHCP pra fornecer o IP pras estações, pra melhorar a eficiencia, amarre o IP ao MAC-ADRESS da placa de rede, este servidor de DHCP pode ser configurado pra fornecer além do IP, também o DNS e gateway da rede, isto poupa o trabalho de configuração das estações e centraliza tudo em um só lugar, pra saber mais sobre DHCP veja:
No inicio da linha de log do Squid aparece um numero semelhante a: 1085173079.594
Este numero representa a data e hora no formato Unix, converter para hora humana, por exemplo, 1085173079.594
, o que vem depois do ponto são milesimos de sengundos que não interessa na data, mesmo porque não usamos este formato de tempo, portanto elimine o ponto e o que vem depois dele, o formato da linha de comando é este: date --date='1/1/1970 + <UNIXTIME> seconds'
, para converter a data 1085173079.594, execute esta linha de comando:
date --date='1/1/1970 + 1085173079 seconds'
Veja o resultado:
perl -e "print scalar localtime(shift||1085173079.594)"
Retorna;
[zago@faqcl10 zago]$ perl -e "print scalar localtime(shift||1085173079.594)" Fri May 21 20:57:59 2004Veja mais sobre data no FAQ
Algumas estações windows não acessam o Hotmail, tem algo a ver com a versão do I.E, outros navegadores como Firefox acessa sem prolemas, caso o problema seja somente com I.E. pra acessar o Hotmail. então faça esta alteração no teu squid.conf
Adicione no squid.conf as linhas:
acl hotmail_domains dstdomain .hotmail.msn.com header_access Accept-Encoding deny hotmail_domains
recarregue o squid com: squid -k reconfigure
Prontinho, as estações windows com I.E. passam acessar o hotmail passando pelo Squid.
Solução indicada pelo colega Andersonmsp@yahoo.com.br