squid3 muito lento dentro do proxy

Iniciado por Said Dias, 07 de Julho de 2013, 15:10

tópico anterior - próximo tópico

Said Dias

Amigos bom dia para todos.

Estou montando um hotspot, e ele ja funciona redondo, mas queria colocar o squid para melhorar a performace.

portanto estou ha alguns dias tentando dar uma velocidade do meu squid3. uso ele como transparente. Quando faço o redirect do iptables
iptables -t nat -I ALTECNOLOGIC -s 10.172.13.11 ! -d 10.172.13.1  -p tcp --dport 80 -j REDIRECT --to-port 8888 ele navega  lento, na verdade nao uma lentidão excessiva, mas percebo isso  principalmente no youtube, a barra de progresso fica parada e o video vai passando com muitas pausas, quando retiro o redireciomanto, a barra logo se preenche e o video roda que é uma beleza.
ja li muitas coisa sobre isso, uns falam que é do dns outro que o tipo de cache (ufs, aufs, etc) outro ja falam que preciso instalar o squid pelo codigo fonte. me indicaram uma configuração para eu colocar o resolv.conf, mas o resolv.conf sempre muda. Ja peguei mais de um dúzia de exemplos do squid.conf e todos apresentam o mesmo problema. Nao tenho muita experiencia com linux e fico pensando se isso pode ser normal. Peço a ajuda dos colegas para me dar uma mão.
irei deixar minhas confs aqui, como disse antes ja testei varias configurações, entao, se tiver algo muito absurdo me perdoem
so preciso que o squid faço o cache, nao quero algo muito elaborado

Uso o

kubuntu 12.04.1
bind9
isc-dhcp-server
shaper
apache2


root@quiosque:/home/altecnologic# squid3 -v

Squid Cache: Version 3.1.19
configure options:  '--build=i686-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=${prefix}/lib/squid3' '--srcdir=.' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-silent-rules' '--datadir=/usr/share/squid3' '--sysconfdir=/etc/squid3' '--mandir=/usr/share/man' '--with-cppunit-basedir=/usr' '--enable-inline' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-underscores' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth=basic,digest,ntlm,negotiate' '--enable-basic-auth-helpers=LDAP,MSNT,NCSA,PAM,SASL,SMB,YP,DB,POP3,getpwnam,squid_radius_auth,multi-domain-NTLM' '--enable-ntlm-auth-helpers=smb_lm,' '--enable-digest-auth-helpers=ldap,password' '--enable-negotiate-auth-helpers=squid_kerb_auth' '--enable-external-acl-helpers=ip_user,ldap_group,session,unix_group,wbinfo_group' '--enable-arp-acl' '--enable-esi' '--enable-zph-qos' '--enable-wccpv2' '--disable-translation' '--with-logdir=/var/log/squid3' '--with-pidfile=/var/run/squid3.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-linux-netfilter' 'build_alias=i686-linux-gnu' 'CFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security' 'LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security' --with-squid=/build/buildd/squid3-3.1.19

SQUID.CONF

http_port 8888 transparent
# ACCESS CONTROLS OPTIONS
# ====================
#
acl QUERY urlpath_regex -i cgi-bin \? \.php$ \.asp$ \.shtml$ \.cfm$ \.cfml$ \.phtml$ \.php3$ localhost
acl all src
acl localnet src 10.172.13.0/24 # Your network here
acl localhost src 127.0.0.1/32
acl safeports port 21 70 80 210 280 443 488 563 591 631 777 901 81 3128 1025-65535
acl sslports port 443 563 81 2087 10000
acl manager proto cache_object
acl purge method PURGE
acl connect method CONNECT
acl ym dstdomain .messenger.yahoo.com .psq.yahoo.com
acl ym dstdomain .us.il.yimg.com .msg.yahoo.com .pager.yahoo.com
acl ym dstdomain .rareedge.com .ytunnelpro.com .chat.yahoo.com
acl ym dstdomain .voice.yahoo.com
acl ymregex url_regex yupdater.yim ymsgr myspaceim

http_access deny ym
http_access deny ymregex
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !safeports
http_access deny CONNECT !sslports
http_access allow localhost
http_access allow localnet
http_access deny all
#
# NETWORK OPTIONS
# —————
#
#
# OPTIONS WHICH AFFECT THE CACHE SIZE
# ==============================
#
cache_mem 350 MB
maximum_object_size_in_memory 1282 KB
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA
cache_dir aufs /home/precise/cache 10000 14 256
maximum_object_size 128000 KB
cache_swap_low 95
cache_swap_high 99
#
# LOGFILE PATHNAMES AND CACHE DIRECTORIES
# ==================================
#
access_log /var/log/squid3/access.log
cache_log /cache/cache.log
#cache_log /dev/null
cache_store_log none
logfile_rotate 5
log_icp_queries off
#
# OPTIONS FOR TUNING THE CACHE
# ========================
#
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
# reload-into-ims
refresh_pattern ^gopher: 1440 0% 1440
#refresh_pattern -i \.(gif|png|jp?g|ico|bmp|tiff?)$ 10080 95% 43200 reload-into-ims ignore-no-cache ignore-private
#refresh_pattern -i \.(rpm|cab|deb|exe|msi|msu|zip|tar|xz|bz|bz2|lzma|gz|tgz|rar|bin|7z|doc?|xls?|ppt?|pdf|nth|psd|sis)$ 10080 90% 43200 reload-into-ims ignore-no-cache ignore-private
#refresh_pattern -i \.(avi|iso|wav|mid|mp?|mpeg|mov|3gp|wm?|swf|flv|x-flv|axd)$ 43200 95% 432000 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private
refresh_pattern -i \.(html|htm|css|js)$ 1440 75% 40320
refresh_pattern -i \.index.(html|htm)$ 0 75% 10080
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 1440 90% 10080
#
quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 100
store_avg_object_size 13 KB
#
# HTTP OPTIONS
# ===========
vary_ignore_expire on
#
# ANONIMITY OPTIONS
# ===============
#
request_header_access From deny all
request_header_access Server deny all
request_header_access Link deny all
request_header_access Via deny all
request_header_access X-Forwarded-For deny all
#
# TIMEOUTS
# =======
#
forward_timeout 240 second
connect_timeout 30 second
peer_connect_timeout 5 second
read_timeout 600 second
request_timeout 60 second
shutdown_lifetime 10 second
#
# ADMINISTRATIVE PARAMETERS
# =====================
#
cache_mgr altecnologic
cache_effective_user proxy
cache_effective_group proxy
httpd_suppress_version_string on
visible_hostname Altecnologic
#
ftp_list_width 32
ftp_passive on
ftp_sanitycheck on
#
# DNS OPTIONS
# ==========
#
#dns_timeout 10 seconds
dns_nameservers 127.0.0.1
#10.172.13.1 8.8.8.8 8.8.4.4 # DNS Server
#
# MISCELLANEOUS
# ===========
#
memory_pools off
client_db off
reload_into_ims on
coredump_dir /cache
pipeline_prefetch on
offline_mode off
#
#Marking ZPH
#==========
#zph_mode tos
#zph_local 0x04
#zph_parent 0
#zph_option 136
### END CONFIGURATION ###
strip_query_terms off

pico /etc/dhcp/dhcpd.conf

ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 10.172.13.0 netmask 255.255.255.0 {
range 10.172.13.10 10.172.13.250;
option domain-name-servers 10.172.13.1,8.8.8.8,8.8.4.4;
option domain-name "altecnologic";
option routers 10.172.13.1;
option broadcast-address 10.172.13.255;
}


pico /etc/bind/named.conf

acl clientes {
        127.0.0.0/8;
        10.172.13/24;
};

options {
        directory "/etc/bind";
        allow-query { clientes; };
        allow-recursion { clientes; };
};

zone "." IN {
        type hint;
        file "db.root";
};

zone "localhost" {
        type master;
        file "db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "db.255";
};

zone "altecnologic" IN {
        type master;
        file "db.altecnologic";
        allow-query { any; };
};


pico /etc/bind/db.altecnologic

$TTL 86400
@ IN SOA altecnologic. postmaster.altecnologic. (
                        2007111901 ; serial
                        3600       ; refresh (1 hour)
                        600        ; retry (10 minutes)
                        604800     ; expire (2 weeks)
                        86400      ; minimum (12 hours)
                        )

                        NS      altecnologic.

@               IN      A       10.172.13.1
gw              IN      A       10.172.13.1



o meu firewall bloquear todo o trafego e manda para a porta do apache
o apache abre uma pagina remota onde o funcionario tem que colocar sua matricula e sua senha
depois de colocar suas credenciais o apache executa um script (aqui acho que é CGI-BIN)  no meu servidor, esse script libera a maquina do funcionario para usar a internet.







.

zekkerj

Autenticação com squid transparente não funciona. Escolha um ou outro.

Não é essa a causa do seu problema de lentidão, mas vai te causar outros problemas mais cedo ou mais tarde.

Sobre a lentidão, observe se o IPv6 está desabilitado no seu servidor. O IPv6 ativo pode causar lentidão para iniciar conexões, já que o squid vai tentar primeiro fazer a conexão via ipv6 antes de tentá-la por ipv4.

A descrição que vc deu de lentidão durante o download de arquivos parece estar mais relacionada ao desempenho do acesso ao cache, principalmente do cache em disco. Não gostei da sua opção de colocar o cache dentro do diretório /home, muito menos de criar um diretório /cache na raiz só pra colocar logs e core dumps. O diretório /var/cache/squid seria melhor lugar para o cache, e /var/log/squid seria o lugar dos logs.

Que tipo de processamento essa máquina faz? Quantos usuários você tem? Qual é o tráfego que essa máquina transporta?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

Ola zekkerj obrigado pela resposta,

Acho que nao fui claro em minhas explicações.

Não uso autentificação pelo squid, como disse uso um site para realizar essa verificação, e modo transparente mesmo.
e só necessito que o squid faça o cache dos sites, claro que com uma certa velocidade.

E minhas conf podem estar loucas mesmo, como disse peguei muitos exemplos na net. e esse foi o ultimo.

voce me falou sobre o ipv6, poderia me explicar melhor?

e  a outra coisa sobre o local do cache, ja havia testado outros exemplos que o local era em /var/spool/squid3 e mesmo assim nao funcionava.

sobre a lentidão, eu sinto mais quando vejo um video no youtube (voce comentou sobre download).



zekkerj

Citarvoce me falou sobre o ipv6, poderia me explicar melhor?
O Ubuntu vem com o IPv6 ativo. Isso causa lentidão, se a sua rede não tiver suporte a IPv6 (e a maioria ainda não tem).

Citare  a outra coisa sobre o local do cache, ja havia testado outros exemplos que o local era em /var/spool/squid3 e mesmo assim nao funcionava.
Mudar o cache de lugar não vai resolver a lentidão (até pq não é a causa direta), mas vai trazer organização pro teu sistema.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

zekkerj bom dia.

Desculpe a demora...

Eu estava tentando entender onde esta meu problema, fiquei na dúvida se era do squid3 ou do meu firewall, fiz uns teste aqui, e tenho 90% de certeza que o problema esta no meu iptables.

como ja havia dito antes, tenho um hotspot, meu firewall bloquea tudo e manda todas as requisições para a porta 80 onde o apache esta escutado.

o apache abre um site remoto onde o funcionario colocar suas credenciais, se os dados estiverem corretos o site executa um script aqui no meu servidor e libera o acesso.

fiz uns teste aqui com esse script.
internet.sh

/bin/bash
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ipt_MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -t nat -A PREROUTING -s 10.172.13.11 -p tcp --dport 80 -j REDIRECT --to-port 8888



Com esse script o squid roda redondo sem a lentidão que eu havia dito.

Mas esse firewall é somente para teste o que eu uso no sistema é esse...
/etc/firewall.conf

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 0 -m length --length 30:1100 -m limit --limit 4/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 30:1100 -m limit --limit 4/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp --dport 2250 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22,53,67,80,8888,953 -j ACCEPT
-A INPUT -p udp -m multiport --dports 53,67,80,8888,953 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 8888 -j ACCEPT # COLOQUEI ESSA LINHA PARA TESTE
#
#####################################################################
### Inicio das configuracoes para o AltecnetCard na tabela filter ###
#####################################################################
#
-N REGRAS_EMPRESA
#
### Acesso aos radios
-A FORWARD -j ALTECNOLOG
# Permite acesso livre ao login.altecnolog.com.br
-A REGRAS_EMPRESA -s 187.17.XX.XX -j ACCEPT
-A REGRAS_EMPRESA -d 187.17.XX.XX -j ACCEPT
-A REGRAS_EMPRESA -s 187.17.XX.XX -j ACCEPT
-A REGRAS_EMPRESA -d 187.17.XX.XX -j ACCEPT
# Bloqueia o resto
-A REGRAS_EMPRESA -j DROP
#
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
#-A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8888

#
##################################################################
### Inicio das configuracoes para o REGRAS_EMPRESA na tabela nat ###
##################################################################
#
# Cria a chain REGRAS_EMPRESA na tabela nat
-N REGRAS_EMPRESA
#
-A PREROUTING -i eth1 -j REGRAS_EMPRESA
-A REGRAS_EMPRESA -d 187.17.XX.XX -j ACCEPT
-A REGRAS_EMPRESA -d 187.17.XX.XX -j ACCEPT

-A REGRAS_EMPRESA -p tcp -m multiport --dports 53,80 -j REDIRECT
-A REGRAS_EMPRESA -p udp -m multiport --dports 53,80 -j REDIRECT
#
COMMIT

E o script que esta no servidor que o site chama para liberar o acesso e este....
pico /var/www/cgi-bin/autoriza.sh

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
. ./config.sh
echo -e "Content-type: text/html\n"
if [ ! "`echo $HTTP_REFERER | grep 'REGRAS_EMPRESA.com.br'`" ]; then
  echo "`date +%Y-%m-%d\ %H:%M:%S`: $REMOTE_ADDR: referer invalido: $HTTP_REFERER" >> $BDIR/log/autoriza.log
  echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$LOGIN\"></head>"
  exit
fi
. ./shaper.sh  > /dev/null 2> /dev/null
awkcmd="/^$REMOTE_ADDR / { print \$3 }"
mac=`arp -n | awk "$awkcmd"`
iptables -t nat -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -d $REMOTE_ADDR -j ACCEPT

echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$CONFIRMA?sessao=$QUERY_STRING&gw=$GW&mac=$mac&ip=$REMOTE_ADDR\"></head>"


Ja tentei colocar "iptables -t nat -A PREROUTING -s $mac -p tcp --dport 80 -j REDIRECT --to-port 8888" dentro do /var/www/cgi-bin/autoriza.sh (acima citado), mas apesar do squid funcionar ele fica lento.

Entao acho que o problema esta no meu firewall.

Pode me ajudar?

zekkerj

Não consregui entender... os 3 scripts estão em uso no mesmo servidor ou não?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

O primeiro script foi somente um teste para eu verificar se o rodava bem sem as regras do meu firewall.
com esse primeiro script o squid roda bem, sem a lentidão.

O segundo script seria meu script original que eu uso aqui no dia a dia, naturalmente quando eu rodava o primeiro eu parava o segundo

e o terceiro script é o script que minha pagina web executa aqui no meu servidor para liberar o acesso do funcionario depois dele colocar suas credenciais.

tenho somente um servidor, tudo roda nele, dhcpd, apache, bind9, shaper e quero colocar o squid3.

deu para entender?

zekkerj

Vamos ver se agora eu consigo entender a mecânica do seu processo. Tudo que entra pela eth1 pra ser roteado, vc processa na cadeia "REGRAS_EMPRESA".

Nessa cadeia, quando o destino é a porta 80/tcp, vc desvia p/ o Apache local. Que nesse caso, já deve estar trabalhando como proxy, certo?

Só que vc está adicionando uma outra regra de redirecionamento, antes dessa; nessa regra, vc redireciona tudo que entrar pela eth1, com destino à porta 80/tcp, para a porta 8888/tcp local.

Eu acho que a sua solução atual não aceita o Squid. Pq nesse caso, os pacotes que vão pro squid não passam pelo teu Apache, e vice-versa.


Já tentou usar o Squid configurado em seu navegador, e comparar o desempenho da navegação?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

zekkerj,

No meu firewall.conf nao tem regra para mandar para o squid, a unica que tem esta comentada.

Ja no meu script.cgi que esta em /var/www/cgi-bin/autoriza.sh

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
. ./config.sh
echo -e "Content-type: text/html\n"
if [ ! "`echo $HTTP_REFERER | grep 'REGRAS_EMPRESA.com.br'`" ]; then
  echo "`date +%Y-%m-%d\ %H:%M:%S`: $REMOTE_ADDR: referer invalido: $HTTP_REFERER" >> $BDIR/log/autoriza.log
  echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$LOGIN\"></head>"
  exit
fi
. ./shaper.sh  > /dev/null 2> /dev/null
awkcmd="/^$REMOTE_ADDR / { print \$3 }"
mac=`arp -n | awk "$awkcmd"`
iptables -t nat -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -d $REMOTE_ADDR -j ACCEPT

echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$CONFIRMA?sessao=$QUERY_STRING&gw=$GW&mac=$mac&ip=$REMOTE_ADDR\"></head>"


se eu adiciono a regra "iptables -A PREROUTING -t nat -s $REMOTE_ADDR -p tcp --dport 80 -j REDIRECT --to-port 8888
" deixando assim...

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
. ./config.sh
echo -e "Content-type: text/html\n"
if [ ! "`echo $HTTP_REFERER | grep 'REGRAS_EMPRESA.com.br'`" ]; then
  echo "`date +%Y-%m-%d\ %H:%M:%S`: $REMOTE_ADDR: referer invalido: $HTTP_REFERER" >> $BDIR/log/autoriza.log
  echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$LOGIN\"></head>"
  exit
fi
. ./shaper.sh  > /dev/null 2> /dev/null
awkcmd="/^$REMOTE_ADDR / { print \$3 }"
mac=`arp -n | awk "$awkcmd"`
iptables -t nat -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -d $REMOTE_ADDR -j ACCEPT
iptables -A PREROUTING -t nat -s $REMOTE_ADDR -p tcp --dport 80 -j REDIRECT --to-port 8888 # LINHA ADICIONADA
echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$CONFIRMA?sessao=$QUERY_STRING&gw=$GW&mac=$mac&ip=$REMOTE_ADDR\"></head>"


Tudo funciona, inclusive o squid, mas a conexao fica lenta principalmente no youtube.



Arthur Bernardes

** Querendo acompanhar o tópico. **

Abraço à todos. :)

zekkerj

bem... o que eu consigo ver é que da forma como vc está tentando fazer, a regra de redirecionamento pro squid está caindo após a regra de verificação da autenticação. Não é nada, não é nada, são algumas regras a mais sendo executadas.

Tente então mudar, na linha adicionada, onde aparece "-A PREROUTING" para "-I PREROUTING".

(Ainda prefiria uma solução de proxy configurado. :-\)
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

Opa Arthur Bernardes, toda ajuda é bem vinda.

Arthur Bernardes

Citação de: Said Dias online 09 de Julho de 2013, 23:30
Opa Arthur Bernardes, toda ajuda é bem vinda.

Obrigado amigo, quero ajudar no que puder, e também quero aprender. :D

Said Dias

Se eu deixar o script em /var/www/cgi-bin/autoriza.sh assim...

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
. ./config.sh
echo -e "Content-type: text/html\n"
if [ ! "`echo $HTTP_REFERER | grep 'REGRAS_EMPRESA.com.br'`" ]; then
  echo "`date +%Y-%m-%d\ %H:%M:%S`: $REMOTE_ADDR: referer invalido: $HTTP_REFERER" >> $BDIR/log/autoriza.log
  echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$LOGIN\"></head>"
  exit
fi
. ./shaper.sh  > /dev/null 2> /dev/null
awkcmd="/^$REMOTE_ADDR / { print \$3 }"
mac=`arp -n | awk "$awkcmd"`
iptables -t nat -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -d $REMOTE_ADDR -j ACCEPT
iptables -I PREROUTING -t nat -s $REMOTE_ADDR -p tcp --dport 80 -j REDIRECT --to-port 8888 # LINHA ADICIONADA
echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$CONFIRMA?sessao=$QUERY_STRING&gw=$GW&mac=$mac&ip=$REMOTE_ADDR\"></head>"



root@quiosque:/home/altecnologic# iptables -L -n -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  10.172.13.11         0.0.0.0/0            tcp dpt:80 redir ports 8888
REGRAS_EMPRESA  all  --  0.0.0.0/0            0.0.0.0/0           

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0           

Chain REGRAS_EMPRESA (1 references)
target     prot opt source               destination         
ACCEPT     all  --  10.172.13.26         0.0.0.0/0           
ACCEPT     all  --  10.172.13.24         0.0.0.0/0           
ACCEPT     all  --  10.172.13.15         0.0.0.0/0           
ACCEPT     all  --  10.172.13.14         0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            187.17.xx.xx       
ACCEPT     all  --  0.0.0.0/0            187.17.xx.xx     
REDIRECT   tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 53,80
REDIRECT   udp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 53,80


dessa forma todos os funcionarios irao passar direto para o squid sem passar pelo apache2, dessa froma todos terao acesso a internet sem a necessidade de colocar as credenciais. ( e isso nos nao queremos, ele deve passar pelo apache na porta 80 e depois ser redirecionando para o squid3)

Em outro cenário onde trocariamos  a CHAIN PREROUTING pela CHAIN REGRAS_EMPRESA ficaria assim o script..

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
. ./config.sh
echo -e "Content-type: text/html\n"
if [ ! "`echo $HTTP_REFERER | grep 'REGRAS_EMPRESA.com.br'`" ]; then
  echo "`date +%Y-%m-%d\ %H:%M:%S`: $REMOTE_ADDR: referer invalido: $HTTP_REFERER" >> $BDIR/log/autoriza.log
  echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$LOGIN\"></head>"
  exit
fi
. ./shaper.sh  > /dev/null 2> /dev/null
awkcmd="/^$REMOTE_ADDR / { print \$3 }"
mac=`arp -n | awk "$awkcmd"`
iptables -t nat -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -s $REMOTE_ADDR -j ACCEPT
iptables -I REGRAS_EMPRESA -d $REMOTE_ADDR -j ACCEPT
[color=red]iptables -I REGRAS_EMPRESA -t nat -s $REMOTE_ADDR -p tcp --dport 80 -j REDIRECT --to-port 8888 # LINHA ADICIONADA[/color]

echo "<head><meta http-equiv=\"refresh\" content=\"0;url=$CONFIRMA?sessao=$QUERY_STRING&gw=$GW&mac=$mac&ip=$REMOTE_ADDR\"></head>"


tambem nao funciona, na verdade o squid funciona, faz o cache etc... mas com muita lentidão


Arthur Bernardes

Não querendo atrapalhar, mas o que deseja é uma autenticação dos usuários para acessar à internet, não?!!

Não seria o caso de usar o Squid com Autenticação, sem usar o Apache com esse script, ou mesmo um Servidor Radius?!!

Estou apenas dando uma sugestão, me perdoa se eu atrapalhar. :)