Arquitectura de en:hora Arquitectura software EN-HORA en:hora es un software de control de acceso y presencia con una arquitectura modular. El software se implementa mediante un conjunto de componentes lógicos que permiten la adaptación a las necesidades del cliente, ofrecen una gran robustez y proporcionan un nivel alto de seguridad. Un simple diagrama de los componentes principales sigue: Escalabilidad en:hora se ha diseñado con una amplia gama de clientes en mente. Durante los años de experiencia adquirida por en:hora se han realizado instalaciones en PYME, empresas distribuidas geográficamente o grandes multinacionales. Con esta idea en mente se han escogido los componentes que nos permitan adaptarnos mejor a los requisitos de los posibles clientes. Se ha desarrollado la aplicación usando una plataforma Web llamada WAMP (o LAMP, en caso de usar Linux como sistema operativo) permitiendo un acceso fácil a los datos, un desarrollo del producto ágil y rápido y la posibilidad de satisfacer a organizaciones de diverso tamaño debido a su escalabilidad. La arquitectura WAMP (Windows o Linux Apache MySQL PHP) se usa en los sistemas web de diversas empresas con éxito destacable. Ajustando el hardware y los parámetros de configuración de los componentes de en:hora y del sistema
operativo se puede obtener un sistema capaz de atender miles de peticiones por segundo o bien adaptarse a sistemas con escaso uso. Su escalabilidad en:hora la debe a los dos componentes principales de la arquitectura que son Apache HTTPD Server y MySQL. Apache HTTPD Server es el servidor web que se usa en la versión estándar de en:hora y MySQL es la base de datos. Ambos programas son software abierto y cuentan con el apoyo de diversas empresas del sector como puede ser IBM, SUN, ORACLE, Microsoft, Google, Yahoo!, etc. 1 La principal estrategia de en:hora en cuanto a escalabilidad se refiere consiste en hacer un scale-out de sus componentes haciendo que la carga se divida entre más nodos permitiendo las cargas necesarias para sistemas de control de acceso y presencia con un altísimo nivel de transacciones por segundo. Seguridad Como se ha dicho en:hora tiene una arquitectura de componentes que proporciona un total aislamiento entre los componentes evitando que un fallo en uno de ellos se propague al resto permitiendo ganar acceso a componentes no relacionados con el afectado por el posible fallo de seguridad. en:hora tiene dos componentes públicos susceptibles a ataques remotos. Estos componentes son el servidor web Apache y el software desarrollado por en:hora que ofrece la interfaz del programa. En lo referente a Apache su seguridad es contrastada y ofrece plenas garantías gracias al soporte de la comunidad y a las empresas que le dan soporte. Las actualizaciones aparecen en la web del proyecto 1. Al ser en:hora un sistema componentizado es posible actualizar sólo el servidor apache sin que afecte a el resto de componentes. El otro componente susceptible de ataques es la propia aplicación desarrollada por el equipo de en:hora. Para maximizar la seguridad y agilizar el desarrollo al máximo se ha usado el framework de PHP Symfony 1. Este framework proporciona un conjunto de librerías y mecanismos que permiten al desarrollador abstraerse de las cuestiones relacionadas con la seguridad. El framework filtra todo el contenido que procede del exterior de la aplicación evitando XSS y otros posibles ataques remotos bastados en el protocolo HTTP, JSON, SOAP y los demás protocolos que se usan en la aplicación. A nivel de aplicación la seguridad se tiene en cuenta evitando el acceso no autorizado a datos o la manipulación de los mismos por personal no autorizado. En caso de ataques relacionados con la seguridad de la red dónde se encuentra instalado en:hora es posible encriptar toda la comunicación mediante SSL (Secure Sockets Layer) que es el mismo mecanismo que se usa en las transacciones electrónicas seguras usadas por los bancos o comercios seguros. Esta opción está disponible bajo petición del cliente. 1 http://www.apache.org/foundation/thanks.html, http://mysql.com/customers/ 2 http://httpd.apache.org/download.cgi 3 http://www.symfony-project.org/
En caso de ataques locales en:hora se apoya en la seguridad ofrecida por el sistema operativo. En caso de que el atacante tenga acceso local a la máquina el sistema operativo le debe impedir acceder a los ficheros de configuración o a los ficheros que contienen los datos del programa. La instalación estándar de en:hora usa un usuario administrador y restringe al máximo los privilegios de acceso a sus componentes. En:HORA incorpora mecanismos de recuperación en caso de pérdidas de datos para posibilitar el restablecimiento del sistema mediante las copias de seguridad periódicas que se realizan de todos los datos. En:HORA también ofrece un servicio de actualizaciones dónde se incluyen las últimas versiones de los software disponible corrigiendo errores de seguridad y de funcionalidad. Éste servicio notifica automáticamente al administrador permitiendo su pronta actualización. Robustez Todos los componentes usados por en:hora son de contrastada robustez. La reutilización de software durante el desarrollo de en:hora ha sido una de las premisas fundamentales. Siempre que se ha podido reutilizar se ha hecho. Hemos preferido usar componentes de fabricantes que se dedican a implementar ese componente antes que usar librerías o componentes proporcionados por fabricantes generalistas. Los componentes más sensibles a la poca robustez son el servidor web (Apache) y la base de datos (MySQL). Estos dos componentes gozan de una gran reputación en el sector como componentes muy robustos y estables. Lo demuestran el gran número de instalaciones de Apache HTTP Server 1 y la experiencia de los desarrolladores de en:hora trabajando con estos productos. Todos los componentes críticos del sistema se instalan en el mismo como servicios supervisados por el sistema. Tanto en Linux como en Windows éstos servicios están monitorizados y son reiniciados en caso de fallada o malfuncionamiento. En el apartado de acceso a la aplicación la arquitectura de en:hora permite disponer de redundancia de servicios para realizar un fail-over en caso de fallada de uno de sus componentes. En instalaciones donde la disponibilidad es uno de los requisitos ésta se consigue replicando nodos y cambiando a un nodo de reserva cuando el principal falla. Soporte en:hora se ofrece como un paquete de software integrado. Todos sus componentes están soportados por en:hora. Por tanto no se deja al cliente lidiar con el soporte individual de cada uno de sus componentes ofreciendo un soporte integral y coherente. 4 http://news.netcraft.com/archives/2009/06/17/june_2009_web_server_survey.html http://mysql.com/customers/
Cuando un cliente solicita una instalación de en:hora se hace un estudio sobre las dimensiones del proyecto y los requisitos del mismo. Mediante este estudio se estiman las necesidades del cliente y se recomienda un hardware mínimo y unos ajustes del sistema oportunos. Descripción de los componentes principales MySQL MySQL es la base de datos estándar de las aplicaciones de internet. Es uno de los proyectos de software libre más conocidos de la actualidad. Normalmente es usada en aplicaciones web o aplicaciones que requieren un acceso rápido a las bases de datos. Al disponer de librerías cliente nativas para PHP que funcionan en Linux y Windows goza de gran popularidad entre los desarrolladores que usan éste lenguaje para sus proyectos. MySQL actualmente es propiedad de ORACLE debido su reciente adquisición de SUN. Su modelo de negocio se basa en ofrecer servicios de soporte de MySQL a los clientes que lo requieren y compran las versiones Enterprise de MySQL. en:hora ofrece la versión estándar de MySQL ya que ésta dispone de todos los componentes necesarios para el funcionamiento de en:hora. Al iniciar el proyecto en:hora se realizó un estudio de las alternativas que ofrecía el mercado a nivel de base de datos descartando a las debido a que no ofrecían ninguna mejora respecto a lo que ofrece MySQL y en general encarecían el producto o bien a base de licencias o bien debido a costes de soporte o mantenimiento innecesarios. 1 Apache HTTPd Server Apache es el servidor web utilizado por en:hora. Este producto software es desarrollado por la fundación Apache que desarrolla diversos proyectos (como tomcat, Ant, Jakarta,Xerces,.. ) y entre ellos se encuentra el servidor HTTPd que es uno de los más usados en internet. 1 Esta fundación cuenta con el soporte de la mayoría de fabricantes de software importantes a nivel mundial. 1 Al ser un software multiplataforma ofrece soporte HTTP tanto en Linux como en MS Windows permitiendo a en:hora ofrecer la misma interfaz (desde el punto de vista de administración y configuración) al administrador de en:hora. Si bien la aplicación en:hora puede funcionar con IIS no es una opción recomendada. En lo referente a la seguridad de apache goza de una ventaja respecto IIS. IIS con frecuencia se ve afectado por fallos de seguridad relativos al sistema operativo en el que se ejecuta (Ms Windows). El hecho de que apache tenga muy limitada la relación con el sistema operativo en 5 http://swik.net/mysql/mysql+vs+ms+sql+server 6 http://news.netcraft.com/archives/2009/06/17/june_2009_web_server_survey.html 7 http://apache.org/foundation/thanks.html
el que se ejecuta (debido a su gran portabilidad) lo aísla de bastantes fallos relativos al mismo. En el resto de fallos hay un equipo de seguridad dedicado a elaborar parches que corrigen el error que proporciona el agujero a los atacantes y con la instalación de una nueva release del servidor HTTPd se soluciona. PHP / Symfony PHP es el lenguaje por excelencia de las aplicaciones web modernas. Su facilidad de uso permite a los desarrolladores implementar aplicaciones web con cierta facilidad. Si a este hecho le añadimos el uso del framework Symfony (elaborado por sensio Labs 1 ) tenemos una combinación que permite desarrollar aplicaciones web complejas en un tiempo razonable y consiguiendo niveles de seguridad y funcionalidad no asequibles usando sistemas de desarrollo convencionales. Con Symfony el proyecto software goza de una buena estructura, una orientación a objetos muy estricta y una componentización que favorece el mantenimiento y la seguridad del mismo. Como ejemplo en el framework se incluye una capa ORM (Doctrine 1 ) para la gestión de los datos. Mediante esta capa se evitan los ataques SQL injection y se establece un mecanismo estándar para el acceso a los datos. Al aislar el software de la base de datos y establecer una comunicación a través de un componente hace posible soportar más de un motor de base de datos permitiendo usar otro gestor de base de datos en caso de que fuera necesario con mínimo esfuerzo de programación y una batería de pruebas oportuna..net 3.5 El acceso a los drivers de los terminales biometricos que soporta en:hora se hace mediante un servicio de drivers desarrollado mediante Microsoft.net y WCF (Windows Communications Foundation). Éste mecanismo proporciona acceso único a las librerías de los fabricantes que normalmente ofrecen una interfaz dll. Al centralizar todo el acceso a los drivers en un único componente que ofrece una interfaz SOAP hacia el programa en:hora disponemos de una amplia capacidad para añadir nuevos dispositivos al software y facilita la escalabilidad mediante scale-out de este componente. 8 http://www.sensiolabs.com/en 9 http://www.doctrine-project.org/
Arquitectura de en:hora para centros de trabajo distribuidos Para centros de trabajo distribuidos pero gestionados desde una central la opción recomendada para el uso de en:hora es la siguiente. Se realiza una instalación del software en la central de la organización. Desde este punto se puede acceder a todos los datos de las diferentes delegaciones. En función del nivel de acceso del usuario se le permite el acceso a los datos oportunos. Por ejemplo un jefe de departamento de una delegación sólo vería los datos relativos a su delegación y su departamento. Los terminales se instalan en cada delegación según las necesidades y se les proporciona acceso a la LAN de la delegación. Para unir los terminales con la central se recomienda el establecimiento de conexiones VPN entre cada delegación y la central para garantizar la seguridad de los datos en tránsito. Si desde las delegaciones se quiere tener acceso a los datos que se encuentran en la central se debe hacer accesible el puerto HTTP (80) o HTTPS (443)del servidor de en:hora a las delegaciones. Este modo permite el acceso en tiempo real a los datos de la aplicación y requiere que el usuario disponga de una conexión hacia el servidor. Al ser una comunicación HTTP o HTTPS se permite una infraestructura de firewalls y proxies que protejan y aíslen a los servidores proporcionando un nivel de seguridad óptimo. Con el nivel de implantación de las tecnologías de comunicaciones ADSL, WiMAX, etc.. el acceso a internet por banda ancha se encuentra con una cobertura casi total. en:hora requiere un ancho de banda mínimo para funcionar. Con un uso normal en delegaciones de tamaño medio (10-15 empleados) con un ancho de banda de 1Mb/s de acceso es más que suficiente. Como desventaja de este sistema de acceso a los datos el acceso offline a los datos no es posible ya que siempre se necesita acceso al servidor de la central para poder disponer de los datos. En el roadmap de evolución de en:hora se encuentra la replicación en tiempo real y en desconexión de los datos de aplicación. Esta funcionalidad se desarrollará durante el 2010 debido a la complejidad técnica de implementación y a los requisitos de calidad y testing que conlleva.