sábado, 31 de mayo de 2014

Aplicación móvil utilizando Google App Engine como fuente de información: Open Cloud Calendar

Trabajo realizado por: Israel Blancas y José Cristóbal López

Google App Engine es la propuesta de alojamiento web que ofrece Google. Es un servicio PaS (Plataforma como Servicio). Sobre el mismo, hemos procedido a desarrollar una aplicación llamada Open Cloud Calendar.

Tras un estudio preliminar sobre las características que ofrece GAE, decidimos utilizar Python como lenguaje de programación y Google App Engine Datastore como base de datos.

Esta aplicación permite crear y publicar una lista de eventos que vayan a tener lugar en el futuro (esto podría ser útil, por ejemplo, en el caso de un congreso o la agenda cultural de un ayuntamiento). Una vez que el evento ha pasado, se borra.
Por otra parte, para permitir a cualquier sistema operativo móvil poder tener una aplicación para consultar los datos que se encuentran alojados en App Engine, se crea un fichero XML con las convocatorias existentes (en el caso de la aplicación Android que hemos desarrollado, el programa toma la URL del XML, lo lee y guarda las convocatorias en distintas estructuras de datos para poder mostrarlas, mediante una interfaz, al usuario).

Ayudándonos de las distintas herramientas de las que nos provee Google (la utilidad cron, el framework webapp2, Google Engine Datastore...) hemos ido consiguiendo los objetivos mínimos de esta aplicación.

Por último, explicamos brevemente una técnica utilizada por algunos usuarios de Google App Engine para sacar más partido a las cuentas gratuítas.

viernes, 30 de mayo de 2014

Redundant Array of Independent Disks (RAID)

Trabajo realizado por: Marcos Jiménez Fernández, Alberto Mesa Navarro y Jesús Navarro Guzmán

En este trabajo se tratan varios temas relacionados con los RAIDs. En primer lugar se situa en un contexto histórico el concepto de RAID y los motivos por los que fue creado, junto con la fecha de creación de los primeros RAIDs.

A continuación se analiza el posible uso que puede tener un RAID, como puede ser para temas de capacidad, seguridad o rendimiento. También se introduce el concepto de paridad, que es un elemento importante a la hora de evitar pérdidas de datos.

También se explican los diferentes tipos de RAIDs junto con sus principales características, así como las principales ventajas e inconvenientes de su uso. En definitiva, podemos agrupar los RAIDs en 3 grandes grupos: Puros, anidados y propietarios. También se ha aportado una tabla que resume las características de cada RAID.

Para finalizar se presentan las arquitecturas RAID y cómo con ellas se pueden adoptar diferentes soluciones. Éstas pueden ser software, híbridas y hardware. Al igual que en anteriores secciones, se ha comentado brevemente las características de cada solución y se han aportado ejemplos.

miércoles, 28 de mayo de 2014

Granjas Web: Windows Server 2008

Trabajo realizado por: Miguel Fabre Navarro y Francisco Porcel Sendrós

En este trabajo se ha realizado la instalación y configuración de una granja web con el sistema operativo Windows Server 2008 r2.

Para ello se ha creado una máquina virtual que se encarga del balanceo de la granja y otras dos máquinas que sirven las páginas web (más detalles en el trabajo y en la presentación).

En la presentación se detallaron los posibles algoritmos de balanceo de carga que nos ofrece Windows Server. Por último, se mostraron los resultados de aplicar tests con Apache Benchmark a la granja, configurando el balanceador con diferentes algoritmos para intentar vislumbrar cuál es más óptimo.

sábado, 24 de mayo de 2014

Seguridad en nuestro servidor

Trabajo realizado por: Pablo Martín-Moreno Ruiz.

En este trabajo se presentaron diversos temas relativos a la seguridad del sistema informático.

1ª Sección. Amenazas de seguridad.
En esta sección se desarrollan las principales amenazas de seguridad y los peligros asociados a esos requisitos. También nos habla de los distintos componentes de los sistemas de información y los peligros asociados a cada componente.

2ª Sección. Protección.
Se exponen las diferentes maneras de proteger los ficheros. Además se explica la importancia de las cuentas de usuario y que gracias a ellas se pueden proteger los datos y cómo hacerlo.

3ª Sección. Intrusos.
Se explican los diferentes tipos de intrusos que existen y sus técnicas de intrusión. Cómo obtienen las claves de las cuentas de usuario, cómo proteger esas cuentas, y técnicas para detectar a los intrusos que hay en el sistema.

4ª Sección. Virus.
Desarrolla los diferentes tipos de virus, sus fases y cómo trabaja un antivirus.

5ª Sección. Sistemas confiables.
Detalla qué son los sistemas confiables y su utilidad.

miércoles, 21 de mayo de 2014

iptables

Trabajo realizado por: Rafael Lachica Garrido

En este trabajo se presenta en detalle la herramienta iptables (el cortafuegos por excelencia de Linux) y como caso práctico, se ofrece la lista de reglas para asegurar un servidor.

El trabajo consta de las siguientes secciones:
1. Introducción
2. Comandos Reglas Básicas
3. Tablas
4. Usos Iptables
5. Redireccionamiento
6. Log y Registro

Primero se presenta y define iptables como una herramienta de cortafuegos que permite filtrar paquetes, además de traducciones de red NAT o mantener registros de log. Fue creado en el 1998 por Rusty Rusell.

A continuación, se muestran las reglas básicas (3 principalmente, OUPTUT, INPUT, ACCEPT) así como las políticas por defecto (denegar todo o aceptar todo).

Posteriormente se detallan las tablas internas: la principal, Filter Table, es la que tiene las cadenas LOCAL_INPUT, OUTPUT, FORWARD,PREROUTING y POSTROUTING.
Además hay destinos que se deben cumplir al final de estas reglas, para lo que se utiliza accept, drop, reject, snat, dnat, log, ulog, masquerade, etc.

Por último, se presentan casos prácticos de configuraciones que se pueden hacer con iptables:
  • Bloquear un puerto de entrada (22 ssh), bloquer IP, bloquear por Mac, bloquear salida hacia una web (twitter,facebook,marca), restringir las conexiones en paralelo con conlimit y ataques PING.
  • Enrutar o redirigir el trafico de paquetes: Prerouting lo redirecciona a la entrada y postrouting a la salida. Se ha mostrado un ejemplo del uso de prerouting y de enmascaramiento de la IP del balanceador con masquerade.
  • Gestión de los logs: se ha mostrado cómo llevar un registro de los sucesos que ocurren en nuestro servidor.

DNS DINÁMICO: Montaje de servidor con No-IP

Trabajo realizado por: Juan Francisco Rodríguez Vílchez y Julio Martínez Martínez-Checa

En este trabajo se ha presentado un servicio que toma la IP dinámica que normalmente tenemos asignada (y que cambia cada poco tiempo) y hace que aparezca como IP fija, de forma que podemos acceder a nuestro servidor aunque su IP no sea fija realmente.

En la primera parte se detalla cómo adquirir un nombre de dominio y los precios de diferentes servicios. A continuación se comenta cómo adquirir una IP pública estática así como precios orientativos.

A continuación se ha mostrado cómo configurar no-ip para disponer de un servidor sin depender de IP fija y gratis. Se ha introducido el concepto de DNS dinámico y cómo adquirirlo. Seguidamente, se han mostrado tres de los DDNS más conocidos y una tabla comparativa entre ellos.

Finalmente, se ha detallado la configuración con No-IP que ha sido el DNS elegido para implementar el servidor y se ha hecho una demo de cómo ha quedado finalmente el servidor con NO-IP correctamente instalado y configurado y con el CMS "OwnCloud".

martes, 20 de mayo de 2014

Final del tema 8 de teoría y comienzo de las presentaciones de trabajos

Esta semana hemos terminado el tema 8 de teoría, en el que hemos estudiado las necesidades de hardware y software de los servidores web de altas prestaciones.

Hemos visto que dimensionar un servidor no es tarea fácil. No hay reglas "fiables" que nos puedan ayudar a determinar las necesidades en cuanto a hardware y software. Sólo podemos hacer una primera estimación y luego aplicar carga y monitorizar todo el tiempo de vida del sistema para comprobar si la configuración es adecuada o hay que modificarla.

Para terminar la teoría, hemos estudiado diferentes productos comerciales de varios fabricantes/desarrolladores (HP, IBM, Dell) así como los desarrollos de Facebook y Google.

Una vez terminada la teoría, hemos comenzado las presentaciones de los trabajos que los alumnos han desarrollado a lo largo del cuatrimestre. En próximas entradas de este blog publicaremos resúmenes de cada trabajo presentado.

martes, 6 de mayo de 2014

Resumen del Tema 7: Almacenamiento de datos

1. Introducción
2. Tecnologías hardware para BD
3. Tecnología RAID
4. SSA
5. SAN
6. NAS
7. Conclusiones
El sistema de almacenamiento de datos resulta clave en un sistema web de altas prestaciones, ya que es la parte del sistema donde se guarda la información, ya sea en una BD o en archivos.

Todo usuario que llegue al sistema accederá a los datos almacenados, y debemos estar preparados para servir datos a un número creciente de usuarios.

El sistema de almacenamiento y de BD es un punto fundamental en cualquier sistema web actual. Una mala configuración afectará a las prestaciones. Así pues, debemos tener en cuenta los siguientes factores al diseñar la arquitectura de BD:
  • El número de sesiones concurrentes en la BD puede afectar al rendimiento de la granja web completa (conexiones costosas).
  • El tipo de accesos a la BD también influye.
  • Una gran cantidad de accesos a la BD por cada petición HTTP puede sobrecargar la conexión de red entre los servidores web y de BD.
  • Las búsquedas que devuelvan resultados muy grandes afectarán al rendimiento de CPU, almacenamiento y red.
  • El tamaño total de la BD determinará el espacio para almacenamiento, y el tiempo necesario para hacer copias de seguridad y restaurarlas.
  • Conviene utilizar hardware redundante para los servidores.
  • Arquitectura de la BD basada en un cluster.
  • Una BD se podrá escalar en el futuro si desde el principio se instaló hardware con capacidad de ampliación (CPU, memoria, etc) y se configuró el software de forma adecuada.
Una tecnología fundamental hoy día para construir sistemas de almacenamiento de altas prestaciones es el RAID.
RAID (conjunto redundante de discos independientes) es un sistema de almacenamiento que usa múltiples discos duros entre los que se distribuyen o replican los datos. Es un sistema que ofrece mayor integridad, mayor tolerancia a fallos, mayor rendimiento y mayor capacidad. La idea inicial es combinar varios dispositivos en un conjunto que ofrece mayor capacidad, fiabilidad y velocidad que un solo dispositivo de última generación más caro.

Hay diversos métodos de almacenamiento, llamados niveles, con diferente complejidad:
  • RAID 0: Conjunto dividido
  • RAID 1: Conjunto en espejo
  • RAID 5: Conjunto dividido con paridad distribuida
Por último, hemos visto tres tipos de dispositivo para organizar el almacenamiento en sistemas de altas prestaciones:
  • Arrays de almacenamiento compartido (SSA)
  • Área de almacenamiento en red (SAN)
  • Almacenamiento conectado a la red (NAS)

Como tarea de clase hemos propuesto la Práctica 6 (opcional, ver el guión el el swad.ugr.es).

Se trata de instalar una máquina virtual con Ubuntu Server. Una vez instalada, añadiremos dos discos virtuales de la misma capacidad.

Hay que configurar ambos discos como un “RAID 1” usando la herramienta mdadm, simular un fallo de disco y comprobar que aún se puede acceder a la información. Documenta el proceso (archivos de configuración, órdenes en línea de comandos, etc.).

Como ayuda, ofrecemos los siguientes tutoriales:

Instalación Ubuntu server con RAID1
http://www.youtube.com/watch?v=DS4uKJ9pfnk

Instalación ubuntu server 12.04 LTS precise pangoline con RAID 1 software
http://www.youtube.com/watch?v=y17EfNs0TBc

Como crear un RAID 1 en Windows
http://www.youtube.com/watch?v=g5I-1IXgwRo

Raid 1 - Sincronización espejo en Windows Server 2008
http://www.youtube.com/watch?v=k92yKphhKYE

viernes, 2 de mayo de 2014

Resumen del Tema 6: Asegurar el sistema web

El éxito de un sitio web depende de la seguridad. Es un aspecto crítico en un sistema web para mantener a salvo de ataques los recursos de la empresa y resulta fundamental para proteger los datos que almacenamos.


Los objetivos de seguridad deben definirse correctamente y se basan en los siguientes conceptos:
  • Confidencialidad: las comunicaciones deben ser secretas.
  • Integridad: los mensajes enviados deben ser exactamente los recibidos.
  • Disponibilidad: la comunicación con cualquier aplicación o servicio de la granja web debe estar disponible en el momento en que sea requerida.
En este tema hemos estudiado:
  • El concepto de defensa en profundidad (diferentes capas de defensa).
  • Establecer políticas de seguridad, incluyendo claves seguras, para todas las cuentas.
  • Asegurar un servidor mediante la eliminación de servicios innecesarios y vulnerabilidades.
  • Usar un cortafuegos: comprender el funcionamiento de los cortafuegos y los beneficios de estos.
Hay que establecer unas políticas de seguridad, y mantenerse al día de vulnerabilidades del software, de posibles ataques, de actualizaciones de software, etc.  En este sentido, visitar y estar al tanto de los temas que se proponen en sitios como http://www.securitybydefault.com/ (muy recomendable, por cierto) es de suma importancia.

La defensa en profundidad implica mantener diferentes capas de seguridad, independientes entre ellas, de forma que si un atacante consigue pasar una, tendrá otra que superar. Así se dificulta en gran medida la consecución final de un ataque.

Se deben diseñar diferentes tipos de acceso y configurar el sistema para facilitar esos accesos exclusivamente, denegando cualquier otro. Para eso, se utiliza principalmente el cortafuegos, que actúa como guardián de la puerta al sistema, permitiendo el tráfico autorizado y denegando el resto.


Concretamente, el cortafuegos tiene varias tareas principales:
  • Bloquear y filtrar paquetes de red
  • Controlar protocolos de aplicación
  • Control del tráfico de red a nivel de protocolo de red
  • Ocultar la verdadera dirección del servidor, actuando como un proxy
  • Proteger los servidores y aplicaciones de ataques y uso indebido
Por último, dejamos las siguientes URLs a tutoriales para aprender a configurar el cortafuegos en Linux con iptables:
http://www.cyberciti.biz/tips/linux-iptables-examples.html
http://bit.ly/17Vqwi3
http://es.tldp.org/Manuales-LuCAS/doc-iptables-firewall/doc-iptables-firewall-html/


Práctica 5: Replicación de BD MySQL

A la hora de hacer copias de seguridad de nuestras bases de datos (BD) MySQL, una opción muy común suele ser la de usar una réplica maestro-esclavo, de manera que nuestro servidor en producción hace de maestro y otro servidor de backup hace de esclavo.

En esta práctica proponemos estudiar dos alternativas:
•    copiar archivos de copia de seguridad de la BD mediante ssh
•    clonar BD entre máquinas mediante una configuración maestro-esclavo


Esta última opción (tener un servidor de backup con MySQL actuando como esclavo de replicación) es una solución asequible y no consume demasiado ancho de banda en un sitio web de tráfico normal, además de que no afecta al rendimiento del maestro en el sistema en producción. Sin embargo, la configuración tanto del maestro como del esclavo son un poco más complejas.

Por otro lado, MySQL ofrece la una herramienta para clonar fácilmente las BD que tenemos en nuestra máquina: mysqldump. En la siguiente URL se detalla cómo utilizarla:
http://dev.mysql.com/doc/refman/5.0/es/mysqldump.html

Es una opción que funciona perfectamente, pero es algo que realiza un operador a mano. MySQL tiene la opción de configurar el demonio para hacer replicación de las BD sobre un esclavo a partir de los datos que almacena el maestro. Se trata de un proceso automático que resulta muy adecuado en un entorno de producción real. Implica realizar algunas configuraciones, tanto en el servidor principal como en el secundario. En las siguientes URLs se detallan estas configuraciones:

http://www.rackspace.com/knowledge_center/article/mysql-replication-masterslave
http://www.howtoforge.com/mysql_database_replication
http://aciddrop.com/2008/01/10/step-by-step-how-to-setup-mysql-database-replication/

Esta última parte de la práctica se propone exclusivamente como tarea opcional.