WebSqusr: Control de Acceso con Squid

De Wiki do Ciclo ASIR do IES de Rodeira

Índice

Descripción do Proxecto

WebSqusr é un interface Web para o control do acceso a internet mediante o proxy Squid que ofrece as seguintes modalidades de control:

  • ACCESO DIARIO
    • Acceso mediante contrasinal indicando a hora de comenzo do acceso e a duración do mesmo.
    • Acceso a un aula determiñada indicando a hora de comenzo do acceso e a duración do mesmo.
  • ACCESO SEMANAL
    • Utilizando un cadro horario da aula e seleccionando as horas desexadas.
    • Indicando manualmente as horas da semana que se quere permitir o acceso para unha aula.

O acceso por contrasinal realízase mediante unha utilidade de autenticación que compara os usuarios e contrasinais facilitados cos contidos nun arquivo de texto plano. Para manipular este arquivo tamén se dispon dos scripts/programas axeitados.

O acceso planificado utiliza o comando at e a facilidade de reconfiguración en quente do squid (squid -k reconfigure) para modificar o ficheiro de configuración squid.conf e incluir os acls que permiten o acceso.

Os accesos semanais tamén modifican o arquivo squid.conf para incluir acls de acceso, pero ó ser accesos permanentes non precisan do at para activalos e desactivalos.

A maior dificultade técnica na implementación estivo no control do acceso simultáneo á modificación/recarga de squid.conf, o que precisou un control mediante bloqueos (locks). Por esta mesma razón non se aconsella a modificación deste arquivo salvo que a WebSqusr non esté funcionando ou se faga mediante as utilidades suministradas con esta aplicación.

Os requisitos hardware son mínimos, precisando únicamente un equipo capaz de executar GNU/Linux ou BSD* con Apache e PHP4.

En canto ó software, é necesario que o usuario/grupo correspondente ó servidor web (www-data en Debian) teña permiso para executar comandos planificados (at), para o que pode ser necesario modificar o ficheiro /etc/at.deny e/ou /etc/at.allow e que o PHP poda executar comandos externos situados fora do árbol web correspondente.

Para o desenvolvemento utilizouse un PC con GNU/Linux Debian Sarge, Apache 1.3, PHP4 e un editor de texto (maiormente vim e gedit).

Modo de Traballo

A instalación modificará o arquivo /etc/squid/squid.conf para incluir o autenticador de password (sqseg.c), e as acl definindo as aulas co seu nome e IP. Tamén inclúe liñas comentadas que habilitan o acceso para esas aulas.

Para poder traballar co interface é necesario que o usuario contrasinal estén dados de alta no arquivo de texto /etc/squid/security/.sqadmins, no formato usuario:password:[Nome completo]:[*]. Os usuarios que teñan o * ó final serán administradores do sistema e poderán cambiar a definición das aulas e outras características da aplicación (en futuras versións, hoxe en día non se usa). Tanto o * do final como o Nome completo son opcionais, pero os dous puntos son obrigatorios.

Cando se da de alta un acceso por password, se inclúe unha nova contrasinal no arquivo de usuarios/contrasinais etc/squid/security/.squsers (as parellas usuario/password presentes neste arquivo sempre terán acceso a internet, de modo que si se quere que alguén teña acceso permanente bastará con incluílo neste arquivo) e unha entrada indicando a planificación para o comando at en /etc/squid/security/.sqpass. O contrasinal se xenera automáticamente a partir do diccionario en /etc/squid/security/.diccionario.

O acceso por aula consiste en rexistrar a planificación para at en /etc/squid/security/.sqpass e quitar o comentario na acl que autoriza o acceso para o aula en /etc/squid/squid.conf. Cando a planificación remate se restaurará o comentario.

A planificación horaria non fai uso de at, se non que simplemente inclúe en /etc/squid/squid.conf o acceso desexado facendo uso das facilidades proporcionadas polo propio squid e rexistrando o mesmo en /etc/squid/security/.scheduler. Para mellor comodidade é posible crear horarios en /etc/squid/conf/horarios.conf coa seguinte sintaxe:

[Nome do Horario]
cor-hh:mm-hh:mm
cor-hh:mm-hh:mm
...
[Nome do Horario]
cor-hh:mm-hh:mm
cor-hh:mm-hh:mm
...

A cor, indica a cor da que se verá a liña na pantalla no momento de representar o horario, e pode omitirse si se quere saíndo nese caso co fondo negro. E posible definir tantos horarios como se queira.

Instalación

Esta aplicación foi testada únicamente en Debian Sarge e Debian etch. Leva funcionando sen maiores problemas dous anos baixo un servidor Debian Sarge e uns 120 clientes. Prégase que se avise dos fallos, e que se soliciten novas características

Requisitos e Dependencias

  • Calquer hardware capaz de executar Apache+PHP+Squid
  • GNU/Linux ou *BSD
  • at
  • lockfile-progs
  • Proxy Squid con configuración en /etc/squid
  • Servidor Web con PHP

Configuración

A configuración da aplicación realízase mediante os ficheiros conf/squsr.conf e conf/locations.conf. A partir da versión 2.0 se poden definir horarios para a planificación en conf/horarios.conf

En conf/squsr.conf poñeremos a información necesaria para xerar a entrada para o host virtual do Apache, o camiño para a instalación, o usuario inicial do sistema e a súa password e o que queremos que apareza na barra de título do navegador.

En conf/locations.conf esta a lista de Hosts/Redes que queremos poder controlar.

En conf/horarios.conf (a partir da versión 2.0) se poden definir os horarios para a planificación, como xa indicamos, do seguinte xeito:

[Nome do Horario]
cor-hh:mm-hh:mm
cor-hh:mm-hh:mm
...
[Nome do Horario]
cor-hh:mm-hh:mm
cor-hh:mm-hh:mm
...

A cor, indica a cor da que se verá a liña na pantalla no momento de representar o horario, e pode omitirse si se quere saíndo nese caso co fondo negro. E posible definir tantos horarios como se queira.

O ficheiro files/diccionario contén unha lista de palabras que se sortearán para xerar as passwords. O primeiro campo é o número de palabras no diccionario.

O Host Virtual para Apache non se inclúe automáticamente na instalación, é necesario engadilo manualmente.

Versión 1.0.1 Beta e posteriores

A instalación modificará o ficheiro /etc/squid/squid.conf, polo que se recomenda facer unha copia de seguridade antes de proceder á instalación.

Versión 1.0 Beta

A instalación modificará os ficheiros /etc/squid/squid.conf e /etc/init.d/squid, polo que se recomenda facer unha copia de seguridade antes de proceder á instalación. A modificación de /etc/init.d/squid consiste en engadir unha chamada a scripts/reset.sh para eliminar os accesos abertos en caso de un reinicio non axeitado da máquina.

Podes tamén editar o ficheiro header.html para persoalizar a cabeceira da páxina.

Configuración Xeral

Para configurar o sistema, basta con modificar de modo axeitado os ficheiros de configuración antes da instalación. Unha vez instalada a aplicación será posible engadir novos usuarios do sistema (editando /etc/squid/security/.sqadmins) ou poñer unha password para acceder a internet sen usar a interface (editando /etc/squid/security/.squsers).

Proporciónanse ademáis as seguintes utilidades en /etc/squid/security/scripts:

  • newuser : Permite engadir usuarios e contrasinais permanentes con acceso a internet.
  • rmuser  : Permite eliminar os usuarios/contrasinais engadidos con newuser.
  • squidlog: Permite examinar os logs do squid vendo a hora e data de acceso.
  • planifica : Permite planificar/eliminar planificación de horas de acceso para un aula determiñada (a partir da versión 2.0)

Por suposto pódense engadir e borrar usuarios permanentes editando o ficheiro .squsers cun editor de textos, sin utilizar newuser ou rmuser, pero pode producir problemas si alguén está a utilizar WebSqusr ó mesmo tempo. Do mesmo xeito recoméndase ter moito coidado cando se modifique a man /etc/squid/squid.conf recomendándose parar con anterioridade o servidor web e executar /etc/squid/security/scripts/reset.sh para pechar as sesións activas.

Idiomas

Para traducir o programa basta con facelo co ficheiro Language.php. Nesta versión non están soportados varios idiomas simultáneamente.

Cambio Dinámico da Configuración

É posible cambiar a configuración dos Hosts/Redes a controlar unha vez instalado o programa. Para facelo e necesario modificar o ficheiro /etc/squid/security/conf/locations.conf e posteriormente executar o script sh scripts/reconfigure.sh, dende a carpeta /etc/squid/security. Esto provocará un peche de todas as sesións abertas. Tamén e posible pechar dun golpe todas as sesións abertas co script sh scripts/reset.sh.

Instalación

Para empezar se descomprimirá a aplicación con tar -xvzf WebSqusr-x.x-x.tar.gz, o que creará un directorio WebSqusr no que nos situaremos.

Previamente a instalación é necesario compilar os programas que se atopan no directorio scripts/ mediante a orden make. Unha vez feito esto, e configurados os ficheiros situados no directorio conf/ procederase á instalación mediante sh scripts/install.sh dende o directorio WebSqusr.

Nesta versión do programa, a instalación debe facerse obrigatoriamente en /etc/squid/security.

Posteriormente é necesario configurar un servidor virtual (ou real) no servidor Web. Para elo pode ser necesario engadir ó DNS (ou a /etc/hosts) o nome do servidor virtual. Tamén é necesario que o usuario www-data (o servidor web, en Debian) teña permiso para executar comandos planificados (at), para o que pode ser necesario modificar o ficheiro /etc/at.deny ou /etc/at.allow.

A instalación mediante o paquete Debian, permite a configuración e reconfiguración da aplicación salvo a modificación da configuración do servidor web e os permisos de at.

Desinstalación

Para desinstalar a aplicación basta facer sh scripts/uninstall.sh dende /etc/squid/security.

Si a aplicación se instalou dende o paquete Debian, bastará con dpkg --purge websqusr dende calqueira lugar.

Administración do Sistema

Logs do Sistema

O sistema fai un rexistro das modificacións nos accesos e os erros de autenticación en /etc/squid/log.

Roles

Nun futuro se implementará o rol de Administrador poñendo un * no campo final do usuario no arquivo /etc/squid/security/.sqadmins. Este usuario poderá cambiar dinámicamente a configuración de aulas e IPs para engadir ou eliminar aulas, agregar e eliminar usuarios, etc.

Scripts e Utilidades

  • newuser : Permite engadir usuarios e contrasinais permanentes con acceso a internet.
  • rmuser  : Permite eliminar os usuarios/contrasinais engadidos con newuser.
  • squidlog: Permite examinar os logs do squid vendo a hora e data de acceso.
  • planifica : Permite planificar/eliminar planificación de horas de acceso para un aula determiñada (a partir da versión 2.0)

Administración

A administración do sistema ten que facerse de momento dende a liña de comandos traballando cos distintos arquivos de texto involucrados e os scripts de utilidade mencionados anteriormente. Na versión 2.0 é posible que cada usuario cambie a súa password dende o entorno do programa.

Lista de Cambios

Versión 2.1 Estable - Proximo lanzamento (Espero)

  • NOVIDADE: Dispoñibles paquetes Debian e rpm para Fedora 7/CentOS 5
  • NOVIDADE: Internacionalización. Idiomas dispoñibles galego, español e inglés.
  • NOVIDADE: GUI de configuración da aplicación baseado en GTK+

Versión 2.0.1 Beta - 16/05/2007

  • NOVIDADE: Engadido botón de 'Administrar' que permite que os usuarios podan cambia-la súa password
  • NOVIDADE: Dispoñible paquete Debian

Versión 2.0 Beta - 13/05/2007

  • Correxido Erro: Solución (penso que) definitiva ó erro de recarga de squid.conf
  • NOVIDADE: Engadida planificación de acceso por horario e manual
  • Solucionados alguns erros menores no código

Versión 1.2 Estable - 02/03/2007

  • Correxido Erro: Recarga do Squid mentras se está a modificar squid.conf
  • Correxido Erro: Procesamento da petición unha vez finalizado o tempo de sesión

Versión 1.1 Estable - 15/06/2006: (1 ano funcionando sin grandes problemas)

  • Correxido Erro: Recarga prematura de Squid antes de rematar a modificación de squid.conf

Versión 1.0.5 Beta - 12/01/2006

  • Correxido Erro: Creación de acceso con hora de remate anterior á de comenzo
  • Correxido Erro: Permanencia do acceso si a hora de remate coincide coa hora actual.

Versión 1.0.4 Beta - 01/12/2005

  • Correxido Erro: Agotamento do tempo ó iniciar sesión.

Versión 1.0.3 Beta - 22/11/2005

  • Correxido Erro: Visualización do autor dunha autorización errónea
  • Correxido Erro: Visualización incorrecta de autorizacións de outros administradores

Versión 1.0.2 Beta - 21/11/2005

  • Correxido Erro: Non funciona ben con máis de 9 Aulas.

Versión 1.0.1 Beta - 10/11/2005

  • Eliminada modificación de /etc/init.d/squid. Non é necesario xa que os traballos at se recargan ó arrancar

Versión 1.0 Beta - 04/11/2005

  • Versión Inicial

Actualización dende Versións Anteriores

Os ficheiros de configuración e dos accesos son compatibles entre versións, de xeito que basta con cambiar os ficheiros de programa polos novos (os que están en /etc/squid/security/WebSqusr e os de /etc/squid/security/scripts). Unha excepción é a versión 2.0.1, que inclúe un cambio no formato dos usuarios do sistema (.sqadmins). Agora o formato é Usuario:Password:Nome:*. O * do final indica que o usuario ten rol de administrador, aínda que polo momento o rol non se usa para nada. Si se quere facer o ficheiro existente compatible coa versión 2.0.1 bastará con engadir :: ó final de cada liña (Nome e rol valeiros).

Por Facer

  • Panel de Control: permitira redefinir/modificar aulas, horarios, usuarios/passwords...
  • /etc/init.d/websqusr start/stop (diff/patch)
  • Incluir nos usuarios o Rol de Administrador, con acceso o panel de control.
  • Filtro de Contidos por Usuario/Planificación
  • Mellorar a documentación do programa
  • Integrar instalación co Makefile (make install)
  • Paquete .deb e Instalador Web
  • Posiblemente interacción con iptables para mellorar o control da rede interna
  • Mellorar a documentación desta wiki
  • Dispoñer de traducción ó inglés e español do manual e do programa
  • Control de contidos mediante squidguard

Erros Coñecidos

  • Erro cando finaliza a sesión por finalizar o tempo. Se procesa a petición de todos os xeitos. (Solucionado en 1.2 Estable)
  • Continuan problemas ocasionais na recarga de squid.conf. Para poder arrancar o proxy neste caso é necesrio eliminar o arquivo /var/spool/squid/swap.state, xa que queda con permisos erróneos. (Solucionado en 2.1 Estable).
  • Problemas ocasionais na recarga de squid.conf que fan que se recargue antes de completar a modificación provocando a caída do proxy (Solucionado en 1.1 Estable).
  • Posibilidade de que quede o acceso si a hora actual e xusto a de remate do acceso (Solucionado en 1.0.5 Beta).
  • Posibilidade de grabar un acceso con hora de remate anterior á hora de comenzo (Solucionado en 1.0.5 Beta).

Descarga e Código Fonte

Podes descargar a aplicación no repositorio do IES de Rodeira. Neste repositorio poderás dar de alta incidencias e erros e solicitar novas características.

Pantallas de Mostra

Ficheiro:WebSqusr main.png
Pantalla de Acceso
Ficheiro:PlanifManual.png
Planificación Manual (v 2.0)
Ficheiro:PlanifHorario.png
Planificación Horaria (v 2.0)