Compilando o Squid com autenticação PAM

Nesse artigo vamos compilar o Squid habilitando alguns parâmetros interessantes, tal como o suporte a autenticação PAM, configurar algumas funcionalidades, tal como bloqueio de site por IP ou URL e criar um ambiente de autenticação via browser.

[ Hits: 105.364 ]

Por: Claudio Mercaldo de Almeida em 06/05/2005


Execução por runlevel (/etc/init.d/squid start) - OPCIONAL



Esta fase é opcional, não interferindo na execução do Squid. É claro que caso deseje uma execução no padrão do (runlevels - Níveis de execução), este parte deverá ser implementada.

Quando compilamos o Squid, por padrão não será criado o arquivo de inicialização localizado dentro do (/etc/init.d/) ou (/etc/rc.d/init.d), dependendo da distro.

A solução foi criar um arquivo no molde padrão do Squid e fazermos uma alteração no arquivo (squid.conf).

Alteração no squid.conf:

# vi /etc/squid/squid.conf

Linha original a ser alterada:

pid_filename /var/log/squid.pid

Por esta (este passo já foi realizado na pág 5, só estou relembrando):

pid_filename /var/run/squid.pid

  • squid.pid - Este arquivo é criado no momento da execução do Squid, seu conteúdo é o número do processo em execução (PID).

Após este procedimento vamos criar um arquivo de inicialização pelo "runlevel".

O arquivo abaixo, deve ser copiado e colado para um arquivo vazio dentro do diretório (/etc/init.d/) com o nome de "squid".

# vi /etc/init.d/squid

#! /bin/sh
#
# squid         Startup script for the SQUID HTTP proxy-cache.
#
# Version:      @(#)squid.rc  2.20  01-Oct-2001  miquels@cistron.nl
#


NAME=squid
DAEMON=/usr/sbin/squid
LIB=/usr/lib/squid
PIDFILE=/var/run/$NAME.pid
SQUID_ARGS="-D -sYC"

[ ! -f /etc/default/squid ] || . /etc/default/squid

PATH=/bin:/usr/bin:/sbin:/usr/sbin

[ -x $DAEMON ] || exit 0

grepconf () {
        w="     " # space tab
        sq=/etc/squid/squid.conf
        # sed is cool.
        res=`sed -ne '
                s/^'$1'['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
                t end;
                d;
                :end q' < $sq`
        [ -n "$res" ] || res=$2
        echo "$res"
}

grepconf2 () {
        w="     " # space tab
        sq=/etc/squid/$NAME.conf
        # sed is cool.
        res=`sed -ne '
                s/^'$1'['"$w"']\+[^'"$w"']\+['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
                t end;
                d;
                :end q' < $sq`
        [ -n "$res" ] || res=$2
        echo "$res"
}

#
#       Try to increase the # of filedescriptors we can open.
#
maxfds () {
        [ -n "$SQUID_MAXFD" ] || return
        [ -f /proc/sys/fs/file-max ] || return 0
        [ $SQUID_MAXFD -le 4096 ] || SQUID_MAXFD=4096
        global_file_max=`cat /proc/sys/fs/file-max`
        minimal_file_max=$(($SQUID_MAXFD + 4096))
        if [ "$global_file_max" -lt $minimal_file_max ]
        then
                echo $minimal_file_max > /proc/sys/fs/file-max
        fi
        ulimit -n $SQUID_MAXFD
}

fixperms () {
        dir=$1
        usr=$2
        grp=$3

        currusr=`/usr/bin/stat -c '%U' $dir`
        currgrp=`/usr/bin/stat -c '%G' $dir`

        if [ $currusr != $usr ]
        then
                chown $usr $dir -R
        fi

        if [ $currgrp != $grp ]
        then
                chgrp $grp $dir -R
        fi

}

start () {
        cdr=`grepconf2 cache_dir /var/spool/$NAME`
    usr=`grepconf cache_effective_user proxy`
        grp=`grepconf cache_effective_group proxy`

        case "$cdr" in
                [0-9]*)
                       echo "squid: squid.conf contains 2.2.5 syntax - not starting!" >&2
                        exit 1
                        ;;
        esac

    #
    # Create spool dirs if they don't exist.
    #
        if [ -d "$cdr" -a ! -d "$cdr/00" ]
        then
                echo "Creating squid spool directory structure"
                /usr/sbin/squid -z
        fi

        if [ "$CHUID" = "" ]; then
                CHUID=root
        fi

        maxfds
        umask 027
        cd $cdr
        start-stop-daemon --quiet --start \
                --pidfile $PIDFILE \
                --chuid $CHUID \
                --exec $DAEMON -- $SQUID_ARGS < /dev/null
        sleep 1
}

stop () {
        PID=`cat $PIDFILE 2>/dev/null`
        start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
        #
        #       Now we have to wait until squid has _really_ stopped.
        #
        sleep 2
        if test -n "$PID" && kill -0 $PID 2>/dev/null
        then
                echo -n "(waiting..."
                cnt=0
                while kill -0 $PID 2>/dev/null
                do
                        cnt=`expr $cnt + 1`
                        if [ $cnt -gt 60 ]
                        then
                                #
                                #       Waited 120 seconds now. Fail.
                                #
                                echo -n "failed)"
                                if [ "$1" = verbose ] ; then
                                        echo "."
                                else
                                        echo -n " "
                                fi
                                return
                        fi
                        sleep 2
                        echo -n "."
                done
                echo -n "done)"
                if [ "$1" = verbose ] ; then
                        echo " $NAME."
                else
                        echo -n " "
                fi
        else
                [ "$1" = verbose ] && echo "$NAME."
        fi
}

case "$1" in
    start)
        echo -n "Starting proxy server: "
        start
        echo "$NAME."
        ;;
    stop)
        echo -n "Stopping proxy server: "
        stop verbose
        ;;
    reload|force-reload)
        echo -n "Reloading $NAME configuration files..."
        start-stop-daemon --stop --signal 1 \
                --pidfile $PIDFILE --quiet --exec $DAEMON
        echo "done."
        ;;
    restart)
        echo -n "Restarting proxy server: "
        stop
       start
        echo "$NAME."
        ;;
    *)
        echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart}"
        exit 3
        ;;
esac

exit 0

Agora poderemos atualizar nossa lista de runlevels pelo comando:

# update-rc.d squid defaults

Para testarmos basta digitar:

# /etc/init.d/squid stop

E depois:

# /etc/init.d/squid start

Continuando...

Página anterior     Próxima página

Páginas do artigo
   1. Mas o que é PAM?
   2. Qual a vantagem de utilizar o PAM?
   3. Instalando os pacotes
   4. Compilando o Squid
   5. Configurando o Squid para execução
   6. Executando o Squid pela primeira vez
   7. Bloqueando sites por palavras e IPs
   8. Execução por runlevel (/etc/init.d/squid start) - OPCIONAL
   9. Testando e finalizando
Outros artigos deste autor

Configurando o Apache para reconhecer arquivos DWG

BackRE - Seu script de backup remoto

Coletando informações direto do FIREBIRD via D.O.S. ou SHELL

Monitoramento de Serviços e Servidores

Postgres e os Sistemas Alterdata

Leitura recomendada

Squid - Bloqueando definitivamente o MSN Messenger e Orkut

Implementação de um servidor Linux Squid + Iptables + DHCP

Instalação do Squid com autenticação NTLM e Kerberos

Squid + IPtables com dois links de internet

Manual traduzido do Squid - Parte 2

  
Comentários
[1] Comentário enviado por cleitão em 07/08/2006 - 16:45h

Cara muito legal este artigo....... bem detalhado e bastante abrangente....

[2] Comentário enviado por shadowslicer em 15/02/2007 - 18:02h

Muito bom! =D

Estava com problemas na hora de autenticar usuarios utilizando o LDAP, isso vai me ajudar bastante!

Muito obrigado!

[3] Comentário enviado por cmercaldo em 15/10/2007 - 16:16h

Espero ter ajudado!!

[4] Comentário enviado por gersonraymond em 05/05/2008 - 07:12h

Parabéns pelo artigo, super didático, prático e eficiente .......

Gerson Raymond
www.g2cinformatica.com

[5] Comentário enviado por ramonpqdt em 28/11/2010 - 19:41h

excelente... resolveu, mas só uma complementação... as permissões do arquido squid em /etc/init.d devem ser alteradas.

root@internet:/etc/init.d# /etc/init.d/squid stop
bash: /etc/init.d/squid: Permissão negada
root@internet:/etc/init.d# chmod 700 squid
depois de feita a alteração...

root@internet:/etc/init.d# /etc/init.d/squid stop
Stopping proxy server: (waiting..................done) squid.
root@internet:/etc/init.d# /etc/init.d/squid start
Starting proxy server: squid.

valeu !!! :)


[6] Comentário enviado por cmercaldo em 28/11/2010 - 20:12h

Tentamos sempre fazer o melhor.....mas sempre passa alguma coisa...Obrigado!!

Att.
ClaudioM


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts