DondaJr
(usa Debian)
Enviado em 27/03/2006 - 18:48h
Bom gente aqui está um pedaço do meu script, digo pedaço pois tirei muita coisa dele para mostrar para vcs, o q tirei era mais coisas voltadas mais para minha rede aqui e talvez naum seria util para vcs. Deixo claro que sou leigo em shell script, porem adoro muito em desenvolver com ele.
Neste script coloquei tudo q poderia fazer para simplificar a edição do squid.conf, se alguém viu um código e conhece alguma maneira melhor, estarei agradecido se me mostrasse.
Entaum ai vai:
#!/bin/bash
# Uma observacao: As variaves de paramentros ($1,$2) dentro das funcoes
# sao diferentes das variaves de paramentros das linhas de comandos,
# por tanto, as variaves $1 dentro das funcoes correspondem as $2 da
# linha de comando.
SQUIDFILE=/etc/squid/squid.conf
SQUIDFILEMOD=/etc/squid/squid.mod
TEMPFILE=/tmp/tempsquid
REDIRECTOUT=/tmp/bloquearsquidout.log
REDIRECTERROROUT=/tmp/bloquearsquiderrorout.log
ACLCOUNTS=/etc/squid/bloquear/aclcounts
NUMBLOCKS=/etc/squid/bloquear/numblocks
LISTIPSBLOCKS=/etc/squid/bloquear/listips
LISTIPSBLOCKSTEMP=/tmp/listips
function reboot ()
{
printf "\33[1;21mPor Favor. Aguarde enquanto o Squid é Reiniciado...\33[0;0m"
service squid restart 1> $REDIRECTOUT 2> $REDIRECTERROROUT
numlineserror=`grep -c '' $REDIRECTERROROUT`
if [ $numlineserror == 0 ]; then
printf "\33[1;32mOk\33[0;0m"
else
printf "\33[1;31mErro [Recomendo executar bloquear -restore]\33[0;0m"
fi
echo ""
}
function addremoveerrorline ()
{
case $1 in
-add)
wheresessionerror=`sed -n '/#Sessao_Erro/=' $SQUIDFILE`
sed $wheresessionerror'adeny_info ERR_ACCESS_IND '$2 $SQUIDFILE > $SQUIDFILEMOD
mv $SQUIDFILEMOD $SQUIDFILE
;;
-rem)
sed '/deny_info ERR_ACCESS_IND '$2'/d' $SQUIDFILE > $SQUIDFILEMOD
mv $SQUIDFILEMOD $SQUIDFILE
;;
esac
}
function closeaccess ()
{
#Insere a regra acl
wheresession=`sed -n '/#Sessao_Acl/=' $SQUIDFILE`
aclcount=`cat $ACLCOUNTS`
aclcount=$(( $aclcount + 1))
echo $aclcount > $ACLCOUNTS
sed $wheresession'aacl bloqueio'$aclcount' src '$1 $SQUIDFILE > $SQUIDFILEMOD
mv $SQUIDFILEMOD $SQUIDFILE
#Insere a regra http
wheresessionhttp=`sed -n '/#Sessao_Http/=' $SQUIDFILE`
sed $wheresessionhttp'ahttp_access deny bloqueio'$aclcount $SQUIDFILE > $SQUIDFILEMOD
mv $SQUIDFILEMOD $SQUIDFILE
#Insere regra de redirecionamento de erro
addremoveerrorline -add bloqueio$aclcount
#Insere ip digitado na lista de ips
echo $1 >> $LISTIPSBLOCKS
#Organiza o numero de bloqueios
numcount=`cat $NUMBLOCKS`
if [ $numcount == Vazio ]; then
echo 1 > $NUMBLOCKS
reboot
exit 0;
else
numcount=$(( $numcount + 1))
echo $numcount > $NUMBLOCKS
fi
reboot
}
function openaccess ()
{
#Verifica se foi encontrado o ip digitado
verify=`grep -c $1 $SQUIDFILE`
if [ $verify == 0 ]; then
echo "Não foram encontradas ocorrencias."
exit 0;
else
#Remove a regra http com base na acl
whathttpremove=`sed -n '/'$1'/=' $SQUIDFILE`
sed -n $whathttpremove's/ /\n/gp' $SQUIDFILE > $TEMPFILE
nameacl=`sed -n '2p' $TEMPFILE`
sed '/http_access deny '$nameacl'/d' $SQUIDFILE > $SQUIDFILEMOD
mv $SQUIDFILEMOD $SQUIDFILE
#Remove a regra de redirecionamento de erro
addremoveerrorline -rem $nameacl
#Remove a regra acl
sed '/'$1'/d' $SQUIDFILE > $SQUIDFILEMOD
mv $SQUIDFILEMOD $SQUIDFILE
#Remove o ip da lista de bloqueados
sed '/'$1'/d' $LISTIPSBLOCKS > $LISTIPSBLOCKSTEMP
mv $LISTIPSBLOCKSTEMP $LISTIPSBLOCKS
#Reorganiza o numero de bloqueios
numcountd=`cat $NUMBLOCKS`
if [ $numcountd == 1 ]; then
echo Vazio > $NUMBLOCKS
reboot
exit 0;
else
numcountd=$(( $numcountd - 1))
echo $numcountd > $NUMBLOCKS
fi
reboot
fi
}
function closemsnaccess ()
{
iptables -A FORWARD -s $1 -p tcp --dport 1863 -j DROP
nummsn=`cat /etc/squid/bloquear/numblockmsn`
if [ $nummsn == Vazio ]; then
numblockmsn=1
printf $numblockmsn > /etc/squid/bloquear/numblockmsn
printf $1 > /etc/squid/bloquear/msn$numblockmsn
else
numblockmsn=$(( $nummsn + 1 ))
printf $numblockmsn > /etc/squid/bloquear/numblockmsn
printf $1 > /etc/squid/bloquear/msn$numblockmsn
fi
echo -e "Bloqueio de MSN [ \33[1;32mOK\33[0;0m ]";
}
function openmsnaccess ()
{
numc=`cat /etc/squid/bloquear/numblockmsn`
if [ $numc == Vazio ]; then
echo Nao ha IPs bloqueados
else
for x in $(seq $numc);
do
ipblock=`cat /etc/squid/bloquear/msn$x`
if [ $ipblock == $1 ]; then
iptables -D FORWARD -s $1 -p tcp --dport 1863 -j DROP
echo -e "Desbloqueio MSN [ \33[1;32mOK\33[0;0m ]";
nummore=$(( ($numc - $x) ))
if [ $nummore == 0 ]; then
rm -rf /etc/squid/bloquear/msn$x
newnumber=$(( $numc - 1 ))
if [ $newnumber == 0 ]; then
printf Vazio > /etc/squid/bloquear/numblockmsn
else
printf $newnumber > /etc/squid/bloquear/numblockmsn
fi
else
stop=$x
for y in $(seq $nummore );
do
oldnumber=$(( $stop + 1))
mv /etc/squid/bloquear/msn$oldnumber /etc/squid/bloquear/msn$stop
stop=$(( $stop + 1 ))
done;
numc=$(( $numc - 1 ))
if [ $numc == 0 ]; then
printf Vazio > /etc/squid/bloquear/numblockmsn
else
printf $numc > /etc/squid/bloquear/numblockmsn
fi
fi
exit 0;
fi
echo Este IP nao foi bloqueado
done;
fi
}
function viewcloseds
{
num=`cat $NUMBLOCKS`
if [ $num == Vazio ]; then
echo -e "\33[1;32mNão há IPs bloqueados.\33[0;0m"
exit 0;
else
echo -e "Existem \33[1;31m$num\33[0;0m Ip(s) bloqueados. São eles:"
cat $LISTIPSBLOCKS
fi
}
function restore
{
sed '/acl bloqueio/d' $SQUIDFILE > $SQUIDFILEMOD
mv $SQUIDFILEMOD $SQUIDFILE
sed '/http_access deny bloqueio/d' $SQUIDFILE > $SQUIDFILEMOD
mv $SQUIDFILEMOD $SQUIDFILE
sed '/deny_info ERR_ACCESS_IND/d' $SQUIDFILE > $SQUIDFILEMOD
mv $SQUIDFILEMOD $SQUIDFILE
echo 0 > $ACLCOUNTS
echo Vazio > $NUMBLOCKS
numfor=`cat /etc/squid/bloquear/numblockmsn`
if [ $numfor == Vazio ]; then
reboot
exit 0;
else
for c in $(seq $numfor);
do
ip=`cat /etc/squid/bloquear/msn1`
/etc/squid/bloquear.sh -unmsn $ip
done;
fi
reboot
}
###-----------------------Opcoes--------------------####
case $1 in
-ip) closeaccess $2;
;;
-d) openaccess $2;
;;
-s) viewcloseds;
;;
-msn) closemsnaccess $2;
;;
-unmsn) openmsnaccess $2;
;;
-r) reboot;
;;
-restore) restore;
;;
*)
echo "Digite man bloquear para mais informacoes"
;;
esac