domingo, 29 de abril de 2012

Proxy Squid con autenticacion en Active Directory


Configuraremos un servidor Proxy con Squid sobre OpenSUSE 11.0, las politicas de acceso hacia internet sera por grupos de usuarios cada grupo con diferentes privilegios, los usuarios se autenticaran contra un Windows Server 2003 con Active Directory.
Datos usados:
Dominio: angeles.com
Controlador de dominio: dc.angeles.com
el controlador de dominio (dc.angeles.com) tiene la ip 192.168.1.2
el proxy tiene la ip 192.168.1.9
Instalacion de paquetes necesarios:
yast2 -i 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 = ANGELES.COM
clockskew = 300
[realms]
ANGELES.COM = {
kdc = 192.168.1.2
default_domain = angeles.com
admin_server = 192.168.1.2
}
angeles.com = {
kdc = 192.168.1.2
default_domain = angeles.com
admin_server = 192.168.1.2
}
angeles = {
kdc = 192.168.1.2
default_domain = angeles
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]
.angeles = angeles
.angeles.com = ANGELES.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.angeles.com
#Nota: se entendera que en el dc.angeles.con esta corriendo el servicio ntp
Archivo smb.conf ubicado en /etc/samba/smb.conf
[global]
workgroup = angeles
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 = ANGELES.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.angeles.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 www.sunat.gob.pe y 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 angeles.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.angeles.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.angeles.com
proxy:~#ping dc.angeles.com
ping dc.angeles.com (192.168.1.2) …
Deberia resolver a la ip del controlador de dominio

No hay comentarios:

Publicar un comentario