martes, 9 de junio de 2015

Presentación de trabajos de los alumnos. Lunes 8 de junio

El lunes 8 de junio, en las sesiones de teoría y de prácticas, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"DMZ Doble"

El objetivo del trabajo es montar una configuración DMZ Doble (DMZ con Dual Firewall) para proteger los servidores de accesos indebidos a través de la red interna y externa. Se han configurado 6 máquinas virtuales, 2 clientes, 2 firewall (que además funcionarán como router) y 2 servidores. Cada máquina pertencerá a una subred distinta por lo que es necesario definir algunas reglas de enrutamiento para poder tener conectividad. Para finalizar, realizamos la configuración de los firewall a través de iptables que será lo que deniegue o permita el acceso de redes externas o internas a nuestra noza segura (red de servidores).

La memoria está en:
 https://github.com/Ariacus/DMZ-Dual-Firewall


"Instalación y configuración de un servidor NFS en Ubuntu Server"

El trabajo se presenta como una guía concisa explicando en qué consiste el protocolo NFS (Network File System) y cómo implementar su funcionamiento en tres máquinas. De esta forma se sincronizan directorios entre dos clientes y un servidor, sirviendo además de muestra en la compatibilidad de diferentes sistemas operativos funcionando bajo ésta tecnología.

La memoria está en:
 https://github.com/mpvillafranca/swap1415/tree/master/Teoria/Trabajo


"Creando una REST en Node.js"

Este trabajo versa sobre la filosofía REST, y  pretende arrojar un poco de luz sobre sus conceptos, además de dar un ejemplo práctico de una API REST simple hecha con NodeJS, express y mongoDB, que tendrá como funcionalidad gestionar las asignaturas cursadas en una carrera universitaria.

La memoria está en:
 https://github.com/NAEL1/SWAP2015/tree/master/trabajo_SWAP
 https://docs.google.com/presentation/d/1zg3bfa5bl6oVRVxyH3mMYdlThQXXNagAfObId2D1fBA/edit?usp=sharing



"Hardware y Software de Twitter"

En éste trabajo se presentan las herramientas hardware y software utilizadas en Twitter desde su inicio hasta la actualidad, así como los cambios que ha ido realizando para tener mejoras de tiempo (nuevos lenguajes de programación, nuevas bases de datos, software para otras funcionalidades).

La memoria está en:
 https://github.com/cesar2/swap1415/blob/master/Trabajo/Trabajo_Hardware_software_Twitter.md
La presentación está en:
 https://github.com/cesar2/swap1415/blob/master/Trabajo/Presentaci%C3%B3n%20Twitter.pptx


"Openshift"

En este trabajo se presenta OpenShift, explicando qué es, cual es el concepto de PaaS, comentando algunas ventajas, características y sus componentes principales. Además, se ofrece un ejemplo detallado de aplicación web en PHP con almacenamiento de datos en una BD en MySQL.

La memoria está en:
 https://github.com/JesGor/SWAP2015/tree/master/openshift
 

"Despliegue de aplicaciones web Django usando Nginx"

En este trabajo se explican brevemente algunos conceptos sobre Django, Nginx, Gunicorn (wsgi server), Filezilla, Pip. A continuación se detalla, paso a paso, una aplicación montada en local usando los diferentes servicios nombrados, de forma que cualquiera pueda ir montando sus aplicaciones web en un servidor VPS, crear varios virtualhosts, etc.

La memoria está en:
 https://github.com/jesusgn90/SWAP2015/blob/master/Teoria/TrabajoDespliegueVPS.pdf


"Balanceadores de Carga y Algoritmos de Balanceo "

Se han estudiado diferentes balanceadores de carga que están a disposición del usuario como software libre. En este caso se ha usado Nginx, ZenLoader y Octopus, realizándose pruebas con diferentes algoritmos en cada uno de ellos y evaluando el resultado obtenido. Además se comentan las diferencias que existen entre ellos.

La memoria está en:
 https://github.com/javiergarridomellado/SWAP2015/tree/master/TrabajoFinalSWAP
 https://github.com/mabarrbai/swap1415/tree/master/Trabajo%20final


"Conecta tu app iOS con tu servidor"

Este trabajo aborda las particularidades y características de la conexión un servidor con una aplicación para iPhone OS. Se exponen muestras de código y se explica el procedimiento de configuración del servidor para el correcto funcionamiento de la comunicación dispositivo-servidor, tanto en base de datos y código de lado servidor como de lado cliente. El ejemplo con el que se ha realizado el trabajo es una aplicación móvil que gestiona la información que trata otra aplicación móvil destinada al turismo. Contiene la funcionalidad de crear, modificar, editar y borrar los datos, que están ubicados en una base de datos en el servidor.

La memoria está en:
 https://github.com/nicovalero/SWAP


"Seguridad en Apache"

Este trabajo aborda el tema de la seguridad en Apache, tratando las directivas fundamentales tanto en funcionamiento como en demostración, y finalmente detallando cómo hacer uso de la encriptación en apache.

La memoria está en:
 https://github.com/lorenmanu/swap1415

lunes, 8 de junio de 2015

Presentación de trabajos de los alumnos. Lunes 1 y martes 2 de junio

El lunes 1 y el martes 2 de junio, en las sesiones de teoría y de prácticas, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Configuración de nginx y haproxy"

El objetivo es configurar nginx y haproxy con distintos algoritmos de carga y comparar su rendimiento
utilizando herramientas como apache benchmark y siege.

La memoria está en:
 https://github.com/acasadoquijada/swap1415
 https://github.com/srmf9/SWAP/tree/master/TrabajoSWAP


"OpenShift: Plataforma abierta como servicio"

En este trabajo se detalla el proceso de creación y despliegue de una aplicación web completa en la plataforma OpenShift.

La memoria está en:
 https://github.com/makelele29/SWAP/tree/master/Trabajo
 https://github.com/cr13/SWAP2015/tree/master/Trabajo%20(OpenShift)
 https://github.com/insua1990/SWAP/tree/master/Openshift


"Montar un cluster con raspberry"

Este trabajo consiste en la creación de una granja web con tres raspberrys-pi-2. En él se trata el tema de la instalación del servidor web, el balanceador, la réplica de los archivos y las bases de datos, así como las pruebas de rendimiento. Finalmente se explica la configuración IP para su correcto acceso de forma local y externa, y una pequeña demostración real instalando un CMS donde se muestra el reparto de carga y la réplica de información tanto de ficheros como de las tuplas almacenadas en las bases de datos de cada servidor.

La memoria está en:
 https://github.com/jfranguerrero/SWAP/tree/master/TrabajoFinal


"Granja web en equipos reales"

Se ha configurado una granja web usando 15 equipos reales, de los cuales 12 hacen de servidores web con entorno LAMP + Joomla y los 3 restantes equipos hacen de balanceadores de carga. Uno de ellos es el principal con Nginx, el cual sirve las peticiones a otros 2 balanceadores con HAProxy y Nginx, en los que cada uno envía las peticiones a 6 servidores web finales. Hemos hecho tests de estrés tanto a los servidores web como a los balanceadores con Siege y Apache benchmark.

La memoria está en:
 https://github.com/antoniocordonie/SWAP2015/tree/master/TrabajoFinal
 https://github.com/alexrodriguezlop/swap2015/tree/master/TrabajoFinal


"Granjas Web en Windows"

El uso de granjas web para dar servicio web a los clientes es de vital importancia, por la escalabilidad, la redundancia y la alta disponibilidad que ofrecen. En este trabajo se presenta el desarrollo de parte de las tareas de las prácticas de la asignatura utilizando en este caso las tecnologías de Microsoft. Concretamente, en el trabajo se ha usado Windows Server con IIS en lugar de Apache.

La memoria está en:
 https://github.com/azpe/SWAP_practicas/tree/master/Trabajo%20Teor%C3%ADa%20(Granja%20Web%20en%20Windows)
 

"Windows Azure"

Windows Azure proporciona un entorno gestionado para la ejecución y despliegue de aplicaciones y servicios en la nube. En este trabajo tratamos los servicios que, a nuestro parecer, son los más interesantes para un usuario medio. Se realiza una pequeña introducción seguida de una demostración de la instalación a modo de tutorial de aplicaciones Web, máquinas virtuales (tanto desde la interfaz web que nos ofrece azure como desde nuestra propia máquina a través de la terminal), servicios móviles, servicios en la nube, bases de datos SQL, servicios de almacenamiento y, por último, servicios multimedia.

La memoria está en:
 https://github.com/mortega87/SWAP2015/tree/master/Trabajo_Final


"Configuración de una Base de datos Maestro-Maestro en MYSQL"

En este trabajo se han montado dos servidores de Base de Datos para hacer una configuración maestro-maestro con MySQL. De esta forma, cualquier cambio que realicemos en una de las BD, (ya sea inserción, borrado, actualización, creación de nuevas tablas...), se replicará automáticamente en la otra máquina. Por lo tanto, tendremos siempre todos los datos replicados en nuestros servidores, lo que proporciona alta disponibilidad.

La memoria está en:
 https://github.com/aserranogomez/SWAP14-15/tree/master/Trabajo%20Teoria
 https://github.com/manolotello7/SWAP14-15/tree/master/Trabajo


"Instalación en máquina virtual en Azure de servidor XMPP y muestra con clientes"

Son muchas las posibilidades de sacar rendimiento a un servidor en la nube, y una de las mejores plataformas para ello es Azure, desde la cuál podemos montar un servidor a nuestro gusto. Ua de las posibilidades para ese servidor es el poder instalar un servicio como Ejabber para interconectar clientes y poder tener nuestro propio servicio tipo "Skype". Así podemos ofrecer llamadas, videollamadas, chats, conferencias, etc.

La memoria está en:
 https://github.com/RaulSFuentes/SWAP2015/blob/master/trabajo/trabajo.md
 https://www.powtoon.com/show/g3f1Br8sZvF/swap/#/


"iptables y firewall"

Este trabajo presenta la herramienta iptables, el complemento de netfilter. Se han descrito la sintaxis y las órdenes básicas así como algunos ejemplos de bloqueos, de prerouting, y del mantenimiento de archivos log.

La memoria está en:
 https://github.com/migueib17/SWAP2015/tree/master/TRABAJO


"Qué es memcached y demo de cómo usarlo"

Este trabajo presenta la herramienta Memcached, que se emplea para el almacenamiento en cache de datos u objetos en la memoria RAM, reduciendo así las necesidades de acceso a un origen de datos externo. Funciona mediante una arquitectura cliente-servidor, tanto en un mismo ordenador como en varios, organizados por algoritmos hash que se encargan de la organización de memoria. Se incluye una demo detallando cómo usar la herramienta.

La memoria está en:
 https://github.com/reyic/SWAP1415/tree/master/Trabajo%20Memcached


"Replicación de máquinas virtuales usando la herramienta Amazon EC2"

En este trabajo se presenta el uso de la plataforma Amazon EC2 para la virtualización de servidores en la nube con el objetivo de crear y gestionar granjas web. También se explican las características de esta plataforma, se enseña cómo crear una cuenta y finalmente se presenta un caso práctico: crear una granja de servidores localizada en Irlanda sobre la que aplicamos algunos de los conocimientos adquiridos en las prácticas.

La memoria está en:
 https://docs.google.com/presentation/d/1XF0Nm-N7MLAiIFSDUFpJN_BTXyOo_hkbX6itO8uxtcU/edit?usp=sharing


"haproxy – heartbeat – nginx"

Este trabajo trata acerca de cómo montar una granja web con alta disponibilidad con balanceo de carga en Ubuntu Server 12.04 utilizando HAProxy, HeartBeat y Nginx. Para ello utilizaremos dos balanceadores con HAProxy en los que uno estará funcionando y el otro no. En el momento en que uno de los servidores falle, el otro lo detecta por medio del servicio Heartbeat y pasa a ser el que controle el balanceo.

La memoria está en:
 https://github.com/leocastillo/swap1415/tree/master/Trabajo_haproxy%20%E2%80%93%20heartbeat%20%E2%80%93%20nginx
 https://github.com/juaneml/SWAP2015/tree/master/TRABAJO


"Comparación del hardware para servidores web IBM, HP, Dell y Fujitsu"

En este trabajo se lleva a cabo una comparación del hardware para servidores web de altas prestaciones de las siguientes empresas: Fujitsu, DELL, IBM, HP. En el trabajo se realiza una comparativa de los principales productos de estos fabricantes y se analiza el hardware usado por diferentes empresas de hosting en España.

La memoria está en:
 https://github.com/MigueSantiago/Trabajo_Swap


"Asegurar Apache"

Este trabajo consiste en asegurar un servidor web con el software Apache, concretamente con la versión 2.2, usando las herramientas nos ofrece para hacerlo más seguro. Primero se estudian varios conceptos de la configuración del servidor (Usuarios, directorio raíz, módulos del servidor). Después se utilizan varias directivas de configuración que nos ofrece Apache para la implementación de seguridad. Se profundiza en los siguientes temas: Archivos de configuración, Ocultar información del servidor, Control de acceso, Autenticación. Por último, se introducen las directivas más importantes para la seguridad ante ataques DOS y se comenta cómo configurar las conexiones SSL en Apache.

La memoria está en:
 https://github.com/alvaro-gr/SWAP2015/tree/master/Trabajo_Clase/Trabajo


"Análisis y comparación de algoritmos de balanceo con Nginx y HAProxy"

En este trabajo se presenta un estudio comparativo de diversas estrategias de balanceo de carga con Nginx y HAProxy. A partir de un entorno simulado, compuesto por máquinas virtuales con servidores web Apache y diferentes características de hardware, se genera un volumen elevado de peticiones para analizar el efecto resultante de cada algoritmo de balanceo de carga en los tiempos de respuesta y otras métricas relevantes.

La memoria está en:
 https://github.com/paul21/swap2015/tree/master/presentacion

miércoles, 3 de junio de 2015

Presentación de trabajos de los alumnos. Viernes 29 de mayo

El viernes 29 de mayo, en la sesión de prácticas, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Memcached y demo de cómo utilizarlo"

Memcached es un sistema de alto rendimiento para el almacenamiento de objetos en caché, pensado principalmente para acelerar aplicaciones web dinámicas, aliviando así la carga de las bases de datos. Utiliza la biblioteca libmemcached para proveer a la API que usemos de comunicación con servidores de memcached. Es una gran herramienta usada por varios de los sitios más activos y visitados de la red, lo que refleja su gran utilidad a pesar de su simpleza. Además de indagar en su funcionamiento y sus ventajas, así como en qué sitios web las usan, mostramos los pasos necesarios para la instalación y un ejemplo sencillo de uso.

La memoria está en:
 https://github.com/MariaOrgaz/swap1415/tree/master/trabajo
 https://github.com/CarmenArcos/swap1415/tree/master/trabajo


"node.js"

node.js representa a toda una nueva generación de tecnologías web que, basadas en el uso de JavaScript en el lado del servidor, están facilitando e impulsando la creación de nuevas herramientas de desarrollo. Este trabajo sirve como introducción a node.js, desarrollando algunos aspectos técnicos de su construcción pero sobre todo explicando su funcionamiento desde un punto de vista a más alto nivel, haciendo hincapié en sus ventajas y en las posibilidades de uso que proporciona. Se referencian varios benchmarks que lo comparan con otras tecnologías como Java EE o Apache+PHP y, finalmente, se presentan algunos ejemplos de código.

La memoria está en:
 https://github.com/agarciamontoro/swap1415/tree/master/Trabajo


"Microsoft Azure"

En este trabajo se lleva a cabo una introducción a la plataforma Microsoft Azure. Vemos sus principales características y los servicios más interesantes que ofrece. En un apartado más práctico realizamos la configuración y creación de una aplicación web con Visual Studio Express y posteriormente mostramos el mantenimiento de las aplicaciones creadas.

La memoria está en:
 https://github.com/Yujadeh/swap1415/tree/master/Trabajo


"Configurar un hosting Web"

En este trabajo se describe cómo instalar un host web casero, partiendo de un PC que ya tengamos y con costo prácticamente nulo (la electricidad que consuma) y a continuación se ofrecen unos consejos muy útiles para resolver una serie de problemas que se nos plantearán una vez tengamos el host en marcha.

La memoria está en:
 https://github.com/neon520/SWAP/tree/master/Trabajo
 https://github.com/asolisi/swap1415/tree/master/Trabajo
 

"Sistema de archivos Lustre"

Lustre es un sistema de ficheros paralelo, que es eficiente, escalable y transparente al cliente. Por ello, es ampliamente utilizado en supercomputadores y empresas con la necesidad de tener sistemas de archivos distribuidos (meteorología, finanzas, etc). En este trabajo se presentan las propiedades del sistema de archivos Lustre y se detalla cómo realizar la instalación.

La memoria está en:
 https://github.com/cparadela/swap1415/tree/master/TrabajoSWAP


Presentación de trabajos de los alumnos. Jueves 28 de mayo

El jueves 28 de mayo, en la sesión de teoría, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"High Availability, Load Balancing y Replication con PostgreSQL"

En este trabajo se muestra cómo realizar replicación de bases de datos entre un servidor maestro y otro servidor esclavo con PostgreSQL. Basándose en lo realizado en la práctica 5 con MySQL, se han creado y configurado dos máquinas virtuales conectadas entre sí por medio de una red interna. A continuación se ha creado una base de datos en la máquina maestro con una serie de datos para después replicarla en la máquina esclavo. De esta forma, cualquier cambio que se realice en el maestro se verá reflejado automáticamente en el esclavo.

La memoria está en:
 https://github.com/juanvelascogomez/swap1415/tree/master/Trabajo_Final
 https://github.com/msmaldonado/swap1415/tree/master/Trabajo_Final


"Computación Acelerada por GPU y OpenCL"

En este trabajo se presenta qué es la computación acelerada por GPU, cómo usarla, a qué está destinada y cuándo realmente es útil. Además, se ofrece un tutorial para aprender el funcionamiento de OpenCL mediante la programación del algoritmo daxpy aprovechando el potencial de cálculo de la GPU para la tarea, viendo así las ventajas de ésta para operaciones de cálculos pequeños pero exhaustivos.

La memoria está en:
 https://github.com/Darth-ATA/swap1415/tree/master/Trabajo


"Wireshark"

En este trabajo se proporciona al lector una primera aproximación a Wireshark, mostrando sus principales funcionalidades y uso básico, como una guía de iniciación a la herramienta. Para alcanzar este objetivo usaremos Wireshark para distintas tareas: robar una contraseña, detectar un ataque de denegación de servicio o ver los mensajes que se envían las máquinas virtuales para poner en funcionamiento las distintas tareas que hemos llevado a cabo en las prácticas de SWAP. Así se ven más claramente cómo funcionan aquellas conexiones, balanceadores o configuración maestro-esclavo que se han desarrollado en las prácticas de la asignatura.

La memoria está en:
 https://github.com/LuisSuall/swap1415/tree/master/Trabajo_Wireshark


"Software y Hardware de Google"

En este trabajo se presenta un estudio sobre el hardware y software de Google. En primer lugar se recorre en el tiempo la evolución del hardware que ha ido empleando la empresa. Se analizan las mejoras que se han ido incorporando y el porqué las realizan. También se muestra un catálogo de los distintos dispositivos que han desarrollado en Google. Finalmente, se presenta un estudio sobre el software, estudiando las características principales.

La memoria está en:
 https://github.com/cristinazuhe/swap1415/tree/master/trabajo

viernes, 29 de mayo de 2015

Presentación de trabajos de los alumnos. Lunes 25 de mayo

El lunes 25 de mayo, en la sesión de teoría, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Seguridad en Apache"

A día de hoy existen más de 949 millones de páginas web.Varias son las soluciones bajo las cuales albergar dichas Webs, pero sin duda, una de las más usadas es Apache. Para poder asegurar su accesibilidad de manera segura y continua, hemos de ser conscientes de todos aquellos eventos que puedan afectar a la seguridad del servidor que alberga nuestra Web. Y es por ello que, de manera general, se puede encontrar en este trabajo varias recomendaciones a nivel de prevención para mantener nuestro sitio seguro, así como herramientas y medidas a tomar para poder analizar y mitigar posibles ataques respectivamente.

La memoria está en:
 https://github.com/miguelangelrdguez/swap1415/tree/master/Trabajo-Securizar_Servidor_Apache-


"Seguridad en Servidores"

Trabajo sobre seguridad en servidores, tocando ataques basicos (DDoS, SQL Inyection) y ejemplos de como se han usado para ataques, explicando un poco kali linux y algunas herramientas (nitko/httprint), programa fail2ban para defenderse de los ataques de fuerza bruta, y finalmente una pincelada de que otros temas puede abarcar la seguridad.

La memoria está en:
 https://github.com/ramako/SWAP-2015/tree/master/Trabajo


"¿Qué es memcached y cómo utilizarlo?"

Memcached es un sistema que permite almacenar datos en la memoria RAM para utilizarlos como una memoria caché. Este sistema se basa en una tabla hash distribuida entre varios equipos. El modo de utilización se basa en 3 pasos:
 1. Comprobamos si los datos que necesitamos están ya almacenados en memcached.
 2. En caso afirmativo los devolvemos, en caso negativo buscamos los datos en la base de datos.
 3. Almacenamos los datos en memcached.
Está disponible solo para sistemas Linux y se instala desde los repositorios oficilaes. El sistema es ampliamente utilizado por empresas como Twitter, Facebook, Wikipedia, etc.


La memoria está en:
 https://github.com/franexposito/SWAP2015/tree/master/trabajo


"Máquina virtual preparada para ponerla en cualquier hardware anfitrión"

En este trabajo se muestra cómo hacer una máquina virtual preparada para ponerla en cualquier hardware anfitrión y que comience a hacer de servidor web. La idea es que en cualquier máquina con conexión a internet y el software de virtualización se lanza el servidor virtualizado (un clon de nuestro servidor en producción) y se podría sustituir a nuestra máquina en pocos minutos. En el trabajo se muestra cómo realizar esta configuración con diferentes tipos de software de virtualización: VirtualBox, VMWare, QEMU y Windows Virtual PC.

Una vez tenemos la máquina virtual funcionando, debemos conectarla con el host para que reciba las peticiones HTTP. Para ello, lo primero es hacer que host y guest se vean entre sí, lo cual podemos conseguirlo tanto con un adaptador host-only como con un bridge. Finalmente, hemos de configurar el host para que redirija las peticiones web que le llegan a él hacia el servidor virtual, que es quien debe servirlas.


La memoria está en:
 https://github.com/isma94/SWAP2015/tree/master/TrabajoFinal


"Seguridad en Servidores Web"

Este trabajo recoge una primera toma de contacto sobre la seguridad en servidores web. En él se tratan los siguientes aspectos:
  • Los ataques más usados y efectivos en la actualidad sobre servidores web: Ataques DDOS, ataques de fuerza bruta, ataques de inyección SQL, ataques XSS y ataques Phishing.
  • Tipos de atacantes: White Hack y Black Hack.
  • Búsqueda de vulnerabilidades y la formas que existen para analizarlo, a través de los software más utilizados: Nikto, Httpanalizer Archilles, ZAP Web Crawlers, Nmap + NSEVulscan, OpenVas, Nessus.
  • Técnicas que podemos usar para prevenir todo tipo de ataques y que nuestro servidor quede inservible, o lo que sería aún peor, que extrajeran información privada: Control de los archivos publicados, ocultar información, interfaz de entrada común y módulos, autenticación y autorización, comunicación HTTPS y autenticación con certificados de cliente, monitorización.
  • Posibles soluciones para muchos de estos ataques.

La memoria está en:
 https://github.com/AntonioPozo/swap1415/tree/master/Trabajo

lunes, 25 de mayo de 2015

Presentación de trabajos de los alumnos. Jueves 21 de mayo

El jueves 21 de mayo, en la sesión de teoría (y viernes 22 en la de prácticas), se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Ataques Buffer Overflow e Inyecciones SQL"

En este trabajo se lleva a cabo una pequeña introducción a ataques buffer overflow e inyecciones SQL. Se incluyen repasos de conceptos clave necesarios para entender completamente ambos ataques y ejemplos didácticos e intuitivos para afianzar los conocimientos adquiridos.

La memoria está en:
 https://github.com/analca3/SWAP1415/tree/master/Trabajo%20asignatura


"Medidas de seguridad de un servidor Apache en Ubuntu server"

En el trabajo se presentan una serie de medidas de seguridad básicas, muy recomendables para cualquier persona que tenga operativo un servidor Apache. Dichas medidas se aplican añadiendo directivas en el archivo de configuración apache2.conf (En Ubuntu) y httpd.conf (otras distribuciones Linux). Además se presenta un tutorial básico del módulo mod-evasive que se utiliza para evitar ataques de denegación de servicio de pequeña magnitud y otro tutorial sobre como proteger directorios o archivos mediante un usuario y una contraseña, utilizando los ficheros .htaccess y .htpasswd y el comando de Unix: htpasswd.

La memoria está en:
 https://github.com/santidediego/swap1415/tree/master/Asegurar%20un%20servidor%20Apache


"Implementar los algoritmos de balanceo en Nginx y HaProxy"

En este trabajo se presentan algunos de los algoritmos más utilizados en el balanceado de carga por software, y se prueban con Siege en dos software diferentes: Nginx y HaProxy, en una granja web virtualizada de 4 servidores con software Ubuntu Server 12.04, en las que no todas van a tener las mismas especificaciones. Posteriormente, se hace una comparativa sobre los resultados obtenidos."

La memoria está en:
 https://github.com/AnabelGRios/swap1415/blob/master/Trabajo_Clase/Trabajo.md

miércoles, 20 de mayo de 2015

Presentación de trabajos de los alumnos. Lunes 18 de mayo

El lunes 18 de mayo, en la sesión de teoría, se presentaron los siguientes trabajos realizados por los alumnos de la asignatura:

"Laboratorio de una granja web"

En este trabajo se ha pretendido, crear desde cero y con software libre un conjunto de servidores capaces de dar soporte a una red empresarial con las necesidades básicas para cualquier mediana o gran empresa de hoy en día. En él se detalla cómo acometer la tarea de crear y gestionar un CPD pequeño para dar servicios tan comunes como WWW, FTP, DNS, BALANCEO DE CARGA y por supuesto los servicios de gestión y mantenimiento del mismo, como pueden ser servicios de BBDD, Copias de seguridad, Replicado de datos para dar un soporte de alta disponibilidad, monitorización, etc.

Para desarrollar el laboratorio se han utilizado servidores virtuales para ahorrar en dispositivos físicos, de ahí el nombre del laboratorio, "Creación y Mantenimiento de un Mini-CPD Virtual".

La memoria está en:
 https://github.com/elsudano/swap1415/blob/master/TrabajoTeoria/Laboratorio_Granja_Web.pdf
y la presentación utilizada en:
 https://github.com/elsudano/swap1415/blob/master/TrabajoTeoria/Transparencias.pdf


"COMPARACIÓN DEL HARDWARE PARA SERVIDORES WEB IBM, HP, Dell y Fujitsu"

En este trabajo se lleva a cabo una comparación de los diversos productos hardware que ofrecen varios fabricantes en el sector de servidores (en este caso, IBM, DELL, HP y FUJITSU).

La memoria está en:
 https://github.com/ppruiz/swap


"Servidor de Correo en VM Azure"

Este trabajo presenta los primeros pasos con la plataforma Microsoft Azure, creando y configurando una máquina virtual Linux, donde instalaremos un servidor de correo usando postfix, courier y squirrelmail como WebMail.

La memoria está en:
 https://github.com/odrajaf/swap1415/blob/master/Trabajo%20Final/Trabajo%20Swap%20Servidor%20de%20Correo.pdf


"Montar un seedbox con software open source"

Este trabajo trata acerca de cómo montar nuestro propio Seedbox juntando en el mismo sistema un cliente de descarga de Torrent (Deluge), un navegador de archivos vía web (Pyd.io) y webmin; todo ello instalado en un servidor VPS con Ubuntu 12.04 que permanece online las 24 horas del día..

La memoria está en:
 https://github.com/koji3/Swap2015/blob/master/trabajo_final/MemoriaTrabajo.md

jueves, 14 de mayo de 2015

Tema 8 de teoría: Requisitos hardware y software en servidores web

La granja web necesita varios componentes de software y hardware para poder funcionar.

En cuanto al hardware, cabe destacar la necesidad de instalar y configurar servidores, dispositivos de almacenamiento y conexiones de red.

Los servidores web no necesitan una capacidad de procesamiento especialmente alta, ya que los servicios HTTP no consumen demasiada CPU. La cantidad de memoria RAM es más importante en este tipo de máquinas. Al adquirir el hardware, debemos elegir componentes para minimizar la latencia de disco, así como CPU y RAM que excedan las necesidades de ese momento.

En cuanto al almacenamiento, se pueden evitar latencias usando discos de estado sólido de alta velocidad (para hacer caching) y utilizar dispositivos como NAS (Almacenamiento conectado a la red) o una SAN (Área de almacenamiento en red) y exportando el espacio de almacenamiento usando protocolos como NFS, Samba o Lustre.

Por último, los nodos del clúster pueden conectarse mediante una simple red Ethernet con tarjetas de red comunes, o utilizarse tecnologías especiales de alta velocidad:
  • Ethernet (Fast, Gigabit): Son las redes más utilizadas en la actualidad, debido a su relativo bajo coste. Su tecnología limita el tamaño de los paquetes. No demasiado eficientes. La latencia de estas tecnologías está en torno a los 30 a 100 μs.
  • Myrinet: Su latencia es de 99 a 10 μs, y su ancho de banda es de 2 a 10 Gbit/s.
  • Es la red de baja latencia más utilizada en la actualidad.
  • InfiniBand: estándar desarrollado específicamente para realizar la comunicación en clústers.
  • SCI: Latencia teórica es de 1,43 μs y ancho de banda de 5333 Mbit/s bidireccional.


Determinar las necesidades de un servidor
es muy complejo: El diseño debe permitir el escalado del sistema y debemos realizar continuamente monitorización para determinar cuándo y dónde escalar el sistema.

Para planear la capacidad del servidor (necesidades en cuanto a hardware y software) no existe una fórmula. Antes de nada debemos determinar los requisitos reales del sitio. Hay que hacer un primer estudio, instalar y configurar, y una vez esté en funcionamiento, monitorizar constantemente el sistema para determinar si funciona correctamente.

Hay tres tareas que pueden ayudar a determinar los requisitos de hardware del sistema:
  • Estimar el hardware en función de las necesidades de la empresa.
  • Utilizar un software de monitorización para buscar cuellos de botella en la configuración inicial.
  • Monitorizar el sistema durante todo el tiempo que esté en uso.
Para comprobar el funcionamiento de cada configuración que apliquemos, debemos realizar tests de carga con benchmarks (apache benchmark, siege, JMeter, httperf, openwebload, etc) o poner el sistema en producción de forma controlada (accesible a betatesters) para monitorizar y analizar su comportamiento.

La información que recopilemos monitorizando durante este proceso nos permitirá determinar qué contenido es el más demandado (hacerlo eficiente) y hacer análisis del tipo de usuario y de los patrones de navegación (para el depto marketing). Además, podremos identificar fallos (errores tipo 404 ó 500) y descubrir posibles ataques.

Existen soluciones de hardware propietario de diferentes vendedores, como Dell, HP o IBM, y además, otras grandes empresas diseñan sus propios sistemas (hardware y software), como es el caso de Facebook con Open Compute, o Google.

Por otro lado, está la aproximación de Microsoft, que echa mano de desarrolladores de hardware (Dell, HP) para montar sus CPDs, o Yahoo! que tradicionalmente ha mejorado o incrementado sus servicios adquiriendo nuevas empresas e integrándolas en sus sistemas.


Finalmente, en cuanto al software necesario para configurar un servidor web de altas prestaciones, cabe destacar los siguientes tipos de programas, principalmente:
  • Sistema operativo: Actualmente existe gran variedad de sistemas operativos que se utilizan para montar servidores web de altas prestaciones:
    • GNU/Linux
    • Unix: Solaris, HP-UX, AIX
    • Windows: NT, 2000 server, 2008 server, 2010 server
    • Mac OS X Server (xgrid)
    • FreeBSD
  • Servidor web: Se pueden instalar en casi cualquier sistema operativo. Los más conocidos:
    • nginx
    • apache
    • Internet Information Services (IIS)
    • cherokee
    • Tomcat
    • Otros servidores, más simples pero más rápidos, son:
    • lighttpd
    • thttpd
Además, existen soluciones para implementar servicios web sumamente eficientes. Se trata de una solución muy diferente a lo que conocemos que se puede hacer con Apache:
    • node.js (JavaScript)
    • Tornado (Python),
    • Twisted (Python),
    • EventMachine (Ruby),
    • Scale Stack (C++),
    • Apache MINA (Java)
    • Jetty (Java)
  • Cortafuegos: Implementados en hardware o software. Cada sistema operativo tiene su propio cortafuegos incluido en la instalación básica:
    • Firestarter
    • ZoneAlarm
    • Uncomplicated Firewall
    • Gufw
    • PF (OpenBSD)
    • ipfw
    • iptables
    • ipfilter
  • Balanceadores de carga: Cada sistema operativo tiene soluciones (gratuitas o de pago):
    • HaProxy
    • Pound
    • Varnish
    • NginX
    • Lighty
    • Apache
    • NLB
  • Medir prestaciones: Basadas en interfaz de línea de comandos y de interfaz gráfica. Entre las más utilizadas destacan:
    • Apache Benchmark
    • httperf
    • openwebload
    • the grinder
    • OpenSTA
    • JMeter
    • Siege
  • Software para monitorización: Necesario para recoger información sobre la actividad del sistema a todos los niveles:
    • top
    • vmstat
    • iostat
    • sar
    • monitores de actividad (gráficos) del sistema operativo
    • Web Farm Framework (Microsoft)
    • Lithium5 (OS X server)
    • Apple Mac OS X Server Monitoring Library
    • NetApp
    • Munin
    • Nagios
    • GANGLIA

En cuanto a los ejercicios que vamos planteando en los temas de teoría, en este tema hemos planteado los siguientes ejercicios:
  • Ejercicio T8.1: Buscar información sobre tipos de conexiones de red utilizados especialmente en arquitecturas de servidores web de altas prestaciones.
Como ya indicamos, la entrega de los ejercicios de clase se realiza en el repositorio personal que cada cual mantenéis en github.com, en una carpeta que podéis llamar "ejercicios_de_clase".

Comenzamos la Práctica 5

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. Así podemos hacer copias desde el servidor de backup sin que se vea afectado el rendimiento del sistema en producción y sin interrupciones de servicio.

Tener un servidor de backup con MySQL actuando como esclavo de replicación es una solución asequible, que añade fiabilidad ante fallos totales del sistema, y que 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.

Los objetivos concretos de esta práctica son:
  • Clonar manualmente BD entre máquinas (copiando archivos de copia de seguridad mediante ssh).
  • Configurar la estructura maestro-esclavo entre dos máquinas para realizar el clonado automático de la información.
Para la realización de la práctica, crearemos una BD en MySQL e insertaremos algunos datos. Así tendremos datos con los cuales hacer las copias de seguridad.

En la primera parte de la práctica replicaremos manualmente una BD MySQL con mysqldump. Esta herramienta forma parte de los programas de cliente de MySQL, que puede ser utilizado para generar copias de seguridad de BD. Puede utilizarse para volcar una o varias BD para copia de seguridad o para transferir datos a otro servidor . EL volcado contiene comandos SQL para crear la BD, las tablas y rellenarlas.

La opción anterior funciona perfectamente, pero es algo que realiza un operador a mano. Sin embargo, 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 la segunda parte de la práctica debemos seguir el proceso detallado en el guión de la práctica 5 para configurar dos máquinas de forma que una haga de maestro y la otra de esclavo.

viernes, 8 de mayo de 2015

Tema 7 de teoría: Almacenamiento de datos

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.

Así pues, hay que diseñarlo teniendo en mente ciertos requisitos en cuanto a escalabilidad. Como vimos en un tema anterior, podemos mejorar las prestaciones de los sistemas de almacenamiento:
ampliación vertical (adquirir un mejor hardware más rápido y actualizado)
ampliación horizontal (replicar el almacenamiento entre varios servidores); puede resultar más efectivo en cuanto a la escalabilidad

Factores a tener en cuenta 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).
  • 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.
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. En ese sentido, se recomienda una arquitectura de BD basada en un cluster.


Todos los datos (archivos o BD) están almacenados en algún tipo de soporte. Una configuración muy adecuada para este tipo de dispositivos 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, ofreciendo mayor integridad, mayor tolerancia a fallos, mayor rendimiento y mayor capacidad. La idea 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.

Un RAID por hardware es mucho más rápido que uno configurado por software, pero éste es mucho más flexible, ya que permite, p.ej., construir RAID de particiones en lugar de discos completos.

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
  • RAID 10 o RAID 1+0: División de espejos
Las configuraciones RAID tienen las siguientes ventajas (en general):
  • Permite acceder a los datos aunque falle un disco.
  • Puede mejorar el rendimiento de ciertas aplicaciones (para archivos grandes mantiene tasas de transferencia altas).
Sin embargo, hay que tener en cuenta que:
  • No protege los datos (p.ej. por virus).
  • No simplifica la recuperación de un desastre.
  • No mejora el rendimiento para todas las aplicaciones.
  • No facilita el traslado del almacenamiento a un sistema nuevo.

Finalmente, en el tema hemos visto tres tipos de sistemas de almacenamiento especializado: SSA, NAS, SAN.

Arrays de almacenamiento compartido: SSA
  • Dispositivos con unas especificaciones y herramientas propietarias de cierta empresa.
  • Posee una interfaz para conectar los discos a las controladoras (normalmente SCSI).
  • Número limitado de puertos para hacer la conexión entre servidores y almacenamiento.
  • Se suele usar para disponer del almacenamiento necesario para archivos y BD en clusters.


Área de almacenamiento en red: SAN
  • Conjunto de dispositivos interconectados (discos, cintas, etc.) y servidores conectados a un canal de comunicación e intercambio de datos común (concentrador de alta velocidad).
  • Algunos de los dispositivos pueden ser SSA y NAS.


Almacenamiento conectado a la red: NAS
  • Conjunto de discos organizados en un dispositivo de red con IP y que puede conectarse a una red Ethernet.
  • Utilizando algún protocolo, como Internetwork Packet Exchange (de Microsoft), NetBEUI (de Microsoft), Network File System (NFS, de Sun) o IPE (de Novell).
  • Aparece como otro servidor más en la red.


En cuanto a los ejercicios que vamos planteando en los temas de teoría, en este tema hemos planteado los siguientes ejercicios:
Ejercicio T7.1:
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 0 a partir de dos discos de 100 GB y 100 GB?
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 0 a partir de tres discos de 200 GB cada uno?

Ejercicio T7.2:
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 1 a partir de dos discos de 100 GB y 100 GB?
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 1 a partir de tres discos de 200 GB cada uno?

Ejercicio T7.3:
¿Qué tamaño de unidad de unidad RAID se obtendrá al configurar un RAID 5 a partir de tres discos de 120 GB cada uno?

Ejercicio T7.4:
Buscar información sobre los sistemas de ficheros en red más utilizados en la actualidad y comparar sus características. Hacer una lista de ventajas e inconvenientes de todos ellos, así como grandes sistemas en los que se utilicen.
Configurar en una máquina virtual un servidor NFS. Montar desde otra máquina virtual en la misma subred la carpeta exportada y comprobar que ambas pueden acceder a la misma para lectura y escritura.
Como ya indicamos, la entrega de los ejercicios de clase se realiza en el repositorio personal que cada cual mantenéis en github.com, en una carpeta que podéis llamar "ejercicios_de_clase".


Tutoriales con los que aprender a configurar dispositivos RAID bajo Linux, Windows y OS-X:
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

Instalación y configuración RAID de dos discos duros en un Mac PRo
http://www.youtube.com/watch?v=O5VuJSRjLT8
Xserve RAID Install
http://www.youtube.com/watch?v=WxsQ2Y1iW7w

lunes, 27 de abril de 2015

Charla sobre seguridad

Como parte del Tema 6, dedicado a la seguridad en el sistema, hemos contado con Juan Luis (@jlmacal) que nos ha dado una charla sumamente interesante en la que nos ha contado su experiencia de varios años como experto en seguridad.


Esta charla complementa los contenidos vistos en el tema de teoría, detallando tipos de ataques, vulnerabilidades, herramientas, ¡y otros detalles que ni sospechaba!

En la siguiente URL podéis revisar su PFC (un honeypot casero con Raspberrypi):
    http://www.raspberrypi-spanish.es/foro/viewtopic.php?t=7251
    https://www.youtube.com/watch?v=0ZByaYO0D-w
que está liberado en:
    https://github.com/jlmacal/ZetsuHoneypot


lunes, 20 de abril de 2015

Tema 6 de teoría: Asegurar el sistema web

Asegurar la granja web es una tarea muy importante para cualquier sitio web. Permite saber quién hizo cada cosa y en qué momento, y su objetivo principal es evitar (o al menos dificultar en lo posible) que un hacker malicioso realice cualquier acción que afecte al sistema, sobre todo a los datos de la empresa y la información de los usuarios.

Se trata de asegurar y mejorar la disponibilidad del sitio y también de asegurarse de que las operaciones que se lleven a cabo en el sitio sean seguras, todo basado 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 tratado varias cuestiones:

(1) El concepto de defensa en profundidad (diferentes capas de defensa).
La idea es la protección del sistema a diferentes niveles, de forma que un hacker maliciosos deba superar cada una de las capas independientemente para acceder a los datos. Al incrementar el tiempo necesario para superar cada nivel hacemos que sea más probable detectar un ataque, y así evitar que las últimas defensas se vean comprometidas.


(2) Establecer políticas de seguridad, incluyendo claves seguras, para todas las cuentas.
Las políticas de seguridad definen cómo se les permite interaccionar a los usuarios con los servidores y el hardware de la red del sistema web. Todas las políticas definen:
  • Procedimientos de identificación y acceso: comprueban si un individuo es reconocido por los sistemas de seguridad.
  • Privilegios de uso: definen qué acciones puede llevar a cabo cada tipo de usuario correctamente identificado.
Se deben establecer y aplicar políticas a diferentes niveles:
  • Seguridad a nivel físico
  • Seguridad a nivel de red
  • Seguridad a nivel de administrador
  • Cuentas de servicios (o aplicaciones)

(3) Asegurar un servidor mediante la eliminación de servicios innecesarios y vulnerabilidades.
Para asegurar el servidor, debemos seguir un proceso en el que eliminaremos:
  • características no necesarias,
  • servicios,
  • configuraciones e
  • información de seguridad del servidor,
de forma que sólo se dejen las aplicaciones, servicios y puertos realmente necesarios.

Como parte de este proceso, deberemos configurar el cortafuegos adecuadamente.


(4) Usar un cortafuegos: comprender el funcionamiento de los cortafuegos y los beneficios de estos.
Un cortafuegos protege el sistema de accesos indebidos. Es el guardián de la puerta al sistema, permitiendo el tráfico autorizado y denegando el resto. Una máquina cortafuegos bien configurada aportará los siguientes beneficios:
  • Evita el consumo excesivo de recursos, reduciendo el tráfico global que un servidor recibirá.
  • Oculta los servidores finales a otras redes.
  • Protege los servidores de múltiples ataques.
  • Oculta información de los servidores a otras redes (evitamos escaneo de puertos).
  • Avisa de posibles ataques justo en el momento en que se producen.
El software de cortafuegos por excelencia es iptables. En los siguientes tutoriales se encontrará información detallada sobre cómo configurar el cortafuegos en Linux con iptables:
http://www.cyberciti.biz/tips/linux-iptables-examples.html
http://www.linuxtotal.com.mx/?cont=info_seyre_002
https://openwebinars.net/como-configurar-en-linux-firewall-basico-con-iptables/
http://es.tldp.org/Manuales-LuCAS/doc-iptables-firewall/doc-iptables-firewall-html/

(5) Recursos en Internet sobre temas de seguridad
Finalmente, toda organización con un gran sistema web debe tener un equipo de ingenieros con dedicación exclusiva a desarrollar, investigar, responder y arreglar temas de seguridad del sistema a todos los niveles. Es muy importante estar al día en cuanto a temas de seguridad en todos los frentes. Es un trabajo continuo en el que revisar grupos de noticias, listas de correo, blogs y foros sobre estos temas.

El administrador responsable de la seguridad informática debe conocer los temas relativos a la seguridad así como las vulnerabilidades a nivel de red, de cortafuegos, de sistema operativo y de las aplicaciones en el sistema web. Cuando se identifica una vulnerabilidad, los administradores de seguridad deben tomar medidas de prevención ya que los hackers estarán atentos para aprovecharla.

Un sitio especializado en seguridad que personalmente me gusta es:
http://www.securitybydefault.com/
En los últimos años han publicado análisis de diferentes tipos de ataques a varias webs, de forma muy didáctica y clara:
Mitigación de ataques DDoS basados en inundamiento
 http://www.securitybydefault.com/search/label/DDoS
Cómo CyberBunker atacó a Spamhaus y casi se llevó a medio Internet por delante
 http://bit.ly/14q7HmK
DDoS contra Movistar.es ¿Causada o preparada?
 http://www.securitybydefault.com/2011/06/ddos-contra-movistares-causada-o.html  
CloudFlare, una posible solución frente a ataques (D)DoS
 http://www.securitybydefault.com/2011/06/cloudflare-una-posible-solucion-frente.html
El caso de Anonymous contra la SGAE (ACENS)
 http://www.securitybydefault.com/2010/10/como-se-defendio-la-sgae-de-anonymous.html
Por supuesto, buscando en Internet encontraremos foros, blogs, etc con mucha más información:
http://www.pentester.es/
http://www.elladodelmal.com/
http://www.hackhispano.com/
http://thehackerway.com/2014/05/21/21-blogs-sobre-seguridad-informatica-que-deberias-conocer/
Además, en YouTube existen vídeo-tutoriales sobre temas de seguridad en servidores web. Como ejemplo, cabe destacar el siguiente canal:
https://www.youtube.com/watch?v=w0SB6eAnx4Q&list=PL7C849047272B22E0

En cuanto a los ejercicios que vamos planteando en los temas de teoría, en este tema hemos planteado los siguientes ejercicios:
Ejercicio T6.1:
Aplicar con iptables una política de denegar todo el tráfico en una de las máquinas de prácticas.
Comprobar el funcionamiento.
Aplicar con iptables una política de permitir todo el tráfico en una de las máquinas de prácticas.
Comprobar el funcionamiento.

Ejercicio T6.2:
Comprobar qué puertos tienen abiertos nuestras máquinas, su estado, y qué programa o demonio lo ocupa.

Ejercicio T6.3:
Buscar información acerca de los tipos de ataques más comunes en servidores web, en qué consisten, y cómo se pueden evitar.
Como ya indicamos, la entrega de los ejercicios de clase se realiza en el repositorio personal que cada cual mantenéis en github.com, en una carpeta que podéis llamar "ejercicios_de_clase".

Tema 5 de teoría: Medir prestaciones

En este tema hemos estudiado cómo medir las prestaciones de nuestro sistema web con el objetivo de comprobar si cumplen unos mínimos requisitos de rendimiento.

La idea de hacer los tests no es exclusivamente detectar las caídas o errores de programación, sino los problemas de rendimiento y degradación de recursos, así como detectar posibles cuellos de botella e ineficiencias.

Partimos de que los tests presentan ciertas limitaciones:
  • Dificultad para hacer pruebas en un entorno de producción.
  • No se puede simular el comportamiento de los usuarios.

Según el sitio web, usaremos diferentes métricas:
  • Conexiones por segundo: Hace referencia al número de conexiones de entrada que cierto dispositivo puede manejar por segundo. También se llama transacciones por segundo o sesiones por segundo. Es un factor determinante, ya que abrir y cerrar conexiones HTTP resulta muy costoso, ya que las aperturas y cierres de conexiones consumen muchos recursos.
  • Número total de conexiones concurrentes: Métrica para determinar cuántas sesiones de usuario TCP puede manejar el balanceador al mismo tiempo. Limitado por la memoria o el procesador del dispositivo.
  • Rendimiento (en bits por segundo): Hace referencia a la velocidad a la que el balanceador maneja y pasa el tráfico. Todos los dispositivos tienen una serie de factores que acaban limitando las prestaciones, basados en la estructura interna (hardware y software). Se mide en bits por segundo. Es combinación de las variables "tamaño del paquete" y "paquetes por segundo". El paquete típico tiene un tamaño máximo (MTU, Maximun Transmitable Unit) de 1.5KB. Si hay que enviar más datos, se trocean en paquetes de este tamaño máximo.

Hemos estudiado diferentes tipo de tráfico, con características particulares y métricas más importantes al analizarlos:


Existe un límite de tráfico de red suficientemente alto que produce una degradación grave en las prestaciones. En unos casos ese límite es más fácil de alcanzar que en otros. Llegado a ese límite los tiempos de respuesta en las conexiones HTTP se degradan completamente, haciendo imposible la conexión. Cuando se monitoriza el sistema, este comportamiento se ve claramente representado en gráficas de la evolución del sistema como la siguiente:


Finalmente, como vimos, necesitamos herramientas para crear cargas HTTP específicas y evaluar cómo se comportan diferentes configuraciones de nuestros sistemas. Se suelen usar benchmarks como SPECweb o WebStone para simular un número determinado de clientes.

En sistemas críticos, en lugar de usar (o desarrollar) una herramienta para generar la carga para los tests, se le puede encargar a una empresa externa especializada, como:
  • Micro Focus Intl. - Segue Software (SilkPerformer)
  • HP (LoadRunner)
  • Micro Focus Intl. - Compuware (QALoad)
  • Rational (SiteLoad)
  • Radview (WebLoad)

Se realizan diferentes tipos de pruebas a los servidores para comprobar su funcionamiento en diferentes condiciones:
  • Humo (Smoke): pruebas preliminares para comprobar que el sistema está listo para los siguientes tests.
  • Carga (Load): cargas lo más parecidas a la real. Se ejecutan en periodos cortos (1h). Para determinar los tiempos de respuesta que tendrán los usuarios.
  • Capacidad (Capacity): actividad creciente hasta detectar el punto de saturación.
  • Estrés (Stress): para analizar el efecto de aplicar de forma continuada una carga por encima de la capacidad del sistema.
  • Sobrecarga (Overload): aplicar fuertes picos de carga durante cortos periodos.
  • Estabilidad (Stability): cargas lo más similares posibles a la real, aplicadas durante 1 día o 1 semana.

Durante la ejecución de esas pruebas, se recogen mediciones que nos indiquen lo que está ocurriendo en el sistema en cada momento y cómo reacciona éste en función de la carga introducida:
  • Medidas de la calidad de servicio ofrecida por el sistema a los usuarios (estadísticas proporcionadas por la misma herramienta de simulación de carga)
  • Medidas relativas al consumo de recursos del sistema (utilizando las herramientas del sistema operativo)

Como herramientas de simulación de carga cabe destacar:
  • Apache Benchmark
  • httperf
  • OpenWebLoad
  • The Grinder
  • OpenSTA
  • Jmeter
  • siege
  • Webstone (Mindcraft)
 
Todas ellas permiten comprobar el rendimiento de cualquier servidor web (Apache, MS Internet Information Services -IIS-, nginx, Cherokee, Tomcat, lighttpd, thttpd, etc) para comprobar el rendimiento del hardware, software o de alguna modificación que le hayamos hecho.


En cuanto a los ejercicios que vamos planteando en los temas de teoría, en este tema hemos planteado los siguientes ejercicios:
  • Ejercicio 5.1: Buscar información sobre cómo calcular el número de conexiones por segundo.
  • Ejercicio 5.2: Instalar wireshark y observar cómo fluye el tráfico de red en uno de los servidores web mientras se le hacen peticiones HTTP.
  • Ejercicio 5.3: Buscar información sobre características, disponibilidad para diversos SO, etc de herramientas para monitorizar las prestaciones de un servidor.
Como ya indicamos, la entrega de los ejercicios de clase se realiza en el repositorio personal que cada cual mantenéis en github.com, en una carpeta que podéis llamar "ejercicios_de_clase".

viernes, 10 de abril de 2015

Script PHP para la PRÁCTICA-4 (para que las peticiones sean muy costosas)

En la Práctica 4, para que a los servidores finales les cueste más trabajo servir los miles de peticiones que haremos con las herramientas de generación de tráfico, podemos usar una página HTML estática, o bien un script PHP que suponga más trabajo por petición.

