Compilando Squid 4.6 desde código fuente

Soporte básico necesario:

# apt install arj bzip2 xz-utils cabextract cpio file lzma lhasa lzop rpm2cpio gzip nomarch \
 pax lzop rar unrar unzip zoo unace razor pyzor tnef ripole zip xz-utils lzma p7zip-full mc \
 multitail ccze

Instalar binarios necesarios para compilar Squid4:

# apt install logrotate acl attr autoconf bison nettle-dev build-essential libacl1-dev \
libaio-dev libattr1-dev libblkid-dev libbsd-dev libcap2-dev libcppunit-dev libldap2-dev \
pkg-config libxml2-dev libdb-dev libgnutls28-dev openssl devscripts fakeroot libdbi-perl \
libssl1.0-dev libcppunit-dev libecap3-dev libkrb5-dev comerr-dev libnetfilter-conntrack-dev \
libpam0g-dev libsasl2-dev

Configurando el sistema, si alguno de estos pasos da error de que existe o que ya está, no hay problemas, continuar adelante:

# groupadd -g 13 proxy
# mkdir -p /var/spool/squid
# mkdir -p /var/log/squid
# mkdir -p /var/cache/squid
# useradd --system -g proxy -u 13 -d /var/spool/squid -M -s /usr/sbin/nologin proxy
# chown proxy:proxy /var/spool/squid
# chown proxy:proxy /var/log/squid
# chown proxy:proxy /var/cache/squid

cd /opt
wget -c http://www.squid-cache.org/Versions/v4/squid-4.6.tar.xz
# tar xfv squid-4.6.tar.xz

Configuramos las opciones básicas que podamos necesitar:

./configure --srcdir=. --prefix=/usr --localstatedir=/var/lib/squid --libexecdir=/usr/lib/squid \
--datadir=/usr/share/squid --sysconfdir=/etc/squid4 --with-default-user=proxy --with-logdir=/var/log/squid \
--with-open-ssl=/etc/ssl/openssl.cnf --with-openssl --enable-ssl --enable-ssl-crtd --build=x86_64-linux-gnu \
--with-pidfile=/var/run/squid.pid --enable-removal-policies=lru,heap \
--enable-delay-pools --enable-cache-digests --enable-icap-client --enable-ecap --enable-follow-x-forwarded-for \
--with-large-files --with-filedescriptors=65536 \
--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB \
--enable-auth-digest=file,LDAP --enable-auth-negotiate=kerberos,wrapper --enable-auth-ntlm=fake,SMB_LM \
--enable-linux-netfilter --with-swapdir=/var/cache/squid --enable-useragent-log --enable-htpc \
--infodir=/usr/share/info --mandir=/usr/share/man --includedir=/usr/include --disable-maintainer-mode \
--disable-dependency-tracking --disable-silent-rules --enable-inline --enable-async-io \
--enable-storeio=ufs,aufs,diskd,rock --enable-eui --enable-esi --enable-icmp --enable-zph-qos \
--enable-external-acl-helpers=file_userip,kerberos_ldap_group,time_quota,LDAP_group,session,SQL_session,unix_group,wbinfo_group \
--enable-url-rewrite-helpers=fake --enable-translation --enable-epoll --enable-snmp --enable-wccpv2 \
--with-aio --with-pthreads --enable-arp --enable-arp-acl

Si necesitamos saber que significa cada opción:

./configure --help

Compilamos con 4 núcleos[multiprocesamiento]:

# make -j 4

Instalando:

# make install

Ahora debemos crear un archivo de inicio[squid o squid4 como usted desée nombrarlo] para el squid:

cd /etc/init.d/
nano squid

Con el siguiente contenido:

#!/bin/sh

########################################################################
# squid4 Startup script for the SQUID HTTP proxy-cache.
#
# Version: @(#)squid4 init script 1.0 20-Feb-2019 leslie84@nauta.cu
########################################################################

### BEGIN INIT INFO
# Provides: squid
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Should-Start: $named
# Should-Stop: $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Squid HTTP Proxy version 4.x
### END INIT INFO

NAME=squid
DESC="Squid HTTP Proxy 4.x"
DAEMON=/usr/sbin/squid
PIDFILE=/var/run/$NAME.pid
CONFIG=/etc/squid4/squid.conf
SQUID_ARGS="-YC -f $CONFIG"

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

. /lib/lsb/init-functions

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

[ -x $DAEMON ] || exit 0

ulimit -n 65535

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

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

