Cómo instalar y configurar Squid Proxy Server en Linux
Squid es probablemente el servidor proxy de almacenamiento en caché de código abierto más conocido y popular. El servidor proxy squid admite una gran cantidad de protocolos de almacenamiento en caché (ICP, HTCP, CARP, WCCP) y permite el tráfico proxy HTTP, HTTPS, FTP, etc. Squid es fácilmente escalable, puede usarlo para filtrar contenido o limitar el ancho de banda por usuario o sitio, admite autenticación de usuario (incluida la autenticación LDAP de Active Directory). En este artículo, mostraremos cómo instalar un servidor proxy Squid en Linux.
Instalación del servidor proxy Squid en Linux
Instale el paquete Squid en un host usando su administrador de paquetes. Dependiendo de su versión de Linux, use uno de los siguientes comandos:
Oracle, Rocky Linux, CentOS, Fedora o Red Hat Enterprise Linux:
# dnf install -y squidServidor empresarial SUSE Linux:
# zypper install squidUbuntu o Debian:
# apt-get install squid
Si desea implementar la autenticación de usuario en Squid, instale un paquete más:
RHEL/CentOS/Fedora:
# dnf -y install httpd-toolsDebian/Ubuntu:
# sudo apt install apache2-utils
Habilite Squid en Linux usando systemd, ejecute el servicio y verifique su estado:
# systemctl enable squid
# systemctl start squid
# systemctl status squidPara enumerar todas las opciones, Squid está construido con:
# squid -vSquid Cache: Version 4.15
Service Name: squid
This binary uses OpenSSL 1.1.1k FIPS 25 Mar 2021. For legal restrictions on distribution see https://www.openssl.org/source/license.html
configure options: '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--libexecdir=/usr/lib64/squid' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,PAM,POP3,RADIUS,SASL,SMB,SMB_LM' '--enable-auth-ntlm=SMB_LM,fake' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-storeid-rewrite-helpers=file' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-icap-client' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,ufs,rock' '--enable-diskio' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' '--disable-security-cert-validators' '--with-swapdir=/var/spool/squid' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
Configuración del servidor proxy de almacenamiento en caché de Squid
Por defecto, squid usa el archivo de configuración /etc/squid/squid.conf.
Antes de editar el archivo de configuración original, cópielo y hágalo de solo lectura.
$ sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
$ sudo chmod a-w /etc/squid/squid.conf.originalMás tarde puede volver al archivo de configuración original o usarlo como referencia de directiva.
Edite el archivo de configuración de squid:
$ sudo mcedit /etc/squid/squid.confAl comienzo del archivo de configuración de Squid, se especifica una lista de control de acceso que define las direcciones IP (subredes) de los clientes que pueden conectarse al servidor proxy.
Por ejemplo, desea permitir el acceso solo a clientes de su red local. Agregue la siguiente directiva:
acl localnet src 192.168.50.0/24Puede comentar otras líneas de acl localnet.
La directiva que permite el acceso a esta red se establece a continuación en el archivo de configuración:
http_access allow localnetDe forma predeterminada, Squid acepta conexiones de usuario en el puerto TCP/3128. Puede cambiar el número de puerto en http_port. Cambiaré el puerto de escucha de squid a 4555:
http_port 4555Si desea utilizar el servidor proxy para el almacenamiento en caché, configure un directorio de caché:
cache_dir ufs /var/spool/squid 5120 32 25620480- es el tamaño de caché en MB
32- es el número de directorios de primer nivel para el caché,
256son los directorios de segundo nivel
Para crear una estructura de carpetas para el caché de squid en un disco, ejecute el siguiente comando:
$ squid -zPara autenticar a los usuarios en squid, utilizaremos la autenticación básica simple. En primer lugar, cree un archivo para almacenar nombres de usuario y contraseñas:
$ sudo touch /etc/squid/passwd && sudo chown squid /etc/squid/passwdPara agregar un nuevo usuario al archivo, ejecute este comando:
$ sudo htpasswd -c /etc/squid/passwd username1Al agregar los siguientes usuarios, no necesita usar la opción -c.
Luego agregue las siguientes líneas al comienzo del archivo squid.conf:
# use basic auth and password file
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
# the number of concurrent connections
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
# session length without re-entering login and password
auth_param basic credentialsttl 8 hours
auth_param basic casesensitive off
acl auth_users proxy_auth REQUIRED
http_access allow auth_usersDiferentes distribuciones de Linux pueden tener diferentes rutas al archivo basic_ncsa_auth:
/usr/lib64/squid/basic_ncsa_auth (Oracle, Rocky Linux, RHEL, CentOS)
/usr/lib/squid/basic_ncsa_auth (Debian, Ubuntu, Kali Linux)
Puede implementar la autenticación AD utilizando el paquete de autenticación básico:
auth_param basic program /usr/lib64/squid/basic_ldap_auth -R -b "dc=a-d,dc=com" -D "squid_srv@a-d.site " -w "<user password>" -f "sAMAccountName=%s" <AD domain controller IP address>La desventaja de la autenticación básica es que la contraseña se transmite como texto cifrado con Base64 (se descifra fácilmente, vea un ejemplo en el artículo Enviar correos electrónicos usando telnet con autenticación SMTP). Por lo tanto, es más seguro usar la autenticación Kerberos Active Directory en Squid. Si no tiene AD, puede configurar la autenticación HTTP Digest en Squid. Pero esto está más allá del alcance de este artículo.
Las reglas de autorización y denegación se establecen mediante las directivas http_access al final del archivo de configuración de squid. Por ejemplo, para permitir el acceso solo a usuarios autenticados:
http_access allow localhost
http_access allow authenticated
http_access deny allSquid le permite bloquear sitios web específicos. Cree un archivo con una lista de sitios prohibidos:
$ sudo vi /etc/squid/blocked_sitesAgregue una lista de sitios web a los que desea denegar el acceso:
facebook.com
twitter.com
instagram.comLuego agregue las siguientes líneas al archivo de configuración de squid:
acl blocked_sites dstdomain "/etc/squid/blocked_sites"
http_access deny blocked_sitesDespués de realizar cambios en el archivo de configuración de squid, compruebe si hay errores de sintaxis:
$ sudo squid -k parseSi no hay errores, puede aplicar nuevas opciones de configuración de squid (no necesita reiniciar un demonio):
$ sudo squid -k reconfigurePermita la conexión al puerto del servidor proxy en su firewall (en nuestro ejemplo, es TCP 4555). Si está utilizando firewalld, agregue una regla de permiso de la siguiente manera:
# firewall-cmd --zone=public --add-port=4555/tcp
# firewall-cmd --reloadSi su servidor Linux está alojado por un proveedor externo (AWS, Azure, Oracle Cloud, etc.), recuerde agregar una regla de autorización para el puerto TCP/4555 al grupo de seguridad correspondiente.
Verifique que Squid esté escuchando en el puerto especificado en la directiva http_port:
$ netstat -tulnpUsando curl, puede verificar la disponibilidad de su servidor proxy squid:
$ curl -x http://xx.xx.xx.xx:4555 -L http://google.comSi el
authentication required/ Access Denied aparece un error, envíe un nombre de usuario y contraseña para acceder a squid:
$ curl -x http://xx.xx.xx.xx:4555 --proxy-user proxyuser1:NDMk23C3jvm -I http://google.comPara verificar los registros de squid en tiempo real, use el comando:
$ sudo tail -f /var/log/squid/access.logSi su navegador muestra el error:
The proxy server is refusing connectionsy ahí está el
TCP_DENIED/403 4041 CONNECTlínea en access.log, verifique sus ACL.
Si un usuario se ha autenticado con éxito, el registro de squid contendrá la línea
TCP_TUNNEL/200 39 CONNECT a-d.site:80 proxyusername HIER_DIRECT/xx.xx.xx.xxo
TCP_MISS/200.
Queda por establecer la configuración del servidor proxy en los navegadores de las computadoras de los usuarios. Establezca la dirección IP (nombre) del host y el puerto de Squid en la configuración del navegador. La configuración del proxy se configura en computadoras con Windows a través de GPO.




