En este artículo nos vamos a centrar en algunas posibilidades que nos ofrece Squid para los controles de acceso y configuración personalizada de parámetros por grupos, entre ellas se encuentra el bloqueo de determinados sitios web y URLs, segmentación de configuraciones por rangos IP, ACLs, etc.
Por un lado, Squid ofrece determinados tipos de elementos ACL que utilizaremos para construir nuestras reglas de control de acceso, algunos de estos elementos son, por ejemplo: src, dst, srcdomain, dstdomain, proto, browser, etc. Luego, tenemos las Access Lists que se combinan con los elementos mencionados anteriormente, algunas de ellas son: http_access, url_rewrite_access, cache, log_access…
Ahora veremos algunos ejemplos, si quereéis profundizar y ver todas podéis echar un ojo a la documentación de Squid. Nosotros vamos directos a una serie de ejemplos para ver como construir ACLs. Todo se realiza dentro del archivo de configuración /etc/squid/squid.conf, en la parte final de archivo se especifica la sección en la que añadir nuestra configuración personalizada:
/etc/squid/squid.conf
# # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS #
Bloquear acceso a sitios web y URLs
Una de las opciones interesantes a la hora de configurar un Proxy Web a través del cual se ofrece salida a Internet a una determinada LAN es la capacidad de bloquear el acceso a ciertos sitios web. Con las ACL de Squid podemos especificar un listado de sitios web a bloquear a partir de una lista en un fichero de texto y si es necesario especificar un mensaje de error de acceso personalizado.
Con la siguiente configuración, denegamos el acceso a toda la LAN a los sitios web especificados en el archivo /etc/squid/urls-bloqueadas.txt, si os fijais bien usamos url_regex así que podemos usar expresiones regulares al especificar URLs en el archivo de texto (*.foo.com,www.b*.com, etc)
acl urls-bloqueadas url_regex "/etc/squid/urls-bloqueadas.txt" http_access deny urls-bloqueadas http_access allow all
La última línea es para especificar que tras todas las restricciones, el resto está permitido. Cuando un usuario que esté conectado al proxy intente acceder a una de esas URL recibirá un error de acceso denegado:
The following error was encountered while trying to retrieve the URL: http://facebook.com/
Access Denied.
Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.
Your cache administrator is root.
Y en el log de squid quedará registrado (realmente todo queda registrado) en el log de acceso:
/var/log/squid/access.log
1413298896.553 1 192.168.1.128 TCP_DENIED/403 3894 GET http://facebook.com/favicon.ico - NONE/- text/html 1413298896.614 1 192.168.1.128 TCP_DENIED/403 3926 GET http://facebook.com/favicon.ico - NONE/- text/html
Podemos personalizar el mensaje de error con la directiva «deny_info», se puede especificar directamente la URL a la página de error o a un archivo local, siempre especificando a que ACL queremos que se aplique (en este caso urls-bloqueadas):
acl urls-bloqueadas url_regex "/etc/squid/urls-bloqueadas.txt" deny_info http://miproxy.com/acceso-denegado.html urls-bloqueadas http_access deny urls-bloqueadas http_access allow all
Si especificamos un archivo local, debemos crear el archivo en la ruta «/usr/share/squid/errors/templates/» con el mismo nombre indicado en el fichero de configuración. En esa misma ruta tenéis todos las páginas de error por defecto:
/usr/share/squid/errors/templates/ERR_ACCESO_DENEGADO
acl urls-bloqueadas url_regex "/etc/squid/urls-bloqueadas.txt" deny_info ERR_ACCESO_DENEGADO urls-bloqueadas http_access deny urls-bloqueadas http_access allow all
Por supuesto estas páginas de error pueden contener código HTML.
Bloquear acceso a sitios porno, ilegales, maliciosos y de piratería
Si bien esta parte podría entrar en la sección anterior, le he dedicado un punto aparte para que sepáis que existe el website www.squidblacklist.org que cuenta con listados gratuitos de websites por categorías para establecerlos en nuestros filtros. Entre ellos, listas de sitios web porno, sitios web maliciosos, de piratería, web proxies, sites ilegales, etc.
Podemos usar esas listas directamente en nuestro Proxy Squid descargandola e invocandola con una ACL:
acl PornSites url_regex "/usr/local/squid/etc/pornlist" http_access deny PornSites
Permitir acceso a una URL sólo a una IP o segmento de red
Podemos necesitar que un sitio web o URL sea accesible sólamente desde determinadas IPs o segmentos de red. Lo podemos hacer con una ACL del siguiente modo:
acl vip_users src 192.168.1.0/25 acl vip_url url_regex ^http://www.miurl.com* http_access allow vip_users vip_url http_access deny special_url
ACLs basadas en MAC en lugar de IP
Si necesitamos establecer control de acceso en capa 2 a través de las MAC podemos hacerlo con la siguiente configuración
acl MAC1 arp A1:C2:E3:D4:c5:E6 acl MAC2 arp A1:C2:E3:D4:c2:E2 http_access allow MAC1 http_access deny MAC2
Permitir acceso por días u horas
Podemos especificar que ciertas IPs o segmentos de red tengan acceso a través del proxy únicamente en determinado momento, ya sean días u horas. Para ello creamos una ACL y con el valor «time» de ACL podemos especificar los días de la semana (MTWHF…) o el intervalo horario de acceso:
acl USUARIOS_SOLO_TARDES src 192.168.1.100 192.168.1.101 192.168.1.102 acl TARDES time MTWHF 16:00-20:00 http_access allow USUARIOS_SOLO_TARDES TARDES http_access deny USUARIOS_SOLO_TARDES
Estos son algunos ejemplo de lo que podemos hacer con Squid en relacion a control de acceso. Son bastante útiles cuando usamos el proxy como salida para una conexión común a Internet y queremos establecer distintas políticas de acceso y seguridad por usuarios. Existen muchas más opciones y granularidad a la hora de aplicarlas, si queréis investigar más lo dejo en vuestras manos.