start () {
cache_dir=`find_cache_dir cache_dir`
cache_type=`find_cache_type cache_dir`

#
# Create spool dirs if they don't exist.
#
if [ "$cache_type" = "coss" -a -d "$cache_dir" -a ! -f "$cache_dir/stripe" ] || [ "$cache_type" != "coss" -a -d "$cache_dir" -a ! -d "$cache_dir/00" ]
then
log_warning_msg "Creating $DESC cache structure"
$DAEMON -z -f $CONFIG
fi

umask 027
ulimit -n 65535
cd $cache_dir
start-stop-daemon --quiet --start \
--pidfile $PIDFILE \
--exec $DAEMON -- $SQUID_ARGS < /dev/null
return $?
}

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
log_action_begin_msg " Waiting"
cnt=0
while kill -0 $PID 2>/dev/null
do
cnt=`expr $cnt + 1`
if [ $cnt -gt 24 ]
then
log_action_end_msg 1
return 1
fi
sleep 5
log_action_cont_msg ""
done
log_action_end_msg 0
return 0
else
return 0
fi
}

case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
if start ; then
log_end_msg $?
else
log_end_msg $?
fi
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
if stop ; then
log_end_msg $?
else
log_end_msg $?
fi
;;
reload|force-reload)
log_action_msg "Reloading $DESC configuration files"
start-stop-daemon --stop --signal 1 \
--pidfile $PIDFILE --quiet --exec $DAEMON
log_action_end_msg 0
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
stop
if start ; then
log_end_msg $?
else
log_end_msg $?
fi
;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit 3
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart|status}"
exit 3
;;
esac

exit 0

Acá lo adjunto por si tienen dudas. Después de hacer esto debemos darle permisos de ejecución y hacerlo que inicie con el sistema:

chmod +x squid
update-rc.d squid defaults

Ahora sólo nos queda editar el archivo de configuración para adaptarlo a nuestras necesidades. El archivo de configuración «squid.conf» se encuentra en /etc/squid4, y es donde configuraremos los métodos de autenticación, ACLs, puertos permitidos, etc.

cd /etc/squid4
nano squid.conf

Si observamos detenidamente las directivas el archivo de configuración de Squid, veremos que esta listo para funcionar, pero… No logueará info acerca de la navegación, no tendra ACLs limitando la conectividad y estará configurado en modo transparente, es decir, no pedirá autenticación y se navegará sin ningun tipo de restricción.

En squid4, al compilar desde fuentes, se genera un «squid.conf.documented» que contiene todas y cada una de las opciones usadas bien explicadas, por si existen dudas. Ahora bien, hagamos algo, añadamos lo suguiente, e iré documentando cada opción:

# Apurar reinicio de Squid
shutdown_lifetime 1 seconds

# Puertos e interfaces por los que escuchará squid
http_port 0.0.0.0:3128
http_port 0.0.0.0:8080

# Logueo de información acerca de la navegación
cache_log stdio:/var/log/squid/cache.log
access_log stdio:/var/log/squid/access.log
cache_store_log stdio:/var/log/squid/store.log
netdb_filename stdio:/var/spool/squid/netdb.state

Guardamos y listo. Ahora reiniciamos squid:

/etc/init.d/squid restart

Y ejecutamos lo siguiente para que systemd actualice configuraciones:

systemctl daemon-reload

Luego de hecho esto, yo prefiero reiniciar el sistema.
Una vez reiniciado el sistema, podemos empezar a configurar el Squid4 normalmente, pero primero revisemos nos logs. Si todo inicia con normalidad, proseguimos, si no, revisemos lo que hemos hecho hasta ahora y corrijamos los posibles errores.

Ahora hacemos un alto acá. Haremos uso de dos herramientas muy importantes, «multitail» y «ccze». Multitail permite ver en tiempo real[tail -f] la salida estándard de varios archivos de logs, en este caso de logs, se sale de su entorno con la letra «q». Ccze cuando es acompañado de «tail -f» nos permite colorear los logs en la salida estándar, indicando con color «rojo» los errores y fallas que se detecten y se detiene su ejecución con Ctrl + C.

Por ejemplo:

multitail /var/log/syslog /var/log/daemon.log
tail -f /var/log/squid/access.log | ccze

Estos dos comandos nos serán muy utiles a la hora de depurar errores en un servicio determinado[squid, postfix, bind, ejabberd, syslog, etc], pues nos ayudan a localizar los errores sólo mirando las salidas de los daemons. Los errores, como ya dije más arriba, salen en color «rojo».

Por el momento es todo, en un próximo post, continuaré vinculando Squid contra samba4 usando grupos y demás. Espero les sirva. Saludos a todos.

6 comentarios de “Compilando Squid 4.6 desde código fuente

  1. Hola Koratsuki:
    Tendras hecho un backup de proxmox de esta maquina? de ser asi, de donde lo puedo descargar, mega por ejemplo.
    Saludos

    • Lo que tengo es una máquina virtual en VMWare Player 15, es decir, un vmdk. Si te sirve, te lo copio, aunque hacer uno con el tutorial en Proxmox es 10 minutos, no creo que sea tan difícil…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *