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: 106.706 ]

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

BackRE - Seu script de backup remoto

Postgres e os Sistemas Alterdata

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

Monitoramento de Serviços e Servidores

Configurando o Apache para reconhecer arquivos DWG

Leitura recomendada

Filtragem de páginas SSL (443) no Squid transparente

Bloqueando Windows Live Messenger com Squid (Debian ou Ubuntu)

Wpad.dat com Proxy Específico por Rede

Configurando o Squid no Slackware

Proxy com autenticação em servidores Samba ou Windows NT

  
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