Skip to content

Instantly share code, notes, and snippets.

@oneohthree
Last active January 16, 2020 14:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oneohthree/fe9b8f1d9a2d172732939eafb46a61b4 to your computer and use it in GitHub Desktop.
Save oneohthree/fe9b8f1d9a2d172732939eafb46a61b4 to your computer and use it in GitHub Desktop.

Integración de proxy cache Squid con Samba 4 AD DC

Este documento describe el proceso de integración de Samba AD DC con Squid con soporte para la autenticación Kerberos y basic (como fallback).

Consideraciones previas

  • Sistema operativo: Debian GNU/Linux 9 (Stretch) 64bits
  • Version de Squid: 3.5
  • Nombre de dominio: foo.bar
  • Nombre de host del servidor AD DC: dc
  • Nombre de host del servidor proxy: proxy
  • Dirección IP del servidor AD DC: 192.168.0.1
  • Dirección IP del servidor proxy: 192.168.0.2

Obervaciones

  • Es importante agregar los registros A del servidor AD DC y proxy, así como los correspondientes registros PTR en la zona inversa.
  • Para poder hacer uso de Single Sing-On (SSO) se requiere que la máquina cliente esté unida al dominio y que esté habilitado Integrated Windows Authentication en Opciones de Internet / Opciones Avanzadas en Internet Explorer.
  • Cuando no sea posible utilizar Kerberos, se usa la autenticación básica en la que las credenciales viajan de forma insegura.
  • La sincronización de tiempo es vital para que el proceso de autenticación se realice correctamente.

Configuración DNS

El servidor proxy debe utilizar el servidor DNS de Samba.

cat /etc/resolv.conf

search foo.bar
nameserver 192.168.0.1

cat /etc/hosts

127.0.0.1      localhost
192.168.0.2    proxy.foo.bar      proxy

Comprobar la resolución del nombre de domino, FQDN y hostname por la IP estática.

ping -c4 foo.bar
ping -c4 dc.foo.bar
ping -c4 proxy.foo.bar
ping -c4 dc
ping -c4 proxy

host -t A dc.foo.bar
host -t A proxy.foo.bar
host -t PTR 192.168.0.1
host -t PTR 192.168.0.2

Sincronización de tiempo

Utilizar el cliente NTP de systemd.

timedatectl set-ntp true

Verificar el estado de la sincronización.

timedatectl status

cat /etc/systemd/timesyncd.conf

[Time]
NTP=ntp.foo.bar
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org

Instalacion de paquetes necesarios

apt install squid krb5-user msktutil

Configuración de Kerberos

cat /etc/krb5.conf

[libdefaults]
    default_realm = FOO.BAR
    dns_lookup_realm = false
    dns_lookup_kdc = true

Solicitar ticket de Kerberos para comprobar que funciona.

kinit administrator

Listar tickets de Kerberos en cache.

klist

Generar archivo keytab.

msktutil -c -b "CN=Computers" -s HTTP/proxy.foo.bar -h proxy.foo.bar -k /etc/krb5.keytab --computer-name PROXY --upn HTTP/proxy.foo.bar --server dc --verbose

Establecer los permisos del archivo keytab.

chown root:proxy /etc/krb5.keytab
chmod 640 /etc/krb5.keytab

Configuración de Squid

...

# Kerberos authentication
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -r -s GSS_C_NO_NAME
auth_param negotiate children 20 startup=0 idle=1
auth_param negotiate keep_alive off

# Basic authentication (fallback)
auth_param basic program /usr/lib/squid/basic_ldap_auth -R -b "DC=foo,DC=bar" -D squid@foo.bar -w password -f (|(userPrincipalName=%s)(sAMAccountName=%s)) -h dc.foo.bar
auth_param basic children 10
auth_param basic realm Proxy Squid
auth_param basic credentialsttl 1 minute

...

Referencias

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment