Configurar el servidor proxy Squid con DansGuardian y NTLM en Ubuntu
Qué cubre este documento
- Preparación y copias de seguridad
- Configuración de Squid para proxy transparente y NTLM
- Ajustes para DansGuardian y exclusiones de antivirus
- Script para permisos de winbind
- Reglas de ipmasq para redirección y DNAT
- Instalación del módulo Webmin para DansGuardian
- Pruebas, solución de problemas y criterios de aceptación
Importante: define términos en una línea
- NTLM: protocolo de autenticación de Microsoft usado en dominios Windows.
- winbind: componente de Samba que permite que Linux valide usuarios de dominio.
1. Preparación y copias de seguridad
Antes de editar, haz una copia de seguridad del archivo principal de Squid. Siempre trabaja con privilegios de administrador.
cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
nano -c /etc/squid/squid.conf
Nota: nano -c muestra números de columna; puedes usar tu editor preferido.
2. Configurar Squid
Edita /etc/squid/squid.conf y aplica estos cambios concretos (líneas referidas según el archivo original):
- Cambia la línea 73 a:
http_port 127.0.0.1:3128 transparent
- Cambia la línea 74 a:
http_port 8080
- Cambia la línea 593 a:
cache_peer 127.0.0.1 parent 8081 0 no-query login=*:nopassword
- Descomenta las líneas 1783 a 1791 y reemplaza el marcador
por:
/usr/bin/ntlm_auth –helper-protocol=squid-2.5-ntlmssp
- Descomenta las líneas 1800 a 1803 y reemplaza el marcador
por:
/usr/bin/ntlm_auth –helper-protocol=squid-2.5-basic
- Cambia la línea 2449 a:
acl ntlm_auth proxy_auth REQUIRED
- Cambia la línea 2579 a:
http_access allow ntlm_auth
- Cambia la línea 3161 a:
forwarded_for off
Guarda el archivo.
Nota importante: la directiva forwarded_for off evita que Squid reenvíe la IP interna de los clientes a los sitios web externos. Si se deja por defecto, tu IP interna podría filtrarse a los servidores remotos.
3. Permisos para winbind (ntlm_auth)
Squid/ntlm_auth necesita acceso a /var/run/samba/winbindd_privileged. Los permisos pueden restablecerse al reiniciar, por eso añadiremos un script que los ajuste en cada arranque.
Crea o edita /etc/init.d/winbind-ch.sh y pega exactamente lo siguiente:
#!/bin/sh
#set -x
WINBINDD_PRIVILEGED=/var/run/samba/winbindd_privileged
chmodgrp() {
chgrp proxy $WINBINDD_PRIVILEGED || return 1
chmod g+w $WINBINDD_PRIVILEGED || return 1
}
case "$1" in
start)
chmodgrp
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
#EOF
Registra el script para que se ejecute en el arranque:
update-rc.d winbind-ch.sh start 21 2 3 4 5 .
Explicación breve: el script cambia el grupo del socket winbind a proxy y añade permiso de escritura al grupo. Esto permite que ntlm_auth (ejecutado por Squid) use el socket.
4. Configurar DansGuardian
Edita /etc/dansguardian/dansguardian.conf y realiza los ajustes:
- Comenta la línea 3 (si la configuración original lo requiere).
- Ve a la línea 62 y cambia el puerto 8080 por 8081 (DansGuardian escuchará en 8081 y Squid lo reenviará).
- Cambia filtergroups = 1 en la línea 102 a filtergroups = 2 y crea el archivo de configuración para el segundo grupo.
Crea la copia del grupo 1 como grupo 2:
cp /etc/dansguardian/dansguardianf1.conf /etc/dansguardian/dansguardianf2.conf
nano -c /etc/dansguardian/dansguardianf2.conf
En /etc/dansguardian/dansguardianf2.conf, ve a la línea 29 y cambia a:
naughtynesslimit = 100
Excepciones de antivirus: las definiciones de AV no deben bloquearse. Añade los dominios de actualización de tu AV a la whitelist de virus y, opcionalmente, a la lista de sitios excepcionados.
Ejemplo: agrega activeupdate.trendmicro.com a /etc/dansguardian/exceptionvirussitelist
Y agrega trendmicro.com a /etc/dansguardian/exceptionsitelist (nota: conserva la ruta tal cual).
Reinicia DansGuardian para aplicar cambios:
/etc/init.d/dansguardian restart
5. Configurar el firewall con ipmasq
Ipmasq simplifica reglas NAT/forwarding. Instálalo:
apt-get install ipmasq -y
Para habilitar el proxy transparente, redirigimos todas las solicitudes HTTP salientes al puerto 8081 (puerto de DansGuardian). Copia una regla de ejemplo:
cp /usr/share/doc/ipmasq/examples/basics/I89tproxy.rul /etc/ipmasq/rules/I89tproxy.rul
Si necesitas reenviar puertos a un servidor interno, revisa:
/usr/share/doc/ipmasq/examples/dnat/C50dnat.rul
6. Instalar el módulo de DansGuardian para Webmin
Abre tu navegador en https://192.168.1.1:10000/ (ajusta la IP a la de tu servidor) e inicia sesión como root. Ve a Webmin > Webmin Configuration > Webmin Modules. Selecciona “From ftp or http URL” e instala el módulo con este URL:
http://internap.dl.sourceforge.net/sourceforge/dgwebminmodule/dg-0.5.10-pr5.wbm
7. Pruebas finales y verificación
- Reinicia el servidor.
- Configura el navegador de un equipo miembro del dominio para usar la IP del servidor y el puerto 8080 como proxy.
- Si el equipo está unido al dominio, la autenticación NTLM debería ocurrir automáticamente y verás acceso a Internet.
- En Internet Explorer, si NTLM falla, es posible que necesites introducir dominio\usuario en el diálogo de autenticación.
- Prueba desde otro equipo que NO esté unido al dominio y que no use proxy. Navega y comprueba los registros.
En Webmin, revisa los registros de DansGuardian. Deberías ver el nombre de usuario del equipo de dominio y el sitio visitado. Observa también cómo la solicitud del equipo no unido al dominio aparece con la IP del equipo de dominio (127.0.0.1 en este escenario), porque el flujo es: equipo dominio -> squid -> dansguardian -> squid -> destino. El equipo no dominio va directo a dansguardian -> squid -> destino.
Si algo falla, consulta /var/log/syslog y los registros de Squid y DansGuardian para mensajes de error.
8. Solución de problemas común
Problema: ntlm_auth devuelve errores de conexión al socket.
- Verifica que winbind esté en ejecución: service winbind status
- Verifica permisos en /var/run/samba/winbindd_privileged
- Revisa que el script winbind-ch.sh haya sido instalado en /etc/init.d y añadido a los runlevels
Problema: usuarios no autenticados o credenciales incorrectas.
- Asegura que el servidor Linux esté unido al dominio (net ads testjoin o realm list según método).
- Revisa que ntlm_auth esté en la ruta /usr/bin/ntlm_auth y sea ejecutable.
Problema: páginas bloqueadas por falsos positivos de AV.
- Añade los dominios de actualizaciones de AV a exceptionvirussitelist y exceptionsitelist en /etc/dansguardian.
9. Criterios de aceptación
- Los equipos unidos al dominio navegan sin pedir credenciales manuales y las solicitudes aparecen en los logs con username@DOMINIO.
- Los equipos no unidos al dominio navegan a través de DansGuardian pero aparecen con la IP del equipo de frontera en los logs.
- forwarded_for está OFF y los sitios externos no ven las IPs internas.
- ntlm_auth funciona sin errores y winbind no reporta fallos de socket después de reinicios.
10. Lista de verificación por roles
Administrador de red
- Copia de seguridad de /etc/squid/squid.conf
- Comprobar que ntlm_auth está instalado
- Revisar permisos de /var/run/samba/winbindd_privileged
- Probar navegación desde equipo dominio y no dominio
Soporte de primer nivel
- Confirmar ajustes del proxy en el navegador (IP: puerto 8080)
- Reiniciar navegador y eliminar caché
- Reportar errores con capturas de pantalla y hora exacta
Seguridad / cumplimiento
- Verificar forwarded_for off
- Confirmar exclusiones de AV están documentadas
- Revisar logs para fugas de información
11. Mini-playbook de despliegue (pasos rápidos)
- Hacer respaldo de configuración.
- Aplicar cambios en squid.conf y dansguardian.conf.
- Instalar script winbind-ch.sh y registrar con update-rc.d.
- Instalar ipmasq y copiar reglas de proxy.
- Reiniciar servicios: winbind, squid, dansguardian, ipmasq.
- Probar desde equipos representativos.
12. Seguridad y privacidad (notas)
- Mantén forwarded_for off para proteger IPs internas.
- Asegura que los archivos de configuración y los scripts tengan permisos restrictivos (chmod 600/700 según corresponda).
- Documenta los dominios añadidos a las listas de excepciones y restringe quién puede modificarlas.
- En entornos con datos personales, considera las implicaciones de registro (logs) y respeta la normativa local de privacidad.
13. Diagrama de decisión (flujo) para fallo de autenticación
flowchart TD
A[Usuario no puede autenticarse] --> B{Equipo unido al dominio?}
B -- Sí --> C[Verificar winbind y ntlm_auth]
B -- No --> D[Verificar configuración del proxy en el navegador]
C --> E{Socket accesible?}
E -- Sí --> F[Revisar logs de Squid y DansGuardian]
E -- No --> G[Revisar script winbind-ch.sh y permisos]
D --> F
14. Glosario rápido (1 línea cada término)
- Squid: proxy HTTP con cache.
- DansGuardian: filtro de contenido web por reglas y listas.
- ntlm_auth: helper que permite autenticación NTLM para Squid.
- winbind: componente que permite validar usuarios de dominio en Linux.
15. Enlaces útiles
Resumen final
- Integra Squid y DansGuardian usando ntlm_auth para autenticación transparente.
- Asegura permisos de winbind en cada arranque con el script proporcionado.
- Usa ipmasq para redirigir tráfico HTTP al puerto de DansGuardian y revisa logs para validar el comportamiento.
Notas finales: Si aplicas estos cambios en un entorno de producción, haz primero pruebas en laboratorio y mantén una copia de los archivos originales para restaurar si es necesario.
Materiales similares
Reemplazo de disco en RAID1: guía práctica

Instalar Opigno LMS en Ubuntu 18.04

Soluciones para señal móvil e Internet débil

Bloquear barra de tareas en Windows