Podemos crear uno que ejecute un bucle de varios millones de vueltas mientras hace varias operaciones aritméticas. Eso puede tardar dos o tres segundos por petición, lo que es mucho para un servidor cuando se le hagan muchos miles de peticiones al script.

Si con una página HTML estática pequeña el servidor solo no experimenta problemas por alta que sea la carga aplicada con las herramientas, se puede usar un script similar al siguiente:
<?php
$tiempo_inicio = microtime(true);
for ($i=0; $i<3000000; $i++){
 $a = $i * $i;
 $b = $a - $i;
 $c = $a / $b;
 $d = 1 / $c;
}
$tiempo_fin = microtime(true);
echo "Tiempo empleado: " . round($tiempo_fin - $tiempo_inicio, 4) ;
?>

Comenzamos la Práctica 4

Para medir el rendimiento de un servidor necesitaremos una herramienta que ejecutar en una o varias máquinas "clientes" para crear una carga HTTP específica. En algunos casos, las medidas se realizan con benchmarks como SPECweb o WebStone para simular un número determinado de clientes. Puesto que el número de usuarios de un servidor web puede ser del orden de los millones de usuarios, queda claro que simular un número pequeño de clientes no es realista. Sin embargo, en algunos entornos, no nos quedará más remedio que usar herramientas que generan el tráfico.

Existen diversas herramientas para comprobar el rendimiento de servidores web. Las hay basadas en interfaz de línea de comandos y de interfaz gráfica. Entre las más utilizadas destacan:
  • Apache Benchmark
  • httperf
  • openwebload
  • the grinder
  • OpenSTA
  • JMeter
Con ellas podemos comprobar el rendimiento de un servidor web, ya sea del hardware o software, o de alguna modificación que le hayamos hecho.

Lo habitual es usar programas de línea de comandos que sobrecarguen lo mínimo posible las máquinas que estamos usando. Es importante usar siempre la misma máquina "cliente" para hacer las ejecuciones que generan el tráfico (la cuarta máquina, a la derecha en la siguiente imagen, en la que se ejecutan los benchmarks). Además, esa máquina tiene que ser independiente de las que forman la granja web. Podemos crear una cuarta máquina virtual o bien usar un terminal en nuestro ordenador anfitrión.


En esta práctica proponemos usar las siguientes herramientas para comprobar el rendimiento de nuestra granja web recién configurada (aunque se pueden usar otras herramientas que encontremos):

La idea de esta práctica es comparar los resultados de rendimiento de tres configuraciones: (1) máquina sola, (2) granja con nginx, (3) granja con haproxy con varias herramientas.


Apache Benchmark

Apache Benchmark (ab) es una utilidad que se instala junto con el servidor Apache y permite comprobar el rendimiento de cualquier servidor web, por sencillo o complejo que sea. Con esta herramienta podemos analizar el rendimiento de servidores Apache, Internet Information Services (IIS), nginx, etc.

Para ejecutarla, entramos en un terminal en la máquina cliente y ejecutamos el comando:
ab -n 1000 -c 10 http://ipmaquina/test.html
Los parámetros indicados en la orden anterior le indican al benchmark que solicite la página con dirección http://ipmaquina/test.html 1000 veces (-n 1000 indica el número de peticiones) y hacer esas peticiones concurrentemente de 10 en 10 (-c 10 indica el nivel de concurrencia). Esos parámetros generan una carga muy baja; probablemente tengamos que usar valores mucho mayores en ambos casos.

ab no simula con total fidelidad el uso del sitio web que pueden hacer los usuarios habitualmente (en realidad, ninguna herramienta lo hará). Pide el mismo recurso (misma página) repetidamente. Sin embargo, va bien para testear cómo se comporta el servidor antes y después de modificar cierta configuración

Con esta herramienta, de todas las medidas que nos ofrece, vamos a recoger: "Time taken for tests", "Failed requests", "Requests per second" y "Time per request".

¿Cómo realizar los tests con "ab"?
Para realizar los tests con ab, debemos generar el tráfico en la cuarta máquina (externa a la granja web) y hacer baterías de ejecuciones a las siguientes configuraciones:
  1. una carga concreta a la IP de un servidor solo (puede ser la máquina final M1 o la M2)
  2. la misma carga a la IP del balanceador teniendo el nginx como software de balanceo
  3. la misma carga a la IP del balanceador teniendo el haproxy como software de balanceo
Haremos un mínimo de 5 ejecuciones con ese nivel de carga y con cada configuración, y recogeremos los datos en una hoja de cálculo. Luego calculamos una tabla con medias y desviación estándar para cada uno de los tres casos, y representamos gráficamente estos valores de forma que podamos analizar y comparar adecuadamente los resultados obtenidos, ofreciendo unas conclusiones acerca de lo observado.


httperf

httperf es otra herramienta para medir el rendimiento de sitios web. Originalmente se desarrolló en los laboratorios de investigación de Hewlett-Packard.

Para llevar a cabo un test, debemos ejecutarla en los clientes (recordemos que son máquinas independientes a las que forman la granja web). Si tenemos varios clientes, deberíamos hacer la ejecución en todos simultáneamente.

Como ejemplo de comando de ejecución:
httperf --server ipmaquina --port 80 --uri /prueba.html \
   --rate 150 --num-conn 27000 --num-call 1 --timeout 5
Por la forma en que genera el tráfico, siempre que usemos los mismos parámetros tardará el mismo tiempo en la ejecución (a diferenca del ab).

Con esta herramienta, de todas las medidas que nos ofrece, vamos a recoger: "Total connections", "replies", "Request rate" y "Errors total".

OpenWebLoad

Es otra herramienta de línea de comandos para medir el rendimiento de servidores web.

Si queremos simular diez clientes simultáneos, la ejecutaremos con:
openload ipmaquina 10
Hay dos parámetros (se parecen mucho a los de las herramientas anteriores): la URL de la página en el servidor a evaluar, y el número de clientes simultáneos que simularemos.

Con esta herramienta vamos a recoger las siguientes medidas: "Total TPS", "Avg. Response time" y "Max Response time"


Nota 1: Las métricas obtenidas con las tres herramientas son muy diferentes entre sí, por lo que no debemos comparar lo obtenido con con las herramientas utilizadas. La idea es comparar los resultados de rendimiento entre las tres configuraciones (máquina sola, granja con nginx, granja con haproxy) con cada herramienta.

Nota 2: Hemos propuesto tres herramientas de las muchas que existen. Si conocéis alguna otra diferente, o queréis usar otra diferente a las descritas aquí, hacedlo con total libertad.


miércoles, 8 de abril de 2015

Visita al Centro de Supercomputación de la UGR

Esta mañana (8 de abril) hemos realizado la visita al CSIRC, al Centro de Supercomputación de la UGR.

Hemos comenzado con una presentación por parte de Rafael y Santiago detallándonos los recursos informáticos del Centro a lo largo de los años, deteniéndose en los actuales.



A continuación hemos bajado a la sala donde están las máquinas. Hemos podido entrar en los pasillos fríos (por los que entra el aire frío para refrigerar las máquinas) y los calientes (a los que sale el aire muy caliente de las máquinas y de donde se recoge para sacarlo a las máquinas enfriadoras):








En la sala contigua están las máquinas enfriadoras, los sistemas antiincendios y las acometidas eléctricas:




Me gustaría agradecer al personal del CSIRC, especialmente a Rafael y a Santiago, su amabilidad a la hora de organizar la visita y durante la misma. Como siempre, han sido muy atentos con todos, contestando todas las dudas, explicándonos todos los detalles, y contándonos diversas curiosidades de las máquinas, de las configuraciones y del mismo CPD.