Conectividade Social e Squid

Publicado por Alex A. Felicioni em 22/08/2008

[ Hits: 25.594 ]

 


Conectividade Social e Squid



Tive um problema em uma empresa tentando configurar o Conectividade Social da Caixa para acessar via proxy, mas infelizmente nenhuma das dicas que encontrei funcionou. Além disso, todas as soluções usavam iptables e não o Squid, ou seja, não era uma solução para o Squid.

Neste tutorial vou mostrar como configurar o Squid (sem iptables) para liberar o acesso do Conectividade Social.

Configurando o squid.conf

Bom, antes de mais nada, devo dizer que uso Debian Etch 4 e que tudo foi feito e testado nesta distribuição. Caso use outra distribuição você deve fazer as devidas adaptações. Outro ponto importante é que não vou ensinar a instalar e configurar o Squid, mesmo porque está cheio de tutoriais ótimos na internet, vou apenas focar em como liberar o Conectividade Social. Então vamos lá!

Em primeiro lugar temos que ter em mente que o Conectividade Social é um programa em Java que roda sobre o IE da MS (isso é um absurdo, pois - até onde sei - não funciona em outros navegadores e SOs) e portanto obedece as configurações de internet do mesmo.

Abra o seu squid.conf com seu editor favorito, no meu caso eu uso o vim (tem que estar logado como root).

# vim /etc/squid/squid.conf

(isso porque no Debian o squid.conf fica dentro de /etc/squid)

Para ficar tudo organizado, procure a parte das de ACLs e acrescente as linhas:

acl conectividade src "/etc/squid/conectividade" # cria variável que conterá os ips da caixa
acl conectividade1 dstdomain "/etc/squid/conectividade1" #cria variável que conterá a url da caixa

No mesmo arquivo, procure a parte das http_access e inclua as seguintes linhas:

http_access allow conectividade
http_access allow conectividade1

Salve o arquivo e saia.

ATENÇÃO: Se você usa autenticação, essas duas linhas não deve pedí-las, do contrário não funcionará.

Agora vamos criar as listas de ips e url da caixa.

Criando a lista de ips da caixa

Depois de configurar o squid.conf, vamos criar dois arquivos, um vai conter a lista de ips da caixa econômica federal e a outra as urls.

# vim /etc/squid/conectividade

Será criado um novo arquivo em branco, digite neste arquivo os ips da caixa econômica federal, sempre apenas 1 em cada linha, são eles:

200.201.174.207
200.201.174.204
Salve o arquivo e saia.

Agora crie o arquivo que conterá a url do conectividade social.

# vim /etc/squid/conectividade1

Será criado um novo arquivo em branco, este conterá a url do conectividade social, digite:

.obsupgdp.caixa.gov.br

Salve o arquivo e saia.

Agora digite no shell para ativar as novas configurações:

# /etc/init.d/squid reload

Pronto, o conectividade estará funcionando e sem precisar usar o iptables.

Outras dicas deste autor

Squid + Iptables: Liberando acesso de programas que não funcionam na internet compartilhada

Squid + SARG: Gerando relatórios pelo nome de usuário autenticado

Leitura recomendada

Instalando e configurando driver da ATI em Linux 2009/2010

Instalando extensões no MediaWiki usando o Git

The Code Linux

Rápida instalação do Wordpress no Ubuntu

Linux no MAC G3

  

Comentários
[1] Comentário enviado por persiohartmann em 22/08/2008 - 11:47h

Opa!

Cara, essa configuração também funciona utilizando o Squid em modo Proxy Transparente?

Abraços!

[2] Comentário enviado por alexfelicioni em 22/08/2008 - 23:23h

Nunca tentei, só uso o squid como proxy normal.
mas creio que não, pois o conectividade também usa portas SSL e estas não funcionam com proxy transparente devido à criptografia.
mas se você tiver um AD, configure uma GPO para configurar automaticamente o proxy e travar as configurações. Eu fiz assim nesta empresa.

[3] Comentário enviado por alexfelicioni em 22/08/2008 - 23:28h

Ahh, esquecí de dizer no artigo que para funcionar, as linhas "http_access allow conectividade" e " http_access allow conectividade1" devem ficar antes das demais http_access. e coloquem a palavra "all" no fim de cada uma destas linhas.
fica assim " http_access allow conectividade all" e http_access allow conectividade1 all"
eu esqueci de colocar isso na dica.

[4] Comentário enviado por heroes em 02/10/2008 - 13:26h

Olá, venho enfrentando esse problemas e testando varias regras no iptables, vou testar essa forma pelo squid, mas minha divida eh a seguinte o conectividade na tranca por causao do redirecionamento que eh feito no iptables forçando todo o trafego para porta 3128...??? como regras no squid podem liberar isso...???

Vou testar aqui na minha empresa... o tutorial eh bem elaborado...

Abraços

[5] Comentário enviado por alexfelicioni em 18/10/2008 - 17:25h

Olá,

Não conheço ninguem que conceguiu fazer o conectividade social funcionar com proxy transparente, o que eu recomendo é que ao invéz d proxi transpatente, voces utilizem as gpo's do 20003 para bloquear a configuração de proxy do ie e bloqueiem o micro para os usuários não instalarem outro navegador.

para quem não tem w2003 server, use o gpedit.msc do winxp.

valeu.

[6] Comentário enviado por Nisso em 04/12/2008 - 20:24h

Olá sou iniciante com Linux,realizei o procedimento acima para tentar liberar acesso a conectividade,porém como está configurado como proxy transparente não funciona,,,removi as linhas que havia adicionado no squid.conf,porém agora não tenho mais conexão com a internet, é necessário tb excluir os arquivos conectividade e conectividade1 que foram criados ? como faço para apagá-los ?

Desculpe a ignorância,sou novato !

[7] Comentário enviado por lm em 05/12/2008 - 17:12h

Bom, aqui o problema é que funcionava e parou de uma hora para outra em algumas máquinas, alis duas máquinas, por coincidencia as máquinas do DP.
Testei no resto e funcionou normal. Nas que não funcionam aparece a seguinte mensagem. Problema com a troca da chave ou coisa parecida, então não é problema no squid ou redirecionameno de porta.
Alguem pode me ajudar por favor.
Biragado.

[8] Comentário enviado por alexfelicioni em 06/12/2008 - 00:06h

Nisso, pareo o serviço do squid, e apague o arquivo /var/cache/squid/swap.state.
esse arquivo pode ficar corrompido ou bloqueado quando voce reinicia o squid.
após apagá-lo, inicie novamento o serviço do squid e ele será criado novamente.


/etc/init.d/squid stop
rm /var/spool/squid/swap.state
/etc/init.d/squid/start

caso não funcione, digite

tail -f /var/log/squid/cache.log

e poste o resultado

e depois

tail -f /var/log/squid/access.log e poste o resultado.
mas isso deve resolver

[9] Comentário enviado por alexfelicioni em 06/12/2008 - 00:09h

amigo, poste a mensagem completa para eu analizar. e faça os mesmos comandos do post acima, fica mais fácil de entender o problema e achar uma solução.

faloww.

[10] Comentário enviado por Nickless em 03/02/2009 - 17:14h

Cara vc salvou meu dia heheh.... essa dica pode ser usada tb com o programa CAT??

valew

[11] Comentário enviado por alexfelicioni em 15/04/2009 - 22:12h

Cara, não sei, nunca tentei. Mas creio que a lógica seja a mesma, claro que se deve acrescentar o ip do cat e o domínio junto com os do conectividade social. mas tenta aí. Se os programas usarem HTTP para conexão, com certeza funciona.

Valeu..

[12] Comentário enviado por maneuzinho em 13/05/2009 - 08:48h

Rapido, simples e muito facil amigo está de parabéns me ajudou muito essa dica brigadão!
t++
vlw vlw =D

[13] Comentário enviado por maumauns em 29/01/2010 - 16:45h

acabei de utilizar esse tuto na prefeitura que trabalho e resolveu meu problema, meus parabens meu caro. Vlw

[14] Comentário enviado por ton.work em 30/08/2010 - 19:00h

Olá, sei que esse post tem muito tempo só que testei e não funciou, e acho que não configurei direito meu firewall e squid, por favor fiz certo ou preciso adicionar algo?

#########################################
Firewall
#########################################
#!/bin/bash

## VARIABLES ##

IFWAN=`ifconfig | sed -n "1p" | awk {'print $1'}` # Filtra Saida do comando 'ifconfig' - Automatiza a implantação do Script
IPWAN=`ifconfig | sed -n "2p" | awk {'print $3'}`
IFLAN=`ifconfig | sed -n "11p" | awk {'print $1'}`
IPLAN=`ifconfig | sed -n "12p" | awk {'print $3'}`
LAN=192.168.1.10/24

## PROGRAMS ##

IPT=`which iptables`
EC=`which echo`
MODUP=`which modprobe`

## FIREWALL START ##

