Squid con autenticacion en Active Directory

Configuraremos un servidor Proxy con Squid. Las politicas de acceso hacia internet será por grupos de usuarios -cada grupo con diferentes privilegios-, los usuarios se autenticarán contra un Windows Server 2003 con Active Directory.

Datos usados:

Dominio: endebian.com
Controlador de dominio: dc.endebian.com

el controlador de dominio (dc.endebian.com) tiene la ip 192.168.1.2
el proxy tiene la ip 192.168.1.9

Instalacion de paquetes necesarios:

apt-get install samba samba-winbind squid

Con esto tenemos las herramientas necesarias, ahora empezamos a configurar

Archivo krb5.conf ubicado en /etc/krb5.conf

[libdefaults]
default_realm = ENDEBIAN.COM
clockskew = 300
[realms]
ENDEBIAN.COM = {
kdc = 192.168.1.2
default_domain = endebian.com
admin_server = 192.168.1.2
}
endebian.com = {
kdc = 192.168.1.2
default_domain = endebian.com
admin_server = 192.168.1.2
}
endebian = {
kdc = 192.168.1.2
default_domain = endebian
admin_server = 192.168.1.2
}
[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = SYSLOG:NOTICE:DAEMON
[domain_realm]
.endebian = endebian
.endebian.com = ENDEBIAN.COM
[appdefaults]
pam = {
ticket_lifetime = 1d
renew_lifetime = 1d
forwardable = true
proxiable = false
retain_after_close = false
minimum_uid = 0
try_first_pass = true
}

Archivo nsswitch.conf ubicado en /etc/nsswitch.conf

passwd: compat winbind
group: compat winbind

hosts: files dns
networks: files dns

services: files
protocols: files
rpc: files
ethers: files
netmasks: files
netgroup: files nis
publickey: files

bootparams: files
automount: files nis
aliases: files

Archivo ntp.conf ubicado en /etc/ntp.conf

driftfile /var/lib/ntp/drift/ntp.drift
logfile /var/log/ntp
server dc.endebian.com

#Nota: se entendera que en el dc.endebian.con esta corriendo el servicio ntp

Archivo smb.conf ubicado en /etc/samba/smb.conf

[global]
workgroup = endebian
security = ads
password server = *
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users =yes
winbind enum groups = yes
winbind use default domain = yes
realm = ENDEBIAN.COM
netbios name = proxy
server string = proxy

#Nota: proxy es el hostname del servidor Proxy

iniciamos los servicios smb y winbind

proxy:~#rcntp start
proxy:~#rcsmb start
proxy:~#rcwinbind start

Ahora si todo ha salido bien, es decir todos los servicios smb y winbind estan corriedo, uniremos la maquina al controlador de dominio.  Iniciar los servicios en ese orden.

proxy:~#net ads join -S dc.endebian.com -U Administrador
password:

Ingresamos la constraseña y listo, ahora vamos a comprobar, para ello ejecutamos
proxy:~#wbinfo -t

Para listar a los usuarios y grupos del dominio
proxy:~#wbinfo -u
proxy:~#wbinfo -g

Si nos ha listado los usuarios y grupos, quiere decir que todo esta correcto

Ahora editamos el archivo squid.conf ubicado en /etc/squid/squid.conf

#Configuraremos unas reglas simples, crearemos 3 grupos, cada grupo con privilegios diferentes, el primero tendra acceso total el segundo tendra algunas restricciones como el msn y el tercer grupo solo podra acceder a ciertas paginas, para el ejemplo le daremos acceso solo a http://www.sunat.gob.pe y http://www.mtc.gob.pe

http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache_dir ufs /var/cache/squid 500 16 256
cache_access_log /var/log/squid/access.log
cache_mem 64 MB
cache_swap_low 70
cache_swap_high 85
# parametros que nos permitiran autentcar contra el Active Directory
auth_param ntlm program /usr/bin/ntlm_auth –helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 20
auth_param basic program /usr/bin/ntlm_auth –helper-protocol=squid-2.5-ntlmssp
auth_param basic children 15
auth_param basic realm endebian.com
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
#—–
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl rednueva src 172.16.0.0/16
acl SSL_ports port 81 443 563 8080 8040
acl Safe_ports port 80 81 443 8080 # http
acl Safe_ports port 20 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl msn1 url_regex -i gateway.dll
acl msn2 dstdomain messenger.msn.com gateway.messenger.hotmail.com
acl msn3 req_mime_type ^application/x-msn-messenger$
acl grupo1 proxy_auth “/etc/squid/reglas/grupo1.txt”
acl grupo2 proxy_auth “/etc/squid/reglas/grupo2.txt”
acl grupo3 proxy_auth “/etc/squid/reglas/grupo3.txt”
acl domgrupo3 dstdomain .sunat.gob.pe .mtc.gob.pe
no_cache deny QUERY

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow grupo1
http_access deny msn1 !grupo1
http_access deny msn2 !grupo1
http_access deny msn3 !grupo1
http_access allow grupo2
http_access allow grupo3 domgrupo3
http_access deny all
http_reply_access allow all
icp_access allow all
visible_hostname proxy.endebian.com
coredump_dir /var/cache/squid

Inciamos el servicio y listo

proxy:~#rcsquid start

Nota: en el archivo winbindd_privileged el usuario propietario debera ser squid, para ello hacemos lo siguiente, ojo no hacerlo de manera recursiva

proxy:~#chown squid winbindd_privileged

Ahora solo nos queda probar desde una maquina guindos que este en el dominio, el usuario podra acceder a internet de acuerdo a los privilegios del grupo en que se encuentra. cuando trate de acceder a internet ya no le pedira que se autentique, el proxy usara los datos de la sesion.

Nota1: Tener cuidado si se copia y pega la parte de “–helper-protocol=squid-2.5-ntlmssp” en el putty directo, sale con un punto adelante  “.helper-protocol=squid-2.5-ntlmssp” en lugar de dos guiones – –

Nota2: tener cuidado con los DNS’s

se puede probar haciendole un ping a dc.endebian.com
proxy:~#ping dc.endebian.com
ping dc.endebian.com (192.168.1.2) …

Deberia resolver a la ip del controlador de dominio

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s