Squid: reglas ACL, autenticación por contraseña y proxy transparente con IPTables
Resumen
Este apunte explica cómo configurar Squid con reglas ACL basadas en direcciones MAC, autenticación por usuario y contraseña, y listas de control de acceso con tiempo y URL. También describe cómo montar un proxy transparente con reglas de IPTables para redirigir el tráfico HTTP y otros servicios. Incluye una tabla de puertos comunes de red.
Puntos clave
- Las ACL de tipo arp permiten administrar Squid mediante direcciones MAC de los clientes.
- La autenticación por contraseña usa un archivo de claves protegido (chmod 600, propietario proxy) creado con htpasswd y el programa ncsa_auth.
- Una regla ACL con proxy_auth required activa la autenticación por contraseña.
- Una ACL precedida de '!' coincide con los paquetes que no cumplen la regla.
- Para un proxy transparente se usa http_port con la opción transparent y se activa el reenvío de paquetes (ip_forward).
- La regla iptables -t nat PREROUTING con REDIRECT envía el tráfico de un puerto (por ejemplo 80) al puerto 3128 de Squid.
- Cada servicio adicional requiere su propia regla de redirección cambiando el valor de --dport.
Configuración Avanzada de Squid: Reglas y Autenticación
Regla por Dirección MAC
La regla tipo MAC Address nos permite administrar Squid por medio de las direcciones MAC. Por ejemplo, esta regla se llama adminmac y en ella proporcionamos las direcciones MAC de las máquinas clientes:
acl adminmac arp 09:00:2b:23:45:67 00:1f:3c:5f:fd:b1 00:1e:ec:70:7e:24Regla por Contraseña (Password)
La regla tipo Password permite controlar el acceso a internet por medio de un usuario y contraseña. Para poder habilitar este método, tendremos que seguir los siguientes pasos de configuración:
Creación del archivo de claves
Creamos el archivo que contendrá las claves. Lo creamos oculto para mayor seguridad:
touch .clavesAsignación de permisos
Le asignamos permisos de lectura/escritura y el usuario encargado del archivo:
chmod 600 .clavesy
chown proxy:proxy .clavesCreación de usuario y contraseña
Creación de usuario y contraseña para el acceso a internet:
htpasswd .claves clientesHabilitación en el fichero de configuración de Squid
Habilitaremos las siguientes opciones dentro del fichero de configuración del servidor Squid:
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/.claveso
authenticate_program /usr/lib/squid/ncsa_auth /etc/squid/.clavesEstamos indicando la aplicación que controla la autenticación y dónde se encuentra el archivo que contiene las cuentas de los usuarios.
Habilitación de la regla ACL
Por último, tendremos que habilitar la regla ACL encargada de la autenticación de contraseña:
acl password proxy_auth required
Control de Acceso (ACLs)
Las reglas de control de acceso (ACLs) definen si se permite o no el acceso. Las reglas pueden ser negadas con un "!" delante; en esos casos, los paquetes que cumplen la regla serán los no recogidos en la misma.
Ejemplo 1: Acceso básico
acl all src 0.0.0.0/0.0.0.0
acl jefes src 192.168.1.23 192.168.1.25
http_access allow jefes
http_access deny allEjemplo 2: Acceso avanzado con tiempo y URL
acl all src 0.0.0.0/0.0.0.0
acl jefes src 192.168.1.23 192.168.1.25
acl red-local src 192.168.1.0/255.255.255.0
acl laboral time mtwhf 09:00-15:00
acl no-permitido url_regex "/etc/squid/listas/paginas.txt"
http_access allow jefes
http_access allow red-local laboral !no-permitido
http_access deny allServidor Proxy Transparente con Squid
Configurar Squid como proxy transparente permite que las conexiones sean enrutadas al proxy sin hacer ninguna configuración en los clientes para que tengan salida a internet. Los clientes se conectarán a internet pasando por el proxy sin darse cuenta de ello.
Configuración del parámetro http_port
Solamente tenemos que configurar este parámetro para que sea un proxy transparente:
http_port 192.168.1.254:3128 transparentReglas de Firewall (IPTables) para Proxy Transparente
Para que el proxy transparente funcione correctamente, es necesario configurar reglas en el firewall (IPTables) para redirigir el tráfico.
Activación del reenvío de paquetes
Es fundamental activar el reenvío de paquetes en el sistema:
echo 1 > /proc/sys/net/ipv4/ip_forwardReglas de enmascaramiento (NAT Masquerade)
Estas reglas permiten que los paquetes de la red interna salgan a internet a través de la interfaz externa del servidor:
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j MASQUERADERedirección de servicios al proxy
Redireccionamos el tráfico de servicios específicos hacia el puerto del proxy (3128). Hay que poner la siguiente línea para que funcione de manera transparente; debemos aplicar la siguiente regla en iptables:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128Con esto ya tenemos redireccionadas todas las conexiones HTTP (puerto 80) hacia el proxy (puerto 3128). Si nos piden otra conexión (FTP, SSH, SMTP, POP3, etc.), debemos incluir la misma regla pero cambiando el puerto, una vez por cada conexión que nos pidan (ej. --dport 25 para SMTP).
Ejemplos de redirección de servicios:
- Servicio Web (HTTP):
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128 - Servicio SMTP:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 25 -j REDIRECT --to-port 3128
Puertos Comunes de Red
A continuación, se listan algunos puertos comunes y sus servicios asociados:
- FTP: 20-21
- SSH: 22
- Telnet: 23
- SMTP: 25
- DNS: 53
- HTTP (Web): 80
- POP3: 110
- IMAP: 143
- HTTPS: 443
Descargar
PDF Word HTMLPreguntas frecuentes
¿Cómo se activa la autenticación por contraseña en Squid?
Se crea un archivo de claves con htpasswd, se asignan permisos 600 y propietario proxy, se configuran auth_param basic con ncsa_auth y authenticate_program, y se añade la ACL 'acl password proxy_auth required'.
¿Qué opción de http_port convierte Squid en proxy transparente?
La opción transparent, indicada tras la dirección y el puerto, por ejemplo http_port 192.168.1.254:3128 transparent.
¿Cómo se redirige el tráfico SMTP al proxy?
Con la regla iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 25 -j REDIRECT --to-port 3128, cambiando el puerto de destino del servicio.
Ponte a prueba
Tarjetas de repaso
Pulsa una tarjeta para ver la respuesta.
Test
Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.