START_FW(){
echo " [ Firewall Starting ... ]"

# LOAD MODULES

$MODUP ip_tables
$MODUP ip_conntrack
$MODUP iptable_filter
$MODUP iptable_mangle
$MODUP iptable_nat
$MODUP ipt_LOG
$MODUP ipt_limit
$MODUP ipt_state
$MODUP ipt_REDIRECT
$MODUP ipt_owner
$MODUP ipt_REJECT
$MODUP ipt_MASQUERADE
$MODUP ip_conntrack_ftp
$MODUP ip_nat_ftp
######
#liberando acesso interno da rede
iptables -A INPUT -p tcp --syn -s 192.168.1.10/255.255.255.0 -j ACCEPT &&
iptables -A OUTPUT -p tcp --syn -s 192.168.1.10/255.255.255.0 -j ACCEPT &&
iptables -A FORWARD -p tcp --syn -s 192.168.1.10/255.255.255.0 -j ACCEPT &&

#compartilhando a web na rede interna
iptables -t nat -A POSTROUTING -s 192.168.1.10/255.255.255.0 -o eth1 -j MASQUERADE &&
echo 1 > /proc/sys/net/ipv4/ip_forward &&
######
# POLICES THIS FIREWALL

$IPT -t filter -P INPUT DROP
$IPT -t filter -P FORWARD DROP
$IPT -t filter -P OUTPUT ACCEPT

# ENABLE LOOPBACK

$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A OUTPUT -o lo -j ACCEPT

# ENABLE IMPORTANT PORTS

$IPT -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
$IPT -t filter -A INPUT -m state --state RELATED -j ACCEPT
DOOROPEN=`cat "/server/firewall/portasabertas.conf"`
for n in $DOOROPEN; do
PROTOCOL=`$EC $n | cut -d '@' -f 1`
DOOR=`$EC $n | cut -d '@' -f 2`
if [ "$PROTOCOL" = "tcp" ]; then
$IPT -t filter -A INPUT -p tcp --dport $DOOR -j ACCEPT
elif [ "$PROTOCOL" = "udp" ]; then
$IPT -t filter -A INPUT -p udp --dport $DOOR -j ACCEPT
fi
done

# BLOCK SITES FROM INTRANET

$IPT -t filter -A FORWARD -m state --state ESTABLISHED -j ACCEPT
$IPT -t filter -A FORWARD -m state --state RELATED -j ACCEPT
SITES=`cat "/server/firewall/sitesdesativados.conf"`
for n in $SITES ; do
$IPT -t filter -A FORWARD -s $LAN -d $n -j DROP
$IPT -t filter -A FORWARD -s $n -d $LAN -j DROP
done

# PING OF DEATH

echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
$IPT -N PING
$IPT -A INPUT -p icmp --icmp-type echo-request -j PING
$IPT -A PING -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A PING -j DROP

# SYN-FLOOD

echo "0" > /proc/sys/net/ipv4/tcp_syncookies
$IPT -N syn-flood
$IPT -A INPUT -i $IFWAN -p tcp --syn -j syn-flood
$IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A syn-flood -j DROP

# BRUTE-SSH

$IPT -N BRUTE-SSH
$IPT -A INPUT -i $IFWAN -p tcp --dport 22 -j BRUTE-SSH
$IPT -A BRUTE-SSH -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A BRUTE-SSH -j DROP

# ANTI-SPOOFINGS

$IPT -A INPUT -s 10.0.0.0/8 -i $IFWAN -j DROP
$IPT -A INPUT -s 127.0.0.0/8 -i $IFWAN -j DROP
$IPT -A INPUT -s 172.16.0.0/12 -i $IFWAN -j DROP
$IPT -A INPUT -s 192.168.1.0/16 -i $IFWAN -j DROP

# SHEALT SCAN

$IPT -A FORWARD -p tcp --tcp-flags SYN,ACK, FIN, -m limit --limit 1/s -j ACCEPT

# ENABLE FORWARDING

DOORCROSS=`cat "/server/firewall/portasfoward.conf"`
for n in $DOORCROSS; do
STAT=`$EC $n | cut -d '@' -f 1`
PROTO=`$EC $n | cut -d '@' -f 2`
PORT_IN=`$EC $n | cut -d '@' -f 3`
IPTARGET=`$EC $n | cut -d '@' -f 4`
PORT_OUT=`$EC $n | cut -d '@' -f 5`
if [ "$STAT" = "0" ]; then
$IPT -t filter -A FORWARD -p $PROTO --dport $PORT_IN -j ACCEPT
$IPT -t filter -A FORWARD -p $PROTO --sport $PORT_IN -j ACCEPT
$IPT -t nat -A PREROUTING -p $PROTO --dport $PORT_IN -j DNAT --to $IPTARGET
$IPT -t nat -A POSTROUTING -d $IPTARGET -j SNAT --to $IPLAN
elif [ "$STAT" = "1" ]; then
$IPT -t filter -A FORWARD -p $PROTO --dport $PORT_IN -j ACCEPT
$IPT -t filter -A FORWARD -p $PROTO --sport $PORT_IN -j ACCEPT
$IPT -t nat -A PREROUTING -p $PROTO --dport $PORT_IN -j DNAT --to $IPTARGET:$PORT_OUT
$IPT -t nat -A POSTROUTING -d $IPTARGET -j SNAT --to $IPLAN
fi
done

# ENABLE PROXY

#$IPT -t nat -A PREROUTING -i $IFLAN -p tcp --dport 80 -j REDIRECT --to-port 3128
#$IPT -t nat -A PREROUTING -s $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.10/24 --dport 80,443 -j REDIRECT --to-ports 3128
#ENABLE MASQUERADE

DOORMASQ=`cat "/server/firewall/portasmascaradas.conf"`
for n in $DOORMASQ; do
PROTO=`$EC $n | cut -d '@' -f 1`
PORT=`$EC $n | cut -d '@' -f 2`
if [ "$PROTO" = 'tcp' ]; then
$IPT -t filter -A FORWARD -p tcp --dport $PORT -j ACCEPT
$IPT -t filter -A FORWARD -p tcp --sport $PORT -j ACCEPT
$IPT -t nat -A POSTROUTING -o $IFWAN -p tcp --dport $PORT -j MASQUERADE
elif [ "$PROTO" = 'udp' ]; then
$IPT -t filter -A FORWARD -p udp --dport $PORT -j ACCEPT
$IPT -t filter -A FORWARD -p udp --sport $PORT -j ACCEPT
$IPT -t nat -A POSTROUTING -o $IFWAN -p udp --dport $PORT -j MASQUERADE
fi
done

echo " [ OK ]"
}

STOP_FW(){
echo " [ Firewall Stopping ... ]"
## CLEAN RULES NETFILTER ##

$IPT -t filter -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t filter -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT -t filter -Z
$IPT -t nat -Z
$IPT -t mangle -Z

## DISABLE ROUTING ##

$EC "0" > /proc/sys/net/ipv4/ip_forward

echo " [ OK ]"
}

case "$1" in
"start") START_FW ;;
"stop") STOP_FW ;;
"restart") STOP_FW; START_FW ;;
*) echo
$EC " [ FIREWALL: start, stop ou restart. ]"
$EC " [ Uso incorreto do firewall, restart em ]"
$EC " [ 3 segundos. ]"
echo
sleep 3
/server/firewall/sh.firewall.conf restart
esac

###########################################
squid
###########################################

http_port 3128
visible_hostname SW
error_directory /usr/share/squid/errors/Portuguese/

cache_mem 285 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 700 MB
minimum_object_size 5 KB
cache_swap_low 85
cache_swap_high 90
cache_dir ufs /var/spool/squid 40000 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl conectividade src "/etc/squid/conectividade"
acl conectividade1 dstdomain "/etc/squid/conectividade1"
acl purge method PURGE
acl CONNECT method CONNECT



http_access allow conectividade all
http_access allow conectividade1 all
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

acl especial src 192.168.1.197 192.168.1.196 192.168.1.205
acl almoco time 12:00-13:30
acl orkut dstdomain orkut.com www.orkut.com
http_access allow orkut especial
http_access allow orkut almoco
http_access deny orkut

acl bloqueados url_regex -i "/etc/squid/bloqueados"
http_access deny bloqueados

# Bloqueia acessos de fora da rede local antes de passar pela autenticação:
acl redelocal src 192.168.1.0/24
http_access deny !redelocal

# Outras regras de restrição vão aqui, de forma que o acesso seja negado
# antes mesmo de passar pela autenticação:
acl bloqueados url_regex -i "/etc/squid/bloqueados"
http_access deny bloqueados

# Autentica o usuário:
auth_param basic realm Squid
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/squid_passwd
acl autenticados proxy_auth REQUIRED
http_access allow autenticados

# Libera o acesso da rede local e do localhost para os autenticados,
# bloqueia os demais:
http_access allow localhost
http_access allow redelocal
http_access deny all

[15] Comentário enviado por kwizatz em 28/09/2011 - 10:54h

Ótima dica!
REsolveu meu problema, q nao estava dando certo com o iptables! Só o endereço para colocar no arquivo conectividade1 q aqui nao deu certo, mas funcionou sem ele!
Valeu!!

[16] Comentário enviado por dan-freitas em 22/10/2015 - 12:55h

Bom Dia,

Essa dica so resolve o problema do site da chave da conectividade social ou resolve tb o problema do programa conectividade social pelo sefip para envio de RE onde diz que ta sem internet se colocar so as configuracoes de proxy?



Contribuir com comentário