Howto: Configurar SQUID con authenticación por SAMBA y restricciones por usuarios (Como un ISA proxy) en CentOS 5

En esta oportunidad voy a explicar como configurar a SQUID proxy para que se comporte como un ISA proxy, o sea, para que autentifique con usuarios que pertenecen a un dominio Windows y que pueda restringir a los sitios por usuario, ip, url, dominio, etc.
Para lograr esto vamos a necesitar tener un controlador de dominio configurado (SAMBA+LDAP) y tener los siguientes paquetes instalados:

  • SQUID: Es la aplicacion que vamos a usar como proxy web
  • Squidguard: Con este programa vamos a poder restringir por usuarios, ip, url, dominio, etc

Para este Howto voy a usar datos ficticios (ustedes utilicen los que tengan en su ambiente), los cuales paso a detallar:

  • Lan: 192.168.0.0/255.255.255.0
  • Hostname: pdc.example.com

NOTA: Les recomiendo que antes de editar un archivo de configuración, le hagan un backup:

#cp archivo.conf archivo.conf.backup

Ahora procedemos a instalar los paquetes que de las aplicaciones que necesitamos (vamos a necesitar tener el repositorio DAG, el vual se explica como configurarlo en el Howto de PDC):

#yum -y install squid
#yum -y install squidguard squidguard-blacklists --enablerepo=rpmforge

Una vez instalados los paquetes necesarios, procederemos a configurarlos. Primero vamos a configurar SQUID, para eso editamos al archivo /etc/squid/squid.conf de la siguiente manera:

# ----- Parametros generales de SQUID -----

http_port 3128

hierarchy_stoplist cgi-bin ?

acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY

acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

cache_mem 16 MB

access_log /var/log/squid/access.log

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320

http_reply_access allow all

icp_access allow all

visible_hostname pdc.example.com

coredump_dir /var/spool/squid

# ----- Estas lineas configuran a SQUID para autentificar atravez de SAMBA ----

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

# ----- ACLs -----

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 Safe_ports port 80 # http
acl Safe_ports port 21 # 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 CONNECT method CONNECT
acl ntlm proxy_auth REQUIRED # Habilitamos para que SQUID autentique con SAMBA

# ----- Reglas de acceso -----

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access allow ntlm

http_access allow localhost
http_access deny all

# ----- Habilitamos Squidguard -----

url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidguard.conf
url_rewrite_children 4

Ahora configuraremos Squidguard. Primero vamos a utilizar la configuración que nos da el paquete squidguard-blacklists, para eso vamos a hacer lo siguiente:

#cp -p /etc/squid/squidguard.conf /etc/squid/squid/squidguard.conf.bak
#cp -p /etc/squid/squidguard-blacklists.conf /etc/squid/squid/squidguard.conf

