domingo, 2 de marzo de 2014

Autenticando Squid en Active Directory



Requerimientos: Squid >= 2.5 (con LDAP helpers)

Versión de Squid utilizada:


root@squid-testing:~# squid -v
Squid Cache: Version 2.7.STABLE9


LDAP Helpers (ldap_auth y squid_ldap_group):


root@squid-testing:~# locate ldap_auth
/usr/lib/squid/ldap_auth
/usr/share/doc/squid/README.auth_module.ldap_auth.gz

root@squid-testing:~# locate squid_ldap_group
/usr/lib/squid/squid_ldap_group
/usr/share/man/man8/squid_ldap_group.8.gz


Antes de modificar la configuración del squid testeamos por la línea de comandos:


/usr/lib/squid/ldap_auth -R -D usuario@mi.dominio.net -w 'password_de_usuario' -b "dc=mi,dc=dominio,dc=net" -f "sAMAccountName=%s" -h ip_del_AD


Ejemplo:

root@squid-testing:~# /usr/lib/squid/ldap_auth -R -D morsa@redes.seguridad.net -w 'Mi-P2ssbuor' -b "dc=global,dc=company,dc=domain" -f "sAMAccountName=%s" -h 192.168.0.1


Luego de ejecutar el comando previo, queda esperando que ingresemos usuario y password separado por un espacio, en mi caso:

morsa Mi-P2ssbuor
OK

Si obtenemos OK es que la autenticación funciona correctamente.


Editamos la configuración del Squid:

root@squid-testing:~# vi /etc/squid/squid.conf

Reemplazamos el auth_param basic program por el comando ejecutado anteriormente y unos parametros más como el realm y las TTLs de las credenciales:

auth_param basic program  /usr/lib/squid/ldap_auth -R -D morsa@redes.seguridad.net -w 'Mi-P2ssbuor' -b "dc=redes,dc=seguridad,dc=net" -f "sAMAccountName=%s" -h 192.168.0.1
auth_param basic children 5
auth_param basic realm Tupperware
auth_param basic credentialsttl 5 minutes

La siguiente acl nos permite el que al abrir el explorardor nos pida credenciales:

acl password proxy_auth REQUIRED

Agregamos una lista de acceso externa llamada GrupoInternet utilizando squid_ldap_group:

external_acl_type GrupoInternet %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=redes,dc=seguridad,dc=net" -D morsa@redes.seguridad.net -w Mi-P2ssbuor -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=Groups,ou=Contenedor1,ou=Contenedor2,dc=redes,dc=seguridad,dc=net))" -h 192.168.0.1

Agregamos otra lista de acceso llamada Internet utilizando la previa acl (GrupoInternet) y utilizará un grupo en Active Directory llamado GrupoSquidAD donde este grupo estará dentro del contenedor (ou=Groups,ou=Contenedor1,ou=Contenedor2,dc=redes,dc=seguridad,dc=net):

acl Internet external GrupoInternet GrupoSquidAD

Permitimos acceso a la acl previa con el siguiente linea:


http_access allow Internet 


Reiniciamos el squid:

root@squid-testing:~# /etc/init.d/squid start
Starting Squid HTTP proxy: squid.
root@squid-testing:~# !ps
ps -efa | grep squid
root      3901     1  0 20:14 ?        00:00:00 /usr/sbin/squid -D -YC
proxy     3906  3901 99 20:14 ?        00:00:02 (squid) -D -YC
root      3932 31579  0 20:14 pts/2    00:00:00 grep squid
root@squid-testing:~#


IMPORTANTE: Recordar agregar los usuarios que queremos permitir el acceso a internet deben estar dentro del grupo GrupoSquidAD del Active Directory.


También les dejo una configuración completa del squid para que quede más claro:

root@squid-testing:~# cat /etc/squid/squid.conf
##############################################################        Auth
#############################################################
auth_param basic program /usr/lib/squid/ldap_auth -R -D morsa@redes.seguridad.net -w 'Mi-P2ssbuor -b "dc=redes,dc=seguridad,dc=net" -f "sAMAccountName=%s" -h 192.168.0.1
auth_param basic children 5
auth_param basic realm Redes.Seguridad
auth_param basic credentialsttl 5 minutes

##############################################################       ACL's
#############################################################
acl http proto http

acl port_80 port 80
acl port_443 port 443
acl SSL_ports port 443          # https
acl SSL_ports port 563          # snews
acl SSL_ports port 873          # rsync
acl Safe_ports port 80          # http
acl Safe_ports port 21 20       # ftp
acl Safe_ports port 443         # https
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 Safe_ports port 631         # cups
acl Safe_ports port 873         # rsync
acl Safe_ports port 901         # SWAT
acl purge method PURGE
acl CONNECT method CONNECT

acl all src all

#Agregado por morsa para bloqueo de youtube
acl no_domains dstdomain "/etc/squid/sitios_denegados.txt"

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32

acl password proxy_auth REQUIRED

external_acl_type GrupoInternet %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=redes,dc=seguridad,dc=net" -D morsa@redes.seguridad.net -w Mi-P2ssbuor -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=groups,ou=Contenedor1,ou=Contenedor2,dc=redes,dc=seguridad,dc=net))" -h 192.168.0.1

acl Internet external GrupoInternet ARG1-InternetSquid

##############################################################ACCESOS
#############################################################
http_access deny no_domains

http_access allow Internet
http_access allow password

http_access deny all

http_access allow manager localhost
http_access deny manager

http_access allow purge localhost
http_access deny purge

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localhost

http_access deny all

icp_access deny all

http_port 3128

hierarchy_stoplist cgi-bin ?

cache_mem 100 MB

cache_dir aufs /var/spool/squid 20000 16 256

maximum_object_size 4096 KB

cache_swap_low 95
cache_swap_high 100

access_log /var/log/squid/access.log squid

cache_log /var/log/squid/cache.log

pid_filename /var/run/squid.pid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$       0       20%     2880
refresh_pattern .               0       20%     4320

acl permitidos src "/etc/squid/permitidos"
http_access allow permitidos

acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast

acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

extension_methods REPORT MERGE MKACTIVITY CHECKOUT

cache_effective_user proxy

cache_effective_group proxy

visible_hostname squid-testing

icon_directory /usr/share/squid/icons

error_directory /usr/share/squid/errors/es-ar

hosts_file /etc/hosts

coredump_dir /var/spool/squid
root@squid-testing:~#

Autenticando OpenFire en Active Directory

En esta otra vieja entrada se explicó como instalar OpenFire: http://www.redes-seguridad.com.ar/2012/03/openfire-debian-squeeze.html, ahora se mostrará la configuración para que autentique en AD.

Luego de Instalarlo accedemos a la página de administración: http://openfire-server:9090/

Configuramos el Idioma:


Especificamos el nombre del servidor para ser accedido y los puertos:



Seleccionamos "Base de datos interna":



Especificamos la opción LDAP:



Seleccionamos tipo de servidor "Active Directory", la ip del servidor, el puerto, la DN Base, usuario y contraseña:



Indicamos el campo de usuario, el filtro en campo de búsqueda y el campo de la foto del avatar:



El mapeo del grupo:



Finalmente agregamos los usuarios que deseamos que administren la aplicación: