Unificando arquivos de bloqueio e liberação no squid

Publicado por RBA OMNQF 07/05/2007

[ Hits: 5.416 ]

Homepage: http://rbaomnqf.multiply.com

Download squid_acl_control_e_atu_squid_acl.sh




Um amigo me apresentou um problema há algum tempo...

Ele controla sozinho alguns servidores linux com função de firewall/proxy em pontos distantes e não estava conseguindo manter os arquivos de bloqueio/liberação iguais, gerando com isso ruído entre a matriz e a filiais.

Visando ajudá-lo, criei 2 scripts: um para buscar e unificar as informações contidas nos vários arquivos de liberação/bloqueio e outro para coloca-los nos locais corretos e reinicar o servidor proxy.

  



Esconder código-fonte

#####################Inicio do script squid_acl_control.sh######################
#!/bin/sh

#
# squid_acl_control.sh
#

#
# Em um ambiente com mais de um servidor proxy, como matriz e filiais,
# baixa os arquivos de bloqueio e liberação dos hosts e unifica, gerando
# novos arquivos que são reenviados e processados pelo script atu_squid_acl.sh,
# mantendo os mesmos bloqueios e liberações em todo o ambiente.
#

#
# Algumas dependências devem ser verificadas antes da execução deste script:
# 1º - Criar usuário de trabalho ou designar um já existente.
# 2º - Criar chaves ssh para este usuário e exportar para hosts remotos
# 
# Para facilitar as coisas, aconselho que se crie o mesmo usuário na "matriz"
# e nas "filiais".
#

#
# Variáveis de auxílio
#

# Informe aqui o endereço externo ou IP dos hosts remotos
# Ex.: D_UNI="filial1.com.br 200.xxx.xxx.xxx filial3.com.br"
D_UNI=""
# Informe aqui o endereço externo ou IP do host onde este script
# está sendo executado
# Ex.: F_UNI="matriz.com.br"
F_UNI=""
# Informe aqui o usuário a ser utilizado nas conexões remotas
# Ex.: USER="suporte"
USER=""
# Informe aqui a localização e o nome do arquivo de chave ssh
# Ex.: USER_KEY="/home/suporte/.ssh/id_dsa"
USER_KEY=""
# Variável contendo uma sintaxe para o scp, modifique se necessário
SCP="/usr/bin/scp -p -C -i $USER_KEY"
# Variável contendo uma sintaxe para o ssh, modifique se necessário
SSH="ssh -l $USER -i $USER_KEY"
# Informe aqui o diretório de trabalho temporário. Aconselho que mantenha o
# mesmo utilizado no script squid_acl_control.sh
# Ex.: DIR_TMP="/tmp/proxy"
DIR_TMP="/home/rba/.Apoio/proxy"
# Informe aqui o diretório onde estão localizados os arquivos de bloqueio e
# liberação do squid.
# Ex.: DIR_B_L="/etc/squid/acls"
DIR_B_L="/etc/squid/acls"
# Informe aqui o sufixo dos arquivos de bloqueio e liberação
# Ex.: SUF_B_L="txt"
SUF_B_L=""
# Informe aqui o nome do arquivo de bloqueio sem sufixo
# Ex: ARQ_B="bloqueados"
ARQ_B=""
# Informe aqui o nome do arquivo de liberação sem sufixo
# Ex: ARQ_L="liberados"
ARQ_L=""

#
# Prepara ambiente para a unificação
#

test -d "$DIR_TMP" && rm -rf "$DIR_TMP"

mkdir "$DIR_TMP"

test -d "$DIR_TMP" || mkdir "$DIR_TMP"

#
# Pega os arquivos do próprio host para unificação
#

cp $DIR_B_L/$ARQ_L.$SUF_B_L $DIR_TMP/$ARQ_L`date +'%Y%m%d%H%M%S'`.$SUF_B_L
cp $DIR_B_L/$ARQ_B.$SUF_B_L $DIR_TMP/$ARQ_B`date +'%Y%m%d%H%M%S'`.$SUF_B_L
sleep 5

#
# Conecta nas lojas e pega os arquivos para unificação
#

for FONTE in $D_UNI
do
   $SCP $USER@$FONTE:$DIR_B_L/$ARQ_L.$SUF_B_L $DIR_TMP/$ARQ_L`date +'%Y%m%d%H%M%S'`.$SUF_B_L
   $SCP $USER@$FONTE:$DIR_B_L/$ARQ_B.$SUF_B_L $DIR_TMP/$ARQ_B`date +'%Y%m%d%H%M%S'`.$SUF_B_L
   sleep 5