Ahora podemos configurar squidguard para que para que cubra nuestras necesidades. Voy a mostrarles uno a modo de ejemplo, siendo estas las necesidades:

  • Los usuarios edelberto e isabela solo tienen permiso para usar la pagina institucional (http://www.example.com) y los correos de Gmail y Hotmail
  • Los usuarios eustanacio y romalia tienen acceso limitado a lo que permiten las reglas del paquete squidguard-blacklists
  • El usuario libertino tiene acceso ilimitado
  • La computadoras de las cajas solo tienen acceso al dominio que administra el sistema (cajex.com)
  • Los usuarios restantes no tienen acceso a ningun sitio
  • Cuando un usuario sea restringido, se lo tiene que redireccionar a la siguiente direccion: http://pdc.example.com/acceso_restringido.html

Bueno, primero editamos el archivo /etc/squid/squidguard.conf de la siguiente manera (Recuerden que este se ajusta a la necesidades anteriormente descriptas, ustedes lo tienen que ajustar a las suyas):

# ----- Configuracion del path -----
dbhome /var/lib/squidguard
logdir /var/log/squidguard

# ----- Definicion de los grupos -----

src Usuarios_Generales {
user edelberto
user isabela
}
src Usuarios_Permitidos {
user eustanacio
user romalia
}
src Usuarios_Libre {
user libertino
}
src Area_Cajas {
ip 192.168.0.104
ip 192.168.0.105
}

# ----- Defincion de los destinos -----

dest Institucional {
urllist custom/instucional
}
dest Sistema_Cajas {
domainlist custom/sistema_cajas
}
dest Correo_Permitido {
domainlist custom/correos
}

### Generated blacklist definitions
### Group 'ads' containing entries for 'ads, publicite'
dest ads {
logfile ads.log
domainlist ads/domains
urllist ads/urls
expressionlist ads/expressions
}

### Group 'adult' containing entries for 'adult, porn'
dest adult {
logfile adult.log
domainlist adult/domains
urllist adult/urls
expressionlist adult/expressions
}

### Group 'aggressive' containing entries for 'aggressive, agressif'
dest aggressive {
logfile aggressive.log
domainlist aggressive/domains
urllist aggressive/urls
expressionlist aggressive/expressions
}

### Group 'audio-video' containing entries for 'audio-video'
dest audio-video {
logfile audio-video.log
domainlist audio-video/domains
urllist audio-video/urls
expressionlist audio-video/expressions
}

### Group 'drugs' containing entries for 'drugs, drogue'
dest drugs {
logfile drugs.log
domainlist drugs/domains
urllist drugs/urls
expressionlist drugs/expressions
}

### Group 'forums' containing entries for 'forums'
dest forums {
logfile forums.log
domainlist forums/domains
urllist forums/urls
expressionlist forums/expressions
}

### Group 'gambling' containing entries for 'gambling'
dest gambling {
logfile gambling.log
domainlist gambling/domains
urllist gambling/urls
expressionlist gambling/expressions
}

### Group 'hacking' containing entries for 'hacking'
dest hacking {
logfile hacking.log
domainlist hacking/domains
urllist hacking/urls
expressionlist hacking/expressions
}

### Group 'mail' containing entries for 'mail'
dest mail {
logfile mail.log
domainlist mail/domains
urllist mail/urls
expressionlist mail/expressions
}

### Group 'proxy' containing entries for 'proxy, redirector, strict_redirector'
dest proxy {
logfile proxy.log
domainlist proxy/domains
urllist proxy/urls
expressionlist proxy/expressions
}

### Group 'violence' containing entries for 'violence'
dest violence {
logfile violence.log
domainlist violence/domains
urllist violence/urls
expressionlist violence/expressions
}

### Group 'warez' containing entries for 'warez'
dest warez {
logfile warez.log
domainlist warez/domains
urllist warez/urls
expressionlist warez/expressions
}

### Define your local blacklists here
dest bad {
logfile localbad.log
domainlist local/bad/domains
urllist local/bad/urls
expressionlist local/bad/expressions
}
dest good {
domainlist local/good/domains
urllist local/good/urls
expressionlist local/good/expressions
}

### Definicion de las ACL
acl {
Usuarios_Generales {
pass Institucional none
redirect 302:http://pdc.example.com/acceso_restringido.html
}
Area_Cajas {
pass Sistema_Cajas Correo_Permitido none
redirect 302:http://pdc.example.com/acceso_restringido.html
}
Usuarios_Permitidos {
pass good !bad !adult !aggressive !audio-video !hacking !warez any
redirect 302:http://pdc.example.com/acceso_restringido.html
}
Usuarios_Libre {
pass any
}
default {
pass none
redirect 302:http://pdc.example.com/acceso_restringido.html
}
}

Listo, en la lineas resaltadas son los archivos a los cuales squidguard va a buscar las url o dominios que voy a permitir para ciertos usuarios. Estos archivos no existen, como tampoco la carpeta custom. Ahora los voy a crear con el contenido que se ajusta a las necesidades ficticias:

#mkdir /var/lib/squidguard/custom
#echo "http://www.example.com" > /var/lib/squidguard/custom/custom/instucional
#echo "cajex.com" > /var/lib/squidguard/custom/sistema_cajas
#echo -e "gmail.com\nhotmail.com" > /var/lib/squidguard/custom/correos
#chown -R squid:squid /var/lib/squidguard/custom

Por ultimo configuramos al servicio de SQUID para que inicialize cuando CentOS arranque e iniciamos el servicio:

#chkconfig squid on
#servive squid start

Vemos el log Squidguard para ver si todo esta funcionando (En la ultima linea tenemos que tener el mensaje squidGuard ready for requests)

#tail /var/log/squidguard/squidGuard.log

Nota: Si Squidguard esta mal configurado, no va a hacer ningun filtrado. El archivo del log muestra el error por el cual no puede iniciar. Si necesitan mas informacion de como editar el archivo /etc/squid/squidguard.conf consulten el la pagina de Squidguard.

Si todo salio bien vamos a tener un SQUID que autentica por SAMBA y filtra mediante Squidguard. Espero les haya servido el Howto. No duden en comunicarme cualquier duda o sugerencia. Saludos!

2 comentarios para “Howto: Configurar SQUID con authenticación por SAMBA y restricciones por usuarios (Como un ISA proxy) en CentOS 5”

  1. Juan - Colombia Dijo:

    Muchas Gracias amigo por tu colaboración. Me sirvió muchisimo.

    Saludos

  2. Juan, me alegro que te haya servido. Saludos!

Leave a Reply