Búsqueda de sitios web

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 squid
  • Servidor empresarial SUSE Linux:

    # zypper install squid
  • Ubuntu 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-tools
  • Debian/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 squid

Para enumerar todas las opciones, Squid está construido con:

# squid -v
Squid 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.original

Má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.conf

Al 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/24

Puede 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 localnet

De 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 4555

Si desea utilizar el servidor proxy para el almacenamiento en caché, configure un directorio de caché:

cache_dir ufs /var/spool/squid 5120 32 256
  • 20480

    - es el tamaño de caché en MB

  • 32

    - es el número de directorios de primer nivel para el caché,

    256

    son los directorios de segundo nivel

Para crear una estructura de carpetas para el caché de squid en un disco, ejecute el siguiente comando:

$ squid -z

Para 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/passwd

Para agregar un nuevo usuario al archivo, ejecute este comando:

$ sudo htpasswd -c /etc/squid/passwd username1

Al 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_users

Diferentes 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 all

Squid le permite bloquear sitios web específicos. Cree un archivo con una lista de sitios prohibidos:

$ sudo vi /etc/squid/blocked_sites

Agregue una lista de sitios web a los que desea denegar el acceso:

facebook.com
twitter.com
instagram.com

Luego agregue las siguientes líneas al archivo de configuración de squid:

acl blocked_sites dstdomain "/etc/squid/blocked_sites"
http_access deny blocked_sites

Después de realizar cambios en el archivo de configuración de squid, compruebe si hay errores de sintaxis:

$ sudo squid -k parse

Si no hay errores, puede aplicar nuevas opciones de configuración de squid (no necesita reiniciar un demonio):

$ sudo squid -k reconfigure

Permita 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 --reload

Si 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 -tulnp

Usando curl, puede verificar la disponibilidad de su servidor proxy squid:

$ curl -x http://xx.xx.xx.xx:4555 -L http://google.com

Si 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.com

Para verificar los registros de squid en tiempo real, use el comando:

$ sudo tail -f /var/log/squid/access.log

Si su navegador muestra el error:

The proxy server is refusing connections

y ahí está el

TCP_DENIED/403 4041 CONNECT

lí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.xx

o

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.

Artículos relacionados