done

#
# Cria arquivos unificados
#

#
# Move-se para diretório de trabalho
#
cd $DIR_TMP
#
# Gera liberados temporário, anexando todos os arquivos colhidos
#
for T_LIB in "`ls $ARQ_L*`"
do
   cat $T_LIB >> $ARQ_L.$$
done
#
# Retira duplicidades, gerando novo liberados unificado
#
sort -u $ARQ_L.$$ > $ARQ_L.new
#
# Gera bloqueados temporário, anexando todos os arquivos colhidos
#
for T_BLO in "`ls $ARQ_B*`"
do
   cat $T_BLO >> $ARQ_B.$$
done
#
# Retira duplicidades, gerando novo bloqueados unificado
#
sort -u $ARQ_B.$$ > $ARQ_B.new

#
# Conecta nas lojas e envia novos arquivos unificados
#

cd $DIR_TMP

for DESTINO in $D_UNI
do
   $SSH $DESTINO mkdir $DIR_TMP
   $SCP *.new $USER@$DESTINO:$DIR_TMP
done
#######################Fim do script squid_acl_control.sh#######################
#######################Inicio do script atu_squid_acl.sh########################
#!/bin/sh

#
# atu_squid_acl.sh
#

#
# Script complementar do script squid_acl_control.sh que deve ser executado
# antes deste, no host considerado "matriz" dos arquivos a serem atualizados.
# Ele verifica a existência de novos arquivos de bloqueio/liberação unificados,
# corrige permissões, envia para o local apropriado e reinicia o squid.
#
# Este script deve ser executado como root e pode ser inserido na crontab,
# devendo ser executado alguns minutos depois do squid_acl_control.sh
#
# Algumas dependências devem ser verificadas antes da execução deste script:
# 1º - Criar usuário de trabalho ou designar um já existente.
# 2º - Criar chaves ssh para este usuário e exportar para hosts remotos
#
# Para facilitar as coisas, aconselho que se crie o mesmo usuário na "matriz"
# e nas "filiais".
#

# Variáveis de auxílio
#

# Informe aqui o diretório de trabalho temporário. Aconselho que mantenha o
# mesmo utilizado no script squid_acl_control.sh
# Ex.: DIR_TMP="/tmp/proxy" 
DIR_TMP=""
# Informe aqui o diretório onde estão localizados os arquivos de bloqueio e
# liberação do squid.
# Ex.: DIR_B_L="/etc/squid/acls"
DIR_B_L=""
# Informe aqui o sufixo dos arquivos de bloqueio e liberação
# Ex.: SUF_B_L="txt"
SUF_B_L=""
# Informe aqui o nome do arquivo de bloqueio sem sufixo
# Ex: ARQ_B="bloqueados"
ARQ_B=""
# Informe aqui o nome do arquivo de liberação sem sufixo
# Ex: ARQ_L="liberados"
ARQ_L=""

#
# Inicio
#

#
# Verifica a existência do diretório temporário
#
if [ -d "$DIR_TMP" ]
then
   cd "$DIR_TMP" 
   #
   # Verifica a existêcia do 2 arquivos novos
   #
   if [ -f $ARQ_L.new -a -f $ARQ_B.new ]
   then
      #
      # Corrige permissões
      #
      chown root.root *.new
      chmod 644 *.new
      #
      # Faz backup dos arquivos atuais
      #
      cp -rpfa $DIR_B_L/$ARQ_L.$SUF_B_L $DIR_B_L/$ARQ_L.old
      cp -rpfa $DIR_B_L/$ARQ_B.$SUF_B_L $DIR_B_L/$ARQ_B.old
      #
      # Copia arquivos novos para local apropriado
      #
      cp -rpfa $ARQ_L.new $DIR_B_L/$ARQ_L.$SUF_B_L
      cp -rpfa $ARQ_B.new $DIR_B_L/$ARQ_B.$SUF_B_L
      #
      # Reinicializa o squid
      #
      service squid restart >/dev/null 2>&1
   fi   
   cd
   #
   # Promove a limpeza da área de trabalho
   #
   rm -rf "$DIR_TMP"
fi
#########################Fim do script atu_squid_acl.sh#########################

Scripts recomendados

Execução remota com SSH e HERE DOCUMENTS descomplicada

Comparar recursivamente duas pastas

mountcp1.sh

Cria ambiente virtual (VirtualHost no Apache e Virtual Mail no Postfix) para desenvolvimento web

Baixando e instalando o Asterisk


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts